one_click 0.1.1 → 0.1.2
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,62 @@
|
|
1
|
+
class SessionsController < ApplicationController
|
2
|
+
|
3
|
+
before_filter :requires_logout, :except => :logout
|
4
|
+
before_filter :requires_login, :only => :logout
|
5
|
+
|
6
|
+
def login
|
7
|
+
session[:one_click] ||= {}
|
8
|
+
|
9
|
+
session[:one_click][:service] = params[:service]
|
10
|
+
session[:one_click][:referer] = referer
|
11
|
+
|
12
|
+
login_object = OneClick.login(session[:one_click][:service], { :callback => url_for(:action => 'callback') })
|
13
|
+
|
14
|
+
if login_object
|
15
|
+
# Store whatever's needed in the session
|
16
|
+
session[:one_click][:request] = login_object[:request]
|
17
|
+
|
18
|
+
redirect_to login_object[:url]
|
19
|
+
else
|
20
|
+
session[:one_click] = nil
|
21
|
+
redirect_to referer
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def callback
|
26
|
+
callback_object = OneClick.callback(session[:one_click][:service], { :request => session[:one_click][:request], :params => params })
|
27
|
+
|
28
|
+
if callback_object
|
29
|
+
id = callback_object[:id]
|
30
|
+
data = callback_object[:data]
|
31
|
+
access = callback_object[:access]
|
32
|
+
|
33
|
+
service_class = session[:one_click][:service].classify.constantize
|
34
|
+
service = service_class.find_by_service_id id
|
35
|
+
|
36
|
+
user = service.user if service
|
37
|
+
|
38
|
+
if !user
|
39
|
+
User.create_with_service(session[:one_click][:service], data, access)
|
40
|
+
else
|
41
|
+
user.send(session[:one_click][:service]).update_access access
|
42
|
+
user.send(session[:one_click][:service]).update_data data
|
43
|
+
end
|
44
|
+
|
45
|
+
OneClick.store_session(session, session[:one_click][:service], callback_object[:access])
|
46
|
+
OneClick.store_cookies(cookies, session[:one_click][:service], callback_object[:access])
|
47
|
+
end
|
48
|
+
|
49
|
+
redirect_to session[:one_click][:referer]
|
50
|
+
end
|
51
|
+
|
52
|
+
def logout
|
53
|
+
session[:one_click] = nil
|
54
|
+
|
55
|
+
cookies.delete :one_click_service
|
56
|
+
cookies.delete :one_click_access_token
|
57
|
+
cookies.delete :one_click_access_secret
|
58
|
+
|
59
|
+
redirect_to referer
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module OneClick
|
2
|
+
module BasicUser
|
3
|
+
module ClassMethods
|
4
|
+
def self.create_with_service(service, data, access)
|
5
|
+
service_class = service.classify.constantize
|
6
|
+
|
7
|
+
user = self.create
|
8
|
+
|
9
|
+
service_class.create_with_data user, data, access
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
class Twitter
|
2
|
+
|
3
|
+
include MongoMapper::Document
|
4
|
+
|
5
|
+
# Twitter data
|
6
|
+
key :service_id, Integer, :required => true, :allow_blank => false, :unique => true, :index => true
|
7
|
+
key :screen_name, String
|
8
|
+
key :location, String
|
9
|
+
key :description, String
|
10
|
+
key :url, String
|
11
|
+
|
12
|
+
key :friends_count, Integer
|
13
|
+
key :followers_count, Integer
|
14
|
+
key :statuses_count, Integer
|
15
|
+
key :favourites_count, Integer
|
16
|
+
|
17
|
+
key :profile_image_url, String
|
18
|
+
key :profile_background_color, String
|
19
|
+
key :profile_text_color, String
|
20
|
+
key :profile_link_color, String
|
21
|
+
key :profile_sidebar_fill_color, String
|
22
|
+
key :profile_sidebar_border_color, String
|
23
|
+
key :profile_background_image_url, String
|
24
|
+
key :profile_background_tile, Boolean
|
25
|
+
|
26
|
+
key :utc_offset, String
|
27
|
+
key :time_zone, String
|
28
|
+
key :created_at, Time
|
29
|
+
|
30
|
+
key :protected, Boolean
|
31
|
+
key :notifications, Boolean
|
32
|
+
key :verified, Boolean
|
33
|
+
|
34
|
+
# OAuth tokens
|
35
|
+
key :access_token, String
|
36
|
+
key :access_secret, String
|
37
|
+
|
38
|
+
# Relations
|
39
|
+
key :user_id, ObjectId
|
40
|
+
|
41
|
+
# Associations
|
42
|
+
belongs_to :user
|
43
|
+
|
44
|
+
def client
|
45
|
+
OneClick.authenticated_client(self.service, { :access => { :token => self.access_token, :secret => self.access_secret }})
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.create_with_data(user, data, access)
|
49
|
+
twitter = self.create
|
50
|
+
|
51
|
+
twitter.user = user
|
52
|
+
|
53
|
+
twitter.update_access access, twitter, false
|
54
|
+
twitter.update_data data, twitter, false
|
55
|
+
|
56
|
+
twitter.save
|
57
|
+
end
|
58
|
+
|
59
|
+
def update_access(access, object=self, save=true)
|
60
|
+
object.access_token = access[:token]
|
61
|
+
object.access_secret = access[:secret]
|
62
|
+
|
63
|
+
object.save if save
|
64
|
+
end
|
65
|
+
|
66
|
+
def update_data(data, object=self, save=true)
|
67
|
+
object.service_id = data['id']
|
68
|
+
object.screen_name = data['screen_name']
|
69
|
+
object.location = data['location']
|
70
|
+
object.description = data['description']
|
71
|
+
object.url = data['url']
|
72
|
+
|
73
|
+
object.friends_count = data['friends_count']
|
74
|
+
object.followers_count = data['followers_count']
|
75
|
+
object.statuses_count = data['statuses_count']
|
76
|
+
object.favourites_count = data['favourites_count']
|
77
|
+
|
78
|
+
object.profile_image_url = data['profile_image_url']
|
79
|
+
object.profile_background_color = data['profile_background_color']
|
80
|
+
object.profile_text_color = data['profile_text_color']
|
81
|
+
object.profile_link_color = data['profile_link_color']
|
82
|
+
object.profile_sidebar_fill_color = data['profile_sidebar_fill_color']
|
83
|
+
object.profile_sidebar_border_color = data['profile_sidebar_border_color']
|
84
|
+
object.profile_background_image_url = data['profile_background_image_url']
|
85
|
+
object.profile_background_tile = data['profile_background_tile']
|
86
|
+
|
87
|
+
object.utc_offset = data['utc_offset']
|
88
|
+
object.time_zone = data['time_zone']
|
89
|
+
object.created_at = data['created_at']
|
90
|
+
|
91
|
+
object.protected = data['protected']
|
92
|
+
object.notifications = data['notifications']
|
93
|
+
object.verified = data['verified']
|
94
|
+
|
95
|
+
object.save if save
|
96
|
+
end
|
97
|
+
|
98
|
+
def service
|
99
|
+
'twitter'
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
2
|
+
|
3
|
+
map.login '/login/callback', :controller => :sessions, :action => 'callback'
|
4
|
+
map.login '/login/:service', :controller => :sessions, :action => 'login'
|
5
|
+
map.login '/logout', :controller => :sessions, :action => 'logout'
|
6
|
+
|
7
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: one_click
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Arjen Oosterkamp
|
@@ -32,9 +32,12 @@ extra_rdoc_files:
|
|
32
32
|
- VERSION
|
33
33
|
files:
|
34
34
|
- lib/one_click/controller_extensions.rb
|
35
|
-
- lib/one_click/authenticators/oauth_authenticator.rb
|
36
35
|
- lib/one_click/services/twitter_service.rb
|
37
36
|
- lib/one_click.rb
|
37
|
+
- app/models/one_click/basic_user.rb
|
38
|
+
- app/models/twitter.rb
|
39
|
+
- app/controllers/sessions_controller.rb
|
40
|
+
- config/routes.rb
|
38
41
|
- Manifest
|
39
42
|
- Rakefile
|
40
43
|
- README.rdoc
|