multiauth 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/controllers/multiauth/sessions_controller.rb +33 -0
- data/app/views/multiauth/_box.html.erb +1 -1
- data/app/views/multiauth/sessions/new.html.haml +1 -0
- data/lib/generators/multiauth/multiauth_generator.rb +2 -2
- data/lib/generators/templates/README +36 -77
- data/lib/generators/templates/auth_providers.yml +47 -0
- data/lib/multiauth/helpers.rb +22 -0
- data/lib/multiauth/rails.rb +37 -1
- data/lib/multiauth/routes.rb +6 -0
- data/lib/multiauth/views_helper.rb +1 -2
- data/lib/multiauth.rb +10 -60
- data/multiauth.gemspec +7 -2
- metadata +8 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Multiauth
|
2
|
+
class SessionsController < ApplicationController
|
3
|
+
def new
|
4
|
+
end
|
5
|
+
|
6
|
+
def auth
|
7
|
+
# see http://github.com/intridea/omniauth/wiki/Auth-Hash-Schema
|
8
|
+
if logged_in?
|
9
|
+
self.current_user.connect(params['auth'] || request.env['rack.auth'])
|
10
|
+
else
|
11
|
+
self.current_user = User.authenticate(params['auth'] || request.env['rack.auth'])
|
12
|
+
end
|
13
|
+
|
14
|
+
if logged_in?
|
15
|
+
redirect_to root_path
|
16
|
+
else
|
17
|
+
render 'new'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def failure
|
22
|
+
flash.now[:error] = params[:message]
|
23
|
+
render 'new'
|
24
|
+
end
|
25
|
+
|
26
|
+
def destroy
|
27
|
+
self.current_user = nil
|
28
|
+
redirect_to root_path
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
end
|
33
|
+
end
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<% providers.each_slice(3) do |column| %>
|
15
15
|
<div class="column">
|
16
16
|
<% column.each do |provider, config| %>
|
17
|
-
<a id="btn_<%= count+=1 %>" class="<%= provider %> openid_btn <%= config[:class] %>" title="<%= provider %>" href="
|
17
|
+
<a id="btn_<%= count+=1 %>" class="<%= provider %> openid_btn <%= config[:class] %>" title="<%= provider %>" href="/auth/<%= config["openid"] ? "open_id?openid_url=#{config["openid"]}" : "#{provider.downcase}" %>"></a>
|
18
18
|
<% end %>
|
19
19
|
</div>
|
20
20
|
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
= multiauth_box
|
@@ -11,8 +11,8 @@ module Multiauth
|
|
11
11
|
copy_file "multiauth.js", "public/javascripts/multiauth.js"
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
copy_file "
|
14
|
+
def copy_config_file
|
15
|
+
copy_file "auth_providers.yml", "config/auth_providers.yml"
|
16
16
|
end
|
17
17
|
|
18
18
|
def show_readme
|
@@ -3,98 +3,57 @@
|
|
3
3
|
|
4
4
|
Some setup you must do manually if you haven't yet:
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
if user
|
16
|
-
user
|
17
|
-
|
18
|
-
|
19
|
-
:github_id => data["id"])
|
6
|
+
1. configure your User model (mongo_mapper example):
|
7
|
+
|
8
|
+
class User
|
9
|
+
...
|
10
|
+
key :auth_keys, Array
|
11
|
+
|
12
|
+
def self.authenticate(fields)
|
13
|
+
auth_key = "#{fields["provider"]}_#{fields["uid"]}"
|
14
|
+
user = User.first(:auth_keys => auth_key)
|
15
|
+
if user.nil?
|
16
|
+
user = User.new(:auth_keys => [auth_key])
|
17
|
+
user.send(:auth_fields=, fields["user_info"])
|
18
|
+
user.save!
|
20
19
|
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
|
24
|
-
data = ActiveSupport::JSON.decode(access_token.get('/me'))
|
25
20
|
|
26
|
-
|
27
|
-
user
|
28
|
-
else
|
29
|
-
User.create!(:name => data["name"], :email => data["email"],
|
30
|
-
:facebook_id => data["id"], :facebook_profile => data["link"])
|
31
|
-
end
|
21
|
+
user
|
32
22
|
end
|
33
23
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
24
|
+
def connect(fields)
|
25
|
+
auth_key = "#{fields["provider"]}_#{fields["uid"]}"
|
26
|
+
user = User.first(:auth_keys => auth_key, :select => [:id])
|
27
|
+
if user.present? && user.id != self.id
|
28
|
+
user.destroy if merge_account(user)
|
29
|
+
end
|
37
30
|
|
38
|
-
|
39
|
-
["fullname", "email", "http://axschema.org/pref/language", "http://axschema.org/contact/email"]
|
31
|
+
self.push_uniq(:auth_keys => auth_key)
|
40
32
|
end
|
41
33
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
http://axschema.org/namePerson
|
46
|
-
http://axschema.org/birthDate
|
47
|
-
gender
|
48
|
-
http://axschema.org/person/gender
|
49
|
-
http://axschema.org/contact/postalCode/home
|
50
|
-
country
|
51
|
-
http://axschema.org/contact/country/home
|
52
|
-
language
|
53
|
-
http://axschema.org/pref/language
|
54
|
-
http://axschema.org/pref/timezone
|
55
|
-
]
|
34
|
+
def merge_account(other_user)
|
35
|
+
# return true to delete the old user
|
36
|
+
true
|
56
37
|
end
|
57
38
|
|
58
|
-
def
|
59
|
-
logger.info "
|
60
|
-
|
61
|
-
|
62
|
-
value = value.first
|
63
|
-
end
|
64
|
-
|
65
|
-
case key.to_s
|
66
|
-
when "fullname", "http://axschema.org/namePerson"
|
67
|
-
self.full_name = value
|
68
|
-
when "email", "http://axschema.org/contact/email"
|
69
|
-
self.email = value
|
70
|
-
when "gender", "http://axschema.org/person/gender"
|
71
|
-
self.gender = value
|
72
|
-
else
|
73
|
-
logger.error "Unknown OpenID field: #{key}"
|
74
|
-
end
|
39
|
+
def auth_fields=(info)
|
40
|
+
Rails.logger.info "FIELDS: #{info.inspect}"
|
41
|
+
info.each_pair do |k, v|
|
42
|
+
self[k] = v
|
75
43
|
end
|
76
44
|
end
|
45
|
+
end
|
77
46
|
|
78
|
-
|
79
|
-
return false if self[:identity_url].present? || self[:facebook_id].present? || self[:github_id].present?
|
80
|
-
|
81
|
-
(encrypted_password.blank? || !password.blank?)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
2. to include the javascripts do
|
86
|
-
<%= multiauth_assets %>
|
87
|
-
|
88
|
-
to render the multiauth box do
|
89
|
-
<%= multiauth_box %>
|
47
|
+
2. configure the service keys at config/auth_providers.yml
|
90
48
|
|
91
|
-
3. configure your twitter, facebook and github keys
|
92
49
|
|
93
|
-
|
50
|
+
Default routes:
|
51
|
+
/sessions/sign_in
|
52
|
+
/sessions/sign_out
|
94
53
|
|
95
|
-
|
96
|
-
|
97
|
-
|
54
|
+
you can override them using the following routes:
|
55
|
+
match "/login" => "multiauth/sessions#new", :as => :new_session
|
56
|
+
match "/logout" => "multiauth/sessions#destroy", :method => :get, :as => :destroy_session
|
98
57
|
|
99
58
|
|
100
59
|
===============================================================================
|
@@ -0,0 +1,47 @@
|
|
1
|
+
base: &common
|
2
|
+
Twitter:
|
3
|
+
id: <TWITTER ID>
|
4
|
+
token: <TWITTER TOKEN>
|
5
|
+
Facebook:
|
6
|
+
id: <FACEBOOK ID>
|
7
|
+
token: <FACEBOOK TOKEN>
|
8
|
+
Github:
|
9
|
+
id: <GITHUB ID>
|
10
|
+
token: <GITHUB TOKEN>
|
11
|
+
Google:
|
12
|
+
openid: https://www.google.com/accounts/o8/id
|
13
|
+
Yahoo:
|
14
|
+
openid: http://yahoo.com
|
15
|
+
AOL:
|
16
|
+
openid: http://openid.aol.com/{user_name}
|
17
|
+
MySpace:
|
18
|
+
openid: http://www.myspace.com/{user_name}
|
19
|
+
MyOpenID:
|
20
|
+
openid: http://{user_name}.myopenid.com/
|
21
|
+
Wordpress:
|
22
|
+
openid: http://{user_name}.wordpress.com/
|
23
|
+
Blogger:
|
24
|
+
openid: http://{user_name}.blogspot.com/
|
25
|
+
Flickr:
|
26
|
+
openid: http://flickr.com/{user_name}/
|
27
|
+
Launchpad:
|
28
|
+
openid: https://launchpad.net/~{user_name}
|
29
|
+
Vidoop:
|
30
|
+
openid: http://{user_name}.myvidoop.com/
|
31
|
+
ClaimID:
|
32
|
+
openid: http://claimid.com/{user_name}
|
33
|
+
Technorati:
|
34
|
+
openid: http://technorati.com/people/technorati/{user_name}/
|
35
|
+
Verisign:
|
36
|
+
openid: http://{user_name}.pip.verisignlabs.com/
|
37
|
+
LiveJournal:
|
38
|
+
openid: http://{user_name}.livejournal.com
|
39
|
+
OpenId:
|
40
|
+
openid: {user_name}
|
41
|
+
|
42
|
+
development:
|
43
|
+
<<: *common
|
44
|
+
production:
|
45
|
+
<<: *common
|
46
|
+
test:
|
47
|
+
<<: *common
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Multiauth
|
2
|
+
module Helpers
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
helper_method :current_user, :logged_in?
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def current_user=(new_user)
|
10
|
+
session[:user] = (new_user.nil? || new_user.is_a?(Symbol)) ? nil : new_user.id
|
11
|
+
@current_user = new_user
|
12
|
+
end
|
13
|
+
|
14
|
+
def current_user
|
15
|
+
@current_user ||= User.first(:_id => session[:user]) if session[:user]
|
16
|
+
end
|
17
|
+
|
18
|
+
def logged_in?
|
19
|
+
!!self.current_user
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/multiauth/rails.rb
CHANGED
@@ -1 +1,37 @@
|
|
1
|
-
|
1
|
+
::ActionView::Base.send :include, Multiauth::ViewsHelper
|
2
|
+
|
3
|
+
module Multiauth
|
4
|
+
class Engine < ::Rails::Engine
|
5
|
+
paths.app.controllers = File.expand_path("../../../app/controllers", __FILE__)
|
6
|
+
paths.app.views = File.expand_path("../../../app/views", __FILE__)
|
7
|
+
paths.config.routes = File.expand_path("../routes.rb", __FILE__)
|
8
|
+
|
9
|
+
initializer "multiauth" do |app|
|
10
|
+
config_file = Rails.root+"config/auth_providers.yml"
|
11
|
+
providers = YAML::load(ERB.new(File.read(config_file)).result)
|
12
|
+
if providers[Rails.env].nil?
|
13
|
+
raise ArgumentError, "cannot find section for #{Rails.env} environment in #{config_file}"
|
14
|
+
end
|
15
|
+
|
16
|
+
Multiauth.providers = providers[Rails.env]
|
17
|
+
|
18
|
+
require 'omniauth/openid'
|
19
|
+
require 'openid/store/filesystem'
|
20
|
+
|
21
|
+
app.config.middleware.use OmniAuth::Strategies::OpenID, OpenID::Store::Filesystem.new('/tmp') # FIXME: mm store
|
22
|
+
|
23
|
+
app.config.middleware.use OmniAuth::Builder do
|
24
|
+
Multiauth.providers.each do |provider, config|
|
25
|
+
next if config["token"].blank?
|
26
|
+
|
27
|
+
puts ">> Setting up #{provider} provider"
|
28
|
+
provider provider.downcase.to_sym, config["id"], config["token"]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
config.to_prepare do
|
34
|
+
ApplicationController.send(:include, Multiauth::Helpers)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
Rails::Application.routes.draw do
|
2
|
+
match '/sessions/sign_in' => "multiauth/sessions#new", :as => :new_session
|
3
|
+
match '/sessions/sign_out' => "multiauth/sessions#destroy", :method => :get, :as => :destroy_session
|
4
|
+
|
5
|
+
match "/auth/:provider/callback" => "multiauth/sessions#auth"
|
6
|
+
end
|
data/lib/multiauth.rb
CHANGED
@@ -1,64 +1,14 @@
|
|
1
|
-
require 'multiauth/rails'
|
2
1
|
require 'multiauth/views_helper'
|
2
|
+
require 'multiauth/helpers'
|
3
|
+
require 'multiauth/rails'
|
4
|
+
|
3
5
|
|
4
6
|
module Multiauth
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
},
|
13
|
-
'Facebook' => {
|
14
|
-
:url => '/auth/facebook',
|
15
|
-
:real => true
|
16
|
-
},
|
17
|
-
'Yahoo' => {
|
18
|
-
:url => '/auth/open_id?openid_url=http://yahoo.com/'
|
19
|
-
},
|
20
|
-
'AOL' => {
|
21
|
-
:url => '/auth/open_id?openid_url=http://openid.aol.com/{user_name}'
|
22
|
-
},
|
23
|
-
'MySpace' => {
|
24
|
-
:url => '/auth/open_id?openid_url=http://www.myspace.com/{user_name}'
|
25
|
-
},
|
26
|
-
'Github' => {
|
27
|
-
:url => '/auth/github',
|
28
|
-
:real => true
|
29
|
-
},
|
30
|
-
'MyOpenID' => {
|
31
|
-
:url => '/auth/open_id?openid_url=http://{user_name}.myopenid.com/'
|
32
|
-
},
|
33
|
-
'Wordpress' => {
|
34
|
-
:url => '/auth/open_id?openid_url=http://{user_name}.wordpress.com/'
|
35
|
-
},
|
36
|
-
'Blogger' => {
|
37
|
-
:url => '/auth/open_id?openid_url=http://{user_name}.blogspot.com/'
|
38
|
-
},
|
39
|
-
'Flickr' => {
|
40
|
-
:url => '/auth/open_id?openid_url=http://flickr.com/{user_name}/'
|
41
|
-
},
|
42
|
-
'Launchpad' => {
|
43
|
-
:url => '/auth/open_id?openid_url=https://launchpad.net/~{user_name}'
|
44
|
-
},
|
45
|
-
'Vidoop' => {
|
46
|
-
:url => '/auth/open_id?openid_url=http://{user_name}.myvidoop.com/'
|
47
|
-
},
|
48
|
-
'ClaimID' => {
|
49
|
-
:url => '/auth/open_id?openid_url=http://claimid.com/{user_name}'
|
50
|
-
},
|
51
|
-
'Technorati' => {
|
52
|
-
:url => '/auth/open_id?openid_url=http://technorati.com/people/technorati/{user_name}/'
|
53
|
-
},
|
54
|
-
'Verisign' => {
|
55
|
-
:url => '/auth/open_id?openid_url=http://{user_name}.pip.verisignlabs.com/'
|
56
|
-
},
|
57
|
-
'LiveJournal' => {
|
58
|
-
:url => '/auth/open_id?openid_url=http://{user_name}.livejournal.com'
|
59
|
-
},
|
60
|
-
'OpenID' => {
|
61
|
-
:url => '/auth/open_id'
|
62
|
-
}
|
63
|
-
}
|
7
|
+
def self.providers=(providers)
|
8
|
+
@providers = providers
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.providers
|
12
|
+
@providers
|
13
|
+
end
|
64
14
|
end
|
data/multiauth.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{multiauth}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["David A. Cuadrado"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-06}
|
13
13
|
s.description = %q{multi authentication gem using devise & co}
|
14
14
|
s.email = %q{krawek@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,9 +25,12 @@ Gem::Specification.new do |s|
|
|
25
25
|
"README.rdoc",
|
26
26
|
"Rakefile",
|
27
27
|
"VERSION",
|
28
|
+
"app/controllers/multiauth/sessions_controller.rb",
|
28
29
|
"app/views/multiauth/_box.html.erb",
|
30
|
+
"app/views/multiauth/sessions/new.html.haml",
|
29
31
|
"lib/generators/multiauth/multiauth_generator.rb",
|
30
32
|
"lib/generators/templates/README",
|
33
|
+
"lib/generators/templates/auth_providers.yml",
|
31
34
|
"lib/generators/templates/devise_twitter.rb",
|
32
35
|
"lib/generators/templates/images/arrow.gif",
|
33
36
|
"lib/generators/templates/images/balloon.png",
|
@@ -36,7 +39,9 @@ Gem::Specification.new do |s|
|
|
36
39
|
"lib/generators/templates/multiauth.css",
|
37
40
|
"lib/generators/templates/multiauth.js",
|
38
41
|
"lib/multiauth.rb",
|
42
|
+
"lib/multiauth/helpers.rb",
|
39
43
|
"lib/multiauth/rails.rb",
|
44
|
+
"lib/multiauth/routes.rb",
|
40
45
|
"lib/multiauth/views_helper.rb",
|
41
46
|
"multiauth.gemspec",
|
42
47
|
"spec/multiauth_spec.rb",
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 1
|
9
|
+
version: 0.2.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- David A. Cuadrado
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-06 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -80,9 +80,12 @@ files:
|
|
80
80
|
- README.rdoc
|
81
81
|
- Rakefile
|
82
82
|
- VERSION
|
83
|
+
- app/controllers/multiauth/sessions_controller.rb
|
83
84
|
- app/views/multiauth/_box.html.erb
|
85
|
+
- app/views/multiauth/sessions/new.html.haml
|
84
86
|
- lib/generators/multiauth/multiauth_generator.rb
|
85
87
|
- lib/generators/templates/README
|
88
|
+
- lib/generators/templates/auth_providers.yml
|
86
89
|
- lib/generators/templates/devise_twitter.rb
|
87
90
|
- lib/generators/templates/images/arrow.gif
|
88
91
|
- lib/generators/templates/images/balloon.png
|
@@ -91,7 +94,9 @@ files:
|
|
91
94
|
- lib/generators/templates/multiauth.css
|
92
95
|
- lib/generators/templates/multiauth.js
|
93
96
|
- lib/multiauth.rb
|
97
|
+
- lib/multiauth/helpers.rb
|
94
98
|
- lib/multiauth/rails.rb
|
99
|
+
- lib/multiauth/routes.rb
|
95
100
|
- lib/multiauth/views_helper.rb
|
96
101
|
- multiauth.gemspec
|
97
102
|
- spec/multiauth_spec.rb
|