postfix_admin 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +2 -4
  3. data/CHANGELOG.md +24 -14
  4. data/README.md +14 -0
  5. data/Rakefile +29 -0
  6. data/db/reset.rb +7 -0
  7. data/db/seeds.rb +26 -0
  8. data/docker-admin/config.local.php +3 -1
  9. data/docker-compose.yml +3 -8
  10. data/lib/postfix_admin/base.rb +11 -22
  11. data/lib/postfix_admin/cli.rb +140 -56
  12. data/lib/postfix_admin/doveadm.rb +31 -15
  13. data/lib/postfix_admin/{admin.rb → models/admin.rb} +21 -2
  14. data/lib/postfix_admin/models/alias.rb +63 -0
  15. data/lib/postfix_admin/{application_record.rb → models/application_record.rb} +2 -2
  16. data/lib/postfix_admin/{concerns → models/concerns}/existing_timestamp.rb +1 -2
  17. data/lib/postfix_admin/models/concerns/has_password.rb +16 -0
  18. data/lib/postfix_admin/{domain.rb → models/domain.rb} +66 -2
  19. data/lib/postfix_admin/models/domain_admin.rb +21 -0
  20. data/lib/postfix_admin/models/log.rb +22 -0
  21. data/lib/postfix_admin/models/mailbox.rb +143 -0
  22. data/lib/postfix_admin/models/quota2.rb +20 -0
  23. data/lib/postfix_admin/models.rb +8 -9
  24. data/lib/postfix_admin/runner.rb +68 -14
  25. data/lib/postfix_admin/version.rb +1 -1
  26. metadata +15 -14
  27. data/lib/postfix_admin/alias.rb +0 -46
  28. data/lib/postfix_admin/concerns/dovecot_cram_md5_password.rb +0 -29
  29. data/lib/postfix_admin/domain_admin.rb +0 -8
  30. data/lib/postfix_admin/log.rb +0 -5
  31. data/lib/postfix_admin/mail_domain.rb +0 -9
  32. data/lib/postfix_admin/mailbox.rb +0 -97
  33. data/lib/postfix_admin/quota.rb +0 -6
  34. /data/lib/postfix_admin/{concerns → models/concerns}/.keep +0 -0
@@ -1,97 +0,0 @@
1
- module PostfixAdmin
2
- class Mailbox < ApplicationRecord
3
- self.table_name = :mailbox
4
- self.primary_key = :username
5
-
6
- include DovecotCramMD5Password
7
-
8
- attribute :quota_mb, :integer
9
-
10
- validates :username, presence: true, uniqueness: { case_sensitive: false },
11
- format: { with: RE_EMAIL_LIKE_WITH_ANCHORS,
12
- message: "must be a valid email address" }
13
- validates :maildir, presence: true, uniqueness: { case_sensitive: false }
14
- validates :local_part, presence: true
15
-
16
- # quota (KB)
17
- validates :quota, presence: true,
18
- numericality: { only_integer: true,
19
- greater_than_or_equal_to: 0 }
20
-
21
- # quota (MB), which actually doesn't exist in DB
22
- validates :quota_mb, presence: true,
23
- numericality: { only_integer: true,
24
- greater_than_or_equal_to: 0 }
25
-
26
- belongs_to :rel_domain, class_name: "Domain", foreign_key: :domain
27
- has_one :alias, foreign_key: :address, dependent: :destroy
28
- has_one :quota_usage, class_name: "Quota", foreign_key: :username,
29
- dependent: :destroy
30
-
31
- validate on: :create do |mailbox|
32
- domain = mailbox.rel_domain
33
- if !domain.mailboxes.zero? && domain.rel_mailboxes.count >= domain.mailboxes
34
- message = "already has the maximum number of mailboxes " \
35
- "(maximum is #{domain.mailboxes} mailboxes)"
36
- mailbox.errors.add(:domain, message)
37
- end
38
- end
39
-
40
- # just in case
41
- validate on: :update do |mailbox|
42
- mailbox.errors.add(:username, 'cannot be changed') if mailbox.username_changed?
43
- mailbox.errors.add(:local_part, 'cannot be changed') if mailbox.local_part_changed?
44
- end
45
-
46
- validate do |mailbox|
47
- domain = mailbox.rel_domain
48
-
49
- unless domain.maxquota.zero?
50
- if mailbox.quota_mb.zero?
51
- mailbox.errors.add(:quota_mb, "cannot be 0")
52
- elsif mailbox.quota_mb > domain.maxquota
53
- message = "must be less than or equal to #{domain.maxquota} (MB)"
54
- mailbox.errors.add(:quota_mb, message)
55
- end
56
- end
57
- end
58
-
59
- before_validation do |mailbox|
60
- mailbox.name = "" if mailbox.name.nil?
61
- if mailbox.quota_mb
62
- mailbox.quota = mailbox.quota_mb * KB_TO_MB
63
- elsif mailbox.quota
64
- mailbox.quota_mb = mailbox.quota / KB_TO_MB
65
- else
66
- mailbox.quota_mb = 0
67
- mailbox.quota = 0
68
- end
69
- mailbox.username = "#{mailbox.local_part}@#{mailbox.domain}"
70
- mailbox.maildir ||= "#{mailbox.domain}/#{mailbox.username}/"
71
- mailbox.build_alias(local_part: mailbox.local_part, goto: mailbox.username,
72
- domain: mailbox.domain)
73
- end
74
-
75
- def quota_usage_str
76
- if quota_usage
77
- usage_mb = quota_usage.bytes / KB_TO_MB
78
- usage_mb.to_s
79
- else
80
- "0"
81
- end
82
- end
83
-
84
- def quota_mb_str
85
- case quota
86
- when -1
87
- # It's not sure what 'disabled' means for quota.
88
- "Disabled"
89
- when 0
90
- "Unlimited"
91
- else
92
- mb_size = quota / KB_TO_MB
93
- mb_size.to_s
94
- end
95
- end
96
- end
97
- end
@@ -1,6 +0,0 @@
1
- module PostfixAdmin
2
- class Quota < ApplicationRecord
3
- self.table_name = :quota2
4
- self.primary_key = :username
5
- end
6
- end