one_click 0.1.0

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/Manifest ADDED
@@ -0,0 +1,13 @@
1
+ README.rdoc
2
+ Rakefile
3
+ VERSION
4
+ app/controllers/sessions_controller.rb
5
+ app/models/one_click_twitter_service.rb
6
+ app/models/one_click_user.rb
7
+ app/models/twitter.rb
8
+ config/routes.rb
9
+ lib/one_click.rb
10
+ lib/one_click/authenticators/oauth_authenticator.rb
11
+ lib/one_click/controller_extensions.rb
12
+ lib/one_click/services/twitter_service.rb
13
+ Manifest
data/README.rdoc ADDED
@@ -0,0 +1,64 @@
1
+ = OneClick
2
+
3
+ Let your users register with one click using open standards for authenticating. Currently supporting only Twitter. Tested in Rails 2.3.5. Should work in all 2.3 version. Probably not Rails 3.
4
+
5
+ Currently supporting only MongoMapper! Will support ActiveRecord and more platforms (Facebook, OpenID) eventually.
6
+
7
+ == Requirements
8
+
9
+ Needs twitter_oauth.
10
+
11
+ sudo gem install twitter_oauth
12
+
13
+ == Installation
14
+
15
+ sudo gem install one_click
16
+
17
+ environment.rb
18
+
19
+ config.gem "one_click"
20
+
21
+ === Configuration
22
+
23
+ Add an initializer in config/initializers for example one_click_config.rb;
24
+
25
+ OneClick.config = {
26
+ :twitter => {
27
+ :key => 'your key',
28
+ :secret => 'your secret'
29
+ }
30
+ }
31
+
32
+ === User Model
33
+
34
+ User model needs to extend OneClickUser and associate twitter (one), like so:
35
+
36
+ class User < OneClickUser
37
+ one :twitter
38
+ end
39
+
40
+ The Twitter object is automatically maintained by the gem.
41
+
42
+ == Usage
43
+
44
+ Using the gem is easy. There are three defined routes:
45
+
46
+ map.login '/login/callback', :controller => :sessions, :action => 'callback'
47
+ map.login '/login/:service', :controller => :sessions, :action => 'login'
48
+ map.login '/logout', :controller => :sessions, :action => 'logout'
49
+
50
+ Access /login/twitter to login with Twitter. Once logged in, a new User is created with a twitter profile associated if it didn't already exist. The created User is blank.
51
+
52
+ To access the currently logged in user simply call 'current_user'.
53
+
54
+ There are three helper methods; 'requires_login', 'requires_logout' and 'logged_in?'. So to set up a page which requires login simply use a before filter;
55
+
56
+ class AdminController < ApplicationController
57
+
58
+ before_filter :requires_login
59
+
60
+ def index
61
+ # Something nifty
62
+ end
63
+
64
+ end
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('one_click', '0.1.0') do |p|
6
+ p.description = "Let your users register with one click using open standards for authenticating"
7
+ p.url = "http://github.com/ArosME/one_click"
8
+ p.author = "Arjen Oosterkamp"
9
+ p.email = "mail@arjen.me"
10
+ p.ignore_pattern = ["tmp/*", "script/*"]
11
+ p.development_dependencies = []
12
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1
@@ -0,0 +1,7 @@
1
+ module OneClick
2
+ module Authenticators
3
+ class OAuth
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,56 @@
1
+ module OneClick
2
+ module ControllerExtensions
3
+ def self.included(base)
4
+ base.send :helper_method, :current_user, :referer, :requires_login, :requires_logout, :logged_in?
5
+ end
6
+
7
+ protected
8
+
9
+ def current_service
10
+ unless @current_service
11
+ if !session[:one_click] || !session[:one_click][:access]
12
+ service = cookies[:one_click_service]
13
+
14
+ access = {
15
+ :token => cookies[:one_click_access_token],
16
+ :secret => cookies[:one_click_access_secret]
17
+ }
18
+
19
+ OneClick.store_session(session, service, access) if service && access
20
+ end
21
+
22
+ if session[:one_click]
23
+ @current_service = OneClick.get_service_model(session[:one_click][:service], { :access => session[:one_click][:access] }) if session[:one_click][:service] && session[:one_click][:access]
24
+ end
25
+ end
26
+
27
+ @current_service
28
+ end
29
+
30
+ def current_user
31
+ unless @current_user
32
+ @current_user = current_service.user if current_service
33
+ end
34
+
35
+ @current_user
36
+ end
37
+
38
+ def logged_in?
39
+ !!current_user
40
+ end
41
+
42
+ def requires_login
43
+ redirect_to root_url if !logged_in?
44
+ end
45
+
46
+ def requires_logout
47
+ redirect_to root_url if logged_in?
48
+ end
49
+
50
+ def referer
51
+ return request.referer ? request.referer : root_url
52
+ end
53
+ end
54
+ end
55
+
56
+ ActionController::Base.send(:include, OneClick::ControllerExtensions)
@@ -0,0 +1,90 @@
1
+ require 'twitter_oauth'
2
+
3
+ module OneClick
4
+ module Services
5
+ class TwitterService
6
+ def initialize(config)
7
+ @config = config
8
+ end
9
+
10
+ def config
11
+ @config
12
+ end
13
+
14
+ def key
15
+ config[:key]
16
+ end
17
+
18
+ def secret
19
+ config[:secret]
20
+ end
21
+
22
+ def client
23
+ @client ||= TwitterOAuth::Client.new(
24
+ :consumer_key => key,
25
+ :consumer_secret => secret
26
+ )
27
+ end
28
+
29
+ def authenticated_client(options={})
30
+ access = options[:access]
31
+
32
+ return false if !access
33
+
34
+ client = TwitterOAuth::Client.new(
35
+ :consumer_key => key,
36
+ :consumer_secret => secret,
37
+ :token => access[:token],
38
+ :secret => access[:secret]
39
+ )
40
+ end
41
+
42
+ def login(options={})
43
+ callback = options[:callback]
44
+
45
+ request_token = client.request_token(:oauth_callback => callback)
46
+
47
+ return_object = {
48
+ :request => {
49
+ :token => request_token.token,
50
+ :secret => request_token.secret
51
+ },
52
+ :url => request_token.authorize_url
53
+ }
54
+ end
55
+
56
+ # Attemps to authorize with Twitter
57
+ def callback(options = {})
58
+ request = options[:request]
59
+ verifier = options[:params][:oauth_verifier]
60
+
61
+ return false if !request || !verifier
62
+
63
+ access_token = client.authorize(
64
+ request[:token],
65
+ request[:secret],
66
+ :oauth_verifier => verifier
67
+ )
68
+
69
+ if client.authorized?
70
+ return return_object = {
71
+ :id => client.info['id'],
72
+ :data => client.info,
73
+ :access => {
74
+ :token => access_token.token,
75
+ :secret => access_token.secret
76
+ }
77
+ }
78
+ else
79
+ return false
80
+ end
81
+ end
82
+
83
+ def get_service_model(options={})
84
+ access = options[:access]
85
+
86
+ Twitter.find_by_access_token_and_access_secret access[:token], access[:secret]
87
+ end
88
+ end
89
+ end
90
+ end
data/lib/one_click.rb ADDED
@@ -0,0 +1,52 @@
1
+ require 'oauth'
2
+ require 'twitter_oauth'
3
+
4
+ require 'one_click/controller_extensions'
5
+
6
+ module OneClick
7
+ #VERSION = '0.0.1'
8
+
9
+ def self.config=(config)
10
+ @config = config
11
+ end
12
+
13
+ def self.config
14
+ @config
15
+ end
16
+
17
+ def self.store_session(session, service, access)
18
+ session[:one_click] ||= {}
19
+
20
+ session[:one_click][:service] = service
21
+ session[:one_click][:access] = access
22
+ end
23
+
24
+ def self.store_cookies(cookies, service, access)
25
+ cookies[:one_click_service] = { :value => service, :expires => 30.days.from_now }
26
+ cookies[:one_click_access_token] = { :value => access[:token], :expires => 30.days.from_now }
27
+ cookies[:one_click_access_secret] = { :value => access[:secret], :expires => 30.days.from_now }
28
+ end
29
+
30
+ def self.get_service_model(service, options={})
31
+ self.get_service(service).get_service_model(options)
32
+ end
33
+
34
+ def self.login(service, options={})
35
+ self.get_service(service).login(options) if get_service(service)
36
+ end
37
+
38
+ def self.callback(service, options={})
39
+ self.get_service(service).callback(options)
40
+ end
41
+
42
+ def self.authenticated_client(service, options={})
43
+ self.get_service(service).authenticated_client(options)
44
+ end
45
+
46
+ def self.get_service(service)
47
+ case service
48
+ when 'twitter'
49
+ return self::Services::TwitterService.new(config[:twitter]) if config[:twitter]
50
+ end
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: one_click
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Arjen Oosterkamp
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-05 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: Let your users register with one click using open standards for authenticating
23
+ email: mail@arjen.me
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - Manifest
30
+ - Rakefile
31
+ - README.rdoc
32
+ - VERSION
33
+ files:
34
+ - lib/one_click/controller_extensions.rb
35
+ - lib/one_click/authenticators/oauth_authenticator.rb
36
+ - lib/one_click/services/twitter_service.rb
37
+ - lib/one_click.rb
38
+ - Manifest
39
+ - Rakefile
40
+ - README.rdoc
41
+ - VERSION
42
+ has_rdoc: true
43
+ homepage: http://www.arjen.me/
44
+ licenses: []
45
+
46
+ post_install_message:
47
+ rdoc_options:
48
+ - --title
49
+ - OneClick -- Easy OneClick authenticating
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ hash: 3
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ requirements: []
71
+
72
+ rubyforge_project:
73
+ rubygems_version: 1.3.7
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: Let your users register with one click using open standards for authenticating
77
+ test_files: []
78
+