devise_webmoney 0.0.2
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 +21 -0
- data/Gemfile +3 -0
- data/README.rdoc +46 -0
- data/Rakefile +55 -0
- data/VERSION +1 -0
- data/devise_webmoney.gemspec +56 -0
- data/lib/devise_webmoney/model.rb +14 -0
- data/lib/devise_webmoney/routes.rb +16 -0
- data/lib/devise_webmoney/schema.rb +9 -0
- data/lib/devise_webmoney/strategy.rb +71 -0
- data/lib/devise_webmoney.rb +17 -0
- metadata +119 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
== Usage
|
2
|
+
|
3
|
+
=== Rails 3
|
4
|
+
|
5
|
+
Gemfile
|
6
|
+
|
7
|
+
gem 'devise_webmoney'
|
8
|
+
gem "rack-webmoney"
|
9
|
+
|
10
|
+
adding wmid column:
|
11
|
+
|
12
|
+
rails g migration add_wmid_to_user
|
13
|
+
|
14
|
+
and add this:
|
15
|
+
|
16
|
+
def self.up
|
17
|
+
add_column :users, :wmid, :string, :limit => 12
|
18
|
+
|
19
|
+
add_index :users, :wmid, :unique => true
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.down
|
23
|
+
remove_column :users, :wmid
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
application.rb
|
28
|
+
|
29
|
+
...
|
30
|
+
config.middleware.insert_before(Warden::Manager, Rack::Webmoney,
|
31
|
+
:credentials => {:site_rid => 'your_site_rid', :site_holder_wmid => 'your_site_holder_wmid'},
|
32
|
+
:mode => Rails.env)
|
33
|
+
...
|
34
|
+
|
35
|
+
|
36
|
+
config/initializers/devise.rb
|
37
|
+
|
38
|
+
config.webmoney_auto_register = true
|
39
|
+
|
40
|
+
user.rb
|
41
|
+
|
42
|
+
devise :webmoney_authentication
|
43
|
+
|
44
|
+
|
45
|
+
Your authentication form should return params[:auth_provider] == 'webmoney' form
|
46
|
+
Webmoney authentication process begin.
|
data/Rakefile
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "devise_webmoney"
|
8
|
+
gem.summary = %Q{Webmoney authentication module for Devise using Rack::Webmoney}
|
9
|
+
gem.description = %q{Webmoney authentication module for Devise using Rack::Webmoney}
|
10
|
+
gem.email = ['eagle.anton@gmail.com', 'eagle.alex@gmail.com']
|
11
|
+
gem.homepage = "http://github.com/SkyEagle/devise_webmoney"
|
12
|
+
gem.authors = ['Anton Orel', 'Alexander Orel']
|
13
|
+
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
+
gem.add_dependency("devise", ">= 1.2.0")
|
15
|
+
gem.add_dependency("rack-webmoney", ">= 0.0.1")
|
16
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
|
+
end
|
18
|
+
Jeweler::GemcutterTasks.new
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'rake/testtask'
|
24
|
+
Rake::TestTask.new(:test) do |test|
|
25
|
+
test.libs << 'lib' << 'test'
|
26
|
+
test.pattern = 'test/**/test_*.rb'
|
27
|
+
test.verbose = true
|
28
|
+
end
|
29
|
+
|
30
|
+
begin
|
31
|
+
require 'rcov/rcovtask'
|
32
|
+
Rcov::RcovTask.new do |test|
|
33
|
+
test.libs << 'test'
|
34
|
+
test.pattern = 'test/**/test_*.rb'
|
35
|
+
test.verbose = true
|
36
|
+
end
|
37
|
+
rescue LoadError
|
38
|
+
task :rcov do
|
39
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
task :test => :check_dependencies
|
44
|
+
|
45
|
+
task :default => :test
|
46
|
+
|
47
|
+
require 'rake/rdoctask'
|
48
|
+
Rake::RDocTask.new do |rdoc|
|
49
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
50
|
+
|
51
|
+
rdoc.rdoc_dir = 'rdoc'
|
52
|
+
rdoc.title = "devise_webmoney #{version}"
|
53
|
+
rdoc.rdoc_files.include('README*')
|
54
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
55
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.2
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{devise_webmoney}
|
8
|
+
s.version = "0.0.2"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Anton Orel", "Alexander Orel"]
|
12
|
+
s.date = %q{2010-09-01}
|
13
|
+
s.description = %q{Webmoney authentication module for Devise using Rack::Webmoney}
|
14
|
+
s.email = ["eagle.anton@gmail.com", "eagle.alex@gmail.com"]
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"Gemfile",
|
21
|
+
"README.rdoc",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"devise_webmoney.gemspec",
|
25
|
+
"lib/devise_webmoney.rb",
|
26
|
+
"lib/devise_webmoney/model.rb",
|
27
|
+
"lib/devise_webmoney/routes.rb",
|
28
|
+
"lib/devise_webmoney/schema.rb",
|
29
|
+
"lib/devise_webmoney/strategy.rb"
|
30
|
+
]
|
31
|
+
s.homepage = %q{http://github.com/SkyEagle/devise_webmoney}
|
32
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
33
|
+
s.require_paths = ["lib"]
|
34
|
+
s.rubygems_version = %q{1.3.7}
|
35
|
+
s.summary = %q{Webmoney authentication module for Devise using Rack::Webmoney}
|
36
|
+
|
37
|
+
if s.respond_to? :specification_version then
|
38
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
39
|
+
s.specification_version = 3
|
40
|
+
|
41
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
42
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
43
|
+
s.add_runtime_dependency(%q<devise>, [">= 1.2.0"])
|
44
|
+
s.add_runtime_dependency(%q<rack-webmoney>, [">= 0.0.1"])
|
45
|
+
else
|
46
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
47
|
+
s.add_dependency(%q<devise>, [">= 1.2.0"])
|
48
|
+
s.add_dependency(%q<rack-webmoney>, [">= 0.0.1"])
|
49
|
+
end
|
50
|
+
else
|
51
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
52
|
+
s.add_dependency(%q<devise>, [">= 1.2.0"])
|
53
|
+
s.add_dependency(%q<rack-webmoney>, [">= 0.0.1"])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
if ActionController::Routing.name =~ /ActionDispatch/
|
2
|
+
# We're on Rails 3
|
3
|
+
ActionDispatch::Routing::Mapper.class_eval do
|
4
|
+
protected
|
5
|
+
|
6
|
+
alias_method :devise_webmoney, :devise_session
|
7
|
+
end
|
8
|
+
else
|
9
|
+
# We're on Rails 2
|
10
|
+
|
11
|
+
ActionController::Routing::RouteSet::Mapper.class_eval do
|
12
|
+
protected
|
13
|
+
|
14
|
+
alias_method :webmoney_authentication, :database_authenticatable
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'devise/strategies/base'
|
2
|
+
require 'rack/webmoney'
|
3
|
+
|
4
|
+
module Devise
|
5
|
+
module Strategies
|
6
|
+
class WebmoneyAuthentication < Base
|
7
|
+
|
8
|
+
def valid?
|
9
|
+
valid_mapping? && ( provider_response? || params['auth_provider'] == 'webmoney' )
|
10
|
+
end
|
11
|
+
|
12
|
+
def authenticate!
|
13
|
+
logger.debug("Authenticating with Webmoney for mapping #{mapping.to}")
|
14
|
+
|
15
|
+
if provider_response
|
16
|
+
handle_response!
|
17
|
+
else # Delegate authentication to Rack::Webmoney by throwing a 401
|
18
|
+
custom! [401, { Rack::Webmoney::AUTHENTICATE_HEADER => Rack::Webmoney.build_header({}) }, "Sign in with Webmoney"]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
# Handles incoming provider response
|
25
|
+
def handle_response!
|
26
|
+
logger.debug "Attempting Webmoney auth: #{provider_response.inspect}"
|
27
|
+
|
28
|
+
case provider_response.status
|
29
|
+
when :successful
|
30
|
+
resource = if Devise.webmoney_auto_register
|
31
|
+
mapping.to.find_or_create_by_wmid(provider_response.wmid)
|
32
|
+
else
|
33
|
+
mapping.to.find_by_wmid(provider_response.wmid)
|
34
|
+
end
|
35
|
+
|
36
|
+
if resource
|
37
|
+
success!(resource)
|
38
|
+
else
|
39
|
+
fail! "This WMID is not associated with any registered user"
|
40
|
+
end
|
41
|
+
|
42
|
+
else
|
43
|
+
fail! "#{provider_response.status}: #{provider_response.message}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def provider_response?
|
50
|
+
!!provider_response
|
51
|
+
end
|
52
|
+
|
53
|
+
def provider_response
|
54
|
+
if params["WmLogin_WMID"].present?
|
55
|
+
env[Rack::Webmoney::RESPONSE]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def valid_mapping?
|
60
|
+
mapping.to.respond_to?(:find_by_wmid)
|
61
|
+
end
|
62
|
+
|
63
|
+
def logger
|
64
|
+
@logger ||= Rails.logger
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
Warden::Strategies.add :webmoney_authentication, Devise::Strategies::WebmoneyAuthentication
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'devise'
|
2
|
+
|
3
|
+
require 'devise_webmoney/schema'
|
4
|
+
require 'devise_webmoney/strategy'
|
5
|
+
require 'devise_webmoney/routes'
|
6
|
+
|
7
|
+
module Devise
|
8
|
+
|
9
|
+
mattr_accessor :webmoney_auto_register
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
Devise.add_module :webmoney_authentication,
|
14
|
+
:strategy => true,
|
15
|
+
:model => 'devise_webmoney/model',
|
16
|
+
:controller => :sessions,
|
17
|
+
:route => :webmoney
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: devise_webmoney
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Anton Orel
|
13
|
+
- Alexander Orel
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-09-01 00:00:00 +04:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: thoughtbot-shoulda
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: devise
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 1
|
44
|
+
- 2
|
45
|
+
- 0
|
46
|
+
version: 1.2.0
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rack-webmoney
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
- 0
|
60
|
+
- 1
|
61
|
+
version: 0.0.1
|
62
|
+
type: :runtime
|
63
|
+
version_requirements: *id003
|
64
|
+
description: Webmoney authentication module for Devise using Rack::Webmoney
|
65
|
+
email:
|
66
|
+
- eagle.anton@gmail.com
|
67
|
+
- eagle.alex@gmail.com
|
68
|
+
executables: []
|
69
|
+
|
70
|
+
extensions: []
|
71
|
+
|
72
|
+
extra_rdoc_files:
|
73
|
+
- README.rdoc
|
74
|
+
files:
|
75
|
+
- .gitignore
|
76
|
+
- Gemfile
|
77
|
+
- README.rdoc
|
78
|
+
- Rakefile
|
79
|
+
- VERSION
|
80
|
+
- devise_webmoney.gemspec
|
81
|
+
- lib/devise_webmoney.rb
|
82
|
+
- lib/devise_webmoney/model.rb
|
83
|
+
- lib/devise_webmoney/routes.rb
|
84
|
+
- lib/devise_webmoney/schema.rb
|
85
|
+
- lib/devise_webmoney/strategy.rb
|
86
|
+
has_rdoc: true
|
87
|
+
homepage: http://github.com/SkyEagle/devise_webmoney
|
88
|
+
licenses: []
|
89
|
+
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options:
|
92
|
+
- --charset=UTF-8
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
version: "0"
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
segments:
|
109
|
+
- 0
|
110
|
+
version: "0"
|
111
|
+
requirements: []
|
112
|
+
|
113
|
+
rubyforge_project:
|
114
|
+
rubygems_version: 1.3.7
|
115
|
+
signing_key:
|
116
|
+
specification_version: 3
|
117
|
+
summary: Webmoney authentication module for Devise using Rack::Webmoney
|
118
|
+
test_files: []
|
119
|
+
|