devise_webmoney 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
+