MaildirModel.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from modules.Dovecot import Dovecot
  2. from models.BaseModel import BaseModel
  3. class MaildirModel(BaseModel):
  4. parser_command = "maildir"
  5. required_args = {
  6. "encrypt": [],
  7. "decrypt": [],
  8. "restore": [["username", "item"], ["list"]]
  9. }
  10. def __init__(
  11. self,
  12. username=None,
  13. source=None,
  14. item=None,
  15. overwrite=None,
  16. list=None,
  17. **kwargs
  18. ):
  19. self.dovecot = Dovecot()
  20. for key, value in kwargs.items():
  21. setattr(self, key, value)
  22. self.username = username
  23. self.source = source
  24. self.item = item
  25. self.overwrite = overwrite
  26. self.list = list
  27. def encrypt(self):
  28. """
  29. Encrypt the maildir for the specified user or all.
  30. :return: Response from Dovecot.
  31. """
  32. return self.dovecot.encryptMaildir(self.source_dir, self.output_dir)
  33. def decrypt(self):
  34. """
  35. Decrypt the maildir for the specified user or all.
  36. :return: Response from Dovecot.
  37. """
  38. return self.dovecot.decryptMaildir(self.source_dir, self.output_dir)
  39. def restore(self):
  40. """
  41. Restore or List maildir data for the specified user.
  42. :return: Response from Dovecot.
  43. """
  44. if self.list:
  45. return self.dovecot.listDeletedMaildirs()
  46. return self.dovecot.restoreMaildir(self.username, self.item)
  47. @classmethod
  48. def add_parser(cls, subparsers):
  49. parser = subparsers.add_parser(
  50. cls.parser_command,
  51. help="Manage maildir (encrypt, decrypt, restore)"
  52. )
  53. parser.add_argument("object", choices=list(cls.required_args.keys()), help="Action to perform: encrypt, decrypt, restore")
  54. parser.add_argument("--item", help="Item to restore")
  55. parser.add_argument("--username", help="Username to restore the item to")
  56. parser.add_argument("--list", action="store_true", help="List items to restore")
  57. parser.add_argument("--source-dir", help="Path to the source maildir to import/encrypt/decrypt")
  58. parser.add_argument("--output-dir", help="Directory to store encrypted/decrypted files inside the Dovecot container")