AliasModel.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. from modules.Mailcow import Mailcow
  2. from models.BaseModel import BaseModel
  3. class AliasModel(BaseModel):
  4. parser_command = "alias"
  5. required_args = {
  6. "add": [["address", "goto"]],
  7. "delete": [["id"]],
  8. "get": [["id"]],
  9. "edit": [["id"]]
  10. }
  11. def __init__(
  12. self,
  13. id=None,
  14. address=None,
  15. goto=None,
  16. active=None,
  17. sogo_visible=None,
  18. **kwargs
  19. ):
  20. self.mailcow = Mailcow()
  21. self.id = id
  22. self.address = address
  23. self.goto = goto
  24. self.active = active
  25. self.sogo_visible = sogo_visible
  26. @classmethod
  27. def from_dict(cls, data):
  28. return cls(
  29. address=data.get("address"),
  30. goto=data.get("goto"),
  31. active=data.get("active", None),
  32. sogo_visible=data.get("sogo_visible", None)
  33. )
  34. def getAdd(self):
  35. """
  36. Get the alias details as a dictionary for adding, sets default values.
  37. :return: Dictionary containing alias details.
  38. """
  39. alias = {
  40. "address": self.address,
  41. "goto": self.goto,
  42. "active": self.active if self.active is not None else 1,
  43. "sogo_visible": self.sogo_visible if self.sogo_visible is not None else 0
  44. }
  45. return {key: value for key, value in alias.items() if value is not None}
  46. def getEdit(self):
  47. """
  48. Get the alias details as a dictionary for editing, sets no default values.
  49. :return: Dictionary containing mailbox details.
  50. """
  51. alias = {
  52. "address": self.address,
  53. "goto": self.goto,
  54. "active": self.active,
  55. "sogo_visible": self.sogo_visible
  56. }
  57. return {key: value for key, value in alias.items() if value is not None}
  58. def get(self):
  59. """
  60. Get the mailbox details from the mailcow API.
  61. :return: Response from the mailcow API.
  62. """
  63. return self.mailcow.getAlias(self.id)
  64. def delete(self):
  65. """
  66. Get the mailbox details from the mailcow API.
  67. :return: Response from the mailcow API.
  68. """
  69. return self.mailcow.deleteAlias(self.id)
  70. def add(self):
  71. """
  72. Get the mailbox details from the mailcow API.
  73. :return: Response from the mailcow API.
  74. """
  75. return self.mailcow.addAlias(self.getAdd())
  76. def edit(self):
  77. """
  78. Get the mailbox details from the mailcow API.
  79. :return: Response from the mailcow API.
  80. """
  81. return self.mailcow.editAlias(self.id, self.getEdit())
  82. @classmethod
  83. def add_parser(cls, subparsers):
  84. parser = subparsers.add_parser(
  85. cls.parser_command,
  86. help="Manage aliases (add, delete, get, edit)"
  87. )
  88. parser.add_argument("object", choices=list(cls.required_args.keys()), help="Action to perform: add, delete, get, edit")
  89. parser.add_argument("--id", help="Alias object ID (required for get, edit, delete)")
  90. parser.add_argument("--address", help="Alias email address (e.g. alias@example.com)")
  91. parser.add_argument("--goto", help="Destination address(es), comma-separated (e.g. user1@example.com,user2@example.com)")
  92. parser.add_argument("--active", choices=["1", "0"], help="Activate (1) or deactivate (0) the alias")
  93. parser.add_argument("--sogo-visible", choices=["1", "0"], help="Show alias in SOGo addressbook (1 = yes, 0 = no)")