nielsm-authlogic_haapi 1.0.4
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/.gitignore +1 -0
- data/CHANGELOG.rdoc +4 -0
- data/MIT-LICENSE +20 -0
- data/Manifest.txt +15 -0
- data/README.rdoc +47 -0
- data/Rakefile +18 -0
- data/VERSION.yml +4 -0
- data/authlogic_haapi.gemspec +58 -0
- data/init.rb +1 -0
- data/lib/authlogic_haapi.rb +5 -0
- data/lib/authlogic_haapi/session.rb +45 -0
- data/lib/authlogic_haapi/version.rb +51 -0
- data/rails/init.rb +1 -0
- data/test/fixtures/users.yml +9 -0
- data/test/libs/rails_trickery.rb +41 -0
- data/test/libs/user.rb +3 -0
- data/test/libs/user_session.rb +2 -0
- data/test/session_test.rb +4 -0
- data/test/test_helper.rb +71 -0
- metadata +77 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
.DS_Store
|
data/CHANGELOG.rdoc
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Joe Scharf of QuantiPay (quantipay.com)
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
CHANGELOG.rdoc
|
2
|
+
MIT-LICENSE
|
3
|
+
Manifest.txt
|
4
|
+
README.rdoc
|
5
|
+
Rakefile
|
6
|
+
init.rb
|
7
|
+
lib/authlogic_haapi.rb
|
8
|
+
lib/authlogic_haapi/session.rb
|
9
|
+
lib/authlogic_haapi/version.rb
|
10
|
+
test/fixtures/users.yml
|
11
|
+
test/libs/rails_trickery.rb
|
12
|
+
test/libs/user.rb
|
13
|
+
test/libs/user_session.rb
|
14
|
+
test/session_test.rb
|
15
|
+
test/test_helper.rb
|
data/README.rdoc
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
= Authlogic Haapi (Http Auth API)
|
2
|
+
|
3
|
+
Authlogic Haapi Adds support for HTTP Authentication with an API key instead of username password. You can use it with Active Resource
|
4
|
+
like so:
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'activeresource'
|
8
|
+
|
9
|
+
API_KEY= 'YourApiKeyHere'
|
10
|
+
URL = 'example.com'
|
11
|
+
|
12
|
+
class Api < ActiveResource::Base
|
13
|
+
self.site = URL
|
14
|
+
self.user = API_KEY
|
15
|
+
end
|
16
|
+
|
17
|
+
class User < Api
|
18
|
+
end
|
19
|
+
|
20
|
+
users = User.find(:all)
|
21
|
+
|
22
|
+
|
23
|
+
Credits go to Matthew and Saro at http://matthewtodd.org/2009/02/19/using-authlogic-and-active_resource.html for inspiration and guidance.
|
24
|
+
|
25
|
+
== Helpful links
|
26
|
+
|
27
|
+
* <b>Authlogic:</b> http://github.com/binarylogic/authlogic
|
28
|
+
|
29
|
+
== Install and use
|
30
|
+
|
31
|
+
=== 1. Install the Authlogic Haapi gem
|
32
|
+
|
33
|
+
$ sudo gem install quantipay-authlogic_haapi
|
34
|
+
|
35
|
+
Now add the gem dependency in your config:
|
36
|
+
|
37
|
+
config.gem "quantipay-authlogic_haapi", :lib => "authlogic_haapi"
|
38
|
+
|
39
|
+
Or for older version of rails, install it as a plugin:
|
40
|
+
|
41
|
+
$ script/plugin install git://github.com/quantipay/authlogic_haapi.git
|
42
|
+
|
43
|
+
=== 2. Configuration options:
|
44
|
+
|
45
|
+
<b>allow_http_basic_auth_with_api_key, default = true</b> Indicates whether you wish to allow logging in by HTTP Auth using the API Key.
|
46
|
+
|
47
|
+
Copyright (c) 2009 Joe Scharf of [QuantiPay](http://quantipay.com), released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
ENV['RDOCOPT'] = "-S -f html -T hanna"
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'jeweler'
|
8
|
+
Jeweler::Tasks.new do |gemspec|
|
9
|
+
gemspec.name = "authlogic_haapi"
|
10
|
+
gemspec.summary = "Extension of the Authlogic library to add support for HTTP Auth with API Key (single access token)"
|
11
|
+
gemspec.email = "joe@quantipay.com"
|
12
|
+
gemspec.homepage = "http://github.com/quantipay/authlogic_haapi"
|
13
|
+
gemspec.description = "This gem Extends the Authlogic library and allows using an API key (single access token) with active resource as the login method"
|
14
|
+
gemspec.authors = ["Joe Scharf"]
|
15
|
+
end
|
16
|
+
rescue LoadError
|
17
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
18
|
+
end
|
data/VERSION.yml
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{nielsm-authlogic_haapi}
|
5
|
+
s.version = "1.0.4"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Joe Scharf"]
|
9
|
+
s.date = %q{2009-07-04}
|
10
|
+
s.description = %q{This gem Extends the Authlogic library and allows using an API key (single access token) with active resource as the login method}
|
11
|
+
s.email = %q{joe@quantipay.com}
|
12
|
+
s.extra_rdoc_files = [
|
13
|
+
"README.rdoc"
|
14
|
+
]
|
15
|
+
s.files = [
|
16
|
+
".gitignore",
|
17
|
+
"CHANGELOG.rdoc",
|
18
|
+
"MIT-LICENSE",
|
19
|
+
"Manifest.txt",
|
20
|
+
"README.rdoc",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION.yml",
|
23
|
+
"authlogic_haapi.gemspec",
|
24
|
+
"init.rb",
|
25
|
+
"lib/authlogic_haapi.rb",
|
26
|
+
"lib/authlogic_haapi/session.rb",
|
27
|
+
"lib/authlogic_haapi/version.rb",
|
28
|
+
"rails/init.rb",
|
29
|
+
"test/fixtures/users.yml",
|
30
|
+
"test/libs/rails_trickery.rb",
|
31
|
+
"test/libs/user.rb",
|
32
|
+
"test/libs/user_session.rb",
|
33
|
+
"test/session_test.rb",
|
34
|
+
"test/test_helper.rb"
|
35
|
+
]
|
36
|
+
s.homepage = %q{http://github.com/quantipay/authlogic_haapi}
|
37
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
38
|
+
s.require_paths = ["lib"]
|
39
|
+
s.rubygems_version = %q{1.3.4}
|
40
|
+
s.summary = %q{Extension of the Authlogic library to add support for HTTP Auth with API Key (single access token)}
|
41
|
+
s.test_files = [
|
42
|
+
"test/libs/rails_trickery.rb",
|
43
|
+
"test/libs/user.rb",
|
44
|
+
"test/libs/user_session.rb",
|
45
|
+
"test/session_test.rb",
|
46
|
+
"test/test_helper.rb"
|
47
|
+
]
|
48
|
+
|
49
|
+
if s.respond_to? :specification_version then
|
50
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
51
|
+
s.specification_version = 3
|
52
|
+
|
53
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
54
|
+
else
|
55
|
+
end
|
56
|
+
else
|
57
|
+
end
|
58
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/rails/init.rb"
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module AuthlogicHaapi
|
2
|
+
# This module is responsible for allowing login via HTTP Auth using an API Key (Single access token)
|
3
|
+
module Session
|
4
|
+
def self.included(klass)
|
5
|
+
klass.class_eval do
|
6
|
+
extend Config
|
7
|
+
include Methods
|
8
|
+
persist :persist_by_http_auth_with_api_key, :if => :persist_by_http_auth_with_api_key?
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module Config
|
13
|
+
# Do you want to allow your users to log in via HTTP basic auth using an API Key (single access token)?
|
14
|
+
#
|
15
|
+
#
|
16
|
+
# * <tt>Default:</tt> true
|
17
|
+
# * <tt>Accepts:</tt> Boolean
|
18
|
+
def allow_http_basic_auth_with_api_key(value = nil)
|
19
|
+
rw_config(:allow_http_basic_auth_with_api_key, value, true)
|
20
|
+
end
|
21
|
+
alias_method :allow_http_basic_auth_with_api_key=, :allow_http_basic_auth_with_api_key
|
22
|
+
end
|
23
|
+
|
24
|
+
module Methods
|
25
|
+
|
26
|
+
private
|
27
|
+
def persist_by_http_auth_with_api_key?
|
28
|
+
allow_http_basic_auth_with_api_key?
|
29
|
+
end
|
30
|
+
|
31
|
+
def persist_by_http_auth_with_api_key
|
32
|
+
controller.authenticate_with_http_basic do |api_key,_|
|
33
|
+
self.unauthorized_record = search_for_record("find_by_single_access_token", api_key)
|
34
|
+
self.valid?
|
35
|
+
end
|
36
|
+
false
|
37
|
+
end
|
38
|
+
|
39
|
+
def allow_http_basic_auth_with_api_key?
|
40
|
+
self.class.allow_http_basic_auth_with_api_key == true
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module AuthlogicHaapi
|
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 = 0
|
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
|
data/rails/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "authlogic_haapi"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
ben:
|
2
|
+
login: bjohnson
|
3
|
+
persistence_token: 6cde0674657a8a313ce952df979de2830309aa4c11ca65805dd00bfdc65dbcc2f5e36718660a1d2e68c1a08c276d996763985d2f06fd3d076eb7bc4d97b1e317
|
4
|
+
single_access_token: <%= Authlogic::Random.friendly_token %>
|
5
|
+
perishable_token: <%= Authlogic::Random.friendly_token %>
|
6
|
+
openid_identifier: bens_identifier
|
7
|
+
email: bjohnson@binarylogic.com
|
8
|
+
first_name: Ben
|
9
|
+
last_name: Johnson
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# The only reason I am doing all of this non sense is becuase the openid_authentication requires that
|
2
|
+
# these constants be present. The only other alternative is to use an entire rails application for testing
|
3
|
+
# which is a little too overboard for this, I think.
|
4
|
+
|
5
|
+
RAILS_ROOT = ''
|
6
|
+
|
7
|
+
class ActionController < Authlogic::TestCase::MockController
|
8
|
+
class Request < Authlogic::TestCase::MockRequest
|
9
|
+
def request_method
|
10
|
+
""
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def root_url
|
15
|
+
''
|
16
|
+
end
|
17
|
+
|
18
|
+
def request
|
19
|
+
return @request if defined?(@request)
|
20
|
+
super
|
21
|
+
# Rails does some crazy s#!t with the "method" method. If I don't do this I get a "wrong arguments (0 for 1) error"
|
22
|
+
@request.class.class_eval do
|
23
|
+
def method
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
@request
|
28
|
+
end
|
29
|
+
|
30
|
+
def url_for(*args)
|
31
|
+
''
|
32
|
+
end
|
33
|
+
|
34
|
+
def redirecting_to
|
35
|
+
@redirect_to
|
36
|
+
end
|
37
|
+
|
38
|
+
def redirect_to(*args)
|
39
|
+
@redirect_to = args
|
40
|
+
end
|
41
|
+
end
|
data/test/libs/user.rb
ADDED
data/test/test_helper.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "rubygems"
|
3
|
+
require "ruby-debug"
|
4
|
+
require "active_record"
|
5
|
+
|
6
|
+
ActiveRecord::Schema.verbose = false
|
7
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
|
8
|
+
ActiveRecord::Base.configurations = true
|
9
|
+
ActiveRecord::Schema.define(:version => 1) do
|
10
|
+
create_table :open_id_authentication_associations, :force => true do |t|
|
11
|
+
t.integer :issued, :lifetime
|
12
|
+
t.string :handle, :assoc_type
|
13
|
+
t.binary :server_url, :secret
|
14
|
+
end
|
15
|
+
|
16
|
+
create_table :open_id_authentication_nonces, :force => true do |t|
|
17
|
+
t.integer :timestamp, :null => false
|
18
|
+
t.string :server_url, :null => true
|
19
|
+
t.string :salt, :null => false
|
20
|
+
end
|
21
|
+
|
22
|
+
create_table :users do |t|
|
23
|
+
t.datetime :created_at
|
24
|
+
t.datetime :updated_at
|
25
|
+
t.integer :lock_version, :default => 0
|
26
|
+
t.string :login
|
27
|
+
t.string :crypted_password
|
28
|
+
t.string :password_salt
|
29
|
+
t.string :persistence_token
|
30
|
+
t.string :single_access_token
|
31
|
+
t.string :perishable_token
|
32
|
+
t.string :openid_identifier
|
33
|
+
t.string :email
|
34
|
+
t.string :first_name
|
35
|
+
t.string :last_name
|
36
|
+
t.integer :login_count, :default => 0, :null => false
|
37
|
+
t.integer :failed_login_count, :default => 0, :null => false
|
38
|
+
t.datetime :last_request_at
|
39
|
+
t.datetime :current_login_at
|
40
|
+
t.datetime :last_login_at
|
41
|
+
t.string :current_login_ip
|
42
|
+
t.string :last_login_ip
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
require "active_record/fixtures"
|
47
|
+
Rails = true # to trick authlogic into loading the rails adapter
|
48
|
+
require File.dirname(__FILE__) + "/../../authlogic/lib/authlogic"
|
49
|
+
require File.dirname(__FILE__) + "/../../authlogic/lib/authlogic/test_case"
|
50
|
+
#require File.dirname(__FILE__) + "/libs/rails_trickery"
|
51
|
+
require File.dirname(__FILE__) + '/libs/user'
|
52
|
+
require File.dirname(__FILE__) + '/libs/user_session'
|
53
|
+
|
54
|
+
class ActiveSupport::TestCase
|
55
|
+
include ActiveRecord::TestFixtures
|
56
|
+
self.fixture_path = File.dirname(__FILE__) + "/fixtures"
|
57
|
+
self.use_transactional_fixtures = false
|
58
|
+
self.use_instantiated_fixtures = false
|
59
|
+
self.pre_loaded_fixtures = false
|
60
|
+
fixtures :all
|
61
|
+
setup :activate_authlogic
|
62
|
+
|
63
|
+
private
|
64
|
+
def activate_authlogic
|
65
|
+
Authlogic::Session::Base.controller = controller
|
66
|
+
end
|
67
|
+
|
68
|
+
def controller
|
69
|
+
@controller ||= Authlogic::ControllerAdapters::RailsAdapter.new(ActionController.new)
|
70
|
+
end
|
71
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nielsm-authlogic_haapi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Joe Scharf
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-07-04 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: This gem Extends the Authlogic library and allows using an API key (single access token) with active resource as the login method
|
17
|
+
email: joe@quantipay.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.rdoc
|
24
|
+
files:
|
25
|
+
- .gitignore
|
26
|
+
- CHANGELOG.rdoc
|
27
|
+
- MIT-LICENSE
|
28
|
+
- Manifest.txt
|
29
|
+
- README.rdoc
|
30
|
+
- Rakefile
|
31
|
+
- VERSION.yml
|
32
|
+
- authlogic_haapi.gemspec
|
33
|
+
- init.rb
|
34
|
+
- lib/authlogic_haapi.rb
|
35
|
+
- lib/authlogic_haapi/session.rb
|
36
|
+
- lib/authlogic_haapi/version.rb
|
37
|
+
- rails/init.rb
|
38
|
+
- test/fixtures/users.yml
|
39
|
+
- test/libs/rails_trickery.rb
|
40
|
+
- test/libs/user.rb
|
41
|
+
- test/libs/user_session.rb
|
42
|
+
- test/session_test.rb
|
43
|
+
- test/test_helper.rb
|
44
|
+
has_rdoc: true
|
45
|
+
homepage: http://github.com/quantipay/authlogic_haapi
|
46
|
+
licenses: []
|
47
|
+
|
48
|
+
post_install_message:
|
49
|
+
rdoc_options:
|
50
|
+
- --charset=UTF-8
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
version:
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
65
|
+
requirements: []
|
66
|
+
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 1.3.5
|
69
|
+
signing_key:
|
70
|
+
specification_version: 3
|
71
|
+
summary: Extension of the Authlogic library to add support for HTTP Auth with API Key (single access token)
|
72
|
+
test_files:
|
73
|
+
- test/libs/rails_trickery.rb
|
74
|
+
- test/libs/user.rb
|
75
|
+
- test/libs/user_session.rb
|
76
|
+
- test/session_test.rb
|
77
|
+
- test/test_helper.rb
|