one_click 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
@@ -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
|