2019-11-13 10:42:23 +00:00
|
|
|
from django.utils.html import format_html
|
2019-11-13 10:08:19 +00:00
|
|
|
|
2019-11-13 10:42:23 +00:00
|
|
|
|
|
|
|
class Service:
|
|
|
|
name = None
|
|
|
|
verbose_name = None
|
|
|
|
fields = ()
|
2019-11-13 10:08:19 +00:00
|
|
|
|
|
|
|
def __init__(self, data={}):
|
|
|
|
if self.verbose_name is None:
|
|
|
|
self.verbose_name = self.name
|
|
|
|
|
|
|
|
self.data = data
|
|
|
|
|
|
|
|
def get(self, key):
|
|
|
|
# retrieve attr of the object and if undefined get raw data
|
|
|
|
return getattr(self, key, self.data.get(key))
|
|
|
|
|
2019-11-13 10:42:23 +00:00
|
|
|
|
|
|
|
class MailService(Service):
|
|
|
|
name = 'address'
|
|
|
|
verbose_name = 'Mail'
|
|
|
|
fields = ('mail_address', 'aliases', 'type', 'type_detail')
|
|
|
|
|
|
|
|
FORWARD = 'forward'
|
|
|
|
MAILBOX = 'mailbox'
|
|
|
|
|
2019-11-13 10:08:19 +00:00
|
|
|
@property
|
|
|
|
def aliases(self):
|
|
|
|
return [
|
|
|
|
name + '@' + self.data['domain']['name'] for name in self.data['names'][1:]
|
|
|
|
]
|
|
|
|
|
|
|
|
@property
|
|
|
|
def mail_address(self):
|
|
|
|
return self.data['names'][0] + '@' + self.data['domain']['name']
|
|
|
|
|
|
|
|
@property
|
|
|
|
def type(self):
|
|
|
|
if self.data['forward']:
|
|
|
|
return self.FORWARD
|
|
|
|
return self.MAILBOX
|
|
|
|
|
|
|
|
@property
|
|
|
|
def type_detail(self):
|
|
|
|
if self.type == self.FORWARD:
|
|
|
|
return self.data['forward']
|
|
|
|
# TODO(@slamora) retrieve mailbox usage
|
|
|
|
return {'usage': 0, 'total': 213}
|
2019-11-13 10:42:23 +00:00
|
|
|
|
|
|
|
|
|
|
|
class MailinglistService(Service):
|
|
|
|
name = 'mailinglist'
|
|
|
|
verbose_name = 'Mailing list'
|
|
|
|
fields = ('name', 'status', 'address_name', 'admin_email', 'configure')
|
|
|
|
|
|
|
|
@property
|
|
|
|
def status(self):
|
|
|
|
# TODO(@slamora): where retrieve if the list is active?
|
|
|
|
return 'active'
|
|
|
|
|
|
|
|
@property
|
|
|
|
def address_name(self):
|
|
|
|
return "{}@{}".format(self.data['address_name'], self.data['address_domain']['name'])
|
|
|
|
|
|
|
|
@property
|
|
|
|
def configure(self):
|
|
|
|
# TODO(@slamora): build mailtran absolute URL
|
|
|
|
return format_html('<a href="#TODO">Mailtrain</a>')
|