From b8c3e95031072cf8a75013fb889a6838b0becbfa Mon Sep 17 00:00:00 2001 From: Marc Soer Date: Mon, 24 Aug 2026 09:10:11 +0200 Subject: [PATCH] [ADD] changes made to 19 are made in testserver16 as well --- install_mailhog_as_service.sh | 130 +++++---- mailcatcher_menu/__init__.py | 4 +- mailcatcher_menu/__manifest__.py | 11 +- mailcatcher_menu/controllers/__init__.py | 1 - mailcatcher_menu/controllers/controllers.py | 68 +++-- mailcatcher_menu/data/data.xml | 1 - mailcatcher_menu/models/__init__.py | 2 +- mailcatcher_menu/models/mailcatcher_menu.py | 28 +- mailcatcher_menu/security/ir.model.access.csv | 2 +- .../static/description/index.html | 28 +- mailcatcher_menu/views/views.xml | 4 +- testserver_o2b/__init__.py | 4 +- testserver_o2b/__manifest__.py | 26 +- testserver_o2b/controllers/__init__.py | 3 - testserver_o2b/controllers/controllers.py | 21 -- testserver_o2b/demo/demo.xml | 30 -- testserver_o2b/models/init_test.py | 263 +++++++++++++----- testserver_o2b/security/ir.model.access.csv | 2 - testserver_o2b/views/templates.xml | 43 --- testserver_o2b/views/views.xml | 60 ---- 20 files changed, 359 insertions(+), 372 deletions(-) delete mode 100644 testserver_o2b/controllers/__init__.py delete mode 100644 testserver_o2b/controllers/controllers.py delete mode 100644 testserver_o2b/demo/demo.xml delete mode 100644 testserver_o2b/security/ir.model.access.csv delete mode 100644 testserver_o2b/views/views.xml diff --git a/install_mailhog_as_service.sh b/install_mailhog_as_service.sh index 491201e..a5580dd 100755 --- a/install_mailhog_as_service.sh +++ b/install_mailhog_as_service.sh @@ -1,70 +1,86 @@ #!/bin/bash -echo ""; -set -e -GO_VERSION=1.22.5 # of een andere recente 1.22.x / 1.23.x + +set -e # stop bij fouten + +echo "" echo "===================================" -echo "Installeren van Go ${GO_VERSION}..." +echo "Update apt..." echo "===================================" -apt-get update -apt-get -y install curl ca-certificates -cd /tmp -curl -LO https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz -# Oude Go-installatie weghalen (indien aanwezig) -rm -rf /usr/local/go -# Nieuwe Go installeren -tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz -# Go in PATH zetten voor dit script -export PATH=/usr/local/go/bin:$PATH -go version # zou nu go1.22.x moeten tonen -#apt-get -y install golang-go; -#if [ $? == 0 ] ; then -# echo 'golang-go installed' -#else -# echo 'ERROR: Installing golang-go NOT succesfull!' -# exit -#fi -echo ""; -echo "==================================="; -echo "Installing mailhog..."; -echo "==================================="; -go install github.com/mailhog/MailHog@latest; -if [ $? == 0 ] ; then - echo ""; - echo "==================================="; - echo "Mailcatcher installed succesfully!"; - echo "==================================="; - echo ""; -else - echo 'ERROR: Installing Mailcatcher NOT succesfull!' - exit +apt update + +echo "" +echo "===================================" +echo "Install dependencies..." +echo "===================================" +apt-get -y install wget tar + +echo "" +echo "===================================" +echo "Install Go 1.24.3..." +echo "===================================" +GO_VERSION=1.26.0 +wget https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz + +sudo rm -rf /usr/local/go +sudo tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz + +# Go environment correct instellen +export GOROOT=/usr/local/go +export GOPATH=$HOME/go +export PATH=$GOROOT/bin:$GOPATH/bin:$PATH + +echo "Go version:" +go version + +echo "" +echo "===================================" +echo "Installing MailHog..." +echo "===================================" +/usr/local/go/bin/go install github.com/mailhog/MailHog@latest + +if [ -f "$HOME/go/bin/MailHog" ]; then + echo "MailHog installed successfully" +else + echo "ERROR: MailHog binary not found!" + exit 1 fi -echo "==================================="; -echo "Copy Mailhog to bin..."; -echo "==================================="; -sudo cp ~/go/bin/MailHog /usr/local/bin/MailHog -if [ $? == 0 ] ; then - echo 'Mailhog copied' -else - echo 'ERROR: Copy Mailhog NOT succesfull!' - exit -fi -echo ""; -echo "==================================="; -echo "Create MailHog service..."; -echo "==================================="; -sudo tee /etc/systemd/system/mailhog.service < /dev/null < /dev/null 2>&1 & +User=root +ExecStart=/usr/local/bin/MailHog +Restart=always +Environment="PATH=/usr/local/go/bin:/usr/bin:/bin" + [Install] WantedBy=multi-user.target EOL + +echo "" +echo "===================================" +echo "Enable + start MailHog service..." +echo "===================================" +systemctl daemon-reload systemctl enable mailhog systemctl start mailhog -echo ""; -echo "==================================="; -echo "Mailhog service created and started."; -echo "==================================="; \ No newline at end of file + +echo "" +echo "===================================" +echo "MailHog is running!" +echo "Web UI: http://localhost:8025" +echo "SMTP: localhost:1025" +echo "===================================" diff --git a/mailcatcher_menu/__init__.py b/mailcatcher_menu/__init__.py index 511a0ca..2ef6625 100644 --- a/mailcatcher_menu/__init__.py +++ b/mailcatcher_menu/__init__.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- from . import controllers -from . import models \ No newline at end of file +from . import models +from . import wizard +from .hooks import post_init_hook diff --git a/mailcatcher_menu/__manifest__.py b/mailcatcher_menu/__manifest__.py index 95ac6e3..d1ad877 100644 --- a/mailcatcher_menu/__manifest__.py +++ b/mailcatcher_menu/__manifest__.py @@ -11,11 +11,16 @@ 'author': "Open2bizz", 'website': "http://www.open2bizz.tech", - 'category': 'Uncategorized', - 'version': '0.1', + 'category': 'Tools', + 'license': "AGPL-3", + 'version': '16.0.1.0.0', + 'module_type': 'official', 'depends': ['mail','base',], 'data': [ + 'wizard/install_warning_wizard_view.xml', 'views/views.xml', - 'data/data.xml' + 'data/data.xml', + 'security/ir.model.access.csv', ], + 'post_init_hook': 'post_init_hook', } diff --git a/mailcatcher_menu/controllers/__init__.py b/mailcatcher_menu/controllers/__init__.py index 457bae2..8e3fc39 100644 --- a/mailcatcher_menu/controllers/__init__.py +++ b/mailcatcher_menu/controllers/__init__.py @@ -1,3 +1,2 @@ # -*- coding: utf-8 -*- - from . import controllers \ No newline at end of file diff --git a/mailcatcher_menu/controllers/controllers.py b/mailcatcher_menu/controllers/controllers.py index bcb2eda..4d06ad4 100644 --- a/mailcatcher_menu/controllers/controllers.py +++ b/mailcatcher_menu/controllers/controllers.py @@ -1,21 +1,55 @@ -# -*- coding: utf-8 -*- -# from odoo import http +# Copyright 2024 Open2Bizz +# License LGPL-3 + +import logging +import requests + +from odoo import http +from odoo.http import request, Response + +_logger = logging.getLogger(__name__) + +MAILHOG_BASE = "http://localhost:8025" -# class TestserverO2b(http.Controller): -# @http.route('/testserver_o2b/testserver_o2b/', auth='public') -# def index(self, **kw): -# return "Hello, world" +class MailcatcherProxy(http.Controller): -# @http.route('/testserver_o2b/testserver_o2b/objects/', auth='public') -# def list(self, **kw): -# return http.request.render('testserver_o2b.listing', { -# 'root': '/testserver_o2b/testserver_o2b', -# 'objects': http.request.env['testserver_o2b.testserver_o2b'].search([]), -# }) + @http.route(['/mailcatcher', '/mailcatcher/'], + type='http', auth='user', website=False, csrf=False) + def mailcatcher_proxy(self, subpath='', **kw): + """Proxy requests to the local MailHog instance.""" + target_url = f"{MAILHOG_BASE}/{subpath}" + if request.httprequest.query_string: + target_url += '?' + request.httprequest.query_string.decode('utf-8') -# @http.route('/testserver_o2b/testserver_o2b/objects//', auth='public') -# def object(self, obj, **kw): -# return http.request.render('testserver_o2b.object', { -# 'object': obj -# }) + try: + headers = { + k: v for k, v in request.httprequest.headers + if k.lower() not in ('host', 'cookie', 'authorization') + } + resp = requests.request( + method=request.httprequest.method, + url=target_url, + headers=headers, + data=request.httprequest.get_data(), + timeout=30, + allow_redirects=False, + ) + except requests.exceptions.ConnectionError: + _logger.warning("Could not connect to MailHog at %s", MAILHOG_BASE) + return Response("MailHog is not available", status=502) + + excluded_headers = { + 'content-encoding', 'content-length', 'transfer-encoding', + 'connection', + } + response_headers = [ + (k, v) for k, v in resp.headers.items() + if k.lower() not in excluded_headers + ] + + return Response( + resp.content, + status=resp.status_code, + headers=response_headers, + ) diff --git a/mailcatcher_menu/data/data.xml b/mailcatcher_menu/data/data.xml index e506423..cb672a8 100644 --- a/mailcatcher_menu/data/data.xml +++ b/mailcatcher_menu/data/data.xml @@ -1,5 +1,4 @@ - diff --git a/mailcatcher_menu/models/__init__.py b/mailcatcher_menu/models/__init__.py index 8cb0c99..4513a3e 100644 --- a/mailcatcher_menu/models/__init__.py +++ b/mailcatcher_menu/models/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- -from . import mailcatcher_menu +# No models needed — MailHog is accessed via the proxy controller diff --git a/mailcatcher_menu/models/mailcatcher_menu.py b/mailcatcher_menu/models/mailcatcher_menu.py index dddb12c..bfe4a4c 100644 --- a/mailcatcher_menu/models/mailcatcher_menu.py +++ b/mailcatcher_menu/models/mailcatcher_menu.py @@ -1,29 +1,5 @@ # Copyright 2024 Open2Bizz # License LGPL-3 -from odoo import api, fields, models, _ - -import logging -_logger = logging.getLogger(__name__) - -class IrActionUrl(models.Model): - _inherit = "ir.config_parameter" - - @api.model - #def init(self): - def _mailcatcher_url(self): - parameters = self.env['ir.config_parameter'].search([('key','=', 'web.base.url')]) - if parameters: - parameter = parameters[0] - cont_nr = parameter.value.split("//",1)[1] #Haal https:// van string - cont_nr = cont_nr[0:3] #De eerste 3 karakters is het containernummer - node = parameter.value.split("staging",1)[1] #Haal alles van string weg t/m staging - node = node[0:1] #Het eerste karakters is het de stagingarea - act_url = "https://" + cont_nr + "-mailcatcher.staging" + node + ".open2bizz.com" - _logger.info('---------- ACT_URL ---------- %s', act_url) - action_id = self.env['ir.model.data']._xmlid_to_res_id('mailcatcher_menu.action_mailcatcher_url') - action = self.env['ir.actions.act_url'].browse(action_id) - if action: - action.write({'url':act_url}) - - +# MailHog is now accessed via the internal proxy controller at /mailcatcher/ +# so no dynamic URL computation is needed anymore. diff --git a/mailcatcher_menu/security/ir.model.access.csv b/mailcatcher_menu/security/ir.model.access.csv index f1ba01f..de0f76e 100644 --- a/mailcatcher_menu/security/ir.model.access.csv +++ b/mailcatcher_menu/security/ir.model.access.csv @@ -1,2 +1,2 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" -"access_mailcatcher_menu_mailcatcher_menu","mailcatcher_menu.mailcatcher_menu","model_mailcatcher_menu_mailcatcher_menu","base.group_user",1,1,1,1 +"access_mailcatcher_install_warning_wizard","mailcatcher.install.warning.wizard","model_mailcatcher_install_warning_wizard","base.group_user",1,1,1,1 \ No newline at end of file diff --git a/mailcatcher_menu/static/description/index.html b/mailcatcher_menu/static/description/index.html index a898b80..881ce16 100644 --- a/mailcatcher_menu/static/description/index.html +++ b/mailcatcher_menu/static/description/index.html @@ -1,18 +1,20 @@ + -
-

mailcatcher_menu

-

- This module is ONLY for test environments In DC Open2Bizz -

+
+

mailcatcher_menu

+

+ This module is ONLY for test environments In DC Open2Bizz +

-

- Module is developed by Open2Bizz. Bug reports: support@open2bizz.eu -

-

- -

+

+ Module is developed by Open2Bizz. Bug reports: support@open2bizz.eu +

+

+ +

-
+
- + + \ No newline at end of file diff --git a/mailcatcher_menu/views/views.xml b/mailcatcher_menu/views/views.xml index 42cd78f..108f59d 100644 --- a/mailcatcher_menu/views/views.xml +++ b/mailcatcher_menu/views/views.xml @@ -3,12 +3,12 @@ Open Mailcatcher - https://mailcatcher.staging.open2bizz.com + /mailcatcher/ new - + diff --git a/testserver_o2b/__init__.py b/testserver_o2b/__init__.py index 511a0ca..5ec5d77 100644 --- a/testserver_o2b/__init__.py +++ b/testserver_o2b/__init__.py @@ -1,4 +1,4 @@ # -*- coding: utf-8 -*- -from . import controllers -from . import models \ No newline at end of file +from .hooks import post_init_hook +from . import models diff --git a/testserver_o2b/__manifest__.py b/testserver_o2b/__manifest__.py index be6b1b9..b3e620f 100644 --- a/testserver_o2b/__manifest__.py +++ b/testserver_o2b/__manifest__.py @@ -1,26 +1,22 @@ # -*- coding: utf-8 -*- { - 'name': "testserver_o2b", + 'name': "Set as testserver Open2Bizz", 'summary': """ - Set Odoo as a test env.""", + Only to be used when installed as TEST env. Open2Bizz""", - 'description': """ - This module is to be installed when the Odoo env. server is to be used as test env. - Disables: email, cron jobs, account sync and removes Enterprise Sub code. - Adds a web ribbon to identify web frontendas test - """, - 'author': "Open2bizz BV", - 'website': "http://www.open2bizz.nl", + 'author': "Open2bizz", + 'website': "http://www.open2bizz.tech", 'category': 'Tools', - 'version': "16.0.1.2.0", - 'depends': ['web_environment_ribbon', 'mail','base',], + 'license': "AGPL-3", + 'version': '16.0.1.0.0', + 'depends': ['mail', 'base', 'mailcatcher_menu'], 'data': [ - 'views/views.xml', 'views/templates.xml', + 'data/ir_cron.xml', ], - 'demo': [ - 'demo/demo.xml', - ], + 'post_init_hook': 'post_init_hook', } + + diff --git a/testserver_o2b/controllers/__init__.py b/testserver_o2b/controllers/__init__.py deleted file mode 100644 index 457bae2..0000000 --- a/testserver_o2b/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import controllers \ No newline at end of file diff --git a/testserver_o2b/controllers/controllers.py b/testserver_o2b/controllers/controllers.py deleted file mode 100644 index bcb2eda..0000000 --- a/testserver_o2b/controllers/controllers.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# from odoo import http - - -# class TestserverO2b(http.Controller): -# @http.route('/testserver_o2b/testserver_o2b/', auth='public') -# def index(self, **kw): -# return "Hello, world" - -# @http.route('/testserver_o2b/testserver_o2b/objects/', auth='public') -# def list(self, **kw): -# return http.request.render('testserver_o2b.listing', { -# 'root': '/testserver_o2b/testserver_o2b', -# 'objects': http.request.env['testserver_o2b.testserver_o2b'].search([]), -# }) - -# @http.route('/testserver_o2b/testserver_o2b/objects//', auth='public') -# def object(self, obj, **kw): -# return http.request.render('testserver_o2b.object', { -# 'object': obj -# }) diff --git a/testserver_o2b/demo/demo.xml b/testserver_o2b/demo/demo.xml deleted file mode 100644 index fbbff02..0000000 --- a/testserver_o2b/demo/demo.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - \ No newline at end of file diff --git a/testserver_o2b/models/init_test.py b/testserver_o2b/models/init_test.py index 72da7b1..23886d2 100644 --- a/testserver_o2b/models/init_test.py +++ b/testserver_o2b/models/init_test.py @@ -1,89 +1,206 @@ # -*- coding: utf-8 -*- from odoo import tools from odoo import api, fields, models -from collections.abc import Mapping -import logging -_logger = logging.getLogger(__name__) +from datetime import datetime, timedelta import os import uuid import odoo +import logging +_logger = logging.getLogger(__name__) + class IrLogging(models.Model): _inherit = 'ir.logging' + MAIL_SERVERS = ( + ('127.0.0.1', '1025', 'Lokale mailcatcher', 'login', 'name', 't'), + ('192.168.78.199', '1025', 'Algemene mailcatcher', 'login', 'name', 'f'), + ('hnode6.openworx.nl', '1025', 'Algemene mailcatcher vanaf hnode4', 'login', 'name', 'f'), + ) + EXPECTED_IP_PREFIX = '192.168.78.' + REPORT_URL = 'http://127.0.0.1:8069' + ENTERPRISE_CODE = 'M160129258730' + FILESTORE_CLEANUP_BATCH_LIMIT = 100 + def init(self): - db_id = uuid.uuid1() - _logger.error(db_id) + database_uuid = str(uuid.uuid1()) + _logger.debug(f"____ Database UID: {database_uuid}") + self._reset_base_configuration(database_uuid) + _logger.debug(f"_____ reset_base_configuration ____") + self._remove_param_if_exists('web.base.url.freeze') + _logger.debug(f"______ remove_param_if_exists web.base.url.freeze ____") + self._create_param_if_missing('report.url', self.REPORT_URL) + _logger.debug(f"_______ create_param_if_missing report.url ____") + self._disable_web_push_notifications() + _logger.debug(f"_______ disable_web_push_notifications ____") + self._disable_delivery_carrier_prod_environment() + _logger.debug(f"_______ disable_delivery_carrier_prod_environment ____") + self._disable_payment_providers() + _logger.debug(f"_______ disable_delivery_carrier_prod_environment ____") + self._clear_account_online_links() + _logger.debug(f"_______ _disable_payment_providers ____") + self._reset_bank_statement_source() + _logger.debug(f"_______ _reset_bank_statement_source ____") + self._set_warning_ribbon_if_ip_is_invalid() + _logger.debug(f"_______ _set_warning_ribbon_if_ip_is_invalid ____") + self._run_testserver_script() + _logger.debug(f"_______ _run_testserver_script ____") + + def _reset_base_configuration(self, database_uuid): self.env.cr.execute(""" - UPDATE ir_mail_server set active = 'f'; - UPDATE fetchmail_server set active = 'f'; - UPDATE ir_cron set active = 'f'; - DELETE FROM mail_mail; - UPDATE ir_config_parameter set value = 'M160129258730' where key = 'database.enterprise_code'; - UPDATE ir_config_parameter set value = (NOW() + INTERVAL '30 DAY') where key = 'database.expiration_date'; - UPDATE ir_config_parameter set value = '%s' where key = 'database.uuid'; - INSERT INTO ir_mail_server(smtp_host,smtp_port,name,smtp_authentication,smtp_encryption,active) VALUES ('127.0.0.1','1025','Lokale mailcatcher','login','name','t'); - INSERT INTO ir_mail_server(smtp_host,smtp_port,name,smtp_authentication,smtp_encryption,active) VALUES ('192.168.78.199','1025','Algemene mailcatcher','login','name','t'); - INSERT INTO ir_mail_server(smtp_host,smtp_port,name,smtp_authentication,smtp_encryption,active) VALUES ('hnode6.openworx.nl','1025','Algemene mailcatcher vanaf hnode4','login','name','t'); - UPDATE website SET google_analytics_key = NULL WHERE google_analytics_key IS NOT NULL; - UPDATE product_template SET is_published = FALSE WHERE is_published = TRUE; - """ %(db_id)) - if self.env['ir.config_parameter'].search([('key','=','web.base.url.freeze')]): - self.env.cr.execute("""DELETE FROM ir_config_parameter WHERE key = 'web.base.url.freeze';""") - if not self.env['ir.config_parameter'].search([('key','=','report.url')]): - self.env.cr.execute("""INSERT INTO ir_config_parameter(key,value) VALUES ('report.url','http://127.0.0.1:8069');""") - model = self.env['ir.model'].search([('model','=','delivery.carrier')]) - if model: - field = self.env['ir.model.fields'].search([('name','=','prod_environment'),('model_id','=',model.id)]) - if field: - self.env.cr.execute("""UPDATE delivery_carrier SET prod_environment = False WHERE id>0;""") - model = self.env['ir.model'].search([('model','=','account.online.link')]) - if model: - field = self.env['ir.model.fields'].search([('id','>',0),('model_id','=',model.id)]) - if field: - self.env.cr.execute("""DELETE FROM account_online_link WHERE id > 0;""") - model = self.env['ir.model'].search([('model','=','payment.provider')]) - if model: - field = self.env['ir.model.fields'].search([('name','=','state'),('model_id','=',model.id)]) - if field: - self.env.cr.execute("""UPDATE payment_provider SET state = 'disabled' WHERE id>0;""") - if self.env['ir.model'].search([('model','=','account.journal')]): - self.env.cr.execute("""UPDATE account_journal set bank_statements_source = 'undefined';""") - ip_ok = False - with os.popen("ip a") as f: - for x in f.readlines(): - if float(x.find('192.168.78.')) > -1: - ip_ok = True - if not ip_ok: + UPDATE ir_mail_server SET active = 'f'; + UPDATE fetchmail_server SET active = 'f'; + UPDATE ir_cron SET active = 'f'; + DELETE FROM mail_mail; + UPDATE ir_config_parameter + SET value = %s + WHERE key = 'database.enterprise_code'; + UPDATE ir_config_parameter + SET value = (NOW() + INTERVAL '30 DAY') + WHERE key = 'database.expiration_date'; + UPDATE ir_config_parameter + SET value = %s + WHERE key = 'database.uuid'; + """, (self.ENTERPRISE_CODE, database_uuid)) + + for mail_server in self.MAIL_SERVERS: self.env.cr.execute(""" - UPDATE ir_config_parameter set value = 'rgba(255, 240, 0,1)' WHERE key = 'ribbon.background.color'; - UPDATE ir_config_parameter set value = '#000000' WHERE key = 'ribbon.color'; - UPDATE ir_config_parameter set value = '!!! IP WRONG !!!' WHERE key = 'ribbon.name'; - """) - ADDONS_PATH = odoo.tools.config['addons_path'] - _logger.error(ADDONS_PATH) - for ap in ADDONS_PATH.split(','): - if ap[-10:] == 'testserver': - _logger.error(os.system('./%s/testserver.sh' %(ap))) + INSERT INTO ir_mail_server( + smtp_host, smtp_port, name, smtp_authentication, smtp_encryption, active + ) VALUES (%s, %s, %s, %s, %s, %s); + """, mail_server) - model_website_page = self.env['ir.model'].search([('model','=','website.page')]) - if model_website_page: - for page in self.env['website.page'].search([('is_published','=',True)]): - page.write({ - 'is_published': False - }) - for website in self.env['website'].search([]): - website.write({ - 'domain': "" - }) - for menu in self.env['website.menu'].search([('is_visible','=',True)]): - if menu.website_id and menu.parent_id: - menu.write({ - 'website_id': False - }) - elif menu.website_id and menu.url == "/": - view = self.env['ir.ui.view']._xmlid_to_res_id('testserver_o2b.testserver_page_website') - if view: - menu.page_id.view_id = view.id + def _remove_param_if_exists(self, key): + if self.env['ir.config_parameter'].search([('key', '=', key)], limit=1): + self.env.cr.execute("DELETE FROM ir_config_parameter WHERE key = %s;", (key,)) + def _create_param_if_missing(self, key, value): + if not self.env['ir.config_parameter'].search([('key', '=', key)], limit=1): + self.env.cr.execute( + "INSERT INTO ir_config_parameter(key, value) VALUES (%s, %s);", + (key, value), + ) + + def _disable_web_push_notifications(self): + parameter = self.env['ir.config_parameter'].sudo() + parameter.set_param('web_push.notification.enabled', '0') + + parameters = self.env['ir.config_parameter'].sudo().search([ + ('key', 'in', ('mail.web_push_vapid_private_key', 'mail.web_push_vapid_public_key', 'mail.sfu_server_key'))]) + for parameter in parameters: + parameter.sudo().unlink() + if self.env['ir.model'].search([('model', '=', 'mail.partner.device')]): + self.env.cr.execute("""DELETE FROM mail_partner_device;""") + + def _model_has_field(self, model_name, field_name=None): + model = self.env['ir.model'].search([('model', '=', model_name)], limit=1) + if not model: + return False + if field_name is None: + return True + return bool( + self.env['ir.model.fields'].search( + [('name', '=', field_name), ('model_id', '=', model.id)], + limit=1, + ) + ) + + def _disable_delivery_carrier_prod_environment(self): + if self._model_has_field('delivery.carrier', 'prod_environment'): + self.env.cr.execute( + "UPDATE delivery_carrier SET prod_environment = False WHERE id > 0;" + ) + + def _disable_payment_providers(self): + if self._model_has_field('payment.provider', 'state'): + self.env.cr.execute( + "UPDATE payment_provider SET state = 'disabled' WHERE id > 0;" + ) + + def _clear_account_online_links(self): + model = self.env['ir.model'].search([('model', '=', 'account.online.link')], limit=1) + if not model: + return + + has_any_field = self.env['ir.model.fields'].search( + [('id', '>', 0), ('model_id', '=', model.id)], + limit=1, + ) + if has_any_field: + self.env.cr.execute("DELETE FROM account_online_link WHERE id > 0;") + + def _reset_bank_statement_source(self): + if self.env['ir.model'].search([('model', '=', 'account.journal')], limit=1): + self.env.cr.execute( + "UPDATE account_journal SET bank_statements_source = 'undefined';" + ) + + def _has_expected_ip(self): + with os.popen("ip a") as command_output: + return any(self.EXPECTED_IP_PREFIX in line for line in command_output.readlines()) + + def _set_warning_ribbon_if_ip_is_invalid(self): + if self._has_expected_ip(): + return + + self.env.cr.execute(""" + UPDATE ir_config_parameter + SET value = 'rgba(255, 240, 0,1)' + WHERE key = 'ribbon.background.color'; + UPDATE ir_config_parameter + SET value = '#000000' + WHERE key = 'ribbon.color'; + UPDATE ir_config_parameter + SET value = '!!! IP WRONG !!!' + WHERE key = 'ribbon.name'; + """) + + def _run_testserver_script(self): + addons_path = odoo.tools.config['addons_path'] + _logger.error(addons_path) + + addons_list = addons_path.split(',') if isinstance(addons_path, str) else list(addons_path) + for addon_path in addons_list: + if addon_path.endswith('testserver'): + _logger.error(os.system(f'./{addon_path}/testserver.sh')) + + def _get_unneeded_filestore_attachment_ids(self, limit): + self.env.cr.execute( + """ + SELECT id + FROM ir_attachment + WHERE type = 'binary' + AND res_field IS NULL + AND store_fname IS NOT NULL + AND res_model not in ('sign.document','sign.request') + AND public = 'f' + ORDER BY COALESCE(file_size, 0) DESC, id ASC + LIMIT %s + """, + (limit,), + ) + return [row[0] for row in self.env.cr.fetchall()] + + def cleanup_unneeded_filestore_attachments(self, limit=FILESTORE_CLEANUP_BATCH_LIMIT): + limit = int(limit or 0) + if limit <= 0: + return 0 + + attachment_ids = self._get_unneeded_filestore_attachment_ids(limit) + if not attachment_ids: + return 0 + + self.env['ir.attachment'].sudo().browse(attachment_ids).unlink() + _logger.info('Deleted %s unneeded filestore attachments', len(attachment_ids)) + return len(attachment_ids) + + def set_db_param(self): + ## Script to set database expiration date, when enterprise and test env. + parameter = self.env['ir.config_parameter'].search( + [('key', '=', 'database.expiration_date')], + limit=1, + ) + if parameter: + new_date_time = datetime.now() + timedelta(days=30) + parameter.write({'value': str(new_date_time)[:19]}) diff --git a/testserver_o2b/security/ir.model.access.csv b/testserver_o2b/security/ir.model.access.csv deleted file mode 100644 index 36895b7..0000000 --- a/testserver_o2b/security/ir.model.access.csv +++ /dev/null @@ -1,2 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_testserver_o2b_testserver_o2b,testserver_o2b.testserver_o2b,model_testserver_o2b_testserver_o2b,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/testserver_o2b/views/templates.xml b/testserver_o2b/views/templates.xml index 62d02fc..64cc3cf 100644 --- a/testserver_o2b/views/templates.xml +++ b/testserver_o2b/views/templates.xml @@ -14,48 +14,5 @@ - - - - - - \ No newline at end of file diff --git a/testserver_o2b/views/views.xml b/testserver_o2b/views/views.xml deleted file mode 100644 index c69c61e..0000000 --- a/testserver_o2b/views/views.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file