From f3bd6b3baf9e569d96dfba0b490c79a152f90ec1 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 11 Jun 2013 18:59:47 +0200 Subject: [PATCH 1/6] Added @nodb where it is required bzr revid: nicolas.vanhoren@openerp.com-20130611165947-36997uizrxtnore0 --- addons/auth_signup/controllers/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 924e1546862..047e5e38e12 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -23,6 +23,7 @@ import logging import openerp from openerp.modules.registry import RegistryManager from ..res_users import SignupError +from openerp.addons.web.http import nodb, noauth _logger = logging.getLogger(__name__) @@ -30,6 +31,7 @@ class Controller(openerp.addons.web.http.Controller): _cp_path = '/auth_signup' @openerp.addons.web.http.jsonrequest + @nodb def get_config(self, req, dbname): """ retrieve the module config (which features are enabled) for the login page """ registry = RegistryManager.get(dbname) From 56f2e7631fbfed05a8153ef2be54d966e7cc389c Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 20 Jun 2013 12:01:22 +0200 Subject: [PATCH 2/6] Some more refactoring to use @route() bzr revid: nicolas.vanhoren@openerp.com-20130620100122-3mtvqr1w5yrikitk --- addons/auth_signup/controllers/main.py | 27 +++++++++++++------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 047e5e38e12..e1e1fa5851a 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -23,16 +23,15 @@ import logging import openerp from openerp.modules.registry import RegistryManager from ..res_users import SignupError -from openerp.addons.web.http import nodb, noauth +import openerp.addons.web.http as http +from openerp.addons.web.http import request _logger = logging.getLogger(__name__) -class Controller(openerp.addons.web.http.Controller): - _cp_path = '/auth_signup' +class Controller(http.Controller): - @openerp.addons.web.http.jsonrequest - @nodb - def get_config(self, req, dbname): + @http.route('/auth_signup/get_config', type='json', authentication="nodb") + def get_config(self, dbname): """ retrieve the module config (which features are enabled) for the login page """ registry = RegistryManager.get(dbname) with registry.cursor() as cr: @@ -43,8 +42,8 @@ class Controller(openerp.addons.web.http.Controller): } return config - @openerp.addons.web.http.jsonrequest - def retrieve(self, req, dbname, token): + @http.route('/auth_signup/retrieve', type='json', authentication="auth") + def retrieve(self, dbname, token): """ retrieve the user info (name, login or email) corresponding to a signup token """ registry = RegistryManager.get(dbname) with registry.cursor() as cr: @@ -52,23 +51,23 @@ class Controller(openerp.addons.web.http.Controller): user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token) return user_info - @openerp.addons.web.http.jsonrequest - def signup(self, req, dbname, token, **values): + @http.route('/auth_signup/signup', type='json', authentication="auth") + def signup(self, dbname, token, **values): """ sign up a user (new or existing)""" try: - self._signup_with_values(req, dbname, token, values) + self._signup_with_values(dbname, token, values) except SignupError, e: return {'error': openerp.tools.exception_to_unicode(e)} return {} - def _signup_with_values(self, req, dbname, token, values): + def _signup_with_values(self, dbname, token, values): registry = RegistryManager.get(dbname) with registry.cursor() as cr: res_users = registry.get('res.users') res_users.signup(cr, openerp.SUPERUSER_ID, values, token) - @openerp.addons.web.http.jsonrequest - def reset_password(self, req, dbname, login): + @http.route('/auth_signup/reset_password', type='json', authentication="auth") + def reset_password(self, dbname, login): """ retrieve user, and perform reset password """ registry = RegistryManager.get(dbname) with registry.cursor() as cr: From a574ce71bf5a479f7ce7ebb825dc4338768681ca Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 21 Jun 2013 14:45:34 +0200 Subject: [PATCH 3/6] Small refactoring bzr revid: nicolas.vanhoren@openerp.com-20130621124534-bvsjihld3j9vqpkw --- addons/auth_signup/controllers/main.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index e1e1fa5851a..8c61af1f03c 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -30,7 +30,7 @@ _logger = logging.getLogger(__name__) class Controller(http.Controller): - @http.route('/auth_signup/get_config', type='json', authentication="nodb") + @http.route('/auth_signup/get_config', type='json', auth="none") def get_config(self, dbname): """ retrieve the module config (which features are enabled) for the login page """ registry = RegistryManager.get(dbname) @@ -42,7 +42,7 @@ class Controller(http.Controller): } return config - @http.route('/auth_signup/retrieve', type='json', authentication="auth") + @http.route('/auth_signup/retrieve', type='json', auth="user") def retrieve(self, dbname, token): """ retrieve the user info (name, login or email) corresponding to a signup token """ registry = RegistryManager.get(dbname) @@ -51,7 +51,7 @@ class Controller(http.Controller): user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token) return user_info - @http.route('/auth_signup/signup', type='json', authentication="auth") + @http.route('/auth_signup/signup', type='json', auth="user") def signup(self, dbname, token, **values): """ sign up a user (new or existing)""" try: @@ -66,7 +66,7 @@ class Controller(http.Controller): res_users = registry.get('res.users') res_users.signup(cr, openerp.SUPERUSER_ID, values, token) - @http.route('/auth_signup/reset_password', type='json', authentication="auth") + @http.route('/auth_signup/reset_password', type='json', auth="user") def reset_password(self, dbname, login): """ retrieve user, and perform reset password """ registry = RegistryManager.get(dbname) From 355d8645260255cb976249889c82d16aa6ad29a2 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 21 Jun 2013 15:03:59 +0200 Subject: [PATCH 4/6] im: refactored due to changes in web framework bzr revid: nicolas.vanhoren@openerp.com-20130621130359-6267v1w0hney9dtt --- addons/im/im.py | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/addons/im/im.py b/addons/im/im.py index cee1705ec35..f6312629d92 100644 --- a/addons/im/im.py +++ b/addons/im/im.py @@ -22,6 +22,8 @@ import openerp import openerp.tools.config import openerp.modules.registry +import openerp.addons.web.http as http +from openerp.addons.web.http import request from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT import datetime from openerp.osv import osv, fields @@ -90,36 +92,42 @@ POLL_TIMER = 30 DISCONNECTION_TIMER = POLL_TIMER + 5 WATCHER_ERROR_DELAY = 10 -class LongPollingController(openerp.addons.web.http.Controller): - _cp_path = '/longpolling/im' +class LongPollingController(http.Controller): - @openerp.addons.web.http.jsonrequest - def poll(self, req, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None): + @http.route('/longpolling/im/poll', type="json", auth="none") + def poll(self, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None): assert_uuid(uuid) if not openerp.evented: raise Exception("Not usable in a server not running gevent") from openerp.addons.im.watcher import ImWatcher if db is not None: - req.session._db = db - req.session._uid = uid - req.session._password = password - req.session.model('im.user').im_connect(uuid=uuid, context=req.context) - my_id = req.session.model('im.user').get_by_user_id(uuid or req.session._uid, req.context)["id"] + request.session._db = db + request.session._uid = uid + request.session._password = password + request.session.check_security() + uid = request.session._uid + password = request.session._password + registry = openerp.modules.registry.RegistryManager.get(request.session._db) + + with registry.cursor() as cr: + registry.get('im.user').im_connect(cr, uid, uuid=uuid, context=request.context) + my_id = registry.get('im.user').get_by_user_id(cr, uid, uuid or request.session._uid, request.context)["id"] num = 0 while True: - res = req.session.model('im.message').get_messages(last, users_watch, uuid=uuid, context=req.context) + with registry.cursor() as cr: + res = registry.get('im.message').get_messages(cr, uid, last, users_watch, uuid=uuid, context=request.context) if num >= 1 or len(res["res"]) > 0: return res last = res["last"] num += 1 ImWatcher.get_watcher(res["dbname"]).stop(my_id, users_watch or [], POLL_TIMER) - @openerp.addons.web.http.jsonrequest - def activated(self, req): + @http.route('/longpolling/im/activated', type="json", auth="none") + def activated(self): return not not openerp.evented - @openerp.addons.web.http.jsonrequest - def gen_uuid(self, req): + @http.route('/longpolling/im/gen_uuid', type="json", auth="none") + def gen_uuid(self): import uuid return "%s" % uuid.uuid1() From 8cc30e00e6daf68d2978dd5cd38e5198ae90155a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 21 Jun 2013 15:24:02 +0200 Subject: [PATCH 5/6] Rewrite the way the im login authenticate bzr revid: nicolas.vanhoren@openerp.com-20130621132402-peww92wss5vmjcp9 --- addons/im/im.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/addons/im/im.py b/addons/im/im.py index f6312629d92..4a867789cbc 100644 --- a/addons/im/im.py +++ b/addons/im/im.py @@ -101,21 +101,17 @@ class LongPollingController(http.Controller): raise Exception("Not usable in a server not running gevent") from openerp.addons.im.watcher import ImWatcher if db is not None: - request.session._db = db - request.session._uid = uid - request.session._password = password - request.session.check_security() - uid = request.session._uid - password = request.session._password - registry = openerp.modules.registry.RegistryManager.get(request.session._db) + request.session.authenticate(db=db, uid=uid, password=password) + else: + request.session.authenticate(db=request.session._db, uid=request.session._uid, password=request.session._password) - with registry.cursor() as cr: - registry.get('im.user').im_connect(cr, uid, uuid=uuid, context=request.context) - my_id = registry.get('im.user').get_by_user_id(cr, uid, uuid or request.session._uid, request.context)["id"] + with request.registry.cursor() as cr: + request.registry.get('im.user').im_connect(cr, request.uid, uuid=uuid, context=request.context) + my_id = request.registry.get('im.user').get_by_user_id(cr, request.uid, uuid or request.session._uid, request.context)["id"] num = 0 while True: - with registry.cursor() as cr: - res = registry.get('im.message').get_messages(cr, uid, last, users_watch, uuid=uuid, context=request.context) + with request.registry.cursor() as cr: + res = request.registry.get('im.message').get_messages(cr, request.uid, last, users_watch, uuid=uuid, context=request.context) if num >= 1 or len(res["res"]) > 0: return res last = res["last"] From dcf20f9871183b1c807d9872a1ce5002f54c6d79 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 21 Jun 2013 15:33:10 +0200 Subject: [PATCH 6/6] Refactored livechat bzr revid: nicolas.vanhoren@openerp.com-20130621133310-a68iiqy9wpu40iws --- addons/im_livechat/im_livechat.py | 44 +++++++++++++------------------ 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/addons/im_livechat/im_livechat.py b/addons/im_livechat/im_livechat.py index 1ffb422fe6a..adceebc7cba 100644 --- a/addons/im_livechat/im_livechat.py +++ b/addons/im_livechat/im_livechat.py @@ -26,6 +26,8 @@ import random import jinja2 from openerp.osv import osv, fields from openerp import tools +import openerp.addons.web.http as http +from openerp.addons.web.http import request env = jinja2.Environment( loader=jinja2.PackageLoader('openerp.addons.im_livechat', "."), @@ -33,48 +35,38 @@ env = jinja2.Environment( ) env.filters["json"] = json.dumps -class LiveChatController(openerp.addons.web.http.Controller): - _cp_path = '/im_livechat' +class LiveChatController(http.Controller): - @openerp.addons.web.http.httprequest - def loader(self, req, **kwargs): + @http.route('/im_livechat/loader') + def loader(self, **kwargs): p = json.loads(kwargs["p"]) db = p["db"] channel = p["channel"] user_name = p.get("user_name", None) - req.session._db = db - req.session._uid = None - req.session._login = "anonymous" - req.session._password = "anonymous" - info = req.session.model('im_livechat.channel').get_info_for_chat_src(channel) + request.session.authenticate(db=db, login="anonymous", password="anonymous") + info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel) info["db"] = db info["channel"] = channel info["userName"] = user_name - return req.make_response(env.get_template("loader.js").render(info), + return request.make_response(env.get_template("loader.js").render(info), headers=[('Content-Type', "text/javascript")]) - @openerp.addons.web.http.httprequest - def web_page(self, req, **kwargs): + @http.route('/im_livechat/web_page') + def web_page(self, **kwargs): p = json.loads(kwargs["p"]) db = p["db"] channel = p["channel"] - req.session._db = db - req.session._uid = None - req.session._login = "anonymous" - req.session._password = "anonymous" - script = req.session.model('im_livechat.channel').read(channel, ["script"])["script"] - info = req.session.model('im_livechat.channel').get_info_for_chat_src(channel) + request.session.authenticate(db=db, login="anonymous", password="anonymous") + script = request.session.model('im_livechat.channel').read(channel, ["script"])["script"] + info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel) info["script"] = script - return req.make_response(env.get_template("web_page.html").render(info), + return request.make_response(env.get_template("web_page.html").render(info), headers=[('Content-Type', "text/html")]) - @openerp.addons.web.http.jsonrequest - def available(self, req, db, channel): - req.session._db = db - req.session._uid = None - req.session._login = "anonymous" - req.session._password = "anonymous" - return req.session.model('im_livechat.channel').get_available_user(channel) > 0 + @http.route('/im_livechat/available', type='json') + def available(self, db, channel): + request.session.authenticate(db=db, login="anonymous", password="anonymous") + return request.session.model('im_livechat.channel').get_available_user(channel) > 0 class im_livechat_channel(osv.osv): _name = 'im_livechat.channel'