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
@@ -87,4 +87,4 @@ module OneClick
87
87
  end
88
88
  end
89
89
  end
90
- end
90
+ 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: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.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
@@ -1,7 +0,0 @@
1
- module OneClick
2
- module Authenticators
3
- class OAuth
4
-
5
- end
6
- end
7
- end