Sha256: b22565201ae0a0c7500f01ddaf7cc9e60c04a2fb4d61f1ea2c9e56600c80addf

Contents?: true

Size: 1.12 KB

Versions: 2

Compression:

Stored size: 1.12 KB

Contents

# After sinatra-authorization...

module CloudCrowd
  module Helpers
    module Authorization
      
      def login_required
        return if authorized?
        unauthorized! unless auth.provided?
        bad_request!  unless auth.basic?
        unauthorized! unless authorize(*auth.credentials)
        request.env['REMOTE_USER'] = auth.username
      end
      
      def authorized?
        !!request.env['REMOTE_USER']
      end
      
      def current_user
        request.env['REMOTE_USER']
      end
      
      def authorize(login, password)
        return true unless CloudCrowd.config[:use_http_authentication]
        return CloudCrowd.config[:login] == login &&
               CloudCrowd.config[:password] == password
      end
      
      
      private
      
      def auth
        @auth ||= Rack::Auth::Basic::Request.new(request.env)
      end
      
      def unauthorized!(realm = CloudCrowd::App.authorization_realm)
        response['WWW-Authenticate'] = "Basic realm=\"#{realm}\""
        halt 401, 'Authorization Required'
      end
      
      def bad_request!
        halt 400, 'Bad Request'
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
documentcloud-cloud-crowd-0.0.2 lib/cloud_crowd/helpers/authorization.rb
documentcloud-cloud-crowd-0.0.3 lib/cloud_crowd/helpers/authorization.rb