gatekeeper 0.1.1 → 0.1.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/README.rdoc +68 -1
- data/Rakefile +3 -0
- data/VERSION +1 -1
- data/gatekeeper.gemspec +11 -2
- data/lib/gatekeeper.rb +0 -6
- metadata +32 -2
data/README.rdoc
CHANGED
@@ -1,10 +1,77 @@
|
|
1
1
|
= Gatekeeper
|
2
2
|
|
3
3
|
Gatekeeper can connect any Rack-compatible application to a Hot Ink SSO server. It allows you to easily verify the identity of a user against Hot Ink's
|
4
|
-
user information database. It makes some basic information about the user available to
|
4
|
+
user information database. It makes some basic information about the user available to your application.
|
5
5
|
|
6
6
|
Gatekeeper is largely a rewrite of Hancock-Client (http://github.com/atmos/hancock-client). The functionality is different but the spirit is the same.
|
7
7
|
|
8
|
+
== Installation
|
9
|
+
|
10
|
+
This is the easy part.
|
11
|
+
|
12
|
+
gem install gatekeeper --source http://gemcutter.org
|
13
|
+
|
14
|
+
== Using Gatekeeper
|
15
|
+
|
16
|
+
Gatekeeper is implemented in Sinatra, but it can authenticate any Rack-based application. That could be Rails, Sinatra, Rack whatever. You'll be
|
17
|
+
surprised how easy it is.
|
18
|
+
|
19
|
+
Simply add the following into your Rack stack, by simply placing it directly into your Sinatra app as middleware, or if you're building a Rack app,
|
20
|
+
add it to your stack in <tt>config.ru</tt>:
|
21
|
+
|
22
|
+
use Rack::Session::Cookie
|
23
|
+
use Gatekeeper::Middleware do |sso|
|
24
|
+
sso.sso_url = "http://your_sso_server.net/sso"
|
25
|
+
end
|
26
|
+
|
27
|
+
Be sure to use the session middleware when building a Rack app, or to <tt>enable :sessions</tt> when using Sinatra. Gatekeeper relies on sessions
|
28
|
+
to store authentication information. Also be sure to include the correct SSO server URL.
|
29
|
+
|
30
|
+
=== With Rails
|
31
|
+
|
32
|
+
When using Gatekeeper with Rails, you should create a 'metal' Sinatra app to keep it in, then implement it as show above. It's pretty easy, just
|
33
|
+
run <tt>script/generate metal sso</tt>. Inside, you should have:
|
34
|
+
|
35
|
+
require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails)
|
36
|
+
require 'sinatra/base'
|
37
|
+
require 'logger'
|
38
|
+
|
39
|
+
class Sso < Sinatra::Base
|
40
|
+
use Gatekeeper::Middleware do |sso|
|
41
|
+
sso.sso_url = "http://your_sso_server.net/sso"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
When using Rails, you should be sure *not* to <tt>enable sessions</tt> in your Sinatra metal. Rails takes care of the session. If you re-enable, you'll overwrite what Rails
|
46
|
+
has already found and your authentication will not work
|
47
|
+
|
48
|
+
=== In your app
|
49
|
+
|
50
|
+
Gatekeeper puts the received user details in a hash accessible using session[:sso]. Things are a little more convenient using the helpers. To do
|
51
|
+
that, simply include Gatekeeper::Helpers::Authentication in your app. You can then use the following methods:
|
52
|
+
|
53
|
+
* current_user
|
54
|
+
|
55
|
+
Will return +nil+ or the current user's id, depending on whether or not the user is logged in.
|
56
|
+
|
57
|
+
* is_admin?
|
58
|
+
|
59
|
+
Is this user a Hot Ink admin? You may have some tasks that only admin users can do.
|
60
|
+
|
61
|
+
* is_manager_of?(hotink_account_id)
|
62
|
+
|
63
|
+
Will return true if the user is a manager of the account who's id you passed in.
|
64
|
+
|
65
|
+
Your app can use a simple +require_user+ method as a before filter to ensure that users are logged in, the most basic of which could look like this:
|
66
|
+
|
67
|
+
def require_user
|
68
|
+
unless current_user
|
69
|
+
redirect_to "/sso/login?return_to=#{request.request_uri}"
|
70
|
+
false # if you're using this as a Rails before filter, return false
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
8
75
|
== Note on Patches/Pull Requests
|
9
76
|
|
10
77
|
* Fork the project.
|
data/Rakefile
CHANGED
@@ -10,6 +10,9 @@ begin
|
|
10
10
|
gem.email = "chrisgdinn@gmail.com"
|
11
11
|
gem.homepage = "http://github.com/chrisdinn/gatekeeper"
|
12
12
|
gem.authors = ["Chris Dinn"]
|
13
|
+
gem.add_dependency 'ruby-openid', '>= 2.1.7'
|
14
|
+
gem.add_dependency 'rack-openid', '>= 0.2.1'
|
15
|
+
gem.add_dependency 'sinatra', '>= 0.9.2'
|
13
16
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
17
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
18
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/gatekeeper.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gatekeeper}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Chris Dinn"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-14}
|
13
13
|
s.description = %q{Connects any Rack-compatible app to a Hot Ink single sign on server.}
|
14
14
|
s.email = %q{chrisgdinn@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -48,11 +48,20 @@ Gem::Specification.new do |s|
|
|
48
48
|
s.specification_version = 3
|
49
49
|
|
50
50
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
51
|
+
s.add_runtime_dependency(%q<ruby-openid>, [">= 2.1.7"])
|
52
|
+
s.add_runtime_dependency(%q<rack-openid>, [">= 0.2.1"])
|
53
|
+
s.add_runtime_dependency(%q<sinatra>, [">= 0.9.2"])
|
51
54
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
52
55
|
else
|
56
|
+
s.add_dependency(%q<ruby-openid>, [">= 2.1.7"])
|
57
|
+
s.add_dependency(%q<rack-openid>, [">= 0.2.1"])
|
58
|
+
s.add_dependency(%q<sinatra>, [">= 0.9.2"])
|
53
59
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
54
60
|
end
|
55
61
|
else
|
62
|
+
s.add_dependency(%q<ruby-openid>, [">= 2.1.7"])
|
63
|
+
s.add_dependency(%q<rack-openid>, [">= 0.2.1"])
|
64
|
+
s.add_dependency(%q<sinatra>, [">= 0.9.2"])
|
56
65
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
57
66
|
end
|
58
67
|
end
|
data/lib/gatekeeper.rb
CHANGED
@@ -1,13 +1,7 @@
|
|
1
|
-
gem 'sinatra', '~>0.9.2'
|
2
1
|
require 'sinatra/base'
|
3
|
-
|
4
|
-
gem 'ruby-openid', '>=2.1.6'
|
5
2
|
require 'openid'
|
6
3
|
require 'openid/store/filesystem'
|
7
|
-
|
8
|
-
gem 'rack-openid', '>=0.2'
|
9
4
|
require 'rack/openid'
|
10
|
-
|
11
5
|
require 'tmpdir'
|
12
6
|
|
13
7
|
require File.dirname(__FILE__)+'/gatekeeper/helpers/rack'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gatekeeper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Dinn
|
@@ -9,9 +9,39 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-14 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: ruby-openid
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.1.7
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rack-openid
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.2.1
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: sinatra
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.9.2
|
44
|
+
version:
|
15
45
|
- !ruby/object:Gem::Dependency
|
16
46
|
name: rspec
|
17
47
|
type: :development
|