oa-core 0.0.1

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/CHANGELOG.rdoc ADDED
File without changes
data/LICENSE.rdoc ADDED
File without changes
data/README.rdoc ADDED
File without changes
@@ -0,0 +1,23 @@
1
+ module OmniAuth
2
+ class Builder < Rack::Builder
3
+ def initialize(app, &block)
4
+ @app = app
5
+ super(&block)
6
+ end
7
+
8
+ def provider(klass, *args, &block)
9
+ if klass.is_a?(Class)
10
+ middleware = klass
11
+ else
12
+ middleware = OmniAuth::Strategies.const_get("#{OmniAuth::Utils.camelize(klass.to_s)}")
13
+ end
14
+
15
+ use middleware, *args, &block
16
+ end
17
+
18
+ def call(env)
19
+ @ins << @app unless @ins.include?(@app)
20
+ to_app.call(env)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,74 @@
1
+ require 'rack'
2
+ require 'singleton'
3
+
4
+ module OmniAuth
5
+ class Configuration
6
+ include Singleton
7
+
8
+ def initialize
9
+ @path_prefix = '/auth'
10
+ @on_failure = Proc.new do |env, message_key|
11
+ new_path = "#{OmniAuth.config.path_prefix}/failure?message=#{message_key}"
12
+ [302, {'Location' => "#{new_path}"}, []]
13
+ end
14
+ end
15
+
16
+ def on_failure(&block)
17
+ if block_given?
18
+ @on_failure = block
19
+ else
20
+ @on_failure
21
+ end
22
+ end
23
+
24
+ attr_accessor :path_prefix
25
+ end
26
+
27
+ def self.config
28
+ Configuration.instance
29
+ end
30
+
31
+ def self.configure
32
+ yield config
33
+ end
34
+
35
+ module Utils
36
+ extend self
37
+
38
+ def deep_merge(hash, other_hash)
39
+ target = hash.dup
40
+
41
+ other_hash.keys.each do |key|
42
+ if other_hash[key].is_a? ::Hash and hash[key].is_a? ::Hash
43
+ target[key] = deep_merge(target[key],other_hash[key])
44
+ next
45
+ end
46
+
47
+ target[key] = other_hash[key]
48
+ end
49
+
50
+ target
51
+ end
52
+
53
+ CAMELIZE_SPECIAL = {
54
+ 'oauth' => 'OAuth',
55
+ 'oauth2' => 'OAuth2',
56
+ 'openid' => 'OpenID',
57
+ 'open_id' => 'OpenID',
58
+ 'github' => 'GitHub'
59
+ }
60
+
61
+ def camelize(word, first_letter_in_uppercase = true)
62
+ return CAMELIZE_SPECIAL[word.to_s] if CAMELIZE_SPECIAL[word.to_s]
63
+
64
+ if first_letter_in_uppercase
65
+ word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
66
+ else
67
+ word.first + camelize(word)[1..-1]
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ require 'omniauth/builder'
74
+ require 'omniauth/strategy'
@@ -0,0 +1,2 @@
1
+ require 'omniauth/core'
2
+ require 'omniauth/strategies/password'
@@ -0,0 +1,44 @@
1
+ require 'digest/sha1'
2
+ module OmniAuth
3
+ module Strategies
4
+ class Password
5
+ include OmniAuth::Strategy
6
+
7
+ def initialize(app, secret = 'changethisappsecret', options = {})
8
+ @options = options
9
+ @options[:identifier_key] ||= 'nickname'
10
+ @secret = secret
11
+ super(app, :password)
12
+ end
13
+
14
+ attr_reader :secret
15
+
16
+ def request_phase
17
+ return fail!(:missing_information) unless request[:identifier] && request[:password]
18
+ return fail!(:password_mismatch) if request[:password_confirmation] && request[:password_confirmation] != '' && request[:password] != request[:password_confirmation]
19
+
20
+ env['REQUEST_METHOD'] = 'GET'
21
+ env['PATH_INFO'] = request.path + '/callback'
22
+ request['auth'] = auth_hash(encrypt(request[:identifier], request[:password]))
23
+ @app.call(env)
24
+ end
25
+
26
+ def auth_hash(crypted_password)
27
+ OmniAuth::Utils.deep_merge(super(), {
28
+ 'uid' => crypted_password,
29
+ 'user_info' => {
30
+ @options[:identifier_key] => request[:identifier]
31
+ }
32
+ })
33
+ end
34
+
35
+ def callback_phase
36
+ @app.call(env)
37
+ end
38
+
39
+ def encrypt(identifier, password)
40
+ Digest::SHA1.hexdigest([identifier, password, secret].join('::'))
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,80 @@
1
+ module OmniAuth
2
+ module Strategy
3
+ def self.included(base)
4
+ base.class_eval do
5
+ attr_reader :app, :name, :env
6
+ end
7
+ end
8
+
9
+ def initialize(app, name, *args)
10
+ @app = app
11
+ @name = name.to_sym
12
+ end
13
+
14
+ def call(env)
15
+ dup.call!(env)
16
+ end
17
+
18
+ def call!(env)
19
+ @env = env
20
+ if request.path == "#{OmniAuth.config.path_prefix}/#{name}"
21
+ request_phase
22
+ elsif request.path == "#{OmniAuth.config.path_prefix}/#{name}/callback"
23
+ callback_phase
24
+ else
25
+ if respond_to?(:other_phase)
26
+ other_phase
27
+ else
28
+ @app.call(env)
29
+ end
30
+ end
31
+ end
32
+
33
+ def request_phase
34
+ raise NotImplementedError
35
+ end
36
+
37
+ def callback_phase
38
+ request['auth'] = auth_hash
39
+ @app.call(env)
40
+ end
41
+
42
+ def auth_hash
43
+ {
44
+ 'provider' => name.to_s,
45
+ 'uid' => nil
46
+ }
47
+ end
48
+
49
+ def full_host
50
+ uri = URI.parse(request.url)
51
+ uri.path = ''
52
+ uri.query = nil
53
+ uri.to_s
54
+ end
55
+
56
+ def callback_url
57
+ full_host + "#{OmniAuth.config.path_prefix}/#{name}/callback"
58
+ end
59
+
60
+ def session
61
+ @env['rack.session']
62
+ end
63
+
64
+ def request
65
+ @request ||= Rack::Request.new(@env)
66
+ end
67
+
68
+ def redirect(uri)
69
+ r = Rack::Response.new("Redirecting to #{uri}...")
70
+ r.redirect(uri)
71
+ r.finish
72
+ end
73
+
74
+ def user_info; {} end
75
+
76
+ def fail!(message_key)
77
+ OmniAuth.config.on_failure.call(self.env, message_key.to_sym)
78
+ end
79
+ end
80
+ end
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oa-core
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Michael Bleigh
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-29 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rack
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: rspec
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 1
41
+ - 2
42
+ - 9
43
+ version: 1.2.9
44
+ type: :development
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: webmock
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ type: :development
57
+ version_requirements: *id003
58
+ - !ruby/object:Gem::Dependency
59
+ name: rack-test
60
+ prerelease: false
61
+ requirement: &id004 !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ type: :development
69
+ version_requirements: *id004
70
+ - !ruby/object:Gem::Dependency
71
+ name: mg
72
+ prerelease: false
73
+ requirement: &id005 !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id005
82
+ description: HTTP Basic strategies for OmniAuth.
83
+ email: michael@intridea.com
84
+ executables: []
85
+
86
+ extensions: []
87
+
88
+ extra_rdoc_files: []
89
+
90
+ files:
91
+ - lib/omniauth/builder.rb
92
+ - lib/omniauth/core.rb
93
+ - lib/omniauth/password.rb
94
+ - lib/omniauth/strategies/password.rb
95
+ - lib/omniauth/strategy.rb
96
+ - README.rdoc
97
+ - LICENSE.rdoc
98
+ - CHANGELOG.rdoc
99
+ has_rdoc: true
100
+ homepage: http://github.com/intridea/omniauth
101
+ licenses: []
102
+
103
+ post_install_message:
104
+ rdoc_options: []
105
+
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ segments:
113
+ - 0
114
+ version: "0"
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ segments:
120
+ - 0
121
+ version: "0"
122
+ requirements: []
123
+
124
+ rubyforge_project:
125
+ rubygems_version: 1.3.6
126
+ signing_key:
127
+ specification_version: 3
128
+ summary: HTTP Basic strategies for OmniAuth.
129
+ test_files: []
130
+