Skip to content

Instantly share code, notes, and snippets.

@nitincoded
Created August 4, 2017 18:27
Show Gist options
  • Save nitincoded/17fc995fe0181b2854ce5941d5bcc65f to your computer and use it in GitHub Desktop.
Save nitincoded/17fc995fe0181b2854ce5941d5bcc65f to your computer and use it in GitHub Desktop.
Sinatra Demo
#
# Author: Nitin Reddy
#
# Requires user authentication, hard-coded in: "post '/login' "
# Saves the form data that is posted to /save-form
#
require 'sinatra'
require 'sinatra/base'
require 'mongo'
require 'securerandom'
require 'erb'
class MyApp < Sinatra::Base
use Rack::Session::Pool
before do
allowed_urls = ['/', '/login']
pass if allowed_urls.include? request.path_info
if session[:username] == nil || session[:username] == ''
if request.request_method.downcase == 'get'
session[:returnurl] = request.path_info
else
session[:returnurl] = nil
end
end
redirect '/login'
end
get '/login' do
if session[:username] != nil && session[:username] != ''
redirect '/'
return
end
%q^
<html><head></head><body>
<form method="post" action="">
<input name="username" /><input type="password" name="password" /><input type="submit" />
</form>
</body></html>
^
end
post '/login' do
if params[:username] == 'nitin' && params[:password] == 'nitin'
tmpurl = session[:returnurl]
session[:returnurl] = nil
redirect tmpurl
else
redirect '/'
end
redirect '/login'
end
get '/logout' do
session[:username] = nil
redirect '/'
end
def initialize()
super()
@client = Mongo::Client.new(['127.0.0.1:27017'], :database => 'myapp')
end
post '/save-form' do
doc = {}
doc['id'] = SecureRandom.uuid
doc['files'] = []
params.each do |k,v|
if params[k].is_a? Sinatra::IndifferentHash
#File.extname returns '.jpg' so check with accepted_ext_arr.include? my_file_ext
new_filename = SecureRandom.uuid + '.' + params[k][:filename].split('.').last.downcase
File.open('public/'+new_filename, 'wb') do |f|
f.write(params[k][:tempfile].read)
end
doc['files'] << {:name => k, :filename => new_filename, :origname => params[k][:filename]}
else
doc[k]=v
end
@client[:requests].insert_one doc
@client.close
end
get '/' do
@text = "Ola Mundo!"
erb :home
end
end
if __FILE__ == $0
MyApp.run!
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment