Created
August 4, 2017 18:27
-
-
Save nitincoded/17fc995fe0181b2854ce5941d5bcc65f to your computer and use it in GitHub Desktop.
Sinatra Demo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# 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