45 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import logging
import time
from odoo import models
from odoo.http import request
_logger = logging.getLogger(__name__)
class IrHttp(models.AbstractModel):
_inherit = 'ir.http'
@classmethod
def _serve_page(cls):
response = super(IrHttp, cls)._serve_page()
if response and getattr(response, 'status_code', 0) == 200 and request.env.user._is_public():
visitor_sudo = request.env['website.visitor']._get_visitor_from_request()
# We are avoiding to create a reveal_view if a lead is already
# created from another module, e.g. website_form
if not (visitor_sudo and visitor_sudo.lead_ids):
country_code = request.geoip.country_code
state_code = request.geoip.subdivisions[0].iso_code if request.geoip.subdivisions else None
if country_code:
try:
url = request.httprequest.url
ip_address = request.httprequest.remote_addr
if not ip_address:
return response
website_id = request.website.id
rules_excluded = (request.httprequest.cookies.get('rule_ids') or '').split(',')
before = time.time()
new_rules_excluded = request.env['crm.reveal.view'].sudo()._create_reveal_view(website_id, url, ip_address, country_code, state_code, rules_excluded)
# even when we match, no view may have been created if this is a duplicate
_logger.info('Reveal process time: [%s], match rule: [%s?], country code: [%s], ip: [%s]',
time.time() - before, new_rules_excluded == rules_excluded, country_code,
ip_address)
if new_rules_excluded:
response.set_cookie('rule_ids', ','.join(new_rules_excluded), expires=None, cookie_type='optional')
except Exception:
# just in case - we never want to crash a page view
_logger.exception("Failed to process reveal rules")
return response