hobo_openid 0.4.0

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.
@@ -0,0 +1,2 @@
1
+ hobo_openid.gemspec
2
+ pkg
data/CREDITS ADDED
@@ -0,0 +1,8 @@
1
+ OpenID Authentication for Hobo
2
+ CREDITS
3
+
4
+ V1 by TheOtherShoe (Jesse Hallett), posted 10/22/2007 to hobocentral.net
5
+ available at http://sitr.us/openid_authentication_for_hobo.tar.gz
6
+
7
+ V2 by mdj42 (Matt Jones), rewritten 6/7/2008
8
+ contact: al2o3cr@gmail.com for questions / comments / bugs / etc.
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2007 Jesse Hallett
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,101 @@
1
+ OpenID Authentication for Hobo (VERSION 3)
2
+ ==========================================
3
+
4
+ This plugin provides support for OpenID login. You can add OpenID login as
5
+ alternative login and registering method (and still allow login using
6
+ email + password).
7
+
8
+ Installing
9
+ ===========
10
+
11
+ - Install Hobo gem
12
+ - Install the ruby-openid and ruby-yadis gems.
13
+ - Unpack the plugin in your vendor/plugins directory.
14
+
15
+
16
+ Setting up
17
+ ==========
18
+
19
+ This plugin works basically the same way authenticated user support
20
+ works in Hobo. There are just a couple of extra things you will need
21
+ to set up. Here is the process in its entirety:
22
+
23
+
24
+ Modify user model
25
+ -------------------
26
+
27
+ The default hobo command now creates the User model - change User
28
+ as appropriate if you call it something else.
29
+
30
+ Open app/models/user.rb and add
31
+
32
+ openid :string
33
+
34
+ field.
35
+
36
+ Modify users controller
37
+ -------------------------
38
+
39
+ Open app/controllers/users_controller.rb and add follwing line to the controller class:
40
+
41
+ openid_login({ :openid_opts => { :model => User } })
42
+
43
+
44
+ Create OpenID login page
45
+ ------------------------
46
+
47
+ Create app/views/users/openid_login.dryml with following content:
48
+
49
+ <login-page>
50
+ <form:>
51
+ <labelled-item-list>
52
+ <labelled-item>
53
+ <item-label>OpenID</item-label>
54
+ <item-value><input type="text" name="login" id="login" class="string"/></item-value>
55
+ </labelled-item>
56
+
57
+ <labelled-item if="&Hobo::User.default_user_model.column_names.include?('remember_token')">
58
+ <item-label class="field-label">Remember me:</item-label>
59
+ <item-value><input type="checkbox" name="remember_me" id="remember-me"/></item-value>
60
+ </labelled-item>
61
+ </labelled-item-list>
62
+ <set user="&Hobo::User.default_user_model"/>
63
+ <div class="actions">
64
+ <submit label='Log in'/>
65
+ </div>
66
+ </form:>
67
+ </login-page>
68
+
69
+ Add links to OpenID login page on login and signup pages
70
+ --------------------------------------------------------
71
+
72
+ Create app/views/users/signup.dryml with content
73
+
74
+ <signup-page>
75
+ <append-body:>
76
+ Or <a href="&openid_login_users_path">sign up using OpenID</a>.
77
+ </append-body:>
78
+ </signup-page>
79
+
80
+ and app/views/users/login.dryml with content
81
+
82
+ <login-page>
83
+ <append-body:>
84
+ Or <a href="&openid_login_users_path">log in using OpenID</a>.
85
+ </append-body:>
86
+ </login-page>
87
+
88
+
89
+ Create routes
90
+ -------------
91
+
92
+ Add this lines to config/routes.rb:
93
+
94
+ map.openid_login_users 'users/openid_login', :controller => 'users', :action => 'openid_login', :conditions => {:method => :get}
95
+ map.complete_openid_users 'users/complete_openid', :controller => 'users', :action => 'complete_openid', :conditions => {:method => :get}
96
+
97
+
98
+ Simple Registration
99
+ ===================
100
+
101
+ Currently unsupported.
@@ -0,0 +1,55 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "hobo_openid"
8
+ gem.summary = %Q{OpenID login for Hobo}
9
+ gem.description = %Q{Adds ability to login with OpenID to Hobo-based applications. See README to start using it.}
10
+ gem.email = "jbartosik@gmail.com"
11
+ gem.homepage = "http://github.com/ahenobarbi/hobo_openid"
12
+ gem.authors = ["Joachim Filip Ignacy Bartosik"]
13
+ gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
+ #gem.add_dependency "hobo", ">=1.0.0"
15
+ gem.add_dependency "rails", ">=2.3.5"
16
+ gem.require_paths = ['lib']
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
+ end
22
+
23
+ require 'rake/testtask'
24
+ Rake::TestTask.new(:test) do |test|
25
+ test.libs << 'lib' << 'test'
26
+ test.pattern = 'test/**/test_*.rb'
27
+ test.verbose = true
28
+ end
29
+
30
+ begin
31
+ require 'rcov/rcovtask'
32
+ Rcov::RcovTask.new do |test|
33
+ test.libs << 'test'
34
+ test.pattern = 'test/**/test_*.rb'
35
+ test.verbose = true
36
+ end
37
+ rescue LoadError
38
+ task :rcov do
39
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
40
+ end
41
+ end
42
+
43
+ task :test => :check_dependencies
44
+
45
+ task :default => :test
46
+
47
+ require 'rake/rdoctask'
48
+ Rake::RDocTask.new do |rdoc|
49
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
50
+
51
+ rdoc.rdoc_dir = 'rdoc'
52
+ rdoc.title = "hobo_openid #{version}"
53
+ rdoc.rdoc_files.include('README*')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.4.0
@@ -0,0 +1,35 @@
1
+ require 'hobo'
2
+ require 'openid'
3
+ require 'openid_controller'
4
+
5
+ class ActionController::Base
6
+
7
+ # Recognized options
8
+ # :login_action - default :openid_login
9
+ # :complete_action - default :complete_openid
10
+ # :openid_opts - forwarded to hobo_openid_login, hobo_openid_complete
11
+ # :openid_opts recognizes
12
+ # :model - class of your user model (required)
13
+ # :login - field of params where users provide openIDs (default :login)
14
+ # :return_to - page to return after OpenID auth. -> should point to action executing hobo_openid_complete
15
+ # :openid_field - field of your user model that stores openID
16
+ # :mappings - simple registration mappings (currently unsupported)
17
+ # :redirect_to - where to redirect after success
18
+ # :*_notice - failure, cancellation, setup_needed, new_user_failure
19
+ def self.openid_login(options = {})
20
+ options.reverse_merge!(:login_action => :openid_login,
21
+ :complete_action => :complete_openid,
22
+ :openid_opts => Hash.new)
23
+
24
+ include Hobo::OpenidController
25
+
26
+ define_method(options[:complete_action]) do
27
+ hobo_openid_complete(options[:openid_opts])
28
+ end
29
+
30
+ define_method(options[:login_action]) do
31
+ hobo_openid_login(request, options[:openid_opts])
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,163 @@
1
+ require 'openid'
2
+ require 'openid/extensions/sreg'
3
+ require 'openid/store/memory'
4
+ module Hobo
5
+ module OpenidController
6
+ # Login action for controller. Parameters:
7
+ # Recognized options are:
8
+ # :model - class of your user model (default User)
9
+ # :login - field of params where users provide openIDs (default :login)
10
+ # :return_to - page to return
11
+ def hobo_openid_login(request, options = {})
12
+ options.reverse_merge!(:success_notice => "You have logged in",
13
+ :failure_notice => "Verification failed",
14
+ :cancellation_notice => "Verification cancelled",
15
+ :setup_needed_notice => "OpenID server reports setup is needed",
16
+ :new_user_failure_notice => "Could not create a new user account",
17
+ :redirect_to => { :controller => "front", :action => "index" },
18
+ :model => User,
19
+ :openid_field => :openid,
20
+ :mappings => [])
21
+ options.reverse_merge!(:return_to => url_for(:action => :complete_openid),
22
+ :model => User, :login => :login)
23
+
24
+ return unless request.post?
25
+
26
+ openid = params[options[:login]]
27
+
28
+ begin
29
+ oidreq = openid_consumer.begin openid
30
+ rescue => e
31
+ flash[:error] = "Discovery failed: #{e}"
32
+ redirect_to homepage(request) and return
33
+ end
34
+
35
+ redirect_to oidreq.redirect_url(homepage(request), options[:return_to])
36
+ end
37
+
38
+ # Complete user login. Recognized options:
39
+ # :model - class of your user model
40
+ # :openid_field - field of your user model that stores openID
41
+ # :mappings - simple registration mappings (currently unsupported)
42
+ # :redirect_to - where to redirect after success
43
+ # :*_notice - failure, cancellation, setup_needed, new_user_failure
44
+ def hobo_openid_complete(options={})
45
+ options.reverse_merge!(:success_notice => "You have logged in",
46
+ :failure_notice => "Verification failed",
47
+ :cancellation_notice => "Verification cancelled",
48
+ :setup_needed_notice => "OpenID server reports setup is needed",
49
+ :new_user_failure_notice => "Could not create a new user account",
50
+ :redirect_to => { :controller => "front", :action => "index"},
51
+ :model => User,
52
+ :openid_field => :openid,
53
+ :mappings => [])
54
+
55
+ user = nil
56
+ current_url = url_for(:action => 'complete_openid', :only_path => false)
57
+
58
+ # un-munge params array
59
+ parameters = params.reject{|k,v|request.path_parameters[k]}
60
+ response = openid_consumer.complete parameters, current_url
61
+
62
+ case response.status
63
+ when OpenID::Consumer::SUCCESS
64
+ openid = response.identity_url
65
+ user = model.first :conditions => { options[:openid_field] => openid }
66
+
67
+ if user #user exists
68
+ hobo_openid_complete_user_exists(user, options)
69
+ else
70
+ hobo_openid_complete_new_user(response, openid, options)
71
+ end
72
+
73
+ when OpenID::Consumer::FAILURE
74
+ flash[:notice] = options[:failure_notice]
75
+
76
+ when OpenID::Consumer::CANCEL
77
+ flash[:notice] = options[:cancellation_notice]
78
+
79
+ when OpenID::Consumer::SETUP_NEEDED
80
+ flash[:notice] = options[:setup_needed_notice]
81
+
82
+ else
83
+ flash[:notice] = "Unknown response from OpenID server."
84
+ end
85
+
86
+ redirect_to :action => :openid_login unless performed?
87
+
88
+ end
89
+
90
+ def openid_logout(options={})
91
+ options = options.reverse_merge(:notice => "You have been logged out.",
92
+ :redirect_to => base_url)
93
+
94
+ current_user.forget_me if logged_in?
95
+ cookies.delete :auth_token
96
+ reset_session
97
+ flash[:notice] = options[:notice]
98
+ redirect_back_or_default(options[:redirect_to])
99
+ end
100
+
101
+ private
102
+ # Get the OpenID::Consumer object.
103
+ def openid_consumer
104
+ @@openid_consumer ||= OpenID::Consumer.new(session, OpenID::Store::Memory.new)
105
+ end
106
+
107
+ # Helper function for Openid::Controller#complete.
108
+ # handles existing users that successfully authorized.
109
+ # user is user to be logged in. Recognized option :success_notice.
110
+ # If you provide block taking user as argument it will be used to determine
111
+ # if user can login.
112
+ def hobo_openid_complete_user_exists(user, options = {})
113
+ # If supplied, a block can be used to test if this user is
114
+ # allowed to log in (e.g. the account may be disabled)
115
+ return if block_given? && !yield(user)
116
+
117
+ # Change current_user
118
+ self.current_user = user
119
+
120
+ if params[:remember_me] == "1"
121
+ current_user.remember_me
122
+ create_auth_cookie
123
+ end
124
+
125
+ flash[:notice] ||= options[:success_notice]
126
+
127
+ redirect_back_or_default(options[:redirect_to] || homepage(request)) unless performed?
128
+ end
129
+
130
+ # Helper function for Openid::Controller#complete
131
+ # handles new users that successfully authorized.
132
+ # user - user to be logged in.
133
+ # respose - response of openID provider
134
+ # Recognized options are (if they are missing function may fail):
135
+ # :model, :openid_field, :mappings
136
+ def hobo_openid_complete_new_user(response, openid, options = {})
137
+ # Generate parameters for new user record
138
+ user_attrs = {options[:openid_field] => openid}
139
+ sreg = OpenID::SReg::Response.from_success_response(response)
140
+
141
+ unless sreg.empty?
142
+ options[:mappings].each do |set,mappings|
143
+ mappings.each do |key,col|
144
+ user_attrs[col] = sreg[key.to_s]
145
+ end
146
+ end
147
+ end
148
+
149
+ user = options[:model].new(user_attrs)
150
+ logger.info user_attrs
151
+
152
+ flash[:notice] = options[:new_user_failure_notice] unless user.save false
153
+
154
+ self.current_user = user
155
+ redirect_to(:action => "edit", :id => user.id)
156
+ end
157
+
158
+ # If I call it home_page it'll break cucumbers
159
+ def homepage(request)
160
+ "#{request.protocol}#{request.host}:#{request.port}"
161
+ end
162
+ end
163
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hobo_openid
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
+ platform: ruby
12
+ authors:
13
+ - Joachim Filip Ignacy Bartosik
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-04 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: thoughtbot-shoulda
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rails
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 9
44
+ segments:
45
+ - 2
46
+ - 3
47
+ - 5
48
+ version: 2.3.5
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ description: Adds ability to login with OpenID to Hobo-based applications. See README to start using it.
52
+ email: jbartosik@gmail.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files:
58
+ - LICENSE.txt
59
+ - README.markdown
60
+ files:
61
+ - .gitignore
62
+ - CREDITS
63
+ - LICENSE.txt
64
+ - README.markdown
65
+ - Rakefile
66
+ - VERSION
67
+ - lib/hobo_openid.rb
68
+ - lib/openid_controller.rb
69
+ has_rdoc: true
70
+ homepage: http://github.com/ahenobarbi/hobo_openid
71
+ licenses: []
72
+
73
+ post_install_message:
74
+ rdoc_options:
75
+ - --charset=UTF-8
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ hash: 3
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ hash: 3
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ requirements: []
97
+
98
+ rubyforge_project:
99
+ rubygems_version: 1.3.7
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: OpenID login for Hobo
103
+ test_files: []
104
+