devise_yauth_token 2.0.6
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/.rspec +1 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +117 -0
- data/MIT-LICENSE +20 -0
- data/README +13 -0
- data/Rakefile +2 -0
- data/VERSION +1 -0
- data/app/controllers/devise/yauth_sessions_controller.rb +27 -0
- data/app/controllers/devise/yauth_settings_controller.rb +24 -0
- data/app/views/yauth_sessions/new.html.haml +9 -0
- data/devise_yauth_token.gemspec +22 -0
- data/lib/.DS_Store +0 -0
- data/lib/account_ext.rb +42 -0
- data/lib/billing_client.rb +20 -0
- data/lib/devise_yauth_token.rb +97 -0
- data/lib/devise_yauth_token/devise_yauth_application_controller.rb +24 -0
- data/lib/devise_yauth_token/devise_yauth_token_helper.rb +46 -0
- data/lib/devise_yauth_token/engine.rb +9 -0
- data/lib/devise_yauth_token/fake_api_helper.rb +26 -0
- data/lib/devise_yauth_token/insque.rb +53 -0
- data/lib/devise_yauth_token/model.rb +33 -0
- data/lib/devise_yauth_token/rails.rb +8 -0
- data/lib/devise_yauth_token/routes.rb +23 -0
- data/lib/devise_yauth_token/strategy.rb +79 -0
- data/lib/devise_yauth_token/version.rb +3 -0
- data/lib/generators/billing_client/billing_client_generator.rb +13 -0
- data/lib/generators/billing_client/templates/billing.rb +2 -0
- data/lib/generators/billing_client/templates/billing_config.yml +6 -0
- data/lib/generators/devise_yauth_token/.DS_Store +0 -0
- data/lib/generators/devise_yauth_token/devise_yauth_token_generator.rb +29 -0
- data/lib/generators/devise_yauth_token/templates/accout.rb +2 -0
- data/lib/generators/devise_yauth_token/templates/accout_host.rb +2 -0
- data/lib/generators/devise_yauth_token/templates/add_columns_to_users.rb +25 -0
- data/lib/generators/devise_yauth_token/templates/create_account_hosts.rb +13 -0
- data/lib/generators/devise_yauth_token/templates/create_accounts.rb +18 -0
- data/lib/generators/devise_yauth_token/templates/eagle.rb +11 -0
- data/lib/generators/devise_yauth_token/templates/eagle.yml +27 -0
- data/lib/user_ext.rb +26 -0
- data/spec/billing_spec.rb +36 -0
- data/spec/devise_yauth_token_spec.rb +4 -0
- data/spec/spec_helper.rb +9 -0
- metadata +232 -0
data/.rspec
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--colour
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
devise_yauth_token (2.0.6)
|
|
5
|
+
devise (>= 1.1.5)
|
|
6
|
+
json (>= 1.5.1)
|
|
7
|
+
nifty-generators (>= 0.4.4)
|
|
8
|
+
omniauth (>= 0.1.6)
|
|
9
|
+
rails (>= 3.0.0)
|
|
10
|
+
rest-client (>= 1.6.1)
|
|
11
|
+
|
|
12
|
+
GEM
|
|
13
|
+
remote: http://rubygems.org/
|
|
14
|
+
specs:
|
|
15
|
+
abstract (1.0.0)
|
|
16
|
+
actionmailer (3.0.9)
|
|
17
|
+
actionpack (= 3.0.9)
|
|
18
|
+
mail (~> 2.2.19)
|
|
19
|
+
actionpack (3.0.9)
|
|
20
|
+
activemodel (= 3.0.9)
|
|
21
|
+
activesupport (= 3.0.9)
|
|
22
|
+
builder (~> 2.1.2)
|
|
23
|
+
erubis (~> 2.6.6)
|
|
24
|
+
i18n (~> 0.5.0)
|
|
25
|
+
rack (~> 1.2.1)
|
|
26
|
+
rack-mount (~> 0.6.14)
|
|
27
|
+
rack-test (~> 0.5.7)
|
|
28
|
+
tzinfo (~> 0.3.23)
|
|
29
|
+
activemodel (3.0.9)
|
|
30
|
+
activesupport (= 3.0.9)
|
|
31
|
+
builder (~> 2.1.2)
|
|
32
|
+
i18n (~> 0.5.0)
|
|
33
|
+
activerecord (3.0.9)
|
|
34
|
+
activemodel (= 3.0.9)
|
|
35
|
+
activesupport (= 3.0.9)
|
|
36
|
+
arel (~> 2.0.10)
|
|
37
|
+
tzinfo (~> 0.3.23)
|
|
38
|
+
activeresource (3.0.9)
|
|
39
|
+
activemodel (= 3.0.9)
|
|
40
|
+
activesupport (= 3.0.9)
|
|
41
|
+
activesupport (3.0.9)
|
|
42
|
+
arel (2.0.10)
|
|
43
|
+
bcrypt-ruby (3.0.1)
|
|
44
|
+
builder (2.1.2)
|
|
45
|
+
devise (1.4.9)
|
|
46
|
+
bcrypt-ruby (~> 3.0)
|
|
47
|
+
orm_adapter (~> 0.0.3)
|
|
48
|
+
warden (~> 1.0.3)
|
|
49
|
+
diff-lcs (1.1.3)
|
|
50
|
+
erubis (2.6.6)
|
|
51
|
+
abstract (>= 1.0.0)
|
|
52
|
+
fakeweb (1.3.0)
|
|
53
|
+
fakeweb-matcher (1.2.2)
|
|
54
|
+
fakeweb (>= 1.2.5)
|
|
55
|
+
rspec (>= 1.2.0)
|
|
56
|
+
hashie (1.2.0)
|
|
57
|
+
i18n (0.5.0)
|
|
58
|
+
json (1.6.1)
|
|
59
|
+
mail (2.2.19)
|
|
60
|
+
activesupport (>= 2.3.6)
|
|
61
|
+
i18n (>= 0.4.0)
|
|
62
|
+
mime-types (~> 1.16)
|
|
63
|
+
treetop (~> 1.4.8)
|
|
64
|
+
mime-types (1.17.2)
|
|
65
|
+
nifty-generators (0.4.6)
|
|
66
|
+
omniauth (1.0.0)
|
|
67
|
+
hashie (~> 1.2)
|
|
68
|
+
rack
|
|
69
|
+
orm_adapter (0.0.5)
|
|
70
|
+
polyglot (0.3.3)
|
|
71
|
+
rack (1.2.4)
|
|
72
|
+
rack-mount (0.6.14)
|
|
73
|
+
rack (>= 1.0.0)
|
|
74
|
+
rack-test (0.5.7)
|
|
75
|
+
rack (>= 1.0)
|
|
76
|
+
rails (3.0.9)
|
|
77
|
+
actionmailer (= 3.0.9)
|
|
78
|
+
actionpack (= 3.0.9)
|
|
79
|
+
activerecord (= 3.0.9)
|
|
80
|
+
activeresource (= 3.0.9)
|
|
81
|
+
activesupport (= 3.0.9)
|
|
82
|
+
bundler (~> 1.0)
|
|
83
|
+
railties (= 3.0.9)
|
|
84
|
+
railties (3.0.9)
|
|
85
|
+
actionpack (= 3.0.9)
|
|
86
|
+
activesupport (= 3.0.9)
|
|
87
|
+
rake (>= 0.8.7)
|
|
88
|
+
rdoc (~> 3.4)
|
|
89
|
+
thor (~> 0.14.4)
|
|
90
|
+
rake (0.9.2.2)
|
|
91
|
+
rdoc (3.9.4)
|
|
92
|
+
rest-client (1.6.7)
|
|
93
|
+
mime-types (>= 1.16)
|
|
94
|
+
rspec (2.9.0)
|
|
95
|
+
rspec-core (~> 2.9.0)
|
|
96
|
+
rspec-expectations (~> 2.9.0)
|
|
97
|
+
rspec-mocks (~> 2.9.0)
|
|
98
|
+
rspec-core (2.9.0)
|
|
99
|
+
rspec-expectations (2.9.1)
|
|
100
|
+
diff-lcs (~> 1.1.3)
|
|
101
|
+
rspec-mocks (2.9.0)
|
|
102
|
+
thor (0.14.6)
|
|
103
|
+
treetop (1.4.10)
|
|
104
|
+
polyglot
|
|
105
|
+
polyglot (>= 0.3.1)
|
|
106
|
+
tzinfo (0.3.31)
|
|
107
|
+
warden (1.0.6)
|
|
108
|
+
rack (>= 1.0)
|
|
109
|
+
|
|
110
|
+
PLATFORMS
|
|
111
|
+
ruby
|
|
112
|
+
|
|
113
|
+
DEPENDENCIES
|
|
114
|
+
devise_yauth_token!
|
|
115
|
+
fakeweb (>= 1.3.0)
|
|
116
|
+
fakeweb-matcher (>= 1.2.2)
|
|
117
|
+
rspec (>= 2.9.0)
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2010 [name of plugin creator]
|
|
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/README
ADDED
data/Rakefile
ADDED
data/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.0.6
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
class YauthSessionsController < SessionsController
|
|
3
|
+
prepend_before_filter :require_no_authentication, :only => [:new, :create]
|
|
4
|
+
#before_filter :authenticate_user!, :only => [:create]
|
|
5
|
+
|
|
6
|
+
def new
|
|
7
|
+
@erorr = false
|
|
8
|
+
respond_to do |format|
|
|
9
|
+
format.html { render "yauth_sessions/new", :layout => false }
|
|
10
|
+
format.json { render :json => to_json_api(nil, {:status => :sign_in_needed}, 401) }
|
|
11
|
+
format.js { render :js => "window.location = 'http://#{request.host}/users/sign_in/'" }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def error
|
|
16
|
+
@error = true
|
|
17
|
+
render "yauth_sessions/new", :layout => false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create
|
|
21
|
+
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#error")
|
|
22
|
+
set_flash_message(:notice, :signed_in) if is_navigational_format?
|
|
23
|
+
sign_in(resource_name, resource)
|
|
24
|
+
respond_with resource, :location => redirect_location(resource_name, resource)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
class YauthSettingsController < ApplicationController
|
|
3
|
+
skip_before_filter :authenticate_user!
|
|
4
|
+
|
|
5
|
+
def widget
|
|
6
|
+
redirect_to "http://#{current_account.yauth_host}/api/auth/widget.json?continue=#{params[:continue]}&callback=#{params[:callback]}"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def status
|
|
10
|
+
if params[:account_id]
|
|
11
|
+
a = Account.where(:yauth_account_id => params[:account_id]).first
|
|
12
|
+
if a.respond_to?(:status_parameters)
|
|
13
|
+
render :json => to_json_api(a.status_parameters)
|
|
14
|
+
else
|
|
15
|
+
render :json => to_json_api(:ok)
|
|
16
|
+
end
|
|
17
|
+
else
|
|
18
|
+
a = Account.first
|
|
19
|
+
u = User.first
|
|
20
|
+
render :text => :ok
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Gem::Specification.new do |s|
|
|
2
|
+
s.name = %q{devise_yauth_token}
|
|
3
|
+
s.version = "2.0.6"
|
|
4
|
+
s.authors = ["andreev"]
|
|
5
|
+
s.email = ["d.g.andreev@gmail.com"]
|
|
6
|
+
s.summary = %q{Eagleplatform authorization center client module}
|
|
7
|
+
s.description = %q{Eagleplatform authorization center client module}
|
|
8
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
|
9
|
+
|
|
10
|
+
s.files = `git ls-files`.split("\n")
|
|
11
|
+
s.require_paths = ["lib"]
|
|
12
|
+
|
|
13
|
+
s.add_dependency('devise', '>= 1.1.5' )
|
|
14
|
+
s.add_dependency('rails', '>= 3.0.0' )
|
|
15
|
+
s.add_dependency('nifty-generators', '>= 0.4.4' )
|
|
16
|
+
s.add_dependency('json', '>= 1.5.1')
|
|
17
|
+
s.add_dependency('omniauth', '>= 0.1.6')
|
|
18
|
+
s.add_dependency('rest-client', '>= 1.6.1')
|
|
19
|
+
s.add_development_dependency("rspec", ">= 2.9.0")
|
|
20
|
+
s.add_development_dependency("fakeweb", ">= 1.3.0")
|
|
21
|
+
s.add_development_dependency("fakeweb-matcher", ">= 1.2.2")
|
|
22
|
+
end
|
data/lib/.DS_Store
ADDED
|
Binary file
|
data/lib/account_ext.rb
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module AccountExt
|
|
2
|
+
module ClassMethods
|
|
3
|
+
def get_by_code(code)
|
|
4
|
+
return nil if code.blank?
|
|
5
|
+
account = self.find_by_code(code)
|
|
6
|
+
if account.blank?
|
|
7
|
+
url = ::YAUTH_CONFIG["auth_url"]+"/api/auth/account_by_code/?code=#{code}"
|
|
8
|
+
result = RestClient.get(url) {|response, request, result| result }
|
|
9
|
+
result = JSON.parse(result.body) rescue {}
|
|
10
|
+
if result['status'] == 200
|
|
11
|
+
account = self.new
|
|
12
|
+
account.yauth_host = result['data']['account']['host']
|
|
13
|
+
account.admin = result['data']['account']['admin']
|
|
14
|
+
account.code = result['data']['account']['code']
|
|
15
|
+
account.name = result['data']['account']['name']
|
|
16
|
+
account.host = "#{code}.#{::YAUTH_CONFIG['application_host']}"
|
|
17
|
+
account.save(:validate => false)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
account
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.included(base)
|
|
25
|
+
base.extend(ClassMethods)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def status
|
|
29
|
+
yauth_account = Rails.cache.read("yauth_account_#{self.yauth_account_id}")
|
|
30
|
+
if yauth_account['is_paid']
|
|
31
|
+
{ :status => :paid }
|
|
32
|
+
elsif yauth_account['locked_at']
|
|
33
|
+
{ :status => :locked }
|
|
34
|
+
else
|
|
35
|
+
{ :status => :trial, :days_left => 15 - (DateTime.now - DateTime.parse(yauth_account['created_at'])).to_i}
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def yauth_account
|
|
40
|
+
Rails.cache.read("yauth_account_#{yauth_account_id}")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module BillingClient
|
|
2
|
+
ApiError = Class.new(StandardError)
|
|
3
|
+
ConfigError = Class.new(StandardError)
|
|
4
|
+
|
|
5
|
+
def self.check_code(account, product_code, code, reference)
|
|
6
|
+
|
|
7
|
+
raise ConfigError, "Config not found, run \"rails g billing_client\" first!" if ::BILLING_CONFIG.try(:[], 'host').blank?
|
|
8
|
+
uri = URI.join("http://#{account}.#{::BILLING_CONFIG['host']}", "/api/products/#{product_code}/can_use",).to_s
|
|
9
|
+
|
|
10
|
+
response = RestClient.get uri, :params => {:customer_code => code, :reference_object => reference}
|
|
11
|
+
|
|
12
|
+
response = JSON.parse(response, :symbolize_names => true)
|
|
13
|
+
|
|
14
|
+
if response[:status].to_s == "200"
|
|
15
|
+
true
|
|
16
|
+
else
|
|
17
|
+
raise ApiError, response[:errors].try(:join, ', ')
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'devise'
|
|
2
|
+
$: << File.expand_path("..", __FILE__)
|
|
3
|
+
require 'devise_yauth_token/strategy'
|
|
4
|
+
require 'devise_yauth_token/routes'
|
|
5
|
+
require 'devise_yauth_token/rails'
|
|
6
|
+
require 'devise_yauth_token/insque'
|
|
7
|
+
require 'devise_yauth_token/devise_yauth_token_helper'
|
|
8
|
+
require 'devise_yauth_token/devise_yauth_application_controller'
|
|
9
|
+
|
|
10
|
+
require 'billing_client'
|
|
11
|
+
|
|
12
|
+
module Devise
|
|
13
|
+
mattr_accessor :system_permissions
|
|
14
|
+
mattr_accessor :system_menu
|
|
15
|
+
|
|
16
|
+
def self.current_account(request_host)
|
|
17
|
+
return Account.where(:code => 'current').first if Rails.env == 'test'
|
|
18
|
+
|
|
19
|
+
account_host = AccountHost.find_by_host(request_host)
|
|
20
|
+
current_account ||= account_host.account if !account_host.blank?
|
|
21
|
+
return current_account if !current_account.blank?
|
|
22
|
+
url = ::YAUTH_CONFIG["auth_url"]+"/api/auth/account_by_host/?auth_host=#{request_host}"
|
|
23
|
+
result = RestClient.get(url) {|response, request, result| result }
|
|
24
|
+
result = JSON.parse(result.body) rescue {}
|
|
25
|
+
if result['status'] == 200
|
|
26
|
+
code = result['data']['account']['code']
|
|
27
|
+
current_account = Account.find_by_code(code) if !code.blank?
|
|
28
|
+
if current_account
|
|
29
|
+
account_host = current_account.account_hosts.build({:host => request_host})
|
|
30
|
+
account_host.save(:validate => false)
|
|
31
|
+
else
|
|
32
|
+
account = Account.new
|
|
33
|
+
account.yauth_host = result['data']['account']['host']
|
|
34
|
+
account.code = result['data']['account']['code']
|
|
35
|
+
account.name = result['data']['account']['name']
|
|
36
|
+
account.yauth_account_id = result['data']['account']['id']
|
|
37
|
+
account.account_hosts.build({:host => request_host})
|
|
38
|
+
account.save(:validate => false)
|
|
39
|
+
current_account = account
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
current_account
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
Devise.add_module(:yauth_token,
|
|
48
|
+
:strategy => true,
|
|
49
|
+
:model => 'devise_yauth_token/model',
|
|
50
|
+
:controller => :sessions,
|
|
51
|
+
:route => :yauth_token)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
module ApplicationHelper
|
|
55
|
+
include DeviseYauthTokenHelper
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class ActionController::Base
|
|
59
|
+
include DeviseYauthApplicationController
|
|
60
|
+
prepend_before_filter :guest_login
|
|
61
|
+
before_filter :set_account_time_zone
|
|
62
|
+
around_filter :sign_out_user_if_need
|
|
63
|
+
|
|
64
|
+
protected
|
|
65
|
+
def guest_login_hash guestlogin
|
|
66
|
+
require 'digest/md5'
|
|
67
|
+
Digest::MD5.hexdigest guestlogin.to_json
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def guest_login
|
|
71
|
+
if params[:guestlogin].present? && cookies[:guest_login_hash] != guest_login_hash(params[:guestlogin])
|
|
72
|
+
cookies[:guest_login_hash] = guest_login_hash(params[:guestlogin])
|
|
73
|
+
continue = URI.parse request.url
|
|
74
|
+
continue.query = Rack::Utils.parse_nested_query(continue.query).delete_if {|k,v| k == 'guestlogin'}.to_param
|
|
75
|
+
redirect_to "http://#{current_account.yauth_host}/api/auth/guest_login?#{{:guestlogin => params[:guestlogin]}.to_param}&continue=#{continue.to_s}"
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def after_sign_out_path_for(resource)
|
|
80
|
+
cookies[:guest_login_hash] = nil
|
|
81
|
+
"http://#{current_account.yauth_host}/users/sign_out"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def set_account_time_zone
|
|
85
|
+
Time.zone = current_account.yauth_account['timezone'] if current_account && current_account.yauth_account
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def sign_out_user_if_need
|
|
89
|
+
if Rails.env != 'test' && !current_user.blank? &&
|
|
90
|
+
(current_user.need_sign_out || current_user.yauth_user.nil? || current_account.yauth_account.nil? || current_user.permissions.nil?)
|
|
91
|
+
current_user.clear_need_sign_out
|
|
92
|
+
sign_out(:user)
|
|
93
|
+
redirect_to session_path(:user)
|
|
94
|
+
end
|
|
95
|
+
yield
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module DeviseYauthApplicationController
|
|
2
|
+
protected
|
|
3
|
+
|
|
4
|
+
def billing_client(product_code, billing_code, reference)
|
|
5
|
+
BillingClient::check_code(current_account.code, product_code, billing_code, reference)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def current_account
|
|
9
|
+
if params[:account]
|
|
10
|
+
@current_account ||= Account.find_by_code params[:account] rescue nil
|
|
11
|
+
end
|
|
12
|
+
@current_account ||= Devise.current_account(request.host)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_json_api(data=nil, errors=nil, status=200)
|
|
16
|
+
if data.is_a?(String)
|
|
17
|
+
data = JSON.parse(data) rescue data
|
|
18
|
+
end
|
|
19
|
+
if errors.is_a?(String)
|
|
20
|
+
errors = JSON.parse(errors) rescue errors
|
|
21
|
+
end
|
|
22
|
+
{:time => DateTime.now.to_s, :version => "3.0", :data => data, :errors => errors, :status => status}.to_json
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module DeviseYauthTokenHelper
|
|
2
|
+
def current_account
|
|
3
|
+
@current_account ||= Devise.current_account(self.request.host)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def yauth_auto_login(auth_url = "")
|
|
7
|
+
unless user_signed_in?
|
|
8
|
+
%Q{<script type='text/javascript'>
|
|
9
|
+
function post_to_url(path, params, method) {
|
|
10
|
+
method = method || 'post'; // Set method to post by default, if not specified.
|
|
11
|
+
// The rest of this code assumes you are not using a library.
|
|
12
|
+
// It can be made less wordy if you use one.
|
|
13
|
+
var form = document.createElement('form');
|
|
14
|
+
form.setAttribute('method', method);
|
|
15
|
+
form.setAttribute('action', path);
|
|
16
|
+
for(var key in params) {
|
|
17
|
+
var hiddenField = document.createElement('input');
|
|
18
|
+
hiddenField.setAttribute('type', 'hidden');
|
|
19
|
+
hiddenField.setAttribute('name', key);
|
|
20
|
+
hiddenField.setAttribute('value', params[key]);
|
|
21
|
+
form.appendChild(hiddenField);
|
|
22
|
+
}
|
|
23
|
+
document.body.appendChild(form); // Not entirely sure if this is necessary
|
|
24
|
+
form.submit();
|
|
25
|
+
}
|
|
26
|
+
$(document).ready(function(){
|
|
27
|
+
var data = {};
|
|
28
|
+
$.getJSON('http://#{current_account.yauth_host}/api/auth/yauth_token.json?auth_host=#{self.request.host}&callback=?', data, function(jsonp){
|
|
29
|
+
if(jsonp.status == 200){
|
|
30
|
+
post_to_url('#{auth_url}', {'yauth_token': jsonp.data.token});
|
|
31
|
+
}
|
|
32
|
+
else if (jsonp.status == 401){
|
|
33
|
+
document.location.href = 'http://#{current_account.yauth_host}/users/sign_in?continue=#{self.request.url}';
|
|
34
|
+
}
|
|
35
|
+
else if (jsonp.status == 400){
|
|
36
|
+
document.location.href = 'http://#{current_account.yauth_host}/users/sign_out';
|
|
37
|
+
}
|
|
38
|
+
else if (jsonp.data.status == "locked") {
|
|
39
|
+
$.ajax({url:"/locked.html?a",success:function(d){$("body").html(d)}})
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
</script>}.html_safe
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require "fakeweb"
|
|
2
|
+
module FakeApiHelper
|
|
3
|
+
def fake_api(*args, &block)
|
|
4
|
+
method = args[3].nil? ? :get : args[3]
|
|
5
|
+
FakeWeb.allow_net_connect = false
|
|
6
|
+
FakeWeb.register_uri method, %r|.*|,
|
|
7
|
+
:body => to_json_api(*args[0..2]).as_json
|
|
8
|
+
if block_given?
|
|
9
|
+
yield
|
|
10
|
+
FakeWeb.clean_registry
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_json_api(data=nil, errors=nil, status=200)
|
|
15
|
+
if data.is_a?(String)
|
|
16
|
+
data = JSON.parse(data)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
if errors.is_a?(String)
|
|
20
|
+
errors = JSON.parse(errors)
|
|
21
|
+
end
|
|
22
|
+
{:time => DateTime.now.to_s, :version => "3.0", :data => data, :errors => errors, :status => status}.to_json
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module Insque
|
|
2
|
+
def self.yauth_user_sign_out msg
|
|
3
|
+
users = User.where(:yauth_user_id => msg['params']['id']) if msg['params']['id']
|
|
4
|
+
users = User.where(:yauth_account_id => msg['params']['account_id']) if msg['params']['account_id']
|
|
5
|
+
users.update_all :need_sign_out => true
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.yauth_user_create msg
|
|
9
|
+
unless User.where(:yauth_user_id => msg['params']['id']).exists?
|
|
10
|
+
user = User.new
|
|
11
|
+
user.email = msg['params']['email']
|
|
12
|
+
user.omniauth_name = msg['params']['omniauth_name']
|
|
13
|
+
user.yauth_user_id = msg['params']['id']
|
|
14
|
+
user.yauth_account_id = msg['params']['account_id']
|
|
15
|
+
user.admin = msg['params']['admin']
|
|
16
|
+
user.account_id = Account.where(:yauth_account_id => user.yauth_account_id).first.id
|
|
17
|
+
user.save! :validate => false
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.yauth_user_update msg
|
|
22
|
+
user = User.where(:yauth_user_id => msg['params']['id']).first
|
|
23
|
+
user.email = msg['params']['email']
|
|
24
|
+
user.omniauth_name = msg['params']['omniauth_name']
|
|
25
|
+
user.admin = msg['params']['admin']
|
|
26
|
+
user.save! :validate => false
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.yauth_user_destroy msg
|
|
30
|
+
user = User.where(:yauth_user_id => msg['params']['id']).first
|
|
31
|
+
user.destroy
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.yauth_account_create msg
|
|
35
|
+
unless Account.where(:yauth_account_id => msg['params']['id']).exists?
|
|
36
|
+
account = Account.new
|
|
37
|
+
account.yauth_host = msg['params']['host']
|
|
38
|
+
account.code = msg['params']['code']
|
|
39
|
+
account.name = msg['params']['name']
|
|
40
|
+
account.yauth_account_id = msg['params']['id']
|
|
41
|
+
account.save! :validate => false
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.yauth_account_update msg
|
|
46
|
+
account = Account.where(:yauth_account_id => msg['params']['id']).first
|
|
47
|
+
account.yauth_host = msg['params']['host']
|
|
48
|
+
account.code = msg['params']['code']
|
|
49
|
+
account.name = msg['params']['name']
|
|
50
|
+
account.save! :validate => false
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
module Models
|
|
3
|
+
# The TokenAuthenticatable module is responsible for generating an authentication token and
|
|
4
|
+
# validating the authenticity of the same while signing in.
|
|
5
|
+
#
|
|
6
|
+
# This module only provides a few helpers to help you manage the token. Creating and resetting
|
|
7
|
+
# the token is your responsibility.
|
|
8
|
+
#
|
|
9
|
+
# == Configuration:
|
|
10
|
+
#
|
|
11
|
+
# You can overwrite configuration values by setting in globally in Devise (+Devise.setup+),
|
|
12
|
+
# using devise method, or overwriting the respective instance method.
|
|
13
|
+
#
|
|
14
|
+
# +token_authentication_key+ - Defines name of the authentication token params key. E.g. /users/sign_in?some_key=...
|
|
15
|
+
#
|
|
16
|
+
module YauthToken
|
|
17
|
+
extend ActiveSupport::Concern
|
|
18
|
+
|
|
19
|
+
module ClassMethods
|
|
20
|
+
|
|
21
|
+
def find_for_yauth_authentication(value, account_id)
|
|
22
|
+
find_for_authentication({ :yauth_user_id => value, :account_id => account_id })
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def password_required?
|
|
26
|
+
false
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
#::Devise::Models.config(self, :url)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
ActionDispatch::Routing::Mapper.class_eval do
|
|
2
|
+
protected
|
|
3
|
+
|
|
4
|
+
alias_method :devise_yauth_token, :devise_session
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
module DeviseYauthToken
|
|
9
|
+
module Routing #:nodoc:
|
|
10
|
+
module MapperExtensions
|
|
11
|
+
def yauth_settings
|
|
12
|
+
match '/api/yauth_settings/system_permissions', :to => 'devise/yauth_settings#system_permissions'
|
|
13
|
+
match '/api/yauth_settings/system_menu', :to => 'devise/yauth_settings#system_menu'
|
|
14
|
+
match '/api/yauth_settings/widget', :to => 'devise/yauth_settings#widget'
|
|
15
|
+
match '/api/yauth_users/sign_out', :to => 'devise/yauth_users#sign_out'
|
|
16
|
+
match '/status', :to => 'devise/yauth_settings#status'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
ActionDispatch::Routing::Mapper.send :include, DeviseYauthToken::Routing::MapperExtensions
|
|
23
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'devise/strategies/base'
|
|
2
|
+
require 'rest_client'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Devise::Strategies::YauthToken < Devise::Strategies::Authenticatable
|
|
6
|
+
|
|
7
|
+
def current_account
|
|
8
|
+
@current_account ||= Devise.current_account(request.host)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def valid?
|
|
12
|
+
true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def authenticate!
|
|
16
|
+
@yauth_provider_error = nil
|
|
17
|
+
if token = params[:yauth_token]
|
|
18
|
+
result = RestClient.get("http://#{current_account.yauth_host}/api/auth/user.json?auth_host=#{request.host}¬rack=true&auth_token=#{token}"){|response, request, result| result }
|
|
19
|
+
result = JSON.parse(result.body) rescue {}
|
|
20
|
+
yauth_user_id = result['data']['user']['id'] if result['status'] == 200
|
|
21
|
+
if !yauth_user_id.blank? && !current_account.blank?
|
|
22
|
+
resource = mapping.to.find_for_yauth_authentication(yauth_user_id, current_account.id)
|
|
23
|
+
if resource.blank?
|
|
24
|
+
result['data']['user']['yauth_user_id'] = yauth_user_id
|
|
25
|
+
resource = mapping.to.new()
|
|
26
|
+
end
|
|
27
|
+
resource.email = result['data']['user']['email']
|
|
28
|
+
resource.omniauth_name = result['data']['user']['omniauth_name']
|
|
29
|
+
resource.yauth_user_id = result['data']['user']['id']
|
|
30
|
+
resource.yauth_account_id = result['data']['user']['account_id']
|
|
31
|
+
resource.admin = result['data']['user']['admin']
|
|
32
|
+
resource.need_sign_out = false
|
|
33
|
+
resource.account_id = current_account.id
|
|
34
|
+
resource.save(:validate => false)
|
|
35
|
+
|
|
36
|
+
current_account.code = result['data']['account']['code']
|
|
37
|
+
current_account.yauth_account_id = result['data']['account']['id']
|
|
38
|
+
current_account.name = result['data']['account']['name']
|
|
39
|
+
current_account.save(:validate => false)
|
|
40
|
+
|
|
41
|
+
Rails.logger.info "------------------#{result['data']}---------------------"
|
|
42
|
+
Rails.cache.write("yauth_user_#{result['data']['user']['id']}", result['data']['user'])
|
|
43
|
+
Rails.cache.write("yauth_account_#{result['data']['account']['id']}", result['data']['account'])
|
|
44
|
+
Rails.cache.write("user_permissions_#{resource.id}", result['data']['permissions'])
|
|
45
|
+
success!(resource)
|
|
46
|
+
else
|
|
47
|
+
@yauth_provider_error = I18n.t("devise.yauth_token.erorrs.token_invalid")
|
|
48
|
+
fail(:invalid_token)
|
|
49
|
+
end
|
|
50
|
+
else
|
|
51
|
+
@yauth_provider_error = I18n.t("devise.yauth_token.erorrs.token_blank")
|
|
52
|
+
fail(:invalid_token_blank)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def valid_request?
|
|
58
|
+
true
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Do not use remember_me behavior with token.
|
|
62
|
+
def remember_me?
|
|
63
|
+
true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Try both scoped and non scoped keys.
|
|
67
|
+
def params_auth_hash
|
|
68
|
+
params[scope] || params
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Overwrite authentication keys to use token_authentication_key.
|
|
72
|
+
def authentication_keys
|
|
73
|
+
@authentication_keys ||= :yauth_token
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
Warden::Strategies.add(:yauth_token, Devise::Strategies::YauthToken)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
|
|
3
|
+
class BillingClientGenerator < Rails::Generators::Base
|
|
4
|
+
|
|
5
|
+
def self.source_root
|
|
6
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def create_initializer_file
|
|
10
|
+
template 'billing.rb', 'config/initializers/billing.rb'
|
|
11
|
+
template 'billing_config.yml', 'config/billing_config.yml'
|
|
12
|
+
end
|
|
13
|
+
end
|
|
Binary file
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
require 'rails/generators/migration'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class DeviseYauthTokenGenerator < Rails::Generators::Base
|
|
6
|
+
include Rails::Generators::Migration
|
|
7
|
+
|
|
8
|
+
def self.source_root
|
|
9
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def self.next_migration_number(dirname)
|
|
14
|
+
#if ActiveRecord::Base.timestamped_migrations
|
|
15
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
|
16
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
|
17
|
+
#end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_migration_file
|
|
21
|
+
migration_template 'create_accounts.rb', 'db/migrate/create_accounts.rb'
|
|
22
|
+
migration_template 'create_account_hosts.rb', 'db/migrate/create_account_hosts.rb'
|
|
23
|
+
migration_template 'add_columns_to_users.rb', 'db/migrate/add_columns_to_users.rb'
|
|
24
|
+
template 'account.rb', 'app/models/account.rb'
|
|
25
|
+
template 'account_host.rb', 'app/models/account_host.rb'
|
|
26
|
+
template 'eagle.rb', 'config/initializers/eagle.rb'
|
|
27
|
+
template 'eagle.yml', 'config/eagle.yml'
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class AddColumnsToUsers < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
add_column :users, :account_id, :integer
|
|
4
|
+
add_column :users, :omniauth_name, :string
|
|
5
|
+
add_column :users, :nick, :string
|
|
6
|
+
|
|
7
|
+
add_column :users, :yauth_account_id, :integer
|
|
8
|
+
add_column :users, :yauth_user_id, :integer
|
|
9
|
+
add_column :users, :admin, :boolean, :default => false
|
|
10
|
+
|
|
11
|
+
add_column :users, :need_sign_in, :boolean, :default => false
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.down
|
|
15
|
+
remove_column :users, :account_id
|
|
16
|
+
remove_column :users, :omniauth_name
|
|
17
|
+
remove_column :users, :nick
|
|
18
|
+
|
|
19
|
+
remove_column :users, :yauth_account_id
|
|
20
|
+
remove_column :users, :yauth_user_id
|
|
21
|
+
remove_column :users, :admin
|
|
22
|
+
|
|
23
|
+
remove_column :users, :need_sign_in
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
class CreateAccounts < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :accounts do |t|
|
|
4
|
+
t.string :name
|
|
5
|
+
t.string :code
|
|
6
|
+
t.text :description
|
|
7
|
+
t.boolean :admin, :dafault => false
|
|
8
|
+
t.integer :yauth_account_id
|
|
9
|
+
t.string :host
|
|
10
|
+
t.string :yauth_host
|
|
11
|
+
t.timestamps
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.down
|
|
16
|
+
drop_table :accounts
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
config_file = File.join(Rails.root, 'config', 'eagle.yml')
|
|
2
|
+
::EAGLE_CONFIG = YAML.load(IO.read(config_file))[Rails.env]
|
|
3
|
+
|
|
4
|
+
Rails.application.config.to_prepare do
|
|
5
|
+
Account.class_eval do
|
|
6
|
+
include AccountExt
|
|
7
|
+
end
|
|
8
|
+
User.class_eval do
|
|
9
|
+
include UserExt
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
production:
|
|
2
|
+
media_host: 'media.eagleplatform.com'
|
|
3
|
+
streaming_host: 'streaming.eagleplatform.com'
|
|
4
|
+
billing_host: 'billing.eagleplatform.com'
|
|
5
|
+
yauth_host: 'auth.eagleplatform.com'
|
|
6
|
+
ystat_host: 'stat.eagleplatform.com'
|
|
7
|
+
balancer_host: 'panel.eaglecdn.com'
|
|
8
|
+
messenger_host: 'messenger.eagleplatform.com'
|
|
9
|
+
monitoring_host: 'monitoring.eagleplatform.com'
|
|
10
|
+
development:
|
|
11
|
+
media_host: 'media.test.eagleplatform.com'
|
|
12
|
+
streaming_host: 'streaming.test.eagleplatform.com'
|
|
13
|
+
billing_host: 'billing.test.eagleplatform.com'
|
|
14
|
+
yauth_host: 'auth.test.eagleplatform.com'
|
|
15
|
+
ystat_host: 'stat.test.eagleplatform.com'
|
|
16
|
+
balancer_host: 'panel.balancer.test.eagleplatform.com'
|
|
17
|
+
messenger_host: 'messenger.test.eagleplatform.com'
|
|
18
|
+
monitoring_host: 'monitoring.test.eagleplatform.com'
|
|
19
|
+
test:
|
|
20
|
+
media_host: 'media.test.eagleplatform.com'
|
|
21
|
+
streaming_host: 'streaming.test.eagleplatform.com'
|
|
22
|
+
billing_host: 'billing.test.eagleplatform.com'
|
|
23
|
+
yauth_host: 'auth.test.eagleplatform.com'
|
|
24
|
+
ystat_host: 'stat.test.eagleplatform.com'
|
|
25
|
+
balancer_host: 'panel.balancer.test.eagleplatform.com'
|
|
26
|
+
messenger_host: 'messenger.test.eagleplatform.com'
|
|
27
|
+
monitoring_host: 'monitoring.test.eagleplatform.com'
|
data/lib/user_ext.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module UserExt
|
|
2
|
+
def clear_need_sign_out
|
|
3
|
+
self.need_sign_out = false
|
|
4
|
+
self.save(:validate => false)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def display_name
|
|
8
|
+
if omniauth_name.blank?
|
|
9
|
+
if email.blank?
|
|
10
|
+
'anonymous'
|
|
11
|
+
else
|
|
12
|
+
email
|
|
13
|
+
end
|
|
14
|
+
else
|
|
15
|
+
omniauth_name
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def permissions
|
|
20
|
+
Rails.cache.read("user_permissions_#{id}")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def yauth_user
|
|
24
|
+
Rails.cache.read("yauth_user_#{yauth_user_id}")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'devise_yauth_token/fake_api_helper'
|
|
3
|
+
require 'fakeweb_matcher'
|
|
4
|
+
|
|
5
|
+
describe BillingClient do
|
|
6
|
+
include FakeApiHelper
|
|
7
|
+
|
|
8
|
+
let (:account_code) {"eagletest666"}
|
|
9
|
+
let (:product_code) {"someproductcode"}
|
|
10
|
+
|
|
11
|
+
::BILLING_CONFIG = {'host' => 'somehost'}
|
|
12
|
+
|
|
13
|
+
it 'should send product code and auth code' do
|
|
14
|
+
fake_api true, nil, 200
|
|
15
|
+
BillingClient::check_code(account_code, product_code, "somecode", 666).should == true
|
|
16
|
+
FakeWeb.should have_requested(:get,
|
|
17
|
+
"http://#{account_code}.somehost/api/products/#{product_code}/can_use?customer_code=somecode&reference_object=666")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should raise with invalid code' do
|
|
21
|
+
fake_api nil, ["Code doesn't found", "Some other Error"], 500
|
|
22
|
+
lambda {
|
|
23
|
+
BillingClient::check_code(account_code, product_code, "somecode", 666)
|
|
24
|
+
}.should raise_error(BillingClient::ApiError, "Code doesn't found, Some other Error")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'should raise without BILLING_CONFIG' do
|
|
28
|
+
::BILLING_CONFIG.stub(:[]).and_return(nil)
|
|
29
|
+
fake_api true, nil, 200
|
|
30
|
+
lambda {
|
|
31
|
+
BillingClient::check_code(account_code, product_code, "somecode", 666)
|
|
32
|
+
}.should raise_error(BillingClient::ConfigError,
|
|
33
|
+
"Config not found, run \"rails g billing_client\" first!")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: devise_yauth_token
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 2.0.6
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- andreev
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-11-16 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: devise
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 1.1.5
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ! '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 1.1.5
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: rails
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ! '>='
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: 3.0.0
|
|
38
|
+
type: :runtime
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ! '>='
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: 3.0.0
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: nifty-generators
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
50
|
+
requirements:
|
|
51
|
+
- - ! '>='
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 0.4.4
|
|
54
|
+
type: :runtime
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ! '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 0.4.4
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: json
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
66
|
+
requirements:
|
|
67
|
+
- - ! '>='
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: 1.5.1
|
|
70
|
+
type: :runtime
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ! '>='
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: 1.5.1
|
|
78
|
+
- !ruby/object:Gem::Dependency
|
|
79
|
+
name: omniauth
|
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
|
81
|
+
none: false
|
|
82
|
+
requirements:
|
|
83
|
+
- - ! '>='
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: 0.1.6
|
|
86
|
+
type: :runtime
|
|
87
|
+
prerelease: false
|
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
+
none: false
|
|
90
|
+
requirements:
|
|
91
|
+
- - ! '>='
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: 0.1.6
|
|
94
|
+
- !ruby/object:Gem::Dependency
|
|
95
|
+
name: rest-client
|
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
|
97
|
+
none: false
|
|
98
|
+
requirements:
|
|
99
|
+
- - ! '>='
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: 1.6.1
|
|
102
|
+
type: :runtime
|
|
103
|
+
prerelease: false
|
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
+
none: false
|
|
106
|
+
requirements:
|
|
107
|
+
- - ! '>='
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: 1.6.1
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: rspec
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
none: false
|
|
114
|
+
requirements:
|
|
115
|
+
- - ! '>='
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: 2.9.0
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
122
|
+
requirements:
|
|
123
|
+
- - ! '>='
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: 2.9.0
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: fakeweb
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
none: false
|
|
130
|
+
requirements:
|
|
131
|
+
- - ! '>='
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: 1.3.0
|
|
134
|
+
type: :development
|
|
135
|
+
prerelease: false
|
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
+
none: false
|
|
138
|
+
requirements:
|
|
139
|
+
- - ! '>='
|
|
140
|
+
- !ruby/object:Gem::Version
|
|
141
|
+
version: 1.3.0
|
|
142
|
+
- !ruby/object:Gem::Dependency
|
|
143
|
+
name: fakeweb-matcher
|
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
|
145
|
+
none: false
|
|
146
|
+
requirements:
|
|
147
|
+
- - ! '>='
|
|
148
|
+
- !ruby/object:Gem::Version
|
|
149
|
+
version: 1.2.2
|
|
150
|
+
type: :development
|
|
151
|
+
prerelease: false
|
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
153
|
+
none: false
|
|
154
|
+
requirements:
|
|
155
|
+
- - ! '>='
|
|
156
|
+
- !ruby/object:Gem::Version
|
|
157
|
+
version: 1.2.2
|
|
158
|
+
description: Eagleplatform authorization center client module
|
|
159
|
+
email:
|
|
160
|
+
- d.g.andreev@gmail.com
|
|
161
|
+
executables: []
|
|
162
|
+
extensions: []
|
|
163
|
+
extra_rdoc_files: []
|
|
164
|
+
files:
|
|
165
|
+
- .rspec
|
|
166
|
+
- Gemfile
|
|
167
|
+
- Gemfile.lock
|
|
168
|
+
- MIT-LICENSE
|
|
169
|
+
- README
|
|
170
|
+
- Rakefile
|
|
171
|
+
- VERSION
|
|
172
|
+
- app/controllers/devise/yauth_sessions_controller.rb
|
|
173
|
+
- app/controllers/devise/yauth_settings_controller.rb
|
|
174
|
+
- app/views/yauth_sessions/new.html.haml
|
|
175
|
+
- devise_yauth_token.gemspec
|
|
176
|
+
- lib/.DS_Store
|
|
177
|
+
- lib/account_ext.rb
|
|
178
|
+
- lib/billing_client.rb
|
|
179
|
+
- lib/devise_yauth_token.rb
|
|
180
|
+
- lib/devise_yauth_token/devise_yauth_application_controller.rb
|
|
181
|
+
- lib/devise_yauth_token/devise_yauth_token_helper.rb
|
|
182
|
+
- lib/devise_yauth_token/engine.rb
|
|
183
|
+
- lib/devise_yauth_token/fake_api_helper.rb
|
|
184
|
+
- lib/devise_yauth_token/insque.rb
|
|
185
|
+
- lib/devise_yauth_token/model.rb
|
|
186
|
+
- lib/devise_yauth_token/rails.rb
|
|
187
|
+
- lib/devise_yauth_token/routes.rb
|
|
188
|
+
- lib/devise_yauth_token/strategy.rb
|
|
189
|
+
- lib/devise_yauth_token/version.rb
|
|
190
|
+
- lib/generators/billing_client/billing_client_generator.rb
|
|
191
|
+
- lib/generators/billing_client/templates/billing.rb
|
|
192
|
+
- lib/generators/billing_client/templates/billing_config.yml
|
|
193
|
+
- lib/generators/devise_yauth_token/.DS_Store
|
|
194
|
+
- lib/generators/devise_yauth_token/devise_yauth_token_generator.rb
|
|
195
|
+
- lib/generators/devise_yauth_token/templates/accout.rb
|
|
196
|
+
- lib/generators/devise_yauth_token/templates/accout_host.rb
|
|
197
|
+
- lib/generators/devise_yauth_token/templates/add_columns_to_users.rb
|
|
198
|
+
- lib/generators/devise_yauth_token/templates/create_account_hosts.rb
|
|
199
|
+
- lib/generators/devise_yauth_token/templates/create_accounts.rb
|
|
200
|
+
- lib/generators/devise_yauth_token/templates/eagle.rb
|
|
201
|
+
- lib/generators/devise_yauth_token/templates/eagle.yml
|
|
202
|
+
- lib/user_ext.rb
|
|
203
|
+
- spec/billing_spec.rb
|
|
204
|
+
- spec/devise_yauth_token_spec.rb
|
|
205
|
+
- spec/spec_helper.rb
|
|
206
|
+
homepage:
|
|
207
|
+
licenses: []
|
|
208
|
+
post_install_message:
|
|
209
|
+
rdoc_options:
|
|
210
|
+
- --charset=UTF-8
|
|
211
|
+
require_paths:
|
|
212
|
+
- lib
|
|
213
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
214
|
+
none: false
|
|
215
|
+
requirements:
|
|
216
|
+
- - ! '>='
|
|
217
|
+
- !ruby/object:Gem::Version
|
|
218
|
+
version: '0'
|
|
219
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
|
+
none: false
|
|
221
|
+
requirements:
|
|
222
|
+
- - ! '>='
|
|
223
|
+
- !ruby/object:Gem::Version
|
|
224
|
+
version: '0'
|
|
225
|
+
requirements: []
|
|
226
|
+
rubyforge_project:
|
|
227
|
+
rubygems_version: 1.8.24
|
|
228
|
+
signing_key:
|
|
229
|
+
specification_version: 3
|
|
230
|
+
summary: Eagleplatform authorization center client module
|
|
231
|
+
test_files: []
|
|
232
|
+
has_rdoc:
|