Sha256: 6343670ed488d602ba703689315611a5261e23fd03a6f8327d8da845c2bd80ba

Contents?: true

Size: 1.96 KB

Versions: 1

Compression:

Stored size: 1.96 KB

Contents

require 'entrance'
require 'erb'

=begin

Simple login/signup support for sinatra. This extension
expects a login.erb and a signup.erb (unless disabled) to
be present in a views/public directory.

Once a user logs in, he or she will be redirected to /.

require 'sinatra/base'
require 'entrance/addons/sinatra'

class Hello < Sinatra::Base
  register Entrance::Sinatra

  before do
    login_required :except => ['/login', '/signup'] # or just /login if you don't want signups
  end
end

=end

module Entrance

  module Sinatra

    def self.registered(app)

      app.send(:include, ::Entrance::Controller)

      app.get '/login' do
        if logged_in?
          redirect(to('/'))
        else
          render_form('login')
        end
      end

      app.post '/login' do
        remember = ['on', 'true', '1'].include?(params[:remember])
        if params[:username].blank? or params[:password].blank?
          redirect_with('/login', :error, "Both fields are required.")
        elsif user = authenticate_and_login(params[:username], params[:password], remember)
          flash[:success] = 'Welcome back!'
          redirect_to_stored_or(to('/'))
        else
          redirect_with('/login', :error, "Couldn't log you in. Please try again.")
        end
      end

      app.get '/logout' do
        logout!
        redirect_with('/login', :notice, 'Logged out! See you soon.')
      end

      app.get '/signup' do
        return redirect(to('/')) if logged_in?
        @user = ::Entrance.model.new
        render_form('signup')
      end

      app.post '/signup' do
        @user = ::Entrance.model.new(params[:user])
        if @user.valid? && @user.save
          redirect_with('/login', :success, "Account created! Please sign in to continue.")
        else
          flash[:error] = "Couldn't sign you up. Please try again."
          render_form('signup')
        end
      end

      private

      def render_form(name)
        erb :'public/' + name
      end

    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
entrance-0.6.4 lib/entrance/addons/sinatra.rb