The following trick used to work, because `sudo()` was actually making an environment for the superuser to operate upon: request.env[...].sudo().method(...) It no longer works in general, since `sudo()` now makes an environment in superuser mode but with `uid=None`! It may still work by accident for operations that never use `env.uid`, but is broken in general. Using `auth='public'` fixes the problem by using the public user when no user is available. closes odoo/odoo#34297 Signed-off-by: Olivier Dony (odo) <odo@openerp.com>
22 lines
746 B
Python
22 lines
746 B
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import werkzeug
|
|
|
|
from odoo import http
|
|
from odoo.http import request
|
|
|
|
|
|
class LinkTracker(http.Controller):
|
|
|
|
@http.route('/r/<string:code>', type='http', auth='public', website=True)
|
|
def full_url_redirect(self, code, **post):
|
|
country_code = request.session.geoip and request.session.geoip.get('country_code') or False
|
|
request.env['link.tracker.click'].sudo().add_click(
|
|
code,
|
|
ip=request.httprequest.remote_addr,
|
|
country_code=country_code
|
|
)
|
|
redirect_url = request.env['link.tracker'].get_url_from_code(code)
|
|
return werkzeug.utils.redirect(redirect_url or '', 301)
|