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
@@ -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