Module: Ooor::RackBehaviour
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
- #get_ooor_public_session(env) ⇒ Object
- #get_ooor_session(env) ⇒ Object
- #session_key ⇒ Object
- #set_ooor!(env) ⇒ Object
- #set_ooor_session!(env, status, headers, body) ⇒ Object
- #share_openerp_session!(headers, ooor_session) ⇒ Object
Instance Method Details
#get_ooor_public_session(env) ⇒ Object
51 52 53 54 |
# File 'lib/ooor/rack.rb', line 51 def get_ooor_public_session(env) config = Ooor::Rack.ooor_public_session_config_mapper.call(env) Ooor.session_handler.retrieve_session(config) end |
#get_ooor_session(env) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/ooor/rack.rb', line 56 def get_ooor_session(env) = env['rack.request.cookie_hash'] || ::Rack::Request.new(env). session = Ooor.session_handler.sessions[[self.session_key()]] session ||= Ooor.session_handler.sessions[['session_id']] unless session # session could have been used by an other worker, try getting it config = Ooor.default_config.merge(Ooor::Rack.ooor_session_config_mapper.call(env)) spec = config[:session_sharing] ? ['session_id'] : [self.session_key()] web_session = Ooor.session_handler.get_web_session(spec) if spec # created by some other worker? unless web_session if config[:session_sharing] web_session = {session_id: ['session_id']} spec = ['session_id'] else web_session = {} spec = nil end end session = Ooor.session_handler.retrieve_session(config, spec, web_session) session.config[:params] = {email: env['warden'].try(:user).try(:email)} end session end |
#session_key ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/ooor/rack.rb', line 43 def session_key if defined?(Rails) Rails.application.config.[:key] else 'rack.session' end end |
#set_ooor!(env) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/ooor/rack.rb', line 29 def set_ooor!(env) ooor_session = self.get_ooor_session(env) ooor_public_session = self.get_ooor_public_session(env) if defined?(I18n) && I18n.locale lang = Ooor::Locale.to_erp_locale(I18n.locale) elsif http_lang = env["HTTP_ACCEPT_LANGUAGE"] lang = http_lang.split(',')[0].gsub('-', '_') else lang = ooor_session.config['lang'] || 'en_US' end context = {'lang' => lang} #TODO also deal with timezone env['ooor'] = {'context' => context, 'ooor_session'=> ooor_session, 'ooor_public_session' => ooor_public_session} end |
#set_ooor_session!(env, status, headers, body) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/ooor/rack.rb', line 79 def set_ooor_session!(env, status, headers, body) case headers["Set-Cookie"] when nil, '' headers["Set-Cookie"] = "" when Array headers["Set-Cookie"] = headers["Set-Cookie"].join("\n") end ooor_session = env['ooor']['ooor_session'] if ooor_session.config[:session_sharing] share_openerp_session!(headers, ooor_session) end response = ::Rack::Response.new body, status, headers response.finish end |
#share_openerp_session!(headers, ooor_session) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/ooor/rack.rb', line 95 def share_openerp_session!(headers, ooor_session) if ooor_session.config[:username] == 'admin' if ooor_session.config[:force_session_sharing] Ooor.logger.debug "Warning! force_session_sharing mode with admin user, this may be a serious security breach! Are you really in development mode?" else raise "Sharing OpenERP session for admin user is suicidal (use force_session_sharing in dev mode and be paranoiac about it)" end end = ooor_session.web_session[:cookie] headers["Set-Cookie"] = [headers["Set-Cookie"], ].join("\n") if ooor_session.web_session[:sid] #v7 session_id = ooor_session.web_session[:session_id] headers["Set-Cookie"] = [headers["Set-Cookie"], "instance0|session_id=%22#{session_id}%22; Path=/", "last_used_database=#{ooor_session.config[:database]}; Path=/", "session_id=#{session_id}; Path=/", ].join("\n") end end |