one_click 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+