sinatra-basicauth 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # Sinatra Basic Auth
2
+ Simple basic auth helper for Sinatra
3
+
4
+ ## Usage
5
+
6
+ require 'sinatra'
7
+ require 'sinatra/basic_auth'
8
+ basic_auth do
9
+ realm 'Give me password!'
10
+ username 'Frank'
11
+ password 'changeme'
12
+ end
13
+
14
+ get '/' do
15
+ 'This is public'
16
+ end
17
+
18
+ get '/private' do
19
+ require_basic_auth
20
+ 'This is private'
21
+ end
@@ -0,0 +1 @@
1
+ require 'sinatra/basic_auth'
@@ -0,0 +1,82 @@
1
+ require 'sinatra/base'
2
+
3
+ module Sinatra
4
+
5
+ class AuthenticationSettings
6
+
7
+ def initialize app, &blk
8
+ @app = app
9
+ instance_eval &blk
10
+ end
11
+
12
+ %w[ username password realm ].each do |param|
13
+ class_eval %[
14
+ def #{param} val, &blk
15
+ @app.set :basic_auth_#{param}, val
16
+ end
17
+ ]
18
+ end
19
+
20
+ end
21
+
22
+ module Helpers
23
+ class Authentication
24
+ attr_accessor :request, :app
25
+ def initialize( app, request )
26
+ self.app = app
27
+ self.request = request
28
+ end
29
+
30
+ def auth
31
+ @basic_auth ||= Rack::Auth::Basic::Request.new( request.env )
32
+ end
33
+
34
+ def unauthorized!
35
+ app.headers 'WWW-Authenticate' => %(Basic realm="#{settings.basic_auth_realm}")
36
+ throw :halt, [ 401, 'Authorization Required' ]
37
+ end
38
+
39
+ def bad_request!
40
+ throw :halt, [ 400, 'Bad Request' ]
41
+ end
42
+
43
+ def authorized?
44
+ request.env['REMOTE_USER']
45
+ end
46
+
47
+ def authorize( username, password )
48
+ settings.basic_auth_username == username &&
49
+ settings.basic_auth_password == password
50
+ end
51
+ end
52
+
53
+ def require_basic_auth
54
+ a = Authentication.new( self, request )
55
+ return if a.authorized?
56
+ a.unauthorized! unless a.auth.provided?
57
+ a.bad_request! unless a.auth.basic?
58
+ a.unauthorized! unless a.authorize( *a.auth.credentials )
59
+ request.env['REMOTE_USER'] = a.auth.username
60
+ end
61
+
62
+ end
63
+
64
+ module BasicAuth
65
+
66
+ def basic_auth &block
67
+ AuthenticationSettings.new(self, &block)
68
+ end
69
+
70
+ def self.registered( app )
71
+ app.set :basic_auth_realm, 'You need to authenticate yourself!'
72
+ app.set :basic_auth_username, 'Frank'
73
+ app.set :basic_auth_password, 'changeme'
74
+
75
+ app.helpers Helpers
76
+ end
77
+
78
+ end
79
+
80
+ register BasicAuth
81
+ end
82
+
@@ -0,0 +1,19 @@
1
+ spec = Gem::Specification.new do |s|
2
+ s.name = 'sinatra-basicauth'
3
+ s.version = '0.0.1'
4
+ s.date = '2012-01-28'
5
+ s.summary = 'Simple basic auth helper for Sinatra'
6
+ s.description = s.summary
7
+
8
+ s.homepage = "http://github.com/trekdemo/sinatra-basicauth"
9
+
10
+ s.authors = ["Gergo Sulymosi"]
11
+ s.email = "gergo.sulymosi@gmail.com"
12
+
13
+ s.add_dependency('rack')
14
+ s.has_rdoc = false
15
+
16
+ s.files = `git ls-files`.split("\n").sort
17
+ #s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.require_paths = ["lib"]
19
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-basicauth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Gergo Sulymosi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-28 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rack
16
+ requirement: &70260062828600 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70260062828600
25
+ description: Simple basic auth helper for Sinatra
26
+ email: gergo.sulymosi@gmail.com
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - README.md
32
+ - lib/sinatra-basicauth.rb
33
+ - lib/sinatra/basic_auth.rb
34
+ - sinatra-basicauth.gemspec
35
+ homepage: http://github.com/trekdemo/sinatra-basicauth
36
+ licenses: []
37
+ post_install_message:
38
+ rdoc_options: []
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 1.8.6
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: Simple basic auth helper for Sinatra
59
+ test_files: []
60
+ has_rdoc: false