Evaluating how I can save the authentication received via login in a manner that is accessible, when I use the auth_session. Checking whether this work via a global variable.
Started pry session in bbmb/lib/bbmb/html/util/session.rb BBMB::Html::Util::Session#login:
# relevant stack trace /home/niklaus/git/bbmb/lib/bbmb/html/util/session.rb:37:in `login' /home/niklaus/git/bbmb/lib/bbmb/html/state/login.rb:18:in `login' /home/niklaus/git/sbsm/lib/sbsm/state.rb:197:in `_trigger' /home/niklaus/git/sbsm/lib/sbsm/state.rb:186:in `trigger' /home/niklaus/git/sbsm/lib/sbsm/session.rb:222:in `block in process_rack' /home/niklaus/git/sbsm/lib/sbsm/session.rb:213:in `synchronize' /home/niklaus/git/sbsm/lib/sbsm/session.rb:213:in `process_rack' /home/niklaus/git/sbsm/lib/sbsm/app.rb:135:in `call' # Tried the solution before rack and got > @user = @app.login(user_input(:email), user_input(:pass)) NoMethodError: undefined method `login' for nil:NilClass from /home/niklaus/git/bbmb/lib/bbmb/util/server.rb:195:in `login' # Trying my new solution where I store the auth in the @app. And got [4] pry(#<BBMB::Html::Util::Session>)> @user = @app.auth.login(user_input(:email), user_input(:pass)) ArgumentError: wrong number of arguments (given 2, expected 3) from (druby://virbac.bbmb.ngiger.ch:12003) /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/yus-1.0.4/lib/yus/server.rb:24:in `login'
Tried to compare this with a pry session in the before virbac, but there I get the following error (seen in the service log)
error in SBSM::Session#process: /de/bbmb NoMethodError undefined method `session' for #<Yus::EntitySession:0x0055a9f2360fa0> (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/odba-1.1.2/lib/odba/drbwrapper.rb:28:in `method_missing' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1624:in `perform_without_block'
The yus/server login method is defined as followed def login(name, password, domain)
Adding the domain parameter solved the problem, see the pry snippet
[6] pry(#<BBMB::Html::Util::Session>)> @user = @app.auth.login(user_input(:email), user_input(:pass), BBMB.config.auth_domain) => #<DRb::DRbObject:0x00555fa811a780 @ref=47094204734380, @uri="druby://127.0.0.1:12003">
Now I can continue until being in lib/bbmb/html/state/viral/customer.rb @ line 96 BBMB::Html::State::Viral::Customer#home: where I have problems getting the @user.home attribute
# relevant stack trace "/home/niklaus/git/bbmb/lib/bbmb/html/state/viral/customer.rb:96:in `home'", "/home/niklaus/git/sbsm/lib/sbsm/state.rb:197:in `_trigger'", "/home/niklaus/git/sbsm/lib/sbsm/state.rb:186:in `trigger'", "/home/niklaus/git/sbsm/lib/sbsm/viralstate.rb:38:in `trigger'", "/home/niklaus/git/bbmb/lib/bbmb/html/state/login.rb:19:in `login'", "/home/niklaus/git/sbsm/lib/sbsm/state.rb:197:in `_trigger'", "/home/niklaus/git/sbsm/lib/sbsm/state.rb:186:in `trigger'", "/home/niklaus/git/sbsm/lib/sbsm/session.rb:222:in `block in process_rack'", "/home/niklaus/git/sbsm/lib/sbsm/session.rb:213:in `synchronize'", "/home/niklaus/git/sbsm/lib/sbsm/session.rb:213:in `process_rack'", "/home/niklaus/git/sbsm/lib/sbsm/app.rb:135:in `call'", [5] pry(#<BBMB::Html::State::Login>)> trigger(@session.user.home || :current_order) NoMethodError: undefined method `home' for #<Yus::EntitySession:0x0055a9f27ea968> from (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/odba-1.1.2/lib/odba/drbwrapper.rb:28:in `method_missing' [6] pry(#<BBMB::Html::State::Login>)> @session.user.home NoMethodError: undefined method `home' for #<Yus::EntitySession:0x0055a9f27ea968> from (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/odba-1.1.2/lib/odba/drbwrapper.rb:28:in `method_missing'
Why?
Looks like BBMB::Html::State::Login#login: in bbmb/lib/bbmb/html/state/login.rb has a problem. Followed it via pry
[1] pry(#<BBMB::Html::State::Login>)> reconsider_permissions(@session.login) session.rb:36:in `login' BBMB::Html::Util::Session login claude.meier@gmx.net 5972659ce6c7f9b2356c0e650c7c40a3 DRb::DRbObject => [[".Admin", BBMB::Html::State::Viral::Admin], [".Customer", BBMB::Html::State::Viral::Customer]] [2] pry(#<BBMB::Html::State::Login>)> trigger(:home) NoMethodError: undefined method `home' for #<Yus::EntitySession:0x0055a9f2a7db80> from (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/odba-1.1.2/lib/odba/drbwrapper.rb:28:in `method_missing'
Here we have again the problem that under the mod_ruby based version, the @session.user was set upon login. This worked under davaz.com, because there the login of the sbsm-gem was not overridden. But bbmb overwrites it.
Setting binding.pry in all 4 logout methods of bbmb to see whether we correctly initialize the unkonwn_user attribute. logout is called in the following temporal order
And here we have our problem.
Verified with pry in lib/sbsm/session unknown user that I indeed have a problem to the @unkown_user's home attribute
[1] pry(#<BBMB::Html::Util::Session>)> @unknown_user.class => BBMB::Html::Util::KnownUser [2] pry(#<BBMB::Html::Util::Session>)> @unknown_user.home undefined method `get_preference' for #<BBMB::Util::App:0x00561001ba4278> /home/niklaus/git/sbsm/lib/sbsm/session.rb:144:in `method_missing' /home/niklaus/git/bbmb/lib/bbmb/html/util/known_user.rb:49:in `remote_call' /home/niklaus/git/bbmb/lib/bbmb/html/util/known_user.rb:22:in `block (2 levels) in <class:KnownUser>'
Must fix this problem. Done by changing in lib/bbmb/html/state/viral/customer.rb the home method to use @session.user.get_preference(:home)
instead of @session.user.home
Now the next problem is that I the following error backtrace
NoMethodError: undefined method `navigation' for #<Yus::EntitySession:0x0055a9f2a23108> (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/odba-1.1.2/lib/odba/drbwrapper.rb:28:in `method_missing' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1624:in `perform_without_block' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1584:in `perform' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1668:in `block (2 levels) in main_loop' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1664:in `loop' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1664:in `block in main_loop' /home/niklaus/git/sbsm/lib/sbsm/session.rb:427:in `navigation' /home/niklaus/git/sbsm/lib/sbsm/lookandfeel.rb:132:in `navigation' /var/www/virbac_rack.bbmb.ch/lib/bbmb/html/util/lookandfeel.rb:473:in `navigation' /home/niklaus/git/bbmb/lib/bbmb/html/view/navigation.rb:24:in `build_navigation' /home/niklaus/git/bbmb/lib/bbmb/html/view/navigation.rb:20:in `init'
Backtrace means, that we sucessfully authenticated agains YUS, but we are unable to display the answer correctly. Tried lib/bbmb/html/util/lookandfeel.rb to patch the navigation method like this
def navigation begin default_value = super puts "navigation return #{zone_navigation + default_value}" zone_navigation + default_value rescue => error prefs = @session.user.get_preference(:navigation) puts "navigation returns #{zone_navigation + (prefs ? prefs : [])}" zone_navigation + (prefs ? prefs : []) end end
But this leads to the situation that we display a logged in user, but that the home does not display the actual order. Screen looks like
When clicking on the link "Warenkorb (Home)" I got an exception about undefined Module BBMB::Promotion. Fixed this by adding a require for all used BBMB::Model classes in lib/bbmb/util/server.rb. Now the Warenkorb displays correctly. Also clicking on each of the other links on right of Warenkorb the following produce errors
In each case we cannot use the BBMB.persistence attribute is nil instead of pointing to the ODBA persistence. After adding a definition (see below) for BBMB.persistence in bbmb/lib/bbmb/util/server.rb the problems went away.
+ def self.persistence + @@persistence ||= BBMB::Persistence::ODBA + end
Fixed the problem with the missing "Warenkorb (Home) for a normal user. The logout link is not shown.
Looking now why we have problem logging in as admin.
Here we have the following problem
NoMethodError: undefined method `pagestep' for #<Yus::EntitySession:0x0055a9f2a03088> (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/odba-1.1.2/lib/odba/drbwrapper.rb:28:in `method_missing' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1624:in `perform_without_block' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1584:in `perform' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1668:in `block (2 levels) in main_loop' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1664:in `loop' (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/2.4.0/drb/drb.rb:1664:in `block in main_loop' /home/niklaus/git/bbmb/lib/bbmb/html/state/customers.rb:54:in `page' /home/niklaus/git/bbmb/lib/bbmb/html/state/customers.rb:48:in `block in make_filter' /home/niklaus/git/sbsm/lib/sbsm/state.rb:239:in `view' /home/niklaus/git/sbsm/lib/sbsm/state.rb:173:in `to_html' /home/niklaus/git/sbsm/lib/sbsm/session.rb:484:in `to_html' /home/niklaus/git/sbsm/lib/sbsm/session.rb:243:in `block in process_rack' /home/niklaus/git/sbsm/lib/sbsm/session.rb:212:in `synchronize' /home/niklaus/git/sbsm/lib/sbsm/session.rb:212:in `process_rack' /home/niklaus/git/sbsm/lib/sbsm/app.rb:135:in `call'
This was easily fixed.
Now I must find a way in bbmb/lib/bbmb/html/view/customers.rb @ line 107 BBMB::Html::View::CustomersList#valid to check the validity of the email. Eg. old code is @session.user.entity_valid?(model.email)
which throws the following error
NoMethodError: undefined method `entity_valid?' for #<Yus::EntitySession:0x0055a9f2764480> from (druby://127.0.0.1:12003) /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/odba-1.1.2/lib/odba/drbwrapper.rb:28:in `method_missing'
This method is only defined in bbmb/lib/bbmb/html/util/known_user.rb.
Was able to start the old (non rack based) version of virbac by first installing all needed gems via /usr/local/bin/gem-240 and starting it in /var/www/virbac.bbmb.ch using sudo -u bbmb /usr/local/bin/ruby-240 /usr/local/bin/bbmbd -I/var/www/virbac.bbmb.ch/lib -rydim/invoice /usr/local/bin/bbmbd config=/var/www/virbac.bbmb.ch/etc/config.yml
Debugging via pry in /usr/local/ruby-2.4.0/lib/ruby/gems/2.4.0/gems/bbmb-2.1.3/lib/bbmb/html/view/customers.rb shows
[1] pry(#<BBMB::Html::View::CustomersList>)> model.respond_to?(:valid) => false [2] pry(#<BBMB::Html::View::CustomersList>)> @session.user.entity_valid?(model.email) Checking for validity I am BBMB::Html::Util::KnownUser D, [2017-05-08T15:07:10.300747 #12386] DEBUG -- User: admin@virbac.ch: allowed?(edit, yus.entities) -> true => false [3] pry(#<BBMB::Html::View::CustomersList>)> @session.user => #<BBMB::Html::Util::KnownUser:0x007fea80db54f8 @auth_session=#<DRb::DRbObject:0x007fea80db5570 @ref=47367666624640, @uri="druby://127.0.0.1:12003">> [4] pry(#<BBMB::Html::View::CustomersList>)> @session.user.class => BBMB::Html::Util::KnownUser
When I return always true in the method entity_valid? of lib/bbmb/html/util/known_user.rb, I am able to login as admin. Also going to http://virbac_rack.ngiger.ch/de/bbmb/customer/customer_id/708427 does not produce an error.
Must fix tomorrow the problem that the connection to the YUS is not maintained correctly. The sequences of states visited is like this for a normal user
session.rb:383:in `logout' logout "/de/bbmb/home/" setting @state 47177362502640 BBMB::Html::State::Login remember nil session.rb:225:in `block in process_rack' active_state.trigger state 47177362502640 BBMB::Html::State::Login remember nil session.rb:234:in `block in process_rack' Changing from 47177362502640 to state BBMB::Html::State::Login 47177362502640 remember nil sbsm:state new view BBMB::Html::View::Login login.rb:19:in `login' BBMB::Html::State Login login claude.meier@gmx.net xxxx NilClass viral_modules trying .Admin BBMB::Html::State::Viral::Admin viral_modules trying .Customer BBMB::Html::State::Viral::Customer Was allowed via user #<Yus::EntitySession:0x0056294a0aa220> for BBMB::Html::State::Viral::Customer global.rb:26:in `initialize' BBMB::Html::State Global session BBMB::Html::Util::Session model BBMB::Html::Util::KnownUser session.rb:225:in `block in process_rack' active_state.trigger state 70005995639600 BBMB::Html::State::CurrentOrder remember nil session.rb:234:in `block in process_rack' Changing from 47177362502640 to state BBMB::Html::State::CurrentOrder 70005995639600 remember nil sbsm:state new view BBMB::Html::View::CurrentOrder
For an admin use it is
session.rb:383:in `logout' logout "/de/bbmb/home/" setting @state 47396812145780 BBMB::Html::State::Login remember nil session.rb:225:in `block in process_rack' active_state.trigger state 47396812145780 BBMB::Html::State::Login remember nil session.rb:234:in `block in process_rack' Changing from 47396812145780 to state BBMB::Html::State::Login 47396812145780 remember nil sbsm:state new view BBMB::Html::View::Login session.rb:225:in `block in process_rack' active_state.trigger state 47396812145780 BBMB::Html::State::Login remember nil session.rb:234:in `block in process_rack' Changing from 47396812145780 to state BBMB::Html::State::Login 47396812145780 remember nil sbsm:state new view BBMB::Html::View::Login login.rb:19:in `login' BBMB::Html::State Login login admin@virbac.ch 0874edc1ed285ee282a493b21d8bb9e3 NilClass viral_modules trying .Admin BBMB::Html::State::Viral::Admin Was allowed via user #<Yus::EntitySession:0x0056294a10f968> for BBMB::Html::State::Viral::Admin viral_modules trying .Customer BBMB::Html::State::Viral::Customer global.rb:26:in `initialize' BBMB::Html::State Global session BBMB::Html::Util::Session model BBMB::Html::Util::KnownUser session.rb:225:in `block in process_rack' active_state.trigger state 69936301384740 BBMB::Html::State::Customers remember nil customers.rb:19:in `init' State session.rb:234:in `block in process_rack' Changing from 47396812145780 to state BBMB::Html::State::Customers 69936301384740 remember nil sbsm:state new view BBMB::Html::View::Customers