bbmb 2.1.3 → 2.1.4
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -3
- data/Gemfile +2 -0
- data/History.txt +11 -8
- data/Rakefile +1 -1
- data/bbmb.gemspec +3 -3
- data/lib/bbmb.rb +1 -1
- data/lib/bbmb/config.rb +6 -2
- data/lib/bbmb/html/state/change_password.rb +3 -3
- data/lib/bbmb/html/state/current_order.rb +1 -1
- data/lib/bbmb/html/state/customer.rb +6 -6
- data/lib/bbmb/html/state/customers.rb +2 -2
- data/lib/bbmb/html/state/global.rb +4 -2
- data/lib/bbmb/html/state/init.rb +1 -0
- data/lib/bbmb/html/state/login.rb +5 -1
- data/lib/bbmb/html/state/viral/admin.rb +2 -1
- data/lib/bbmb/html/state/viral/customer.rb +4 -3
- data/lib/bbmb/html/util/known_user.rb +42 -10
- data/lib/bbmb/html/util/session.rb +32 -7
- data/lib/bbmb/html/util/validator.rb +5 -5
- data/lib/bbmb/html/view/customers.rb +7 -22
- data/lib/bbmb/html/view/head.rb +1 -1
- data/lib/bbmb/html/view/navigation.rb +1 -0
- data/lib/bbmb/model/customer.rb +19 -6
- data/lib/bbmb/model/order.rb +8 -5
- data/lib/bbmb/model/product.rb +14 -45
- data/lib/bbmb/persistence/odba.rb +4 -4
- data/lib/bbmb/util/invoicer.rb +1 -0
- data/lib/bbmb/util/mail.rb +1 -2
- data/lib/bbmb/util/polling_manager.rb +11 -6
- data/lib/bbmb/util/server.rb +122 -68
- data/lib/bbmb/util/transfer_dat.rb +1 -1
- data/lib/bbmb/util/updater.rb +3 -3
- data/lib/bbmb/version.rb +1 -1
- data/test/html/state/test_customers.rb +1 -2
- data/test/model/test_customer.rb +1 -1
- data/test/model/test_order.rb +2 -2
- data/test/model/test_product.rb +11 -27
- data/test/model/test_promotion.rb +3 -3
- data/test/test_bbmb.rb +0 -1
- data/test/util/test_invoicer.rb +8 -8
- data/test/util/test_polling_manager.rb +12 -17
- data/test/util/test_server.rb +2 -6
- data/test/util/test_transfer_dat.rb +0 -3
- metadata +5 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3bf4ee6e274ed39fab6f5ba33c8ea2de97fb4ad
|
4
|
+
data.tar.gz: fc49c06f72935b949ddb983497337c97730e582f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 142d5480d2bbba2aad68dade8ee5ad11d9075d2e4de140d2d282bd315ed8d777d6edef257c5ac28bd787d4ae55f1532dad94adcdad32a28c22ba4234df55354a
|
7
|
+
data.tar.gz: fb162c84adfdb3ef9fc0d3b942a531b216b56dfaf662e07f1a90a7cbd817e2b706f0fce15e9682a125653f366b6068df48048c35a0f740d5bd69f0fb63a84bcb
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/History.txt
CHANGED
@@ -1,18 +1,21 @@
|
|
1
|
-
=== 2.1.
|
1
|
+
=== 2.1.4 / 15.05.2017
|
2
2
|
|
3
|
-
*
|
3
|
+
* Admin users create new customer if it does not exist with the given customerid
|
4
|
+
* Fixed set new password for admin users
|
5
|
+
* Fixed importer
|
6
|
+
* Ported to SBSM with rack (Using SBSM.info/debug for logging)
|
4
7
|
|
5
|
-
=== 2.1.
|
8
|
+
=== 2.1.3 / 09.09.2016
|
6
9
|
|
7
|
-
*
|
10
|
+
* minor improvements
|
8
11
|
|
9
|
-
=== 2.1.
|
12
|
+
=== 2.1.2 / 07.09.2016
|
10
13
|
|
11
|
-
*
|
14
|
+
* minor improvements
|
12
15
|
|
13
|
-
=== 2.1.
|
16
|
+
=== 2.1.1 / 02.09.2016
|
14
17
|
|
15
|
-
*
|
18
|
+
* minor improvements
|
16
19
|
|
17
20
|
=== 2.0.9 / 20.07.2016
|
18
21
|
|
data/Rakefile
CHANGED
data/bbmb.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = BBMB::VERSION
|
9
9
|
spec.author = "Masaomi Hatakeyama, Zeno R.R. Davatz, Niklaus Giger"
|
10
10
|
spec.email = "mhatakeyama@ywesee.com, zdavatz@ywesee.com, ngiger@ywesee.com"
|
11
|
-
spec.description = "
|
12
|
-
spec.summary = "
|
11
|
+
spec.description = "A Ruby gem for browser based orders of approved medical drugs in Switzerland"
|
12
|
+
spec.summary = "browser based orders of medical drugs"
|
13
13
|
spec.homepage = "https://github.com/zdavatz/bbmb"
|
14
14
|
spec.license = "GPL-v2"
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "ydbd-pg", '>= 0.5.2'
|
22
22
|
spec.add_dependency "ydbi", '>= 0.5.3'
|
23
23
|
spec.add_dependency "json"
|
24
|
-
spec.add_dependency "sbsm"
|
24
|
+
# spec.add_dependency "sbsm", '>= 1.3.5'
|
25
25
|
spec.add_dependency "htmlgrid"
|
26
26
|
spec.add_dependency "ydim", '>= 0.5.1'
|
27
27
|
spec.add_dependency "syck"
|
data/lib/bbmb.rb
CHANGED
data/lib/bbmb/config.rb
CHANGED
@@ -59,8 +59,7 @@ module BBMB
|
|
59
59
|
'invoice_percentage' => 0.1,
|
60
60
|
'i2_100' => 'YWESEE',
|
61
61
|
'load_files' => ['bbmb/util/csv_importer'],
|
62
|
-
'
|
63
|
-
'log_level' => 'INFO',
|
62
|
+
'log_pattern' => File.join(Dir.pwd, 'log','/%Y/%m/%d/app_log'),
|
64
63
|
'mail_suppress_sending' => false,
|
65
64
|
'mail_confirm_body' => nil,
|
66
65
|
'mail_confirm_cc' => [],
|
@@ -100,6 +99,11 @@ module BBMB
|
|
100
99
|
'vat_rate' => 2.4,
|
101
100
|
'ydim_config' => nil,
|
102
101
|
'ydim_id' => nil,
|
102
|
+
'yus_domain' => 'com.davaz',
|
103
|
+
'yus_server' => nil,
|
104
|
+
'test_user' => nil,
|
105
|
+
'test_password' => nil,
|
106
|
+
'yus_uri' => 'drbssl://localhost:9997',
|
103
107
|
}
|
104
108
|
|
105
109
|
config = RCLConf::RCLConf.new(ARGV, defaults)
|
@@ -24,7 +24,7 @@ class ChangePassword < Global
|
|
24
24
|
update_user input
|
25
25
|
unless(error?)
|
26
26
|
BBMB.persistence.save(@model)
|
27
|
-
return State::Info.new(@session, :message => :login_data_saved,
|
27
|
+
return State::Info.new(@session, :message => :login_data_saved,
|
28
28
|
:event => :home)
|
29
29
|
end
|
30
30
|
end
|
@@ -36,8 +36,8 @@ class ChangePassword < Global
|
|
36
36
|
@model.protect!(:email)
|
37
37
|
if(passhash = input.delete(:confirm_pass))
|
38
38
|
begin
|
39
|
-
@session.
|
40
|
-
rescue Yus::YusError => e
|
39
|
+
@session.auth_session.set_password(email, passhash)
|
40
|
+
rescue Yus::YusError => e
|
41
41
|
@errors.store(:pass, create_error(:e_pass_not_set, :email, email))
|
42
42
|
end
|
43
43
|
end
|
@@ -30,7 +30,7 @@ class CurrentOrder < Global
|
|
30
30
|
end
|
31
31
|
def commit
|
32
32
|
## update most recent values and ensure @model = _customer.current_order
|
33
|
-
do_update
|
33
|
+
do_update
|
34
34
|
if @session.lookandfeel.enabled?(:terms_of_service, false)
|
35
35
|
if @session.user_input(:accept_terms)
|
36
36
|
_customer.terms_last_accepted ||= Time.now
|
@@ -31,9 +31,9 @@ class Customer < Global
|
|
31
31
|
@cleartext = BBMB::Util::PasswordGenerator.generate(@model)
|
32
32
|
passhash = @session.validate(:pass, @cleartext)
|
33
33
|
begin
|
34
|
-
@session.
|
34
|
+
@session.auth_session.grant(email, 'login',
|
35
35
|
BBMB.config.auth_domain + '.Customer')
|
36
|
-
@session.
|
36
|
+
@session.auth_session.set_password(email, passhash)
|
37
37
|
rescue Yus::YusError
|
38
38
|
@errors.store(:pass, create_error(:e_pass_not_set, :pass, nil))
|
39
39
|
end
|
@@ -69,7 +69,7 @@ class Customer < Global
|
|
69
69
|
@errors.store(:error, create_error(:error, :error, nil))
|
70
70
|
@errors.store(:user, create_error(:e_user_unsaved, :error, nil))
|
71
71
|
else
|
72
|
-
input.each { |key, val|
|
72
|
+
input.each { |key, val|
|
73
73
|
writer = "#{key}="
|
74
74
|
if(@model.respond_to?(writer) && @model.send(key) != val)
|
75
75
|
@model.send(writer, val)
|
@@ -93,10 +93,10 @@ class Customer < Global
|
|
93
93
|
@model.protect!(:email)
|
94
94
|
if(passhash = input.delete(:confirm_pass))
|
95
95
|
begin
|
96
|
-
@session.
|
96
|
+
@session.auth_session.grant(email, 'login',
|
97
97
|
BBMB.config.auth_domain + '.Customer')
|
98
|
-
@session.
|
99
|
-
rescue Yus::YusError => e
|
98
|
+
@session.auth_session.set_password(email, passhash)
|
99
|
+
rescue Yus::YusError => e
|
100
100
|
@errors.store(:pass, create_error(:e_pass_not_set, :email, email))
|
101
101
|
end
|
102
102
|
end
|
@@ -16,7 +16,7 @@ module BBMB
|
|
16
16
|
start = Time.now
|
17
17
|
@model = BBMB.persistence.all(Model::Customer)
|
18
18
|
@sortby = [:organisation]
|
19
|
-
|
19
|
+
SBSM.debug('State') {
|
20
20
|
sprintf("Customers#init: loaded %i customers in %1.5fs",
|
21
21
|
@model.size, Time.now - start)
|
22
22
|
}
|
@@ -51,7 +51,7 @@ module BBMB
|
|
51
51
|
|
52
52
|
def page(model)
|
53
53
|
index = @session.user_input(:index).to_i
|
54
|
-
step = @session.user.pagestep || BBMB.config.pagestep
|
54
|
+
step = @session.user.get_preference(:pagestep) || BBMB.config.pagestep
|
55
55
|
page = OpenStruct.new
|
56
56
|
page.index = index
|
57
57
|
page.first = index + 1
|
@@ -22,10 +22,12 @@ module BBMB
|
|
22
22
|
module Html
|
23
23
|
module State
|
24
24
|
class Global < SBSM::State
|
25
|
-
def initialize(
|
26
|
-
|
25
|
+
def initialize(session, model)
|
26
|
+
SBSM.info "BBMB::Html::State Global session #{session.class} model #{model.class}"
|
27
|
+
super(session, model)
|
27
28
|
end
|
28
29
|
def logout
|
30
|
+
SBSM.info "BBMB::Html::State Global logout"
|
29
31
|
@session.logout
|
30
32
|
State::Login.new(@session, nil)
|
31
33
|
end
|
data/lib/bbmb/html/state/init.rb
CHANGED
@@ -15,6 +15,8 @@ module BBMB
|
|
15
15
|
class Login < SBSM::State
|
16
16
|
VIEW = View::Login
|
17
17
|
def login
|
18
|
+
# is called from sbsm
|
19
|
+
SBSM.info "BBMB::Html::State Login login #{user_input(:email)} #{user_input(:pass)} #{@user.class}"
|
18
20
|
reconsider_permissions(@session.login)
|
19
21
|
trigger(:home)
|
20
22
|
rescue Yus::UnknownEntityError
|
@@ -61,11 +63,13 @@ TVS/Virbac-Nr: #{input[:customer_id]}
|
|
61
63
|
}
|
62
64
|
end
|
63
65
|
def viral_modules(user)
|
64
|
-
[
|
66
|
+
[
|
65
67
|
['.Admin', State::Viral::Admin],
|
66
68
|
['.Customer', State::Viral::Customer],
|
67
69
|
].each { |key, mod|
|
70
|
+
puts "viral_modules trying #{key} #{mod}"
|
68
71
|
if(user.allowed?("login", BBMB.config.auth_domain + key))
|
72
|
+
puts "Was allowed via user #{user} for #{mod}"
|
69
73
|
yield mod
|
70
74
|
end
|
71
75
|
}
|
@@ -23,7 +23,8 @@ module Admin
|
|
23
23
|
Model::Customer.find_by_customer_id(customer_id)
|
24
24
|
end
|
25
25
|
def home
|
26
|
-
|
26
|
+
home = @session.user.get_preference(:home) || :customers
|
27
|
+
trigger(home)
|
27
28
|
end
|
28
29
|
def order
|
29
30
|
if(order_id = @session.user_input(:order_id))
|
@@ -23,7 +23,7 @@ module Customer
|
|
23
23
|
:search_favorites => State::FavoritesResult,
|
24
24
|
}
|
25
25
|
def _customer
|
26
|
-
@customer ||= Model::Customer.find_by_email(@session.
|
26
|
+
@customer ||= Model::Customer.find_by_email(@session.auth_session.name)
|
27
27
|
end
|
28
28
|
def _increment_order(order)
|
29
29
|
quantities = user_input(:quantity)
|
@@ -58,7 +58,7 @@ module Customer
|
|
58
58
|
false
|
59
59
|
else
|
60
60
|
quantities.each { |article_number, quantity|
|
61
|
-
order.add(quantity.to_i,
|
61
|
+
order.add(quantity.to_i,
|
62
62
|
Model::Product.find_by_article_number(article_number))
|
63
63
|
}
|
64
64
|
BBMB.persistence.save(order, _customer)
|
@@ -91,7 +91,8 @@ module Customer
|
|
91
91
|
_transfer(_customer.favorites)
|
92
92
|
end
|
93
93
|
def home
|
94
|
-
|
94
|
+
home = @session.user.get_preference(:home) || :current_order
|
95
|
+
trigger(home)
|
95
96
|
end
|
96
97
|
def increment_order
|
97
98
|
if(_increment_order(_customer.current_order))
|
@@ -15,36 +15,68 @@ class KnownUser < SBSM::User
|
|
15
15
|
#
|
16
16
|
### Customers need permissions for:
|
17
17
|
# login BBMB.config.auth_domain + ".Customer"
|
18
|
-
attr_reader :auth_session
|
18
|
+
attr_reader :auth_session
|
19
19
|
PREFERENCE_KEYS = [ :home, :pagestep ]
|
20
20
|
PREFERENCE_KEYS.each { |key|
|
21
21
|
define_method(key) {
|
22
|
-
remote_call(:get_preference, key)
|
22
|
+
remote_call(:get_preference, key)
|
23
23
|
}
|
24
|
-
}
|
24
|
+
} if false
|
25
25
|
def initialize(session)
|
26
|
-
|
26
|
+
puts "BBMB::Html::Util::KnownUser.new object_id is #{self.object_id} SBSM::Session ? #{self.is_a? SBSM::Session} auth_session is #{session.class}"
|
27
|
+
@auth_session = session.auth_session
|
28
|
+
# puts "backtrace #{caller.join("\n")}"
|
29
|
+
# @auth_session.auth.allowed?('edit', 'yus.entities')
|
27
30
|
end
|
28
31
|
def allowed?(action, key=nil)
|
32
|
+
if @auth_session
|
33
|
+
return @auth_session.allowed?(action, key)
|
34
|
+
return @auth_session.remote_call(:allowed?, action, key)
|
35
|
+
end
|
36
|
+
SBSM.debug('User ' + sprintf('allowed?(%s, %s)', action, key))
|
37
|
+
if defined?(yus_user) && yus_user
|
38
|
+
allowed = yus_user.send(:allowed?, action, key)
|
39
|
+
end if false
|
40
|
+
return true
|
41
|
+
# SBSM.debug('User'+ sprintf('allowed?(%s, %s) -> %s', action, key, allowed))
|
42
|
+
return allowed
|
43
|
+
# session.rb:25:in `login' BBMB::Html::Util::Session login claude.meier@gmx.net 5972659ce6c7f9b2356c0e650c7c40a3
|
29
44
|
allowed = remote_call(:allowed?, action, key)
|
30
|
-
|
45
|
+
SBSM.debug('User') {
|
31
46
|
sprintf('%s: allowed?(%s, %s) -> %s', name, action, key, allowed)
|
32
47
|
}
|
33
48
|
allowed
|
49
|
+
rescue => error
|
50
|
+
puts error
|
51
|
+
puts error.backtrace.join("\n")
|
34
52
|
end
|
35
53
|
def entity_valid?(email)
|
36
|
-
!!(allowed?('edit', 'yus.entities') \
|
37
|
-
&& (entity =
|
54
|
+
!!(@auth_session.allowed?('edit', 'yus.entities') \
|
55
|
+
&& (entity = @auth_session.find_entity(email)) && entity.valid?)
|
38
56
|
end
|
39
57
|
def navigation
|
58
|
+
puts "BBMB::Html::Util::KnownUser navigation returning [ :logout ]"
|
40
59
|
[ :logout ]
|
41
60
|
end
|
61
|
+
def get_preference(key)
|
62
|
+
return @auth_session.get_preference(key.to_s)
|
63
|
+
remote_call(:get_preference, key)
|
64
|
+
end
|
42
65
|
def remote_call(method, *args, &block)
|
43
|
-
|
66
|
+
SBSM.debug("remote_call #{method} args #{args} block.nil? #{block.nil?}")
|
67
|
+
if defined?(@auth_session) && @auth_session.is_a?(DRb::DRbObject)
|
68
|
+
return @auth_session.send(method, *args, &block)
|
69
|
+
else
|
70
|
+
return false
|
71
|
+
return super(method, *args, &block)
|
72
|
+
end
|
44
73
|
rescue RangeError, DRb::DRbError => e
|
45
|
-
|
74
|
+
SBSM.info('auth') { e }
|
75
|
+
rescue error
|
76
|
+
puts error
|
77
|
+
puts error.backtrace.join("\n")
|
46
78
|
end
|
47
|
-
alias :method_missing :remote_call
|
79
|
+
# alias :method_missing :remote_call
|
48
80
|
end
|
49
81
|
end
|
50
82
|
end
|
@@ -1,14 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
|
+
require 'uri'
|
4
5
|
require 'bbmb/config'
|
5
6
|
require 'sbsm/session'
|
6
7
|
require 'bbmb/html/state/global'
|
7
|
-
begin
|
8
|
-
require 'bbmb/html/util/lookandfeel'
|
9
|
-
rescue LoadError
|
10
|
-
# ignore it for unit tests
|
11
|
-
end
|
12
8
|
require 'bbmb/html/util/known_user'
|
13
9
|
|
14
10
|
|
@@ -21,12 +17,35 @@ class Session < SBSM::Session
|
|
21
17
|
DEFAULT_STATE = State::Login
|
22
18
|
EXPIRES = BBMB.config.session_timeout
|
23
19
|
PERSISTENT_COOKIE_NAME = "bbmb-barcodereader"
|
20
|
+
if uri = URI.parse(BBMB.config.http_server)
|
21
|
+
SERVER_NAME = uri.host
|
22
|
+
end
|
23
|
+
attr_reader :email, :pass, :auth_session
|
24
|
+
def initializexx(app:, cookie_name:, trans_handler:, validator:)
|
25
|
+
super(app, cookie_name, trans_handler, validator)
|
26
|
+
end
|
24
27
|
def login
|
25
|
-
@
|
28
|
+
@email = user_input(:email)
|
29
|
+
@password = user_input(:pass)
|
30
|
+
# @user.respond_to?(:session=)) is FALSE!!!!
|
26
31
|
@user.session = self if(@user.respond_to?(:session=))
|
32
|
+
# Before rack: @user = @app.login(user_input(:email), user_input(:pass))
|
33
|
+
@auth = DRb::DRbObject.new(nil, BBMB.config.auth_url)
|
34
|
+
@auth_session = @auth.login(user_input(:email), user_input(:pass), BBMB.config.auth_domain) # logs in claude meier without problem, but not admin
|
35
|
+
if @auth_session.valid?
|
36
|
+
@user = BBMB::Html::Util::KnownUser.new(self) # TODO:Should we set it already in the initialize method?
|
37
|
+
else
|
38
|
+
@user = SBSM::UnknownUser
|
39
|
+
end
|
40
|
+
SBSM.info "BBMB::Html::Util::Session login #{user_input(:email)} #{user_input(:pass)} #{@user.class} @auth #{@auth} auth_session #{@auth_session}"
|
41
|
+
pp @auth
|
42
|
+
pp @auth_session
|
43
|
+
pp @user
|
27
44
|
@user
|
28
45
|
end
|
29
46
|
def logout
|
47
|
+
SBSM.info "BBMB::Html::Util::Session logout @auth_session #{@auth_session.class}"
|
48
|
+
$stdout.sync = true
|
30
49
|
@app.logout(@user.auth_session) if(@user.respond_to?(:auth_session))
|
31
50
|
super
|
32
51
|
end
|
@@ -35,11 +54,12 @@ class Session < SBSM::Session
|
|
35
54
|
if(@lookandfeel.nil? \
|
36
55
|
|| (@lookandfeel.language != persistent_user_input(:language)))
|
37
56
|
require 'bbmb/html/util/lookandfeel'
|
38
|
-
@lookandfeel = Lookandfeel.new(self)
|
57
|
+
@lookandfeel = Lookandfeel.new(self)
|
39
58
|
end
|
40
59
|
@lookandfeel
|
41
60
|
end
|
42
61
|
def process(request)
|
62
|
+
SBSM.info "BBMB::Html::Util::Session process"
|
43
63
|
begin
|
44
64
|
if(@user.is_a?(KnownUser) && @user.auth_session.expired?)
|
45
65
|
logout
|
@@ -52,6 +72,11 @@ class Session < SBSM::Session
|
|
52
72
|
def validate(key, value)
|
53
73
|
@validator.validate(key, value)
|
54
74
|
end
|
75
|
+
def remote_call(method, *args, &block)
|
76
|
+
@yus_user.send(method, *args, &block)
|
77
|
+
rescue RangeError, DRb::DRbError => e
|
78
|
+
BBMB.logger.error('auth') { e }
|
79
|
+
end
|
55
80
|
end
|
56
81
|
end
|
57
82
|
end
|