Module: Ooor::Rack::RackBehaviour
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
- #get_ooor_session(env) ⇒ 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_session(env) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/ooor/rack.rb', line 36 def get_ooor_session(env) = env['rack.request.cookie_hash'] || ::Rack::Request.new(env). session = Ooor.session_handler.sessions[['ooor_session_id']] session ||= Ooor.session_handler.sessions[['session_id']] unless session # session could have been used by an other worker, try getting it config = Ooor::Rack.ooor_session_config_mapper.call(env) spec = config[:session_sharing] ? ['session_id'] : ['ooor_session_id'] 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) end session end |
#set_ooor!(env) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/ooor/rack.rb', line 23 def set_ooor!(env) ooor_session = self.get_ooor_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} end |
#set_ooor_session!(env, status, headers, body) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/ooor/rack.rb', line 58 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) else # NOTE: we don't put that in a Rails session because we want to remain server agnostic headers["Set-Cookie"] = [headers["Set-Cookie"], "ooor_session_id=#{ooor_session.id}; Path=/", ].join("\n") end response = ::Rack::Response.new body, status, headers response.finish end |
#share_openerp_session!(headers, ooor_session) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/ooor/rack.rb', line 78 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 |