module Sinatra::Auth::Github

Constants

VERSION

Public Class Methods

registered(app) click to toggle source
# File lib/sinatra/auth/github.rb, line 147
def self.registered(app)
  app.use AccessDenied
  app.use BadAuthentication

  app.use Warden::Manager do |manager|
    manager.default_strategies :github

    manager.failure_app     = app.github_options[:failure_app] || BadAuthentication

    manager.scope_defaults :default, :config => {
      :client_id     => app.github_options[:client_id]    || ENV['GITHUB_CLIENT_ID'],
      :client_secret => app.github_options[:secret]       || ENV['GITHUB_CLIENT_SECRET'],
      :scope         => app.github_options[:scopes]       || '',
      :redirect_uri  => app.github_options[:callback_url] || '/auth/github/callback'
    }

    manager.serialize_from_session { |key| Warden::GitHub::Verifier.load(key) }
    manager.serialize_into_session { |user| Warden::GitHub::Verifier.dump(user) }
  end


  # Sign cookie sessions in with AS::Verifier
  ENV['WARDEN_GITHUB_VERIFIER_SECRET'] ||= ENV['GITHUB_VERIFIER_SECRET']

  unless ENV['WARDEN_GITHUB_VERIFIER_SECRET']
    warn "No WARDEN_GITHUB_VERIFIER_SECRET environmental variable found."
    warn "Your sessions are likely being stored insecurely."
  end

  app.helpers Helpers

  app.get '/auth/github/callback' do
    if params["error"]
      redirect "/unauthenticated"
    else
      authenticate!
      return_to = session.delete('return_to') || _relative_url_for('/')
      redirect return_to
    end
  end
end