From d951fed204709408d758a3380737619b8e81de74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20V=C3=A9zina?= Date: Mon, 6 May 2024 13:54:23 -0400 Subject: [PATCH] geoip --- website_geoip_extended/__init__.py | 3 + website_geoip_extended/__manifest__.py | 41 +++++++++++++ website_geoip_extended/models/__init__.py | 3 + .../models/website_visitor.py | 60 +++++++++++++++++++ .../views/website_visitor_views.xml | 44 ++++++++++++++ 5 files changed, 151 insertions(+) create mode 100644 website_geoip_extended/__init__.py create mode 100644 website_geoip_extended/__manifest__.py create mode 100644 website_geoip_extended/models/__init__.py create mode 100644 website_geoip_extended/models/website_visitor.py create mode 100644 website_geoip_extended/views/website_visitor_views.xml diff --git a/website_geoip_extended/__init__.py b/website_geoip_extended/__init__.py new file mode 100644 index 0000000..7d768b5 --- /dev/null +++ b/website_geoip_extended/__init__.py @@ -0,0 +1,3 @@ +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from . import models diff --git a/website_geoip_extended/__manifest__.py b/website_geoip_extended/__manifest__.py new file mode 100644 index 0000000..f1db082 --- /dev/null +++ b/website_geoip_extended/__manifest__.py @@ -0,0 +1,41 @@ +{ + 'name': "Bemade Custom Module", + 'version': "17.0.0.1.0", + 'summary': "Module personnalisé pour Bemade Inc", + 'sequence': 10, + 'description': """ + Ce module personnalisé est développé pour étendre les fonctionnalités de base d'Odoo. + + Fonctionnalités: + - Ajout de champs supplémentaires pour collecter plus d'informations sur le visiteur + - Logger les informations de la requête + - Obtenez les données de GeoIP et d'autres sources + - Mise à jour du visiteur avec les nouvelles données + """, + 'category': 'Tools', + 'author': "Benoit", + 'website': "https://bemade.org", + 'license': 'AGPL-3', + 'depends': [ + 'base', + 'website', # Ajoutez d'autres dépendances si nécessaire + ], + 'data': [ + # Liste des fichiers de données XML ou CSV, par exemple: + # 'views/templates.xml', + # 'security/ir.model.access.csv', + 'views/website_visitor_views.xml', + ], + 'demo': [ + # Fichiers de données de démo, par exemple: + # 'demo/demo_data.xml', + ], + 'installable': True, + 'application': True, + 'auto_install': False, + 'external_dependencies': { + 'python': [ + 'geoip2' + ], # Ajoutez les dépendances Python ici, par exemple ['pandas'] + }, +} diff --git a/website_geoip_extended/models/__init__.py b/website_geoip_extended/models/__init__.py new file mode 100644 index 0000000..3c5cc72 --- /dev/null +++ b/website_geoip_extended/models/__init__.py @@ -0,0 +1,3 @@ +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from . import website_visitor diff --git a/website_geoip_extended/models/website_visitor.py b/website_geoip_extended/models/website_visitor.py new file mode 100644 index 0000000..8871ed8 --- /dev/null +++ b/website_geoip_extended/models/website_visitor.py @@ -0,0 +1,60 @@ +from odoo import models, fields +from odoo.http import request + +import logging + +_logger = logging.getLogger(__name__) + + +class WebsiteVisitor(models.Model): + _inherit = 'website.visitor' + + # Ajout de champs supplémentaires pour collecter plus d'informations sur le visiteur + region = fields.Char("Region") + postal_code = fields.Char("Postal Code") + latitude = fields.Float("Latitude") + longitude = fields.Float("Longitude") + ip_address = fields.Char("IP Address") + isp = fields.Char("Internet Service Provider") + connection_type = fields.Char("Connection Type") + device_type = fields.Char("Device Type") + operating_system = fields.Char("Operating System") + browser = fields.Char("Browser") + + def _upsert_visitor(self, access_token, force_track_values=None): + # Logger les informations de la requête + _logger.info('Request Remote Address: %s', request.httprequest.remote_addr) + _logger.info('User Agent: %s', request.httprequest.user_agent.string) + + # Obtenez les données de GeoIP et d'autres sources + geoip_info = request.httprequest.environ.get('geoip', {}) + user_agent = request.httprequest.user_agent + + _logger.info('User Agent Details: Platform: %s, Browser: %s, Version: %s', user_agent.platform, user_agent.browser, user_agent.version) + + # _logger.info('User Agent Details: OS: %s, Browser: %s, Device: %s', user_agent.os, user_agent.browser, user_agent.platform) + + # Appel de la méthode parente via super() + visitor_id, upsert_type = super()._upsert_visitor(access_token, force_track_values) + + # Récupération du visiteur basé sur l'ID retourné + visitor = self.browse(visitor_id) + + # Mise à jour du visiteur avec les nouvelles données + update_values = { + 'region': geoip_info.get('region'), + 'postal_code': geoip_info.get('postal_code'), + 'latitude': geoip_info.get('latitude'), + 'longitude': geoip_info.get('longitude'), + 'ip_address': request.httprequest.remote_addr, + 'isp': geoip_info.get('isp'), + 'connection_type': geoip_info.get('connection_type'), + 'device_type': user_agent.platform, + 'operating_system': user_agent.platform, # Modifié pour utiliser platform + 'browser': user_agent.browser, + } + _logger.info('Updating Visitor with: %s', update_values) + + visitor.sudo().write(update_values) + + return visitor_id, upsert_type diff --git a/website_geoip_extended/views/website_visitor_views.xml b/website_geoip_extended/views/website_visitor_views.xml new file mode 100644 index 0000000..3c270ac --- /dev/null +++ b/website_geoip_extended/views/website_visitor_views.xml @@ -0,0 +1,44 @@ + + + + + + + website.visitor + + + + + + + + + + + + + + + + + + + + website.visitor + + + + + + + + + + + + + + + + + \ No newline at end of file