Purpose ======= Avoid counting requests from social bots (twitter, facebook, linkedin...) when tracking a link. Specifications ============= Social media platforms have a specific user agent in the HTTP headers that can be used to detect them and to not increment the click count in that case. Task-2578902 closes odoo/odoo#78806 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
26 lines
926 B
Python
26 lines
926 B
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from werkzeug.exceptions import NotFound
|
|
|
|
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):
|
|
if not request.env['ir.http'].is_a_bot():
|
|
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)
|
|
if not redirect_url:
|
|
raise NotFound()
|
|
return request.redirect(redirect_url, code=301, local=False)
|