langalex-authlogic_oauth2 1.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.
@@ -0,0 +1,12 @@
1
+ Manifest
2
+ README.rdoc
3
+ Rakefile
4
+ init.rb
5
+ lib/authlogic_oauth2.rb
6
+ lib/authlogic_oauth2/acts_as_authentic.rb
7
+ lib/authlogic_oauth2/helper.rb
8
+ lib/authlogic_oauth2/oauth2_process.rb
9
+ lib/authlogic_oauth2/session.rb
10
+ lib/authlogic_oauth2/version.rb
11
+ lib/oauth2_callback_filter.rb
12
+ rails/init.rb
@@ -0,0 +1,126 @@
1
+ = Authlogic OAuth2
2
+
3
+ This plugin works very much like jrallison's authlogic_oauth gem (http://github.com/jrallison/authlogic_oauth), and much of the code is repurposed from his work. If you have used authlogic_oauth before, then you should have no problem using authlogic_oauth2.
4
+
5
+ == Install and use
6
+
7
+ === 1. Install the authlogic and oauth2 gems
8
+
9
+ config.gem "authlogic"
10
+ config.gem "oauth2"
11
+ config.gem "authlogic_oauth2"
12
+
13
+ $ sudo rake gems:install
14
+
15
+ For older version of Rails, you can install authlogic_oauth2 as a plugin:
16
+
17
+ $ script/plugin install git://github.com/andyhite/authlogic_oauth2.git
18
+
19
+ === 2. Set up and configure authlogic
20
+
21
+ For information about how to set up and configure authlogic, please consult the authlogic README (http://github.com/binarylogic/authlogic)
22
+
23
+ === 3. Add the necessary fields to your authlogic users table
24
+
25
+ class AddOauth2FieldsToUser < ActiveRecord::Migration
26
+ def self.up
27
+ add_column :users, :oauth2_token, :string
28
+ add_index :users, :oauth2_token
29
+ end
30
+
31
+ def self.down
32
+ remove_column :users, :oauth2_token
33
+ end
34
+ end
35
+
36
+ IMPORTANT: make sure that you allow null values for crypted_password and password_salt if they aren't required for OAuth2 users.
37
+
38
+ === 4. Configure your OAuth2 client in the UserSession model
39
+
40
+ The oauth2_client_id, oauth2_client_secret and oauth2_site configuration values must be specified so we can initialize the connection with your OAuth2 provider. The oauth2_scope value is optional, and is used to request extended permissions from your provider.
41
+
42
+ Here's an example for Facebook:
43
+
44
+ class UserSession < Authlogic::Session::Base
45
+ oauth2_client_id "APPLICATION_ID"
46
+ oauth2_client_secret "APPLICATION_SECRET"
47
+ oauth2_site "https://graph.facebook.com"
48
+ oauth2_scope "email,user_birthday"
49
+ end
50
+
51
+ Optional: Customize error messages
52
+
53
+ Class User < ActiveRecord::Base
54
+ acts_as_authentic do |config| # this should already be there
55
+ c.duplicate_oauth2_token_message = "You are already signed up. Please log in."
56
+ end
57
+ end
58
+
59
+ === 5. Make sure you save your objects properly
60
+
61
+ We need to redirect the user to their oauth2 provider so they can authenticate and then pick things back up when they're returned, so any calls to User#save or UserSession#save need to be updated to the following format:
62
+
63
+ @user.save do |result|
64
+ if result
65
+ # Do something
66
+ else
67
+ # Do something else
68
+ end
69
+ end
70
+
71
+ and
72
+
73
+ @user_session.save do |result|
74
+ if result
75
+ # Do something
76
+ else
77
+ # Do something else
78
+ end
79
+ end
80
+
81
+ === 6. Add the login and register buttons to their respective forms
82
+
83
+ In file app/views/user_sessions/new.html.erb:
84
+
85
+ <% form_for @user_session, :url => user_session_path do |f| %>
86
+ # All your other form stuff goes here, if you need it.
87
+ <%= oauth2_login_button :value => "Login using Facebook" %>
88
+ <% end %>
89
+
90
+ In file app/views/users/new.html.erb:
91
+
92
+ <% form_for @user, :url => account_path do |f| %>
93
+ # All your other form stuff goes here, if you need it.
94
+ <%= oauth2_register_button :value => "Register using Facebook" %>
95
+ <% end %>
96
+
97
+ === 7. There is no step 7
98
+
99
+ If you followed these steps correctly, then you should be able to register and login using OAuth2.
100
+
101
+ == Accessing API endpoints
102
+
103
+ You can easily access any API endpoints that are exposed to an OAuth2 user by utilizing the oauth2 gem's "get" method on current_user#oauth2_access. For instance, you can access information about the currently logged in user's Facebook profile by doing the following:
104
+
105
+ current_user.oauth2_access.get('/me')
106
+
107
+ This will return a JSON string representing the user's profile information.
108
+
109
+ You can pre-populate user information by using the after_oauth2_authentication hook in your user model:
110
+
111
+ require 'json'
112
+
113
+ class User < ActiveRecord::Base
114
+ ...
115
+
116
+ def after_oauth2_authentication
117
+ json = oauth2_access.get('/me')
118
+
119
+ if user_data = JSON.parse(json)
120
+ self.name = user_data['name']
121
+ self.facebook_uid = user_data['id']
122
+ end
123
+ end
124
+ end
125
+
126
+ You can get more information about the Facebook Graph API on the following website: http://developers.facebook.com/docs/api
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+ require File.dirname(__FILE__) + "/lib/authlogic_oauth2/version"
5
+
6
+ Echoe.new('langalex-authlogic_oauth2', AuthlogicOauth2::Version::STRING) do |p|
7
+ p.description = "Authlogic OAuth2 is an extension of the Authlogic library to add OAuth2 support. OAuth2 can be used to allow users to login with their Facebook credentials."
8
+ p.url = "http://github.com/langalex/authlogic_oauth2"
9
+ p.author = "Andrew Hite"
10
+ p.email = "andrew@andrew-hite.com"
11
+ p.runtime_dependencies = ['authlogic', 'oauth2']
12
+ end
13
+
14
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ File.dirname(__FILE__) + "/rails/init.rb"
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{langalex-authlogic_oauth2}
5
+ s.version = "1.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Andrew Hite"]
9
+ s.date = %q{2011-01-25}
10
+ s.description = %q{Authlogic OAuth2 is an extension of the Authlogic library to add OAuth2 support. OAuth2 can be used to allow users to login with their Facebook credentials.}
11
+ s.email = %q{andrew@andrew-hite.com}
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/authlogic_oauth2.rb", "lib/authlogic_oauth2/acts_as_authentic.rb", "lib/authlogic_oauth2/helper.rb", "lib/authlogic_oauth2/oauth2_process.rb", "lib/authlogic_oauth2/session.rb", "lib/authlogic_oauth2/version.rb", "lib/oauth2_callback_filter.rb"]
13
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "init.rb", "lib/authlogic_oauth2.rb", "lib/authlogic_oauth2/acts_as_authentic.rb", "lib/authlogic_oauth2/helper.rb", "lib/authlogic_oauth2/oauth2_process.rb", "lib/authlogic_oauth2/session.rb", "lib/authlogic_oauth2/version.rb", "lib/oauth2_callback_filter.rb", "rails/init.rb", "langalex-authlogic_oauth2.gemspec"]
14
+ s.homepage = %q{http://github.com/langalex/authlogic_oauth2}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Langalex-authlogic_oauth2", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{langalex-authlogic_oauth2}
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.summary = %q{Authlogic OAuth2 is an extension of the Authlogic library to add OAuth2 support. OAuth2 can be used to allow users to login with their Facebook credentials.}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ s.add_runtime_dependency(%q<authlogic>, [">= 0"])
27
+ s.add_runtime_dependency(%q<oauth2>, [">= 0"])
28
+ else
29
+ s.add_dependency(%q<authlogic>, [">= 0"])
30
+ s.add_dependency(%q<oauth2>, [">= 0"])
31
+ end
32
+ else
33
+ s.add_dependency(%q<authlogic>, [">= 0"])
34
+ s.add_dependency(%q<oauth2>, [">= 0"])
35
+ end
36
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + "/authlogic_oauth2/version"
2
+ require File.dirname(__FILE__) + "/authlogic_oauth2/oauth2_process"
3
+ require File.dirname(__FILE__) + "/authlogic_oauth2/acts_as_authentic"
4
+ require File.dirname(__FILE__) + "/authlogic_oauth2/session"
5
+ require File.dirname(__FILE__) + "/authlogic_oauth2/helper"
6
+ require File.dirname(__FILE__) + "/oauth2_callback_filter"
7
+
8
+ ActiveRecord::Base.send(:include, AuthlogicOauth2::ActsAsAuthentic)
9
+ Authlogic::Session::Base.send(:include, AuthlogicOauth2::Session)
10
+ ActionController::Base.helper AuthlogicOauth2::Helper
11
+
12
+ # Throw callback rack app into the middleware stack
13
+ if defined?(ActionController::Metal)
14
+ # Rails >= 3.0
15
+ require 'oauth2_callback_filter'
16
+ if Rails.application.instance_variable_get('@app')
17
+ Rails.application.instance_variable_set('@app', Oauth2CallbackFilter.new(Rails.application.app))
18
+ else
19
+ Rails.configuration.middleware.use(Oauth2CallbackFilter)
20
+ end
21
+ elsif defined?(ActionController::Dispatcher) && defined?(ActionController::Dispatcher.middleware)
22
+ # Rails >= 2.3
23
+ require 'oauth2_callback_filter'
24
+ ActionController::Dispatcher.middleware.use(Oauth2CallbackFilter)
25
+ end
@@ -0,0 +1,119 @@
1
+ module AuthlogicOauth2
2
+ module ActsAsAuthentic
3
+ def self.included(klass)
4
+ klass.class_eval do
5
+ extend Config
6
+ add_acts_as_authentic_module(Methods, :prepend)
7
+ end
8
+ end
9
+
10
+ module Config
11
+ # The name of the oauth2 token field in the database.
12
+ #
13
+ # * <tt>Default:</tt> :oauth2_token
14
+ # * <tt>Accepts:</tt> Symbol
15
+ def oauth2_token_field(value = nil)
16
+ rw_config(:oauth2_token_field, value, :oauth2_token)
17
+ end
18
+ alias_method :oauth2_token_field=, :oauth2_token_field
19
+
20
+ def duplicate_oauth2_token_message(value = nil)
21
+ rw_config(:duplicate_oauth2_token_message, value, "You are already signed up. Please log in.")
22
+ end
23
+ alias_method :duplicate_oauth2_token_message=, :duplicate_oauth2_token_message
24
+ end
25
+
26
+ module Methods
27
+ include Oauth2Process
28
+
29
+ # Set up some simple validations
30
+ def self.included(klass)
31
+ klass.class_eval do
32
+ alias_method "#{oauth2_token_field.to_s}=".to_sym, :oauth2_token=
33
+ end
34
+
35
+ return if !klass.column_names.include?(klass.oauth2_token_field.to_s)
36
+
37
+ klass.class_eval do
38
+ validate :validate_by_oauth2, :if => :authenticating_with_oauth2?
39
+
40
+ validates_uniqueness_of klass.oauth2_token_field, :message => rw_config(:duplicate_oauth2_token_message, nil), :scope => validations_scope, :if => :using_oauth2?
41
+
42
+ validates_length_of_password_field_options validates_length_of_password_field_options.merge(:if => :validate_password_with_oauth2?)
43
+ validates_confirmation_of_password_field_options validates_confirmation_of_password_field_options.merge(:if => :validate_password_with_oauth2?)
44
+ validates_length_of_password_confirmation_field_options validates_length_of_password_confirmation_field_options.merge(:if => :validate_password_with_oauth2?)
45
+ validates_length_of_login_field_options validates_length_of_login_field_options.merge(:if => :validate_password_with_oauth2?)
46
+ validates_format_of_login_field_options validates_format_of_login_field_options.merge(:if => :validate_password_with_oauth2?)
47
+ end
48
+
49
+ # email needs to be optional for oauth2
50
+ klass.validate_email_field = false
51
+ end
52
+
53
+ def save(perform_validation = true, &block)
54
+ if perform_validation && block_given? && redirecting_to_oauth2_server?
55
+ # Save attributes so they aren't lost during the authentication with the oauth2 server
56
+ session_class.controller.session[:authlogic_oauth2_attributes] = attributes.reject!{|k, v| v.blank?}
57
+ redirect_to_oauth2
58
+ return false
59
+ end
60
+
61
+ result = super
62
+ yield(result) if block_given?
63
+ result
64
+ end
65
+
66
+ # Accessors for oauth2 fields
67
+ def oauth2_token
68
+ read_attribute(oauth2_token_field)
69
+ end
70
+
71
+ def oauth2_token=(value)
72
+ write_attribute(oauth2_token_field, value.blank? ? nil : value)
73
+ end
74
+
75
+ # Provides access to an API exposed on the access_token object
76
+ def oauth2_access
77
+ access_token
78
+ end
79
+
80
+ private
81
+
82
+ def authenticating_with_oauth2?
83
+ # Controller isn't available in all contexts (e.g. irb)
84
+ return false unless session_class.controller
85
+
86
+ # Initial request when user presses one of the button helpers
87
+ (session_class.controller.params && !session_class.controller.params[:register_with_oauth2].blank?) ||
88
+ # When the oauth2 provider responds and we made the initial request
89
+ (oauth2_response && session_class.controller.session && session_class.controller.session[:oauth2_request_class] == self.class.name)
90
+ end
91
+
92
+ def authenticate_with_oauth2
93
+ # Restore any attributes which were saved before redirecting to the oauth2 server
94
+ self.attributes = session_class.controller.session.delete(:authlogic_oauth2_attributes)
95
+ self.oauth2_token = generate_access_token.token
96
+
97
+ # Execute callback if it's defined in the user model
98
+ self.after_oauth2_authentication if self.respond_to?(:after_oauth2_authentication)
99
+ end
100
+
101
+ def access_token
102
+ OAuth2::AccessToken.new(oauth2_client, read_attribute(oauth2_token_field))
103
+ end
104
+
105
+ def using_oauth2?
106
+ respond_to?(oauth2_token_field) && !oauth2_token.blank?
107
+ end
108
+
109
+ def validate_password_with_oauth2?
110
+ !using_oauth2? && require_password?
111
+ end
112
+
113
+ # Convenience methods for accessing configuration values
114
+ def oauth2_token_field
115
+ self.class.oauth2_token_field
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,16 @@
1
+ module AuthlogicOauth2
2
+ module Helper
3
+ def oauth2_register_button(options = {})
4
+ oauth2_button('register_with_oauth2', options)
5
+ end
6
+
7
+ def oauth2_login_button(options = {})
8
+ oauth2_button('login_with_oauth2', options)
9
+ end
10
+
11
+ private
12
+ def oauth2_button(name, options = {})
13
+ "<input type='submit' value='#{options[:value]}' name='#{name}' id='user_submit' class='#{options[:class]}'/>"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,75 @@
1
+ module AuthlogicOauth2
2
+ module Oauth2Process
3
+
4
+ private
5
+
6
+ def validate_by_oauth2
7
+ validate_email_field = false
8
+
9
+ if oauth2_response.blank?
10
+ redirect_to_oauth2
11
+ else
12
+ authenticate_with_oauth2
13
+ end
14
+ end
15
+
16
+ def redirecting_to_oauth2_server?
17
+ authenticating_with_oauth2? && oauth2_response.blank?
18
+ end
19
+
20
+ def redirect_to_oauth2
21
+ authorize_url = oauth2_client.web_server.authorize_url(:redirect_uri => build_callback_url, :scope => oauth2_scope)
22
+
23
+ # Store the class which is redirecting, so we can ensure other classes
24
+ # don't get confused and attempt to use the response
25
+ oauth2_controller.session[:oauth2_request_class] = self.class.name
26
+
27
+ # Tell our rack callback filter what method the current request is using
28
+ oauth2_controller.session[:oauth2_callback_method] = oauth2_controller.request.method
29
+
30
+ oauth2_controller.redirect_to authorize_url
31
+ end
32
+
33
+ def build_callback_url
34
+ oauth2_controller.url_for :controller => oauth2_controller.controller_name, :action => oauth2_controller.action_name
35
+ end
36
+
37
+ def generate_access_token
38
+ oauth2_client.web_server.get_access_token(oauth2_controller.params[:code], :redirect_uri => build_callback_url)
39
+ end
40
+
41
+ def oauth2_response
42
+ oauth2_controller.params && oauth2_controller.params[:code]
43
+ end
44
+
45
+ def oauth2_client
46
+ OAuth2::Client.new(oauth2_client_id, oauth2_client_secret, :site => oauth2_site)
47
+ end
48
+
49
+ # Convenience method for accessing the session controller
50
+ def oauth2_controller
51
+ is_auth_session? ? controller : session_class.controller
52
+ end
53
+
54
+ # Convenience methods for accessing session configuration values
55
+ def oauth2_client_id
56
+ is_auth_session? ? self.class.oauth2_client_id : session_class.oauth2_client_id
57
+ end
58
+
59
+ def oauth2_client_secret
60
+ is_auth_session? ? self.class.oauth2_client_secret : session_class.oauth2_client_secret
61
+ end
62
+
63
+ def oauth2_site
64
+ is_auth_session? ? self.class.oauth2_site : session_class.oauth2_site
65
+ end
66
+
67
+ def oauth2_scope
68
+ is_auth_session? ? self.class.oauth2_scope : session_class.oauth2_scope
69
+ end
70
+
71
+ def is_auth_session?
72
+ self.is_a?(Authlogic::Session::Base)
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,120 @@
1
+ module AuthlogicOauth2
2
+ # This module is responsible for adding oauth2
3
+ # to the Authlogic::Session::Base class.
4
+ module Session
5
+ def self.included(klass)
6
+ klass.class_eval do
7
+ extend Config
8
+ include Methods
9
+ end
10
+ end
11
+
12
+ module Config
13
+ # * <tt>Default:</tt> :find_by_oauth2_token
14
+ # * <tt>Accepts:</tt> Symbol
15
+ def find_by_oauth2_method(value = nil)
16
+ rw_config(:find_by_oauth2_method, value, :find_by_oauth2_token)
17
+ end
18
+ alias_method :find_by_oauth2_method=, :find_by_oauth2_method
19
+
20
+ # * <tt>Default:</tt> ''
21
+ # * <tt>Accepts:</tt> String
22
+ def oauth2_client_id(value = nil)
23
+ rw_config(:oauth2_client_id, value, '')
24
+ end
25
+ alias_method :oauth2_client_id=, :oauth2_client_id
26
+
27
+ # * <tt>Default:</tt> ''
28
+ # * <tt>Accepts:</tt> String
29
+ def oauth2_client_secret(value = nil)
30
+ rw_config(:oauth2_client_secret, value, '')
31
+ end
32
+ alias_method :oauth2_client_secret=, :oauth2_client_secret
33
+
34
+ # * <tt>Default:</tt> ''
35
+ # * <tt>Accepts:</tt> String
36
+ def oauth2_site(value = nil)
37
+ rw_config(:oauth2_site, value, '')
38
+ end
39
+ alias_method :oauth2_site=, :oauth2_site
40
+
41
+ # * <tt>Default:</tt> ''
42
+ # * <tt>Accepts:</tt> String
43
+ def oauth2_scope(value = nil)
44
+ rw_config(:oauth2_scope, value, '')
45
+ end
46
+ alias_method :oauth2_scope=, :oauth2_scope
47
+ end
48
+
49
+ module Methods
50
+ include Oauth2Process
51
+
52
+ def self.included(klass)
53
+ klass.class_eval do
54
+ validate :validate_by_oauth2, :if => :authenticating_with_oauth2?
55
+ end
56
+ end
57
+
58
+ # Hooks into credentials so that you can pass a user who has already has an oauth2 access token.
59
+ def credentials=(value)
60
+ super
61
+ values = value.is_a?(Array) ? value : [value]
62
+ hash = values.first.is_a?(Hash) ? values.first.with_indifferent_access : nil
63
+ self.record = hash[:priority_record] if !hash.nil? && hash.key?(:priority_record)
64
+ end
65
+
66
+ def record=(record)
67
+ @record = record
68
+ end
69
+
70
+ # Clears out the block if we are authenticating with oauth2,
71
+ # so that we can redirect without a DoubleRender error.
72
+ def save(&block)
73
+ block = nil if redirecting_to_oauth2_server?
74
+ super(&block)
75
+ end
76
+
77
+ private
78
+
79
+ def authenticating_with_oauth2?
80
+ # Initial request when user presses one of the button helpers
81
+ (controller.params && !controller.params[:login_with_oauth2].blank?) ||
82
+ # When the oauth2 provider responds and we made the initial request
83
+ (oauth2_response && controller.session && controller.session[:oauth2_request_class] == self.class.name)
84
+ end
85
+
86
+ def authenticate_with_oauth2
87
+ if @record
88
+ self.attempted_record = record
89
+ else
90
+ self.attempted_record = search_for_record(find_by_oauth2_method, generate_access_token.token)
91
+ end
92
+
93
+ if !attempted_record
94
+ errors.add_to_base("Could not find user in our database, have you registered with your Oauth2 account?")
95
+ end
96
+ end
97
+
98
+ # Convenience methods for accessing configuration values
99
+ def find_by_oauth2_method
100
+ self.class.find_by_oauth2_method
101
+ end
102
+
103
+ def oauth2_client_id
104
+ self.class.oauth2_client_id
105
+ end
106
+
107
+ def oauth2_client_secret
108
+ self.class.oauth2_client_secret
109
+ end
110
+
111
+ def oauth2_site
112
+ self.class.oauth2_site
113
+ end
114
+
115
+ def oauth2_scope
116
+ self.class.oauth2_scope
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,51 @@
1
+ module AuthlogicOauth2
2
+ # A class for describing the current version of a library. The version
3
+ # consists of three parts: the +major+ number, the +minor+ number, and the
4
+ # +tiny+ (or +patch+) number.
5
+ class Version
6
+ include Comparable
7
+
8
+ # A convenience method for instantiating a new Version instance with the
9
+ # given +major+, +minor+, and +tiny+ components.
10
+ def self.[](major, minor, tiny)
11
+ new(major, minor, tiny)
12
+ end
13
+
14
+ attr_reader :major, :minor, :tiny
15
+
16
+ # Create a new Version object with the given components.
17
+ def initialize(major, minor, tiny)
18
+ @major, @minor, @tiny = major, minor, tiny
19
+ end
20
+
21
+ # Compare this version to the given +version+ object.
22
+ def <=>(version)
23
+ to_i <=> version.to_i
24
+ end
25
+
26
+ # Converts this version object to a string, where each of the three
27
+ # version components are joined by the '.' character. E.g., 2.0.0.
28
+ def to_s
29
+ @to_s ||= [@major, @minor, @tiny].join(".")
30
+ end
31
+
32
+ # Converts this version to a canonical integer that may be compared
33
+ # against other version objects.
34
+ def to_i
35
+ @to_i ||= @major * 1_000_000 + @minor * 1_000 + @tiny
36
+ end
37
+
38
+ def to_a
39
+ [@major, @minor, @tiny]
40
+ end
41
+
42
+ MAJOR = 1
43
+ MINOR = 1
44
+ TINY = 0
45
+
46
+ # The current version as a Version instance
47
+ CURRENT = new(MAJOR, MINOR, TINY)
48
+ # The current version as a String
49
+ STRING = CURRENT.to_s
50
+ end
51
+ end
@@ -0,0 +1,12 @@
1
+ class Oauth2CallbackFilter
2
+ def initialize(app)
3
+ @app = app
4
+ end
5
+
6
+ def call(env)
7
+ unless env["rack.session"][:oauth2_callback_method].blank?
8
+ env["REQUEST_METHOD"] = env["rack.session"].delete(:oauth2_callback_method).to_s.upcase
9
+ end
10
+ @app.call(env)
11
+ end
12
+ end
@@ -0,0 +1 @@
1
+ require "authlogic_oauth2"
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: langalex-authlogic_oauth2
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 0
10
+ version: 1.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Andrew Hite
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-25 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: authlogic
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: oauth2
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ description: Authlogic OAuth2 is an extension of the Authlogic library to add OAuth2 support. OAuth2 can be used to allow users to login with their Facebook credentials.
50
+ email: andrew@andrew-hite.com
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - README.rdoc
57
+ - lib/authlogic_oauth2.rb
58
+ - lib/authlogic_oauth2/acts_as_authentic.rb
59
+ - lib/authlogic_oauth2/helper.rb
60
+ - lib/authlogic_oauth2/oauth2_process.rb
61
+ - lib/authlogic_oauth2/session.rb
62
+ - lib/authlogic_oauth2/version.rb
63
+ - lib/oauth2_callback_filter.rb
64
+ files:
65
+ - Manifest
66
+ - README.rdoc
67
+ - Rakefile
68
+ - init.rb
69
+ - lib/authlogic_oauth2.rb
70
+ - lib/authlogic_oauth2/acts_as_authentic.rb
71
+ - lib/authlogic_oauth2/helper.rb
72
+ - lib/authlogic_oauth2/oauth2_process.rb
73
+ - lib/authlogic_oauth2/session.rb
74
+ - lib/authlogic_oauth2/version.rb
75
+ - lib/oauth2_callback_filter.rb
76
+ - rails/init.rb
77
+ - langalex-authlogic_oauth2.gemspec
78
+ has_rdoc: true
79
+ homepage: http://github.com/langalex/authlogic_oauth2
80
+ licenses: []
81
+
82
+ post_install_message:
83
+ rdoc_options:
84
+ - --line-numbers
85
+ - --inline-source
86
+ - --title
87
+ - Langalex-authlogic_oauth2
88
+ - --main
89
+ - README.rdoc
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
100
+ version: "0"
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 11
107
+ segments:
108
+ - 1
109
+ - 2
110
+ version: "1.2"
111
+ requirements: []
112
+
113
+ rubyforge_project: langalex-authlogic_oauth2
114
+ rubygems_version: 1.3.7
115
+ signing_key:
116
+ specification_version: 3
117
+ summary: Authlogic OAuth2 is an extension of the Authlogic library to add OAuth2 support. OAuth2 can be used to allow users to login with their Facebook credentials.
118
+ test_files: []
119
+