62 lines
2 KiB
Python
62 lines
2 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import models, fields, api, _
|
|
import requests
|
|
import logging
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class MailMailcow(models.AbstractModel):
|
|
_name = 'mail.mailcow'
|
|
_description = 'Mailcow API'
|
|
|
|
@property
|
|
def get_credentials(self):
|
|
params = self.env['ir.config_parameter'].sudo()
|
|
|
|
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')
|
|
raise ValidationError(_("No API key or base URL is set in the system parameters. Please set one and try again."))
|
|
# return False
|
|
else:
|
|
return {
|
|
'base_url': base_url,
|
|
'api_key': api_key
|
|
}
|
|
|
|
def api_request(self, endpoint, method='GET', data=None):
|
|
creds = self.get_credentials
|
|
if not creds:
|
|
return False
|
|
url = creds['base_url'] + endpoint
|
|
headers = {
|
|
'accept': 'application/json',
|
|
'X-API-Key': creds['api_key'],
|
|
'Content-Type': 'application/json',
|
|
}
|
|
|
|
try:
|
|
if method == 'GET':
|
|
response = requests.get(url, headers=headers)
|
|
elif method == 'POST':
|
|
response = requests.post(url, headers=headers, json=data)
|
|
elif method == 'DELETE':
|
|
response = requests.delete(url, headers=headers)
|
|
elif method == 'PUT':
|
|
response = requests.put(url, headers=headers, json=data)
|
|
|
|
response.raise_for_status()
|
|
|
|
except requests.exceptions.HTTPError as error:
|
|
_logger.error('HTTP error occurred: %s', error)
|
|
return False
|
|
except Exception as error:
|
|
_logger.error('An error occurred: %s', error)
|
|
return False
|
|
|
|
return response.json()
|