Last active
December 29, 2015 10:19
-
-
Save ksiomelo/7656296 to your computer and use it in GitHub Desktop.
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
class App | |
module Helpers | |
def require_auth | |
unless session[:user_id] | |
flash[:error] = "You need to be logged in." | |
redirect to("/login") | |
end | |
end | |
def current_user | |
@current_user ||= User.find_by_id(session[:user_id]) if session[:user_id] | |
end | |
def partial(name, options={}) | |
haml("_#{name.to_s}".to_sym, options.merge(:layout => false)) | |
end | |
end | |
end |
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
class App < Sinatra::Base | |
register Sinatra::CrossOrigin # cross origin helper (for tracker) | |
register Sinatra::Flash # Flash messages extensions | |
register Sinatra::FormKeeper # Form helpers | |
# SERVER CONFIG | |
use Rack::MethodOverride | |
use Rack::Session::Cookie , :secret => (ENV['SESSION_SECRET'] || "82e042cd6fde2bf1764f777236db799e") | |
set :port, 9292 | |
set :views, Proc.new { File.join(root, "app/views") } # set views directory | |
enable :sessions # for flash messages | |
# APPLICATION LOAD | |
Dir.glob(File.dirname(__FILE__) + '/app/helpers/*', &method(:require)) # load helpers | |
Dir.glob(File.dirname(__FILE__) + '/app/routes/*', &method(:require)) # load routes | |
Dir.glob(File.dirname(__FILE__) + '/app/models/*.rb', &method(:require)) # load models | |
helpers App::Helpers | |
# ROUTES | |
register Sinatra::SessionRoutes | |
register Sinatra::TrackerRoutes | |
register Sinatra::UserRoutes | |
register Sinatra::SiteRoutes | |
###################################################################### | |
# Base | |
###################################################################### | |
# Homepage | |
get '/' do | |
require_auth | |
redirect to("/user/#{current_user.mongo_id}") | |
end | |
end | |
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
require 'sinatra/base' | |
###################################################################### | |
# Session Routes | |
###################################################################### | |
module Sinatra | |
module SessionRoutes | |
def self.registered(app) | |
###################################################################### | |
# Authentication | |
###################################################################### | |
# LOGIN | |
app.get '/login' do | |
if current_user.nil? | |
haml :login, :layout => :layout_not_logged | |
else | |
redirect to("/home") | |
end | |
end | |
app.post '/login' do | |
# validate parameters | |
form do | |
field :email, :present => true, :email => true | |
field :password, :present => true | |
end | |
if form.failed? | |
flash[:notice] = "Please enter both e-mail and password" | |
haml :login, :layout => :layout_not_logged | |
else | |
authorized_user = User.authenticate(params[:email],params[:password]) | |
if authorized_user | |
# update session / redirect | |
session[:user_id] = authorized_user.mongo_id.to_s | |
session.options[:expire_after] = 2592000 unless params[:remember].nil? # 30 days | |
# session[:redirect_url] = nil | |
# redirect to the wizard | |
flash[:info] = "Welcome back #{authorized_user.first_name}" | |
redirect to("/home") | |
else | |
flash[:error] = "Invalid Username or Password" | |
output = haml :login, :layout => :layout_not_logged | |
fill_in_form(output) | |
end | |
end | |
end | |
## SIGNUP | |
# displays the registration page | |
app.get '/signup' do | |
if not current_user.nil? # user currently logged in, redirect to his/her page | |
redirect to("/home") | |
else | |
haml :signup, :layout => :layout_not_logged | |
end | |
end | |
# Creates a new user | |
app.post '/signup' do | |
# validate parameters | |
form do | |
# filters :strip, :my_filter | |
field :first_name, :present => true | |
field :last_name, :present => true | |
# field :birthday, :present => true | |
field :email, :present => true, :email => true, :bytesize => 10..255 | |
field :password, :present => true, :length => 6..18 | |
field :password_confirmation, :present => true, :length => 6..18 | |
same :same_password, [:password, :password_confirmation] | |
end | |
if form.failed? | |
flash[:error] = "Validation error" | |
output = haml :signup, :layout => :layout_not_logged | |
fill_in_form(output) | |
else | |
# save user | |
begin | |
user = User.create(params) | |
# update session / redirect | |
session[:user_id] = user.mongo_id.to_s | |
session[:redirect_url] = nil | |
# redirect to the wizard | |
flash[:info] = "You are registered!" | |
redirect to("/home") | |
rescue InvalidParameterException => e | |
flash[:error] = "Validation error: "+e.data | |
output = haml :signup, :layout => :layout_not_logged | |
fill_in_form(output) | |
end | |
end | |
end | |
app.get '/auth/failure/?' do | |
raise 'auth error' | |
end | |
app.get '/logout/?' do | |
session.clear | |
redirect to('/') | |
end | |
end | |
end | |
end |
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
require 'sinatra/base' | |
###################################################################### | |
# Users Routes | |
###################################################################### | |
module Sinatra | |
module SiteRoutes | |
def self.registered(app) | |
# new site | |
app.get '/site/new' do | |
haml :'/site/new' | |
end | |
# create site | |
app.post '/site' do | |
require_auth | |
# validate parameters | |
form do | |
# filters :strip, :my_filter | |
field :name, :present => true | |
field :url, :present => true, :uri => [:http, :https], :bytesize => 10..255 | |
end | |
if form.failed? | |
flash[:notice] = "Please enter both name and url" | |
haml :'/users/home' | |
else | |
site = Site.create(current_user.mongo_id, params) | |
site.generate_access_key(current_user.mongo_id) | |
session[:site_id] = site.mongo_id.to_s | |
haml :'/site/index', :locals => {:site => site} | |
end | |
end | |
# delete site | |
app.delete '/site/:id' do | |
require_auth | |
Site.delete(current_user.mongo_id, params[:id]) | |
redirect to("home") | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment