45 lines
2.3 KiB
Python
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
|