module Sinatra::Backstage::User

Public Class Methods

registered(app) click to toggle source
# File lib/sinatra/backstage/user/user_middleware.rb, line 7
def self.registered(app)

        ## Helpers
        app.helpers Sinatra::Cookies, Sinatra::Backstage::User::Helper

        ## Configure
        app.enable :sessions
        
        app.set :user_class, Sinatra::Backstage::User::User

        ## Routes
        ### get login page
        app.get '/login' do
                eval "#{settings.render_engine} 'user/login'"
        end

        app.get '/signup' do
                eval "#{settings.render_engine} 'user/signup'"
        end

        ### signup user
        app.post '/signup' do
                # puts "params = #{params}"
                # halt
                @errors = {}
                begin
                        user = settings.user_class.create(
                                params[:user].merge({:role => :user})
                        )
                        set_session user
                        redirect '/'
                rescue DataMapper::SaveFailureError => e
                        # puts e.resource.errors.inspect
                        # puts "-- Backstage::UserMiddleware /signup rescue ( e.resource.errors.keys = #{e.resource.errors.keys} )"
                        # puts "-- Backstage::UserMiddleware /signup rescue ( e.resource.errors.to_hash = #{e.resource.errors.to_hash} )"
                        e.resource.errors.to_hash.each do |key, error|
                                # puts "-- Backstage::UserMiddleware /signup rescue each ( key = #{key} )"
                                # puts "-- Backstage::UserMiddleware /signup rescue each ( error[0].to_s = #{error[0].to_s} )"
                                @errors[key.to_s] = {
                                        'text' => error[0].to_s,
                                        'autofocus' => true
                                }
                        end
                        # @errors.flatten!
                        # puts @errors.inspect
                        params[:user].delete_if do |key, val|
                                ['password', 'password_confirmation'].include? key
                        end
                end
                # puts "User::Middleware post /signup ( params['user']['email'] = #{params['user']['email']} )"
                eval "#{settings.render_engine} 'user/signup'"
        end

        ### login user
        app.post '/login' do
                @errors = {}
                password = params[:user].delete('password')
                user = settings.user_class.first params[:user]
                # puts "User::Middleware post '/login' ( params[:user] = #{params[:user]} )"
                # puts "User::Middleware post '/login' ( user = #{user} )"
                ident_field = params[:user].keys.first
                if user.nil?
                        @errors[ident_field] = {
                                'text' => "Incorrect #{params[:user].keys.join(' or ')}",
                                'autofocus' => true
                        }
                else
                        if user.password == password
                                set_session user
                                redirect '/'
                        else
                                @errors['password'] = {
                                        'text' => "Incorrect password",
                                        'autofocus' => true
                                }
                        end
                end
                eval "#{settings.render_engine} 'user/login'"
        end

        ### logout user
        app.get '/logout' do
                set_session nil
                redirect '/'
        end

end