socialite 0.0.1.beta → 0.0.1.beta2

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- socialite (0.0.1.beta)
4
+ socialite (0.0.1.beta2)
5
5
  grackle (~> 0.1.10)
6
6
  haml (~> 3.1.2)
7
7
  koala (~> 1.2.0beta4)
@@ -7,22 +7,6 @@ module Socialite
7
7
 
8
8
  respond_to :html, :json
9
9
 
10
- # Render the login page.
11
- def new
12
- respond_with(@user = User.new)
13
- end
14
10
 
15
- # Destroy the session, logging out the current user.
16
- def destroy
17
- @user = current_user
18
- if logout!
19
- flash_message :notice, 'You have been logged out.'
20
- else
21
- flash_message :error, 'We had trouble signing you out.'
22
- end
23
- respond_with(@user) do |format|
24
- format.html { redirect_to default_route }
25
- end
26
- end
27
11
  end
28
12
  end
@@ -1,7 +1,5 @@
1
1
  module Socialite
2
2
  class FacebookIdentity < ActiveRecord::Base
3
- has_one :identity, :as => :api
4
- delegate :access_token, :access_token_secret, :to => :identity, :allow_nil => true
5
- include ApiWrappers::Facebook
3
+ include Models::FacebookIdentity
6
4
  end
7
5
  end
@@ -1,6 +1,5 @@
1
1
  module Socialite
2
2
  class Identity < ActiveRecord::Base
3
- belongs_to :api, :polymorphic => true, :dependent => :destroy
4
- include BaseIdentity
3
+ include Models::Identity
5
4
  end
6
5
  end
@@ -1,42 +1,10 @@
1
1
  module Socialite
2
2
  class User < ActiveRecord::Base
3
- has_many :identities, :dependent => :destroy
3
+ include Models::User
4
4
 
5
5
  has_one :facebook_identity,
6
6
  :class_name => 'Identity', :foreign_key => 'user_id', :conditions => { :provider => 'facebook' }
7
7
  has_one :twitter_identity,
8
8
  :class_name => 'Identity', :foreign_key => 'user_id', :conditions => { :provider => 'twitter' }
9
-
10
- # Returns the first linked facebook identity
11
- #
12
- # @return [FacebookIdentity] the first facebook identity
13
- def facebook
14
- self.facebook_identity.api
15
- end
16
-
17
- # Returns the first linked twitter account
18
- #
19
- # @return [TwitterIdentity] the first twitter identity
20
- def twitter
21
- self.twitter_identity.api
22
- end
23
-
24
- # Set the user's remember token
25
- #
26
- # @return [User] the current user
27
- def remember_me!
28
- self.remember_token = Socialite.generate_token
29
- save(:validate => false)
30
- end
31
-
32
- # Clear the user's remember token
33
- #
34
- # @return [User] the current user
35
- def forget_me!
36
- if persisted?
37
- self.remember_token = nil
38
- save(:validate => false)
39
- end
40
- end
41
9
  end
42
10
  end
data/config/routes.rb CHANGED
@@ -5,6 +5,6 @@ Socialite::Engine.routes.draw do
5
5
  match '/logout' => 'session#destroy', :as => :logout
6
6
 
7
7
  resource :user, :controller => 'user', :except => [:new, :create] do
8
- resources :identities#, :only => [:show, :destroy]
8
+ resources :identities
9
9
  end
10
10
  end
@@ -0,0 +1,21 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ module Socialite
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+
9
+ desc 'Generates the socialite initializer'
10
+
11
+ def self.source_root
12
+ File.join(File.dirname(__FILE__), 'templates')
13
+ end
14
+
15
+ def copy_initializer
16
+ template 'socialite.rb', 'config/initializers/socialite.rb'
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ require 'socialite'
2
+
3
+ Socialite.setup do |config|
4
+ # ==> Twitter
5
+ # config.twitter 'APP_KEY', 'APP_SECRET'
6
+
7
+ # ==> Facebook
8
+ # config.facebook 'APP_KEY', 'APP_SECRET', :scope => 'publish_stream'
9
+
10
+ if Rails.env.production?
11
+ # Configs for production mode go here
12
+ elsif Rails.env.development?
13
+ # Configs for development mode go here
14
+ end
15
+ end
data/lib/socialite.rb CHANGED
@@ -3,7 +3,7 @@ require 'omniauth/core'
3
3
  require 'omniauth/oauth'
4
4
 
5
5
  module Socialite
6
- autoload :BaseIdentity, 'socialite/base_identity'
6
+ autoload :ControllerSupport, 'socialite/controller_support'
7
7
  autoload :ServiceConfig, 'socialite/service_config'
8
8
 
9
9
  module ApiWrappers
@@ -11,6 +11,23 @@ module Socialite
11
11
  autoload :Twitter, 'socialite/api_wrappers/twitter'
12
12
  end
13
13
 
14
+ module Controllers
15
+ autoload :Helpers, 'socialite/controllers/helpers'
16
+ autoload :Identities, 'socialite/controllers/identities'
17
+ autoload :Session, 'socialite/controllers/session'
18
+ autoload :User, 'socialite/controllers/user'
19
+ end
20
+
21
+ module Helpers
22
+ autoload :Authentication, 'socialite/helpers/authentication.rb'
23
+ end
24
+
25
+ module Models
26
+ autoload :Identity, 'socialite/models/identity'
27
+ autoload :User, 'socialite/models/user'
28
+ autoload :FacebookIdentity, 'socialite/models/facebook_identity.rb'
29
+ end
30
+
14
31
  mattr_accessor :service_configs, :root_path, :mount_prefix
15
32
  @@service_configs = {}
16
33
 
@@ -33,5 +50,4 @@ module Socialite
33
50
  end
34
51
  end
35
52
 
36
- require 'socialite/controller_support'
37
53
  require 'socialite/engine'
@@ -0,0 +1,138 @@
1
+ module Socialite
2
+ module Controllers
3
+ module Helpers
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ helper_method :current_user, :user_signed_in?, :current_user?, :default_route
8
+ end
9
+
10
+ module InstanceMethods
11
+
12
+ # Set default route for redirect
13
+ #
14
+ # @param [String] the path for default redirects
15
+ # @return [String] the default path for redirect
16
+ # (see #default_route)
17
+ def default_route=(route)
18
+ @default_route = route
19
+ end
20
+
21
+ # Get default route for redirect
22
+ #
23
+ # @return [String] the default path for redirect
24
+ # (see #default_route=)
25
+ def default_route
26
+ @default_route ||= '/'
27
+ end
28
+
29
+ # Helper for supporting multiple flash messages per type
30
+ #
31
+ # @param [Symbol] the type of flash message. Common types are
32
+ # :success, :notice, :error
33
+ # @param [String] the message to attach to the flash type
34
+ # @return [Hash] all associated flash messages for this request
35
+ def flash_message(type, text)
36
+ flash[type.to_sym] ||= []
37
+ flash[type.to_sym] << text
38
+ end
39
+
40
+ protected
41
+
42
+ # Filters
43
+
44
+ # Conditional check to see ensure a current user exists
45
+ #
46
+ # @return [Boolean]
47
+ # (see #current_user?)
48
+ def ensure_user
49
+ current_user? || deny_access('You must be logged in to perform this action.')
50
+ end
51
+
52
+ # Conditional check to see ensure there is no current user
53
+ #
54
+ # @return [Boolean]
55
+ # (see #current_user?)
56
+ def ensure_no_user
57
+ !current_user? || redirect_back_or_default
58
+ end
59
+
60
+ # Utils
61
+
62
+ # Store the location URL in the session for later use.
63
+ #
64
+ # @return [Hash] the modified session object
65
+ def store_location
66
+ session[:return_to] = request.fullpath
67
+ end
68
+
69
+ # Stores the URL for the current requested action, then redirects to
70
+ # the login page.
71
+ #
72
+ # @param [String] optional flash message to pass to the user
73
+ # @note This method sets the redirect path, but does not return false.
74
+ # Meaning you can perform actions after this method is invoked.
75
+ def deny_access(message=nil)
76
+ store_location
77
+ flash_message :notice, message if message.present?
78
+ redirect_to login_path
79
+ end
80
+
81
+ # Conditional redirect to handle an empty return_to path. If return_to
82
+ # is empty, the request is redirected to the default path
83
+ #
84
+ # @param [String] path to use as the default redirect location
85
+ # @return [Hash] the modified session hash
86
+ def redirect_back_or_default(default=nil)
87
+ default = self.default_route
88
+ redirect_to(session[:return_to] || default)
89
+ session[:return_to] = nil
90
+ end
91
+
92
+ # Fetch the User model associated with the current session.
93
+ #
94
+ # @return [User]
95
+ # (see #current_user=)
96
+ def current_user
97
+ @current_user ||= if session[:user_id]
98
+ User.find(session[:user_id])
99
+ elsif cookies[:remember_token]
100
+ User.find_by_remember_token(cookies[:remember_token])
101
+ end
102
+ end
103
+
104
+ # Assign the User model associated with the current session.
105
+ #
106
+ # @return [User]
107
+ # (see #current_user)
108
+ def current_user=(user)
109
+ user.tap do |user|
110
+ user.remember_me!
111
+ session[:user_id] = user.id
112
+ cookies[:remember_token] = user.remember_token
113
+ end
114
+ end
115
+
116
+ # Accessor method for checking if a user is currently signed in
117
+ #
118
+ # @return [Boolean]
119
+ # (see #current_user)
120
+ def user_signed_in?
121
+ !!current_user
122
+ end
123
+ alias_method :current_user?, :user_signed_in?
124
+
125
+ # Destroy the current user session, effectively logging them out upon
126
+ # the next request.
127
+ #
128
+ # @return [Hash] the modified session object
129
+ def logout!
130
+ session[:user_id] = nil
131
+ session[:return_to] = nil
132
+ @current_user = nil
133
+ cookies.delete(:remember_token)
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -22,11 +22,11 @@ module Socialite
22
22
  end
23
23
 
24
24
  ActiveSupport.on_load(:action_controller) do
25
- include Socialite::ControllerSupport
25
+ include Socialite::Controllers::Helpers
26
26
  end
27
27
 
28
28
  ActiveSupport.on_load(:action_view) do
29
- include Socialite::AuthenticationHelper
29
+ include Socialite::Helpers::Authentication
30
30
  end
31
31
  end
32
32
  end
@@ -0,0 +1,17 @@
1
+ module Socialite
2
+ module Helpers
3
+ module Authentication
4
+ def identity_request_path(options={})
5
+ [Socialite.mount_prefix, 'auth', options[:service]].join('/')
6
+ end
7
+
8
+ def twitter_login_button
9
+ content_tag(:a, content_tag(:span, 'Sign in with Twitter'), :class => 'socialite_button twitter', :href => identity_request_path(:service => 'twitter'), :rel => 'external')
10
+ end
11
+
12
+ def facebook_login_button
13
+ content_tag(:a, content_tag(:span, 'Sign in with Facebook'), :class => 'socialite_button facebook', :href => identity_request_path(:service => 'facebook'), :rel => 'external')
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ module Socialite
2
+ module Models
3
+ module FacebookIdentity
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ include Socialite::ApiWrappers::Facebook
8
+
9
+ has_one :identity, :as => :api
10
+ delegate :access_token, :access_token_secret, :to => :identity, :allow_nil => true
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,99 @@
1
+ module Socialite
2
+ module Models
3
+ module Identity
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ belongs_to :api, :polymorphic => true, :dependent => :destroy
8
+ belongs_to :user
9
+ serialize :auth_hash
10
+
11
+ # Ensure that before validation happens that the provider
12
+ # database column matches what is inside of the auth_hash
13
+ # dataset.
14
+ before_validation do |identity|
15
+ if identity.auth_hash.present?
16
+ identity.provider = identity.auth_hash.delete('provider') if identity.provider.blank?
17
+ identity.unique_id = identity.auth_hash.delete('uid') if identity.unique_id.blank?
18
+ end
19
+ end
20
+
21
+ # Ensure each user has only a single identity per provider type
22
+ validates :provider,
23
+ :uniqueness => {:scope => :user_id, :case_sensitive => false},
24
+ :presence => true
25
+
26
+ # Ensure an identity is never reused by another account
27
+ validates :unique_id,
28
+ :uniqueness => {:scope => :provider},
29
+ :presence => true
30
+
31
+ # Ensure an associated user exists before creating the identity
32
+ # validates_associated :user
33
+ end
34
+
35
+ module ClassMethods
36
+ # Finder method that finds the matching Provider and Unique ID or
37
+ # initializes a new, unsaved, object.
38
+ #
39
+ # @params [Hash] the OAuth authentication hash
40
+ # @returns [Identity]
41
+ def find_or_initialize_by_oauth(auth_hash)
42
+ identity = where(:provider => auth_hash['provider'], :unique_id => auth_hash['uid']).first || new
43
+ identity.auth_hash = auth_hash
44
+ identity
45
+ end
46
+ end
47
+
48
+ module InstanceMethods
49
+ # Method that maps uid to unique_id which is what we store it as.
50
+ #
51
+ # @returns [String]
52
+ # def uid=(new_uid)
53
+ # self.unique_id = new_uid
54
+ # end
55
+
56
+ # Convenience method for accessing the OAuth access token
57
+ #
58
+ # @returns [String] OAuth access token
59
+ # (see #credentials)
60
+ def access_token
61
+ credentials['token']
62
+ end
63
+
64
+ # Convenience method for accessing the OAuth access token secret
65
+ #
66
+ # @returns [String] OAuth access token secret
67
+ # (see #credentials)
68
+ def access_token_secret
69
+ credentials['secret']
70
+ end
71
+
72
+ # Convenience method for accessing the OAuth credentials sub-hash
73
+ #
74
+ # @returns [Hash] OAuth credentials sub-hash
75
+ # (see #access_token)
76
+ # (see #access_token_secret)
77
+ def credentials
78
+ auth_hash['credentials']
79
+ end
80
+
81
+ # Convenience method for accessing the nickname, which is typically
82
+ # set to the login name used for that provider.
83
+ #
84
+ # @returns [String] user nickname for the provider identity
85
+ def nickname
86
+ user_info['nickname']
87
+ end
88
+
89
+ # Convenience method for accessing the user information from the
90
+ # OAuth provider.
91
+ #
92
+ # @returns [Hash] the user information sub-hash
93
+ def user_info
94
+ auth_hash['user_info']
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,50 @@
1
+ module Socialite
2
+ module Models
3
+ module User
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ has_many :identities, :dependent => :destroy
8
+
9
+ # has_one :facebook_identity,
10
+ # :class_name => 'Identity', :foreign_key => 'user_id', :conditions => { :provider => 'facebook' }
11
+ # has_one :twitter_identity,
12
+ # :class_name => 'Identity', :foreign_key => 'user_id', :conditions => { :provider => 'twitter' }
13
+ end
14
+
15
+ module InstanceMethods
16
+ # Returns the first linked facebook identity
17
+ #
18
+ # @return [FacebookIdentity] the first facebook identity
19
+ def facebook
20
+ self.facebook_identity.api
21
+ end
22
+
23
+ # Returns the first linked twitter account
24
+ #
25
+ # @return [TwitterIdentity] the first twitter identity
26
+ def twitter
27
+ self.twitter_identity.api
28
+ end
29
+
30
+ # Set the user's remember token
31
+ #
32
+ # @return [User] the current user
33
+ def remember_me!
34
+ self.remember_token = Socialite.generate_token
35
+ save(:validate => false)
36
+ end
37
+
38
+ # Clear the user's remember token
39
+ #
40
+ # @return [User] the current user
41
+ def forget_me!
42
+ if persisted?
43
+ self.remember_token = nil
44
+ save(:validate => false)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module Socialite
2
- VERSION = '0.0.1.beta'
2
+ VERSION = '0.0.1.beta2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: socialite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.beta
4
+ version: 0.0.1.beta2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-09-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70144409985160 !ruby/object:Gem::Requirement
16
+ requirement: &70251593638160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70144409985160
24
+ version_requirements: *70251593638160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sass-rails
27
- requirement: &70144409983220 !ruby/object:Gem::Requirement
27
+ requirement: &70251593636940 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.1.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70144409983220
35
+ version_requirements: *70251593636940
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: simple_form
38
- requirement: &70144409981420 !ruby/object:Gem::Requirement
38
+ requirement: &70251593635780 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.5.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70144409981420
46
+ version_requirements: *70251593635780
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: haml
49
- requirement: &70144409979300 !ruby/object:Gem::Requirement
49
+ requirement: &70251593634700 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 3.1.2
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70144409979300
57
+ version_requirements: *70251593634700
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: oa-core
60
- requirement: &70144409975540 !ruby/object:Gem::Requirement
60
+ requirement: &70251593633480 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.3.0.rc3
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70144409975540
68
+ version_requirements: *70251593633480
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: oa-oauth
71
- requirement: &70144409972360 !ruby/object:Gem::Requirement
71
+ requirement: &70251593632660 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.3.0.rc3
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70144409972360
79
+ version_requirements: *70251593632660
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: koala
82
- requirement: &70144409970280 !ruby/object:Gem::Requirement
82
+ requirement: &70251593631600 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.2.0beta4
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70144409970280
90
+ version_requirements: *70251593631600
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: grackle
93
- requirement: &70144409969040 !ruby/object:Gem::Requirement
93
+ requirement: &70251593630500 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 0.1.10
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70144409969040
101
+ version_requirements: *70251593630500
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: sqlite3
104
- requirement: &70144409967980 !ruby/object:Gem::Requirement
104
+ requirement: &70251593629640 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70144409967980
112
+ version_requirements: *70251593629640
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: yard
115
- requirement: &70144409966300 !ruby/object:Gem::Requirement
115
+ requirement: &70251593628640 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70144409966300
123
+ version_requirements: *70251593628640
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rdiscount
126
- requirement: &70144409963460 !ruby/object:Gem::Requirement
126
+ requirement: &70251593627640 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70144409963460
134
+ version_requirements: *70251593627640
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rspec-rails
137
- requirement: &70144409961560 !ruby/object:Gem::Requirement
137
+ requirement: &70251593626460 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ~>
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: 2.6.1
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70144409961560
145
+ version_requirements: *70251593626460
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: factory_girl
148
- requirement: &70144409959880 !ruby/object:Gem::Requirement
148
+ requirement: &70251593625280 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ~>
@@ -153,10 +153,10 @@ dependencies:
153
153
  version: 2.1.0
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *70144409959880
156
+ version_requirements: *70251593625280
157
157
  - !ruby/object:Gem::Dependency
158
158
  name: shoulda-matchers
159
- requirement: &70144409958200 !ruby/object:Gem::Requirement
159
+ requirement: &70251593624400 !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements:
162
162
  - - ! '>='
@@ -164,10 +164,10 @@ dependencies:
164
164
  version: '0'
165
165
  type: :development
166
166
  prerelease: false
167
- version_requirements: *70144409958200
167
+ version_requirements: *70251593624400
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: cucumber-rails
170
- requirement: &70144409955920 !ruby/object:Gem::Requirement
170
+ requirement: &70251593623300 !ruby/object:Gem::Requirement
171
171
  none: false
172
172
  requirements:
173
173
  - - ~>
@@ -175,10 +175,10 @@ dependencies:
175
175
  version: 1.0.6
176
176
  type: :development
177
177
  prerelease: false
178
- version_requirements: *70144409955920
178
+ version_requirements: *70251593623300
179
179
  - !ruby/object:Gem::Dependency
180
180
  name: database_cleaner
181
- requirement: &70144409953880 !ruby/object:Gem::Requirement
181
+ requirement: &70251593622420 !ruby/object:Gem::Requirement
182
182
  none: false
183
183
  requirements:
184
184
  - - ! '>='
@@ -186,10 +186,10 @@ dependencies:
186
186
  version: 0.6.7
187
187
  type: :development
188
188
  prerelease: false
189
- version_requirements: *70144409953880
189
+ version_requirements: *70251593622420
190
190
  - !ruby/object:Gem::Dependency
191
191
  name: selenium-webdriver
192
- requirement: &70144409951620 !ruby/object:Gem::Requirement
192
+ requirement: &70251593621060 !ruby/object:Gem::Requirement
193
193
  none: false
194
194
  requirements:
195
195
  - - ! '>='
@@ -197,10 +197,10 @@ dependencies:
197
197
  version: 2.4.0
198
198
  type: :development
199
199
  prerelease: false
200
- version_requirements: *70144409951620
200
+ version_requirements: *70251593621060
201
201
  - !ruby/object:Gem::Dependency
202
202
  name: launchy
203
- requirement: &70144409950080 !ruby/object:Gem::Requirement
203
+ requirement: &70251593619900 !ruby/object:Gem::Requirement
204
204
  none: false
205
205
  requirements:
206
206
  - - ~>
@@ -208,7 +208,7 @@ dependencies:
208
208
  version: 2.0.5
209
209
  type: :development
210
210
  prerelease: false
211
- version_requirements: *70144409950080
211
+ version_requirements: *70251593619900
212
212
  description: Rails engine supporting multiple auth providers per user.
213
213
  email: justin.smestad@gmail.com
214
214
  executables: []
@@ -232,7 +232,6 @@ files:
232
232
  - app/controllers/socialite/identities_controller.rb
233
233
  - app/controllers/socialite/session_controller.rb
234
234
  - app/controllers/socialite/user_controller.rb
235
- - app/helpers/socialite/authentication_helper.rb
236
235
  - app/models/socialite/facebook_identity.rb
237
236
  - app/models/socialite/identity.rb
238
237
  - app/models/socialite/user.rb
@@ -262,12 +261,17 @@ files:
262
261
  - features/support/omniauth.rb
263
262
  - features/support/paths.rb
264
263
  - features/support/selectors.rb
264
+ - lib/generators/socialite/install_generator.rb
265
+ - lib/generators/socialite/templates/socialite.rb
265
266
  - lib/socialite.rb
266
267
  - lib/socialite/api_wrappers/facebook.rb
267
268
  - lib/socialite/api_wrappers/twitter.rb
268
- - lib/socialite/base_identity.rb
269
- - lib/socialite/controller_support.rb
269
+ - lib/socialite/controllers/helpers.rb
270
270
  - lib/socialite/engine.rb
271
+ - lib/socialite/helpers/authentication.rb
272
+ - lib/socialite/models/facebook_identity.rb
273
+ - lib/socialite/models/identity.rb
274
+ - lib/socialite/models/user.rb
271
275
  - lib/socialite/service_config.rb
272
276
  - lib/socialite/version.rb
273
277
  - lib/tasks/.gitkeep
@@ -334,7 +338,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
334
338
  version: '0'
335
339
  segments:
336
340
  - 0
337
- hash: -1102070336379902951
341
+ hash: 3505192399675819770
338
342
  required_rubygems_version: !ruby/object:Gem::Requirement
339
343
  none: false
340
344
  requirements:
@@ -1,15 +0,0 @@
1
- module Socialite
2
- module AuthenticationHelper
3
- def identity_request_path(options={})
4
- [Socialite.mount_prefix, 'auth', options[:service]].join('/')
5
- end
6
-
7
- def twitter_login_button
8
- content_tag(:a, content_tag(:span, 'Sign in with Twitter'), :class => 'socialite_button twitter', :href => identity_request_path(:service => 'twitter'), :rel => 'external')
9
- end
10
-
11
- def facebook_login_button
12
- content_tag(:a, content_tag(:span, 'Sign in with Facebook'), :class => 'socialite_button facebook', :href => identity_request_path(:service => 'facebook'), :rel => 'external')
13
- end
14
- end
15
- end
@@ -1,96 +0,0 @@
1
- module Socialite
2
- module BaseIdentity
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- belongs_to :user
7
- serialize :auth_hash
8
-
9
- # Ensure that before validation happens that the provider
10
- # database column matches what is inside of the auth_hash
11
- # dataset.
12
- before_validation do |identity|
13
- if identity.auth_hash.present?
14
- identity.provider = identity.auth_hash.delete('provider') if identity.provider.blank?
15
- identity.unique_id = identity.auth_hash.delete('uid') if identity.unique_id.blank?
16
- end
17
- end
18
-
19
- # Ensure each user has only a single identity per provider type
20
- validates :provider,
21
- :uniqueness => {:scope => :user_id, :case_sensitive => false},
22
- :presence => true
23
-
24
- # Ensure an identity is never reused by another account
25
- validates :unique_id,
26
- :uniqueness => {:scope => :provider},
27
- :presence => true
28
-
29
- # Ensure an associated user exists before creating the identity
30
- # validates_associated :user
31
- end
32
-
33
- module ClassMethods
34
- # Finder method that finds the matching Provider and Unique ID or
35
- # initializes a new, unsaved, object.
36
- #
37
- # @params [Hash] the OAuth authentication hash
38
- # @returns [Identity]
39
- def find_or_initialize_by_oauth(auth_hash)
40
- identity = where(:provider => auth_hash['provider'], :unique_id => auth_hash['uid']).first || new
41
- identity.auth_hash = auth_hash
42
- identity
43
- end
44
- end
45
-
46
- module InstanceMethods
47
- # Method that maps uid to unique_id which is what we store it as.
48
- #
49
- # @returns [String]
50
- # def uid=(new_uid)
51
- # self.unique_id = new_uid
52
- # end
53
-
54
- # Convenience method for accessing the OAuth access token
55
- #
56
- # @returns [String] OAuth access token
57
- # (see #credentials)
58
- def access_token
59
- credentials['token']
60
- end
61
-
62
- # Convenience method for accessing the OAuth access token secret
63
- #
64
- # @returns [String] OAuth access token secret
65
- # (see #credentials)
66
- def access_token_secret
67
- credentials['secret']
68
- end
69
-
70
- # Convenience method for accessing the OAuth credentials sub-hash
71
- #
72
- # @returns [Hash] OAuth credentials sub-hash
73
- # (see #access_token)
74
- # (see #access_token_secret)
75
- def credentials
76
- auth_hash['credentials']
77
- end
78
-
79
- # Convenience method for accessing the nickname, which is typically
80
- # set to the login name used for that provider.
81
- #
82
- # @returns [String] user nickname for the provider identity
83
- def nickname
84
- user_info['nickname']
85
- end
86
-
87
- # Convenience method for accessing the user information from the
88
- # OAuth provider.
89
- #
90
- # @returns [Hash] the user information sub-hash
91
- def user_info
92
- auth_hash['user_info']
93
- end
94
- end
95
- end
96
- end
@@ -1,136 +0,0 @@
1
- module Socialite
2
- module ControllerSupport
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- helper_method :current_user, :user_signed_in?, :current_user?, :default_route
7
- end
8
-
9
- module InstanceMethods
10
-
11
- # Set default route for redirect
12
- #
13
- # @param [String] the path for default redirects
14
- # @return [String] the default path for redirect
15
- # (see #default_route)
16
- def default_route=(route)
17
- @default_route = route
18
- end
19
-
20
- # Get default route for redirect
21
- #
22
- # @return [String] the default path for redirect
23
- # (see #default_route=)
24
- def default_route
25
- @default_route ||= '/'
26
- end
27
-
28
- # Helper for supporting multiple flash messages per type
29
- #
30
- # @param [Symbol] the type of flash message. Common types are
31
- # :success, :notice, :error
32
- # @param [String] the message to attach to the flash type
33
- # @return [Hash] all associated flash messages for this request
34
- def flash_message(type, text)
35
- flash[type.to_sym] ||= []
36
- flash[type.to_sym] << text
37
- end
38
-
39
- protected
40
-
41
- # Filters
42
-
43
- # Conditional check to see ensure a current user exists
44
- #
45
- # @return [Boolean]
46
- # (see #current_user?)
47
- def ensure_user
48
- current_user? || deny_access('You must be logged in to perform this action.')
49
- end
50
-
51
- # Conditional check to see ensure there is no current user
52
- #
53
- # @return [Boolean]
54
- # (see #current_user?)
55
- def ensure_no_user
56
- !current_user? || redirect_back_or_default
57
- end
58
-
59
- # Utils
60
-
61
- # Store the location URL in the session for later use.
62
- #
63
- # @return [Hash] the modified session object
64
- def store_location
65
- session[:return_to] = request.fullpath
66
- end
67
-
68
- # Stores the URL for the current requested action, then redirects to
69
- # the login page.
70
- #
71
- # @param [String] optional flash message to pass to the user
72
- # @note This method sets the redirect path, but does not return false.
73
- # Meaning you can perform actions after this method is invoked.
74
- def deny_access(message=nil)
75
- store_location
76
- flash_message :notice, message if message.present?
77
- redirect_to login_path
78
- end
79
-
80
- # Conditional redirect to handle an empty return_to path. If return_to
81
- # is empty, the request is redirected to the default path
82
- #
83
- # @param [String] path to use as the default redirect location
84
- # @return [Hash] the modified session hash
85
- def redirect_back_or_default(default=nil)
86
- default = self.default_route
87
- redirect_to(session[:return_to] || default)
88
- session[:return_to] = nil
89
- end
90
-
91
- # Fetch the User model associated with the current session.
92
- #
93
- # @return [User]
94
- # (see #current_user=)
95
- def current_user
96
- @current_user ||= if session[:user_id]
97
- User.find(session[:user_id])
98
- elsif cookies[:remember_token]
99
- User.find_by_remember_token(cookies[:remember_token])
100
- end
101
- end
102
-
103
- # Assign the User model associated with the current session.
104
- #
105
- # @return [User]
106
- # (see #current_user)
107
- def current_user=(user)
108
- user.tap do |user|
109
- user.remember_me!
110
- session[:user_id] = user.id
111
- cookies[:remember_token] = user.remember_token
112
- end
113
- end
114
-
115
- # Accessor method for checking if a user is currently signed in
116
- #
117
- # @return [Boolean]
118
- # (see #current_user)
119
- def user_signed_in?
120
- !!current_user
121
- end
122
- alias_method :current_user?, :user_signed_in?
123
-
124
- # Destroy the current user session, effectively logging them out upon
125
- # the next request.
126
- #
127
- # @return [Hash] the modified session object
128
- def logout!
129
- session[:user_id] = nil
130
- session[:return_to] = nil
131
- @current_user = nil
132
- cookies.delete(:remember_token)
133
- end
134
- end
135
- end
136
- end