fix most mailcow issue

This commit is contained in:
Benoît Vézina 2023-07-21 13:26:07 -04:00
parent 6405e7fdfc
commit 281eb2f13d
6 changed files with 30 additions and 25 deletions

View file

@ -40,7 +40,6 @@
"bemade_mailcow_integration/static/src/xml/mailcow_templates.xml",
],
},
'demo': [],
'installable': True,
'application': False,
'auto_install': False

View file

@ -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

View file

@ -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')

View file

@ -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()

View file

@ -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')

View file

@ -24,6 +24,13 @@
<div class="content-group">
<field name="mailcow_api_key"/>
</div>
<label for="mailcow_sync_alias" string="Sync Aliases with Odoo'"/>
<div class="text-muted">
Auto create Aliases in Mailcow from Odoo
</div>
<div class="content-group">
<field name="mailcow_sync_alias"/>
</div>
</div>
</div>
</div>