spree_social 1.0.2 → 1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +10 -0
- data/app/controllers/omniauth_callbacks_controller.rb +27 -19
- data/app/controllers/user_authentications_controller.rb +12 -3
- data/app/controllers/user_registrations_controller_decorator.rb +8 -8
- data/app/controllers/user_sessions_controller_decorator.rb +7 -9
- data/app/models/social_ability.rb +25 -0
- data/app/models/user_decorator.rb +3 -1
- data/app/views/admin/authentication_methods/_form.html.erb +1 -1
- data/app/views/user_registrations/social_edit.html.erb +6 -6
- data/app/views/users/merge.html.erb +2 -2
- data/lib/spree_social.rb +19 -14
- data/public/images/social/aol_128.png +0 -0
- data/public/images/social/aol_256.png +0 -0
- data/public/images/social/aol_32.png +0 -0
- data/public/images/social/aol_64.png +0 -0
- data/public/images/social/campfire_128.png +0 -0
- data/public/images/social/campfire_256.png +0 -0
- data/public/images/social/campfire_32.png +0 -0
- data/public/images/social/campfire_64.png +0 -0
- data/public/images/social/myspace_128.png +0 -0
- data/public/images/social/myspace_256.png +0 -0
- data/public/images/social/myspace_32.png +0 -0
- data/public/images/social/myspace_64.png +0 -0
- data/public/images/social/openid_128.png +0 -0
- data/public/images/social/openid_256.png +0 -0
- data/public/images/social/openid_32.png +0 -0
- data/public/images/social/openid_64.png +0 -0
- data/public/images/social/presently_128.png +0 -0
- data/public/images/social/presently_256.png +0 -0
- data/public/images/social/presently_32.png +0 -0
- data/public/images/social/presently_64.png +0 -0
- data/public/images/social/thirty_seven_signals_128.png +0 -0
- data/public/images/social/thirty_seven_signals_256.png +0 -0
- data/public/images/social/thirty_seven_signals_32.png +0 -0
- data/public/images/social/thirty_seven_signals_64.png +0 -0
- metadata +39 -17
data/README.md
CHANGED
@@ -79,6 +79,16 @@ OAuth Applications @ Facebook, Twitter and / or Github are supported out of the
|
|
79
79
|
|
80
80
|
> Coming Soon
|
81
81
|
|
82
|
+
### 37 Signals
|
83
|
+
|
84
|
+
[37 Signals](https://integrate.37signals.com): [https://integrate.37signals.com](https://integrate.37signals.com)
|
85
|
+
|
86
|
+
> This include Basecamp, HighRise, Campfire, and Backpack. It is referred to as Basecamp in the admin
|
87
|
+
|
88
|
+
1. Name The Application, Your Company, and Your URL
|
89
|
+
2. Check one or all of the 37 Signals apps you use
|
90
|
+
3. Redirect URI (at the bottom of the page) http://your_computer.local:3000
|
91
|
+
|
82
92
|
Setup for Development
|
83
93
|
---------------------
|
84
94
|
|
@@ -3,33 +3,40 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
|
3
3
|
include SpreeBase
|
4
4
|
helper :users, 'spree/base'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
social_setups("Twitter")
|
12
|
-
end
|
13
|
-
|
14
|
-
def github
|
15
|
-
social_setups("Github")
|
6
|
+
SpreeSocial::OAUTH_PROVIDERS.each do |provider|
|
7
|
+
method_name = (provider[1]).to_sym
|
8
|
+
send :define_method, method_name do
|
9
|
+
social_setup(provider[1].capitalize)
|
10
|
+
end
|
16
11
|
end
|
12
|
+
|
13
|
+
#def facebook
|
14
|
+
# social_setups("Facebook")
|
15
|
+
#end
|
16
|
+
#
|
17
|
+
#def twitter
|
18
|
+
# social_setups("Twitter")
|
19
|
+
#end
|
20
|
+
#
|
21
|
+
#def github
|
22
|
+
# social_setups("Github")
|
23
|
+
#end
|
17
24
|
|
18
25
|
private
|
19
26
|
|
20
|
-
def
|
27
|
+
def social_setup(provider)
|
21
28
|
omniauth = request.env["omniauth.auth"]
|
22
|
-
|
29
|
+
|
23
30
|
if request.env["omniauth.error"].present?
|
24
31
|
flash[:error] = t("devise.omniauth_callbacks.failure", :kind => provider, :reason => "user was not valid")
|
25
32
|
redirect_back_or_default(root_url)
|
26
33
|
return
|
27
34
|
end
|
28
|
-
|
35
|
+
|
29
36
|
existing_auth = UserAuthentication.where(:provider => omniauth['provider'], :uid => omniauth['uid'].to_s).first
|
30
|
-
|
37
|
+
|
31
38
|
#signing back in from a social source
|
32
|
-
if existing_auth
|
39
|
+
if existing_auth
|
33
40
|
user = existing_auth.user
|
34
41
|
else # adding a social source
|
35
42
|
user = current_user
|
@@ -43,10 +50,11 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
|
43
50
|
current_order.associate_user!(user)
|
44
51
|
session[:guest_token] = nil
|
45
52
|
end
|
46
|
-
|
53
|
+
|
47
54
|
if user.anonymous?
|
48
|
-
|
49
|
-
|
55
|
+
session[:user_access_token] = user.token #set user access token so we can edit this user again later
|
56
|
+
|
57
|
+
flash.now[:notice] = t("one_more_step", :kind => omniauth['provider'].capitalize)
|
50
58
|
render(:template => "user_registrations/social_edit", :locals => {:user => user, :omniauth => omniauth})
|
51
59
|
elsif current_user
|
52
60
|
flash[:error] = t("attach_error", :kind => omniauth['provider'].capitalize) if existing_auth && (existing_auth.user != current_user)
|
@@ -56,4 +64,4 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
|
56
64
|
end
|
57
65
|
end
|
58
66
|
|
59
|
-
end
|
67
|
+
end
|
@@ -1,20 +1,29 @@
|
|
1
1
|
class UserAuthenticationsController < Spree::BaseController
|
2
|
-
|
2
|
+
|
3
3
|
def update
|
4
4
|
@user = User.find(params[:id])
|
5
|
+
|
6
|
+
authorize! :edit, @user, session[:user_access_token]
|
7
|
+
|
8
|
+
session[:user_access_token] = nil
|
9
|
+
|
5
10
|
@user.email = params[:user][:email]
|
6
11
|
if @user.save
|
12
|
+
sign_in(@user, :event => :authentication) unless current_user
|
7
13
|
redirect_back_or_default(products_path)
|
8
14
|
else
|
9
15
|
flash.now[:error] = "There is already an account with that email. Please sign in to associate these accounts."
|
10
16
|
render(:template => 'users/merge')
|
11
17
|
end
|
12
18
|
end
|
13
|
-
|
19
|
+
|
14
20
|
def destroy
|
15
21
|
@auth = current_user.user_authentications.find(params[:id])
|
22
|
+
|
23
|
+
authorize! :destroy, @auth
|
24
|
+
|
16
25
|
@auth.destroy
|
17
26
|
flash[:notice] = "Successfully deleted authentication source."
|
18
27
|
redirect_to account_path
|
19
28
|
end
|
20
|
-
end
|
29
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
UserRegistrationsController.class_eval do
|
2
|
-
|
2
|
+
|
3
3
|
def create
|
4
|
-
super.tap do |
|
5
|
-
if @user && @user.new_record?
|
6
|
-
@omniauth =
|
7
|
-
|
4
|
+
super.tap do |resp|
|
5
|
+
if @user && @user.new_record? && resp.respond_to?(:session)
|
6
|
+
@omniauth = resp.session[:session]
|
7
|
+
resp.session[:omniauth] = nil unless @user.new_record?
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def delete
|
13
13
|
session[:omniauth] = nil
|
14
14
|
redirect_to signin_path
|
15
15
|
end
|
16
|
-
|
17
|
-
end
|
16
|
+
|
17
|
+
end
|
@@ -1,26 +1,24 @@
|
|
1
1
|
UserSessionsController.class_eval do
|
2
|
-
|
3
|
-
def merge
|
4
|
-
# lets remove the old user here
|
5
|
-
sign_out(:user)
|
2
|
+
|
3
|
+
def merge
|
6
4
|
# now sign in from the login form
|
7
5
|
authenticate_user!
|
8
|
-
|
6
|
+
|
9
7
|
# prep for all the shifting and do it
|
10
8
|
user = User.find(current_user.id)
|
11
9
|
user.user_authentications << UserAuthentication.find(params[:user_authentication])
|
12
10
|
user.save!
|
13
|
-
|
11
|
+
|
14
12
|
if current_order
|
15
13
|
current_order.associate_user!(user)
|
16
14
|
session[:guest_token] = nil
|
17
15
|
end
|
18
16
|
# trash the old anonymous that was created
|
19
17
|
User.destroy(params[:user][:id])
|
20
|
-
|
18
|
+
|
21
19
|
# tell the truth now
|
22
20
|
flash[:alert] = "Succesfully linked your accounts"
|
23
21
|
sign_in_and_redirect(user, :event => :authentication)
|
24
22
|
end
|
25
|
-
|
26
|
-
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class SocialAbility
|
2
|
+
# stuff like class AbilityDecorator goes here
|
3
|
+
include CanCan::Ability
|
4
|
+
|
5
|
+
def initialize(user)
|
6
|
+
|
7
|
+
can :create, UserAuthentication do
|
8
|
+
!user.new_record?
|
9
|
+
end
|
10
|
+
|
11
|
+
can :destroy, UserAuthentication do |user_authentication|
|
12
|
+
user_authentication.user == user
|
13
|
+
end
|
14
|
+
|
15
|
+
can :read, User do |resource, token|
|
16
|
+
resource == user || resource.token && token == resource.token
|
17
|
+
end
|
18
|
+
|
19
|
+
can :update, User do |resource, token|
|
20
|
+
resource == user || resource.token && token == resource.token
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
<p>
|
20
20
|
<label><%= t('social_provider') %></label><br />
|
21
|
-
<%= f.select :preferred_provider, SpreeSocial::
|
21
|
+
<%= f.select :preferred_provider, SpreeSocial::OAUTH_PROVIDERS, {:include_blank => true} %>
|
22
22
|
<br/>
|
23
23
|
<span class="info">
|
24
24
|
<%= t("social_provider") %>
|
@@ -8,11 +8,11 @@
|
|
8
8
|
<td><%=submit_tag t("update") %></td>
|
9
9
|
<% end %>
|
10
10
|
<% else %>
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
<td><%= t("email") %>:</td>
|
12
|
+
<td>
|
13
|
+
<%= user.email %>
|
14
|
+
</td>
|
15
|
+
<td><p><%= link_to t('edit'), edit_account_path %></p></td>
|
16
16
|
<% end %>
|
17
17
|
</tr>
|
18
|
-
</table>
|
18
|
+
</table>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div id="existing-customer">
|
3
3
|
<h2><%= t("login_as_existing") %></h2>
|
4
4
|
<%= form_for(:user, :url => merge_user_path) do |f| %>
|
5
|
-
<%= hidden_field_tag(:user_authentication,
|
5
|
+
<%= hidden_field_tag(:user_authentication, @user.user_authentications.first.id) %>
|
6
6
|
<%= f.hidden_field(:id) %>
|
7
7
|
<div id='password-credentials'>
|
8
8
|
<p>
|
@@ -17,4 +17,4 @@
|
|
17
17
|
<p><%= submit_tag t("log_in"), :class => 'button primary'%></p>
|
18
18
|
<%= link_to t("forgot_password"), new_user_password_path %>
|
19
19
|
<% end %>
|
20
|
-
</div>
|
20
|
+
</div>
|
data/lib/spree_social.rb
CHANGED
@@ -4,41 +4,46 @@ require 'omniauth/oauth'
|
|
4
4
|
require "spree_social_hooks"
|
5
5
|
|
6
6
|
module SpreeSocial
|
7
|
-
|
8
|
-
|
9
|
-
"facebook",
|
10
|
-
"
|
11
|
-
"
|
7
|
+
|
8
|
+
OAUTH_PROVIDERS = [
|
9
|
+
["Bit.ly", "bitly"], ["Evernote", "evernote"], ["Facebook", "facebook"], ["Foursquare", "foursquare"],
|
10
|
+
["Github", "github"], ["Google", "google"] , ["Gowalla", "gowalla"], ["instagr.am", "instagram"],
|
11
|
+
["Instapaper", "instapaper"], ["LinkedIn", "linked_in"], ["37Signals (Basecamp, Campfire, etc)", "thirty_seven_signals"],
|
12
|
+
["Twitter", "twitter"], ["Vimeo", "vimeo"], ["Yahoo!", "yahoo"], ["YouTube", "you_tube"]
|
12
13
|
]
|
13
|
-
|
14
|
+
|
15
|
+
|
16
|
+
|
14
17
|
class Engine < Rails::Engine
|
15
18
|
def self.activate
|
16
19
|
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
|
17
20
|
Rails.env.production? ? require(c) : load(c)
|
18
21
|
end
|
22
|
+
Ability.register_ability(SocialAbility)
|
19
23
|
end
|
20
24
|
config.to_prepare &method(:activate).to_proc
|
21
25
|
end
|
22
|
-
|
26
|
+
|
23
27
|
# We are setting these providers up regardless
|
24
28
|
# This way we can update them when and where necessary
|
25
29
|
def self.init_provider(provider)
|
26
30
|
key, secret = nil
|
27
31
|
AuthenticationMethod.where(:environment => ::Rails.env).each do |user|
|
28
|
-
if user.preferred_provider == provider
|
32
|
+
if user.preferred_provider == provider[1]
|
29
33
|
key = user.preferred_api_key
|
30
34
|
secret = user.preferred_api_secret
|
35
|
+
puts("Loaded #{user.preferred_provider.capitalize} as authentication source")
|
31
36
|
end
|
32
37
|
end if self.table_exists?("authentication_methods") # See Below for explanation
|
33
|
-
self.setup_key_for(provider.to_sym, key, secret)
|
38
|
+
self.setup_key_for(provider[1].to_sym, key, secret)
|
34
39
|
end
|
35
|
-
|
40
|
+
|
36
41
|
def self.setup_key_for(provider, key, secret)
|
37
42
|
Devise.setup do |oa|
|
38
43
|
oa.omniauth provider.to_sym, key, secret
|
39
44
|
end
|
40
45
|
end
|
41
|
-
|
46
|
+
|
42
47
|
# Coming soon to a server near you: no restart to get new keys setup
|
43
48
|
#def self.reset_key_for(provider, *args)
|
44
49
|
# puts "ARGS: #{args}"
|
@@ -47,11 +52,11 @@ module SpreeSocial
|
|
47
52
|
# #Devise.omniauth_configs.merge!(oa_updated_provider)
|
48
53
|
# puts "OmniAuth #{provider}: #{Devise.omniauth_configs[provider.to_sym].inspect}"
|
49
54
|
#end
|
50
|
-
|
55
|
+
|
51
56
|
private
|
52
|
-
|
57
|
+
|
53
58
|
# Have to test for this cause Rails migrations and initial setups will fail
|
54
59
|
def self.table_exists?(name)
|
55
60
|
ActiveRecord::Base.connection.tables.include?(name)
|
56
61
|
end
|
57
|
-
end
|
62
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_social
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 1.0.2
|
8
|
+
- 1
|
9
|
+
version: "1.1"
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- John Brien Dilts
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-
|
17
|
+
date: 2011-04-19 00:00:00 -04:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -51,35 +50,33 @@ dependencies:
|
|
51
50
|
type: :runtime
|
52
51
|
version_requirements: *id002
|
53
52
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
53
|
+
name: oa-oauth
|
55
54
|
prerelease: false
|
56
55
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
56
|
none: false
|
58
57
|
requirements:
|
59
|
-
- - "
|
58
|
+
- - ">="
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
hash:
|
60
|
+
hash: 19
|
62
61
|
segments:
|
63
|
-
-
|
62
|
+
- 0
|
63
|
+
- 2
|
64
64
|
- 2
|
65
|
-
|
66
|
-
version: 1.2.rc
|
65
|
+
version: 0.2.2
|
67
66
|
type: :runtime
|
68
67
|
version_requirements: *id003
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
69
|
+
name: evernote
|
71
70
|
prerelease: false
|
72
71
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
72
|
none: false
|
74
73
|
requirements:
|
75
74
|
- - ">="
|
76
75
|
- !ruby/object:Gem::Version
|
77
|
-
hash:
|
76
|
+
hash: 3
|
78
77
|
segments:
|
79
78
|
- 0
|
80
|
-
|
81
|
-
- 6
|
82
|
-
version: 0.1.6
|
79
|
+
version: "0"
|
83
80
|
type: :runtime
|
84
81
|
version_requirements: *id004
|
85
82
|
description:
|
@@ -103,6 +100,7 @@ files:
|
|
103
100
|
- app/controllers/user_registrations_controller_decorator.rb
|
104
101
|
- app/controllers/user_sessions_controller_decorator.rb
|
105
102
|
- app/models/authentication_method.rb
|
103
|
+
- app/models/social_ability.rb
|
106
104
|
- app/models/user_authentication.rb
|
107
105
|
- app/models/user_decorator.rb
|
108
106
|
- app/views/admin/authentication_methods/_form.html.erb
|
@@ -118,6 +116,14 @@ files:
|
|
118
116
|
- app/views/users/merge.html.erb
|
119
117
|
- db/migrate/20101117212408_create_user_authentications.rb
|
120
118
|
- db/migrate/20101207152830_create_authentication_methods.rb
|
119
|
+
- public/images/social/aol_128.png
|
120
|
+
- public/images/social/aol_256.png
|
121
|
+
- public/images/social/aol_32.png
|
122
|
+
- public/images/social/aol_64.png
|
123
|
+
- public/images/social/campfire_128.png
|
124
|
+
- public/images/social/campfire_256.png
|
125
|
+
- public/images/social/campfire_32.png
|
126
|
+
- public/images/social/campfire_64.png
|
121
127
|
- public/images/social/facebook_128.png
|
122
128
|
- public/images/social/facebook_256.png
|
123
129
|
- public/images/social/facebook_32.png
|
@@ -134,6 +140,22 @@ files:
|
|
134
140
|
- public/images/social/linkedin_256.png
|
135
141
|
- public/images/social/linkedin_32.png
|
136
142
|
- public/images/social/linkedin_64.png
|
143
|
+
- public/images/social/myspace_128.png
|
144
|
+
- public/images/social/myspace_256.png
|
145
|
+
- public/images/social/myspace_32.png
|
146
|
+
- public/images/social/myspace_64.png
|
147
|
+
- public/images/social/openid_128.png
|
148
|
+
- public/images/social/openid_256.png
|
149
|
+
- public/images/social/openid_32.png
|
150
|
+
- public/images/social/openid_64.png
|
151
|
+
- public/images/social/presently_128.png
|
152
|
+
- public/images/social/presently_256.png
|
153
|
+
- public/images/social/presently_32.png
|
154
|
+
- public/images/social/presently_64.png
|
155
|
+
- public/images/social/thirty_seven_signals_128.png
|
156
|
+
- public/images/social/thirty_seven_signals_256.png
|
157
|
+
- public/images/social/thirty_seven_signals_32.png
|
158
|
+
- public/images/social/thirty_seven_signals_64.png
|
137
159
|
- public/images/social/twitter_128.png
|
138
160
|
- public/images/social/twitter_256.png
|
139
161
|
- public/images/social/twitter_32.png
|
@@ -175,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
197
|
requirements:
|
176
198
|
- none
|
177
199
|
rubyforge_project:
|
178
|
-
rubygems_version: 1.
|
200
|
+
rubygems_version: 1.6.2
|
179
201
|
signing_key:
|
180
202
|
specification_version: 3
|
181
203
|
summary: Adds social network login services (OAuth) to Spree
|