diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 924e1546862..8c61af1f03c 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -23,14 +23,15 @@ import logging import openerp from openerp.modules.registry import RegistryManager from ..res_users import SignupError +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 - def get_config(self, req, dbname): + @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) with registry.cursor() as cr: @@ -41,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', auth="user") + 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: @@ -50,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', auth="user") + 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', auth="user") + def reset_password(self, dbname, login): """ retrieve user, and perform reset password """ registry = RegistryManager.get(dbname) with registry.cursor() as cr: diff --git a/addons/im/im.py b/addons/im/im.py index cee1705ec35..4a867789cbc 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,38 @@ 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.authenticate(db=db, uid=uid, password=password) + else: + request.session.authenticate(db=request.session._db, uid=request.session._uid, password=request.session._password) + + 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: - res = req.session.model('im.message').get_messages(last, users_watch, uuid=uuid, context=req.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"] 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() 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'