devise_koala_connectable 0.1.2 → 0.1.3
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/CHANGELOG +29 -0
- data/Manifest +1 -0
- data/Rakefile +1 -1
- data/devise_koala_connectable.gemspec +4 -4
- data/lib/devise_koala_connectable/locales/de.yml +4 -0
- data/lib/devise_koala_connectable/strategy.rb +43 -13
- data/lib/devise_koala_connectable/view_helpers.rb +63 -3
- data/lib/devise_koala_connectable.rb +3 -1
- metadata +6 -4
data/CHANGELOG
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
== 0.1.3
|
2
|
+
|
3
|
+
* enhancements
|
4
|
+
* changed logging from info to debug.
|
5
|
+
* Added logout_button helper.
|
6
|
+
* Added user creation through Facebook Registration form
|
7
|
+
* Added koala_registration_form helper
|
8
|
+
* Added koala_registration_iframe_form helper
|
9
|
+
* login button now accepts an callback url
|
10
|
+
* Removed valid_params? method.
|
11
|
+
|
12
|
+
* bug fix
|
13
|
+
* many minor bugfixes
|
14
|
+
|
15
|
+
== 0.1.2
|
16
|
+
|
17
|
+
* bug fix
|
18
|
+
* changed strings to symbols
|
19
|
+
* other minor bugfixes
|
20
|
+
|
21
|
+
== 0.1.1
|
22
|
+
|
23
|
+
* bug fix
|
24
|
+
* some minor bugfixes
|
25
|
+
|
26
|
+
== 0.1.0 (yanked)
|
27
|
+
|
28
|
+
* enhancements
|
29
|
+
* initial Version, basic features
|
data/Manifest
CHANGED
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require "rubygems"
|
|
2
2
|
require "rake"
|
3
3
|
require "echoe"
|
4
4
|
|
5
|
-
Echoe.new("devise_koala_connectable", "0.1.
|
5
|
+
Echoe.new("devise_koala_connectable", "0.1.3") do |p|
|
6
6
|
p.description = "Rails gem for adding Facebook authentification capabillity to devise using koala"
|
7
7
|
p.url = "http://github.com/webmatze/devise_koala_connectable"
|
8
8
|
p.author = "Mathias Karstädt"
|
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{devise_koala_connectable}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Mathias Karst\303\244dt"]
|
9
|
-
s.date = %q{2011-02-
|
9
|
+
s.date = %q{2011-02-24}
|
10
10
|
s.description = %q{Rails gem for adding Facebook authentification capabillity to devise using koala}
|
11
11
|
s.email = %q{mathias.karstaedt@gmail.com}
|
12
|
-
s.extra_rdoc_files = ["README.rdoc", "lib/devise_koala_connectable.rb", "lib/devise_koala_connectable/locales/de.yml", "lib/devise_koala_connectable/locales/en.yml", "lib/devise_koala_connectable/model.rb", "lib/devise_koala_connectable/schema.rb", "lib/devise_koala_connectable/strategy.rb", "lib/devise_koala_connectable/version.rb", "lib/devise_koala_connectable/view_helpers.rb"]
|
13
|
-
s.files = ["README.rdoc", "Rakefile", "devise_koala_connectable.gemspec", "lib/devise_koala_connectable.rb", "lib/devise_koala_connectable/locales/de.yml", "lib/devise_koala_connectable/locales/en.yml", "lib/devise_koala_connectable/model.rb", "lib/devise_koala_connectable/schema.rb", "lib/devise_koala_connectable/strategy.rb", "lib/devise_koala_connectable/version.rb", "lib/devise_koala_connectable/view_helpers.rb", "rails/init.rb", "Manifest"]
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "README.rdoc", "lib/devise_koala_connectable.rb", "lib/devise_koala_connectable/locales/de.yml", "lib/devise_koala_connectable/locales/en.yml", "lib/devise_koala_connectable/model.rb", "lib/devise_koala_connectable/schema.rb", "lib/devise_koala_connectable/strategy.rb", "lib/devise_koala_connectable/version.rb", "lib/devise_koala_connectable/view_helpers.rb"]
|
13
|
+
s.files = ["CHANGELOG", "README.rdoc", "Rakefile", "devise_koala_connectable.gemspec", "lib/devise_koala_connectable.rb", "lib/devise_koala_connectable/locales/de.yml", "lib/devise_koala_connectable/locales/en.yml", "lib/devise_koala_connectable/model.rb", "lib/devise_koala_connectable/schema.rb", "lib/devise_koala_connectable/strategy.rb", "lib/devise_koala_connectable/version.rb", "lib/devise_koala_connectable/view_helpers.rb", "rails/init.rb", "Manifest"]
|
14
14
|
s.homepage = %q{http://github.com/webmatze/devise_koala_connectable}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Devise_koala_connectable", "--main", "README.rdoc"]
|
16
16
|
s.require_paths = ["lib"]
|
@@ -11,28 +11,47 @@ module Devise #:nodoc:
|
|
11
11
|
class KoalaConnectable < Base
|
12
12
|
|
13
13
|
def valid?
|
14
|
-
valid_controller? &&
|
14
|
+
((valid_controller? && cookie_present?) || signed_request?) && mapping.to.respond_to?('authenticate_with_koala')
|
15
15
|
end
|
16
16
|
|
17
17
|
# Authenticate user with Koala.
|
18
18
|
#
|
19
19
|
def authenticate!
|
20
|
-
|
21
20
|
klass = mapping.to
|
22
21
|
|
23
22
|
raise StandardError, "No api_key or secret_key defined, please see the documentation of Koala gem to setup it." unless klass.koala_app_id.present? and klass.koala_secret_key.present?
|
24
23
|
begin
|
25
24
|
oauth = Koala::Facebook::OAuth.new(klass.koala_app_id, klass.koala_secret_key, klass.koala_callback_url)
|
26
25
|
|
27
|
-
|
28
|
-
|
26
|
+
if signed_request?
|
27
|
+
user_info = oauth.parse_signed_request params[:signed_request]
|
28
|
+
unless user_info.present? #if no valid signed facebook request found
|
29
|
+
pass
|
30
|
+
return
|
31
|
+
end
|
32
|
+
user_id = user_info["user_id"]
|
33
|
+
access_token = user_info["oauth_token"]
|
34
|
+
else
|
35
|
+
user_info = oauth.get_user_info_from_cookies(request.cookies)
|
36
|
+
unless user_info.present? #if no valid facebook Session found
|
37
|
+
pass
|
38
|
+
return
|
39
|
+
end
|
40
|
+
user_id = user_info["uid"]
|
41
|
+
access_token = user_info["access_token"]
|
42
|
+
end
|
43
|
+
|
44
|
+
Rails.logger.debug "user_info: #{user_info.to_yaml}"
|
29
45
|
|
30
|
-
graph = Koala::Facebook::GraphAPI.new(
|
31
|
-
koala_user = graph.get_object(
|
46
|
+
graph = Koala::Facebook::GraphAPI.new(access_token)
|
47
|
+
koala_user = graph.get_object(user_id)
|
32
48
|
|
33
|
-
Rails.logger.
|
49
|
+
Rails.logger.debug koala_user.to_yaml
|
34
50
|
|
35
|
-
|
51
|
+
unless koala_user
|
52
|
+
fail(:koala_invalid)
|
53
|
+
return
|
54
|
+
end
|
36
55
|
|
37
56
|
if user = klass.authenticate_with_koala(koala_user)
|
38
57
|
user.on_before_koala_success(koala_user)
|
@@ -40,10 +59,14 @@ module Devise #:nodoc:
|
|
40
59
|
return
|
41
60
|
end
|
42
61
|
|
43
|
-
|
62
|
+
unless klass.koala_auto_create_account? or signed_request?
|
63
|
+
fail(:koala_invalid)
|
64
|
+
return
|
65
|
+
end
|
44
66
|
|
45
67
|
user = klass.new
|
46
68
|
user.store_koala_credentials!(koala_user)
|
69
|
+
koala_user["registration"] = user_info if signed_request?
|
47
70
|
user.on_before_koala_auto_create(koala_user)
|
48
71
|
|
49
72
|
user.save(:validate => false)
|
@@ -52,7 +75,7 @@ module Devise #:nodoc:
|
|
52
75
|
|
53
76
|
rescue Exception => e
|
54
77
|
Rails.logger.error e.to_yaml
|
55
|
-
fail
|
78
|
+
fail(:koala_invalid)
|
56
79
|
end
|
57
80
|
end
|
58
81
|
|
@@ -60,9 +83,16 @@ module Devise #:nodoc:
|
|
60
83
|
def valid_controller?
|
61
84
|
params[:controller].to_s =~ /sessions/
|
62
85
|
end
|
63
|
-
|
64
|
-
def
|
65
|
-
|
86
|
+
|
87
|
+
def cookie_present?
|
88
|
+
klass = mapping.to
|
89
|
+
raise StandardError, "No api_key or secret_key defined, please see the documentation of Koala gem to setup it." unless klass.koala_app_id.present? and klass.koala_secret_key.present?
|
90
|
+
oauth = Koala::Facebook::OAuth.new(klass.koala_app_id, klass.koala_secret_key, klass.koala_callback_url)
|
91
|
+
oauth.get_user_info_from_cookies(request.cookies).present?
|
92
|
+
end
|
93
|
+
|
94
|
+
def signed_request?
|
95
|
+
params[:signed_request].present?
|
66
96
|
end
|
67
97
|
|
68
98
|
end
|
@@ -40,15 +40,75 @@ module Devise #:nodoc:
|
|
40
40
|
</script>"
|
41
41
|
end
|
42
42
|
|
43
|
+
# Renders the Facbook Registration Form (XFML).
|
44
|
+
# For more info: http://developers.facebook.com/docs/plugins/registration/
|
45
|
+
#
|
46
|
+
# For example :
|
47
|
+
# ...
|
48
|
+
# <%= koala_registration_form("/registration", [{:name => "name"}, {:name => "password", :view => "not_prefilled"}, {:name => "birthday", :description => "Geburtstag", :type => "date"}], "callback_function", "de_DE", 600) %>
|
49
|
+
# ...
|
50
|
+
#
|
51
|
+
def koala_registration_form(registration_url = "/", fields = [:name, :email, :password], on_validate = nil, locale = "en_EN", width = nil)
|
52
|
+
width = (width.present?) ? "width=\"#{width.to_s}\" " : ""
|
53
|
+
on_validate = (on_validate.present?) ? "onvalidate=\"#{on_validate}\" " : ""
|
54
|
+
"<fb:registration
|
55
|
+
fields='" + fields.to_json + "'
|
56
|
+
redirect-uri=\"#{registration_url}\"
|
57
|
+
locale=\"#{locale}\"
|
58
|
+
#{on_validate}
|
59
|
+
#{width}>
|
60
|
+
</fb:registration>"
|
61
|
+
end
|
62
|
+
|
63
|
+
# Renders the Facbook Registration Form (Iframe).
|
64
|
+
# For more info: http://developers.facebook.com/docs/plugins/registration/
|
65
|
+
#
|
66
|
+
# For example :
|
67
|
+
# ...
|
68
|
+
# <%= koala_registration_iframe_form("/registration", [{:name => "name"}, {:name => "password", :view => "not_prefilled"}, {:name => "birthday", :description => "Geburtstag", :type => "date"}], "de_DE", 600, 400) %>
|
69
|
+
# ...
|
70
|
+
#
|
71
|
+
def koala_registration_iframe_form(registration_url = "/", fields = [:name, :email, :password], locale = "en_EN", width = "100%", height = 330)
|
72
|
+
width = (width.present?) ? "width=\"#{width.to_s}\" " : ""
|
73
|
+
height = (height.present?) ? "height=\"#{height.to_s}\" " : ""
|
74
|
+
on_validate = (on_validate.present?) ? "onvalidate=\"#{on_validate}\" " : ""
|
75
|
+
"<iframe src='http://www.facebook.com/plugins/registration.php?
|
76
|
+
client_id=#{Devise::koala_app_id}&
|
77
|
+
redirect_uri=#{CGI.escape(registration_url)}&
|
78
|
+
locale=#{locale}&
|
79
|
+
fields=" + fields.to_json + "'
|
80
|
+
scrolling=\"auto\"
|
81
|
+
frameborder=\"no\"
|
82
|
+
style=\"border:none\"
|
83
|
+
allowTransparency=\"true\"
|
84
|
+
#{width}
|
85
|
+
#{height}>
|
86
|
+
</iframe>"
|
87
|
+
end
|
88
|
+
|
43
89
|
|
44
90
|
# Returns the Login To Facebook button.
|
45
91
|
#
|
46
92
|
# For example :
|
47
93
|
# ...
|
48
|
-
# <%= koala_login_button("Login with Facebook") %>
|
94
|
+
# <%= koala_login_button("Login with Facebook", "/after_login") %>
|
95
|
+
#
|
96
|
+
def koala_login_button(button_text = "Login with Facebook", login_url = "/", registration_url = nil)
|
97
|
+
registration = (registration_url.present?) ? "registration-url=\"#{registration_url}\"" : ""
|
98
|
+
"<fb:login-button #{registration} on-login=\"window.location.href = '#{login_url}';\">#{button_text}</fb:login-button>"
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
# Returns the Logout button for Facebook.
|
103
|
+
# It calls the logout_url after logging out of Facbook Connect.
|
104
|
+
#
|
105
|
+
# For example :
|
106
|
+
# ...
|
107
|
+
# <%= koala_logout_button("Logout","/after_logout") %>
|
49
108
|
#
|
50
|
-
def
|
51
|
-
"
|
109
|
+
def koala_logout_button(button_text = "Logout", logout_url = "/", options = {})
|
110
|
+
options = { :unobtrusive => true, :onclick => "FB.getLoginStatus(function(status){if(status.session){FB.logout(function(response){document.location.href='#{logout_url}'});}else{document.location.href='#{logout_url}'}})" }.merge(options)
|
111
|
+
link_to button_text, "#", options
|
52
112
|
end
|
53
113
|
|
54
114
|
end
|
@@ -26,9 +26,11 @@ module Devise
|
|
26
26
|
|
27
27
|
mattr_accessor :koala_callback_url
|
28
28
|
@@koala_callback_url = nil
|
29
|
+
|
29
30
|
end
|
30
31
|
|
31
|
-
I18n.load_path.unshift File.join(File.dirname(__FILE__), *%w[devise_koala_connectable locales en.yml])
|
32
|
+
I18n.load_path.unshift File.expand_path(File.join(File.dirname(__FILE__), *%w[devise_koala_connectable locales en.yml]))
|
33
|
+
I18n.load_path.unshift File.expand_path(File.join(File.dirname(__FILE__), *%w[devise_koala_connectable locales de.yml]))
|
32
34
|
|
33
35
|
Devise.add_module(:koala_connectable,
|
34
36
|
:strategy => true,
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_koala_connectable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Mathias Karst\xC3\xA4dt"
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-24 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -85,6 +85,7 @@ executables: []
|
|
85
85
|
extensions: []
|
86
86
|
|
87
87
|
extra_rdoc_files:
|
88
|
+
- CHANGELOG
|
88
89
|
- README.rdoc
|
89
90
|
- lib/devise_koala_connectable.rb
|
90
91
|
- lib/devise_koala_connectable/locales/de.yml
|
@@ -95,6 +96,7 @@ extra_rdoc_files:
|
|
95
96
|
- lib/devise_koala_connectable/version.rb
|
96
97
|
- lib/devise_koala_connectable/view_helpers.rb
|
97
98
|
files:
|
99
|
+
- CHANGELOG
|
98
100
|
- README.rdoc
|
99
101
|
- Rakefile
|
100
102
|
- devise_koala_connectable.gemspec
|