diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 88ca61026df..0f44c9b860d 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -95,11 +95,10 @@ class Session(openerpweb.Controller): @openerpweb.jsonrequest def login(self, req, db, login, password): req.session.login(db, login, password) - res = { + return { "session_id" : req.session_id, "uid": req.session._uid, } - return res @openerpweb.jsonrequest def modules(self, req): diff --git a/addons/base/static/openerp/js/base_chrome.js b/addons/base/static/openerp/js/base_chrome.js index b336f0144b5..269efd6b6e2 100644 --- a/addons/base/static/openerp/js/base_chrome.js +++ b/addons/base/static/openerp/js/base_chrome.js @@ -124,6 +124,7 @@ openerp.base.Session = openerp.base.BasicController.extend({ this.password = ""; this.uid = false; this.session_id = false; + this.load_local(); this.module_list = []; this.module_loaded = {"base": true}; this.context = {}; @@ -140,6 +141,52 @@ openerp.base.Session = openerp.base.BasicController.extend({ } }); }, + /** + * Reloads uid and session_id from local storage, if they exist + */ + load_local: function () { + this.uid = this.get_cookie('uid'); + this.session_id = this.get_cookie('session_id'); + }, + /** + * Saves the session id and uid locally + */ + save_local: function () { + this.set_cookie('uid', this.uid); + this.set_cookie('session_id', this.session_id); + }, + // TODO: clear_local + /** + * Fetches a cookie stored by an openerp session + * + * @param name the cookie's name + */ + get_cookie: function (name) { + var nameEQ = this.element_id + '|' + name + '='; + var cookies = document.cookie.split(';'); + for(var i=0; i/base/static/openerp/base.html' + raise cherrypy.HTTPRedirect('/base/static/openerp/base.html', 301) default.exposed = True def main(argv): - # optparse + # Parse config + op = optparse.OptionParser() + op.add_option("-p", "--port", dest="socket_port", help="listening port", metavar="NUMBER", default=8002) + op.add_option("-s", "--session-path", dest="storage_path", help="directory used for session storage", metavar="DIR", default=os.path.join(tempfile.gettempdir(),"cpsessions")) + (o, args) = op.parse_args(argv[1:]) + # Prepare cherrypy config from options + if not os.path.exists(o.storage_path): + os.mkdir(o.storage_path, 0700) config = { - 'server.socket_port': 8002, - #'server.socket_host': '64.72.221.48', + 'server.socket_port': int(o.socket_port), + 'server.socket_host': '0.0.0.0', #'server.thread_pool' = 10, 'tools.sessions.on': True, + 'tools.sessions.storage_type': 'file', + 'tools.sessions.storage_path': o.storage_path, + 'tools.sessions.timeout': 60 } - cherrypy.tree.mount(Root()) + # Setup and run cherrypy + cherrypy.tree.mount(Root()) cherrypy.config.update(config) cherrypy.server.subscribe() cherrypy.engine.start()