diff --git a/bemade_mailcow_integration/__manifest__.py b/bemade_mailcow_integration/__manifest__.py index 91e81e3..14c39bb 100644 --- a/bemade_mailcow_integration/__manifest__.py +++ b/bemade_mailcow_integration/__manifest__.py @@ -40,7 +40,6 @@ "bemade_mailcow_integration/static/src/xml/mailcow_templates.xml", ], }, - 'demo': [], 'installable': True, 'application': False, 'auto_install': False diff --git a/bemade_mailcow_integration/models/mail_alias.py b/bemade_mailcow_integration/models/mail_alias.py index 0bec8ce..66a1a98 100644 --- a/bemade_mailcow_integration/models/mail_alias.py +++ b/bemade_mailcow_integration/models/mail_alias.py @@ -16,15 +16,14 @@ class MailAlias(models.Model): alias_domain = alias_domain[0] catchall_alias = catchall_alias[0] - if not alias_domain: - raise ValidationError(_("No catchall domain is set in the system parameters. Please set one and try again.")) - mailcow_alias = self.env['mail.mailcow.alias'].search([('address', '=', alias.alias_name + '@' + alias_domain)]) - if mailcow_alias: - mailcow_alias.write({'active': True}) - else: - self.env['mail.mailcow.alias'].create({ - 'address': alias.alias_name + '@' + alias_domain, - 'goto': catchall_alias + '@' + alias_domain, - 'alias_id': alias.id, - }) + if alias_domain: + mailcow_alias = self.env['mail.mailcow.alias'].search([('address', '=', alias.alias_name + '@' + alias_domain)]) + if mailcow_alias: + mailcow_alias.write({'active': True}) + else: + self.env['mail.mailcow.alias'].create({ + 'address': alias.alias_name + '@' + alias_domain, + 'goto': catchall_alias + '@' + alias_domain, + 'alias_id': alias.id, + }) return alias diff --git a/bemade_mailcow_integration/models/mailcow.py b/bemade_mailcow_integration/models/mailcow.py index 6f38c64..2b9b9d8 100644 --- a/bemade_mailcow_integration/models/mailcow.py +++ b/bemade_mailcow_integration/models/mailcow.py @@ -16,8 +16,8 @@ class MailMailcow(models.AbstractModel): def get_credentials(self): params = self.env['ir.config_parameter'].sudo() - base_url = params.get_param('mailcow.base_url')[0], - api_key = params.get_param('mailcow.api_key')[0], + base_url = params.get_param('mailcow.base_url') + api_key = params.get_param('mailcow.api_key') if not base_url or not api_key: _logger.error('No API key or base URL is set in the system parameters') diff --git a/bemade_mailcow_integration/models/mailcow_blacklist.py b/bemade_mailcow_integration/models/mailcow_blacklist.py index 374e7b6..3e3ba81 100644 --- a/bemade_mailcow_integration/models/mailcow_blacklist.py +++ b/bemade_mailcow_integration/models/mailcow_blacklist.py @@ -2,6 +2,7 @@ from odoo import models, fields, api import logging +import json _logger = logging.getLogger(__name__) @@ -28,17 +29,14 @@ class MailcowBlacklist(models.Model): 'object_list': 'bl' } - - self.api_request(endpoint_add, 'POST', data) _logger.info(f'Added {vals["email"]} to Mailcow blacklist') - allblemail = self.api_request(endpoint_get_bl, 'GET', None) + bl_emails = self.api_request(endpoint_get_bl, 'GET', None) - mc_id = [d['prefid'] for d in allblemail if d['value'] == vals['email']] + mc_id = [d['prefid'] for d in bl_emails if d['value'] == vals['email']] vals['mc_id'] = mc_id[0] res = super().create(vals) - return res def write(self, vals): @@ -65,13 +63,10 @@ class MailcowBlacklist(models.Model): """ Overridden unlink method to remove the blacklist entry from the Mailcow server. """ + endpoint = '/api/v1/delete/domain-policy' for record in self: - endpoint = '/api/v1/delete/domain-policy' - data = { - 'items': [record.mc_id] - } - result = record.api_request(endpoint, 'POST', data) - print(result) + data = json.dumps(record.mc_id) + self.api_request(endpoint, 'POST', data) _logger.info(f'Removed {record.email} from Mailcow blacklist') return super().unlink() diff --git a/bemade_mailcow_integration/models/res_config_settings.py b/bemade_mailcow_integration/models/res_config_settings.py index 1b91c36..07d285a 100644 --- a/bemade_mailcow_integration/models/res_config_settings.py +++ b/bemade_mailcow_integration/models/res_config_settings.py @@ -13,3 +13,8 @@ class ResConfigSettings(models.TransientModel): help="API key for the Mailcow server", config_parameter='mailcow.api_key', ) + + mailcow_sync_alias = fields.Boolean( + string='Sync Aliases with Odoo', + help='Auto create Aliases in Mailcow from Odoo', + config_parameter='mailcow.sync_alias') \ No newline at end of file diff --git a/bemade_mailcow_integration/views/res_config_settings_views.xml b/bemade_mailcow_integration/views/res_config_settings_views.xml index 12392f9..d641fc7 100644 --- a/bemade_mailcow_integration/views/res_config_settings_views.xml +++ b/bemade_mailcow_integration/views/res_config_settings_views.xml @@ -24,6 +24,13 @@