123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- from modules.Mailcow import Mailcow
- from models.BaseModel import BaseModel
- class MailboxModel(BaseModel):
- parser_command = "mailbox"
- required_args = {
- "add": [["username", "password"]],
- "delete": [["username"]],
- "get": [["username"]],
- "edit": [["username"]]
- }
- def __init__(
- self,
- password=None,
- username=None,
- domain=None,
- local_part=None,
- active=None,
- sogo_access=None,
- name=None,
- authsource=None,
- quota=None,
- force_pw_update=None,
- tls_enforce_in=None,
- tls_enforce_out=None,
- tags=None,
- sender_acl=None,
- **kwargs
- ):
- self.mailcow = Mailcow()
- if username is not None and "@" in username:
- self.username = username
- self.local_part, self.domain = username.split("@")
- else:
- self.username = f"{local_part}@{domain}"
- self.local_part = local_part
- self.domain = domain
- self.password = password
- self.password2 = password
- self.active = active
- self.sogo_access = sogo_access
- self.name = name
- self.authsource = authsource
- self.quota = quota
- self.force_pw_update = force_pw_update
- self.tls_enforce_in = tls_enforce_in
- self.tls_enforce_out = tls_enforce_out
- self.tags = tags
- self.sender_acl = sender_acl
- @classmethod
- def from_dict(cls, data):
- return cls(
- domain=data.get("domain"),
- local_part=data.get("local_part"),
- password=data.get("password"),
- password2=data.get("password"),
- active=data.get("active", None),
- sogo_access=data.get("sogo_access", None),
- name=data.get("name", None),
- authsource=data.get("authsource", None),
- quota=data.get("quota", None),
- force_pw_update=data.get("force_pw_update", None),
- tls_enforce_in=data.get("tls_enforce_in", None),
- tls_enforce_out=data.get("tls_enforce_out", None),
- tags=data.get("tags", None),
- sender_acl=data.get("sender_acl", None)
- )
- def getAdd(self):
- """
- Get the mailbox details as a dictionary for adding, sets default values.
- :return: Dictionary containing mailbox details.
- """
- mailbox = {
- "domain": self.domain,
- "local_part": self.local_part,
- "password": self.password,
- "password2": self.password2,
- "active": self.active if self.active is not None else 1,
- "name": self.name if self.name is not None else "",
- "authsource": self.authsource if self.authsource is not None else "mailcow",
- "quota": self.quota if self.quota is not None else 0,
- "force_pw_update": self.force_pw_update if self.force_pw_update is not None else 0,
- "tls_enforce_in": self.tls_enforce_in if self.tls_enforce_in is not None else 0,
- "tls_enforce_out": self.tls_enforce_out if self.tls_enforce_out is not None else 0,
- "tags": self.tags if self.tags is not None else []
- }
- return {key: value for key, value in mailbox.items() if value is not None}
- def getEdit(self):
- """
- Get the mailbox details as a dictionary for editing, sets no default values.
- :return: Dictionary containing mailbox details.
- """
- mailbox = {
- "domain": self.domain,
- "local_part": self.local_part,
- "password": self.password,
- "password2": self.password2,
- "active": self.active,
- "name": self.name,
- "authsource": self.authsource,
- "quota": self.quota,
- "force_pw_update": self.force_pw_update,
- "tls_enforce_in": self.tls_enforce_in,
- "tls_enforce_out": self.tls_enforce_out,
- "tags": self.tags
- }
- return {key: value for key, value in mailbox.items() if value is not None}
- def get(self):
- """
- Get the mailbox details from the mailcow API.
- :return: Response from the mailcow API.
- """
- return self.mailcow.getMailbox(self.username)
- def delete(self):
- """
- Get the mailbox details from the mailcow API.
- :return: Response from the mailcow API.
- """
- return self.mailcow.deleteMailbox(self.username)
- def add(self):
- """
- Get the mailbox details from the mailcow API.
- :return: Response from the mailcow API.
- """
- return self.mailcow.addMailbox(self.getAdd())
- def edit(self):
- """
- Get the mailbox details from the mailcow API.
- :return: Response from the mailcow API.
- """
- return self.mailcow.editMailbox(self.username, self.getEdit())
- @classmethod
- def add_parser(cls, subparsers):
- parser = subparsers.add_parser(
- cls.parser_command,
- help="Manage mailboxes (add, delete, get, edit)"
- )
- parser.add_argument("object", choices=list(cls.required_args.keys()), help="Action to perform: add, delete, get, edit")
- parser.add_argument("--username", help="Full email address of the mailbox (e.g. user@example.com)")
- parser.add_argument("--password", help="Password for the mailbox (required for add)")
- parser.add_argument("--active", choices=["1", "0"], help="Activate (1) or deactivate (0) the mailbox")
- parser.add_argument("--sogo-access", choices=["1", "0"], help="Redirect mailbox to SOGo after web login (1 = yes, 0 = no)")
- parser.add_argument("--name", help="Display name of the mailbox owner")
- parser.add_argument("--authsource", help="Authentication source (default: mailcow)")
- parser.add_argument("--quota", help="Mailbox quota in bytes (0 = unlimited)")
- parser.add_argument("--force-pw-update", choices=["1", "0"], help="Force password update on next login (1 = yes, 0 = no)")
- parser.add_argument("--tls-enforce-in", choices=["1", "0"], help="Enforce TLS for incoming emails (1 = yes, 0 = no)")
- parser.add_argument("--tls-enforce-out", choices=["1", "0"], help="Enforce TLS for outgoing emails (1 = yes, 0 = no)")
- parser.add_argument("--tags", help="Comma-separated list of tags for the mailbox")
- parser.add_argument("--sender-acl", help="Comma-separated list of allowed sender addresses for this mailbox")
|