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 ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
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,14 @@
1
+ module Devise
2
+ module Models
3
+ module WebmoneyAuthentication
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+ ::Devise::Models.config(self,
10
+ :webmoney_auto_register)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -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,9 @@
1
+ Devise::Schema.class_eval do
2
+ def webmoney_authenticatable
3
+ if respond_to?(:apply_devise_schema)
4
+ apply_devise_schema :wmid, String, :limit => 12
5
+ else
6
+ apply_schema :wmid, String, :limit => 12
7
+ end
8
+ end
9
+ 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
+