simple-authorisation 0.0.2
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/.gitignore +3 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +36 -0
- data/Rakefile +21 -0
- data/lib/simple-authorisation/authorisation.rb +24 -0
- data/lib/simple-authorisation/sinatra.rb +23 -0
- data/lib/simple-authorisation.rb +2 -0
- data/simple-authorisation.gemspec +34 -0
- data/spec/simple-authorisation/authorisation_spec.rb +37 -0
- data/spec/simple-authorisation/sinatra_integration_spec.rb +34 -0
- data/spec/spec_helper.rb +5 -0
- metadata +124 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
simple-authorisation (0.0.2)
|
5
|
+
sinatra (~> 1.2.6)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.1.2)
|
11
|
+
rack (1.3.2)
|
12
|
+
rack-test (0.6.0)
|
13
|
+
rack (>= 1.0)
|
14
|
+
rake (0.9.2)
|
15
|
+
rspec (2.6.0)
|
16
|
+
rspec-core (~> 2.6.0)
|
17
|
+
rspec-expectations (~> 2.6.0)
|
18
|
+
rspec-mocks (~> 2.6.0)
|
19
|
+
rspec-core (2.6.4)
|
20
|
+
rspec-expectations (2.6.0)
|
21
|
+
diff-lcs (~> 1.1.2)
|
22
|
+
rspec-mocks (2.6.0)
|
23
|
+
sinatra (1.2.6)
|
24
|
+
rack (~> 1.1)
|
25
|
+
tilt (< 2.0, >= 1.2.2)
|
26
|
+
tilt (1.3.2)
|
27
|
+
|
28
|
+
PLATFORMS
|
29
|
+
ruby
|
30
|
+
|
31
|
+
DEPENDENCIES
|
32
|
+
rack-test (>= 0.6.0)
|
33
|
+
rake (>= 0.9.2)
|
34
|
+
rspec (>= 2.6.0)
|
35
|
+
simple-authorisation!
|
36
|
+
sinatra (>= 1.2.6)
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
Bundler::GemHelper.install_tasks
|
6
|
+
|
7
|
+
$:.unshift(File.dirname(__FILE__) + '/lib')
|
8
|
+
|
9
|
+
|
10
|
+
desc "Run RSpec"
|
11
|
+
RSpec::Core::RakeTask.new do |t|
|
12
|
+
#t.rcov = ENV['RCOV']
|
13
|
+
#t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
|
14
|
+
t.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
task :default => [:spec]
|
19
|
+
|
20
|
+
require 'rake/clean'
|
21
|
+
CLEAN.include %w(**/*.{log,pyc,rbc,tgz} doc)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Simple
|
2
|
+
module Authorisation
|
3
|
+
def self.route(name, options)
|
4
|
+
@@routes ||= {}
|
5
|
+
@@routes[name] = options
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.is_allowed?(route_name, options)
|
9
|
+
matching_route = (@@routes.keys.sort.reverse.select{|route | route_name.start_with?(route) }).first
|
10
|
+
route_rules = @@routes[matching_route]
|
11
|
+
raise "no rules found for #{route_name}" if route_rules.nil?
|
12
|
+
allow = route_rules.fetch(:allow, [])
|
13
|
+
deny = route_rules.fetch(:deny, [])
|
14
|
+
user = options.fetch(:user, nil)
|
15
|
+
anonymous_user_class = options.fetch(:anonymous_user_class, NilClass)
|
16
|
+
|
17
|
+
return true if allow.index('?')
|
18
|
+
return false if deny.index('?') and user.is_a? anonymous_user_class
|
19
|
+
return true if allow.index('*') and not user.is_a? anonymous_user_class
|
20
|
+
|
21
|
+
false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
module Sinatra
|
4
|
+
module SinatraAuthorisation
|
5
|
+
def self.registered(app)
|
6
|
+
app.set :authorisation_login, '/login'
|
7
|
+
app.set :authorisation_current_user, :current_user
|
8
|
+
app.set :authorisation_anonymous_user_class, NilClass
|
9
|
+
|
10
|
+
app.before do
|
11
|
+
route_name = request.path
|
12
|
+
unless Simple::Authorisation.is_allowed?(route_name, :user => current_user, :anonymous_user_class => options.authorisation_anonymous_user_class)
|
13
|
+
session[:return_to] = request.fullpath unless request.fullpath.include?('favicon.ico')
|
14
|
+
redirect options.authorisation_login
|
15
|
+
return false
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
register SinatraAuthorisation
|
23
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'simple-authorisation'
|
6
|
+
s.version = '0.0.2'
|
7
|
+
s.authors = ["Derek Ekins"]
|
8
|
+
s.description = 'Handles authorisation only'
|
9
|
+
s.summary = "simple-authorisation-#{s.version}"
|
10
|
+
s.email = 'derek@spathi.com'
|
11
|
+
s.homepage = "http://github.com/dereke/simple-authorisation"
|
12
|
+
|
13
|
+
s.platform = Gem::Platform::RUBY
|
14
|
+
s.post_install_message = %{
|
15
|
+
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
16
|
+
|
17
|
+
Thank you for installing simple-authorisation
|
18
|
+
|
19
|
+
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
20
|
+
|
21
|
+
}
|
22
|
+
|
23
|
+
s.add_dependency 'sinatra', '~> 1.2.6'
|
24
|
+
|
25
|
+
s.add_development_dependency 'rake', '>= 0.9.2'
|
26
|
+
s.add_development_dependency 'rspec', '>= 2.6.0'
|
27
|
+
s.add_development_dependency 'sinatra', '>= 1.2.6'
|
28
|
+
s.add_development_dependency 'rack-test', '>= 0.6.0'
|
29
|
+
|
30
|
+
s.rubygems_version = ">= 1.6.1"
|
31
|
+
s.files = `git ls-files`.split("\n")
|
32
|
+
s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
|
33
|
+
s.require_path = "lib"
|
34
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'simple-authorisation/authorisation'
|
2
|
+
|
3
|
+
module Simple
|
4
|
+
describe Authorisation do
|
5
|
+
it "should allow requests to anonymous users" do
|
6
|
+
Simple::Authorisation.route '/test', :allow => ['?']
|
7
|
+
Simple::Authorisation.is_allowed?('/test', :user => nil).should be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should deny request to anonymous users" do
|
11
|
+
Simple::Authorisation.route '/test', :deny => ['?']
|
12
|
+
Simple::Authorisation.is_allowed?('/test', :user => nil).should be_false
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should allow requests to any user" do
|
16
|
+
Simple::Authorisation.route '/test', :allow => ['*']
|
17
|
+
Simple::Authorisation.is_allowed?('/test', :user => Object.new).should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should allow requests to any user but deny requests to anonymous users" do
|
21
|
+
Simple::Authorisation.route '/test', :allow => ['*'], :deny => ['?']
|
22
|
+
Simple::Authorisation.is_allowed?('/test', :user => Object.new).should be_true
|
23
|
+
Simple::Authorisation.is_allowed?('/test', :user => nil).should be_false
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should find rules for a hierarchy" do
|
27
|
+
Simple::Authorisation.route '/test', :allow => ['?']
|
28
|
+
Simple::Authorisation.is_allowed?('/test/page', :user => nil).should be_true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should find rules for a hierarchy and apply most appropriate rule" do
|
32
|
+
Simple::Authorisation.route '/test/page', :allow => ['?']
|
33
|
+
Simple::Authorisation.route '/test', :deny=> ['?']
|
34
|
+
Simple::Authorisation.is_allowed?('/test/page/low', :user => nil).should be_true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "rack/test"
|
3
|
+
require 'simple-authorisation/sinatra'
|
4
|
+
|
5
|
+
|
6
|
+
module Sinatra
|
7
|
+
describe "Authorisation" do
|
8
|
+
before do
|
9
|
+
@session = Rack::Test::Session.new(TestApp)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "asks Simple::Authorisation if access is allowed" do
|
13
|
+
Simple::Authorisation.route '/', :allow => ['?']
|
14
|
+
@session.get '/'
|
15
|
+
|
16
|
+
# this fails for some reason but I know that it does work - what is wrong???
|
17
|
+
Simple::Authorisation.should_receive(:is_allowed?).with("/", {:user=>nil})
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class TestApp < Sinatra::Application
|
23
|
+
set :environment, :test
|
24
|
+
|
25
|
+
|
26
|
+
get "/" do
|
27
|
+
"Nothing to see here"
|
28
|
+
end
|
29
|
+
|
30
|
+
def current_user
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simple-authorisation
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Derek Ekins
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-07-27 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sinatra
|
16
|
+
requirement: &10991520 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.2.6
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *10991520
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &10991020 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.9.2
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *10991020
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &10990560 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.6.0
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *10990560
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: sinatra
|
49
|
+
requirement: &10990100 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.2.6
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *10990100
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rack-test
|
60
|
+
requirement: &10989600 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.6.0
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *10989600
|
69
|
+
description: Handles authorisation only
|
70
|
+
email: derek@spathi.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- .gitignore
|
76
|
+
- Gemfile
|
77
|
+
- Gemfile.lock
|
78
|
+
- Rakefile
|
79
|
+
- lib/simple-authorisation.rb
|
80
|
+
- lib/simple-authorisation/authorisation.rb
|
81
|
+
- lib/simple-authorisation/sinatra.rb
|
82
|
+
- simple-authorisation.gemspec
|
83
|
+
- spec/simple-authorisation/authorisation_spec.rb
|
84
|
+
- spec/simple-authorisation/sinatra_integration_spec.rb
|
85
|
+
- spec/spec_helper.rb
|
86
|
+
homepage: http://github.com/dereke/simple-authorisation
|
87
|
+
licenses: []
|
88
|
+
post_install_message: ! '
|
89
|
+
|
90
|
+
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
91
|
+
|
92
|
+
|
93
|
+
Thank you for installing simple-authorisation
|
94
|
+
|
95
|
+
|
96
|
+
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
97
|
+
|
98
|
+
|
99
|
+
'
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 1.8.6
|
118
|
+
signing_key:
|
119
|
+
specification_version: 3
|
120
|
+
summary: simple-authorisation-0.0.2
|
121
|
+
test_files:
|
122
|
+
- spec/simple-authorisation/authorisation_spec.rb
|
123
|
+
- spec/simple-authorisation/sinatra_integration_spec.rb
|
124
|
+
- spec/spec_helper.rb
|