postfix_admin 0.2.0 → 0.3.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +54 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +20 -0
- data/CHANGELOG.md +19 -8
- data/Gemfile +1 -1
- data/LICENSE +1 -1
- data/README.md +26 -20
- data/Rakefile +19 -1
- data/bin/console +6 -2
- data/docker-admin/Dockerfile +6 -0
- data/docker-admin/config.local.php +24 -0
- data/docker-app/Dockerfile +21 -0
- data/docker-app/my.cnf +5 -0
- data/docker-compose.yml +37 -11
- data/docker-db/postfix.v1841.sql +383 -0
- data/docker-db/postfix.v352.sql +223 -0
- data/docker-db/postfix.v740.sql +269 -0
- data/lib/postfix_admin/admin.rb +17 -2
- data/lib/postfix_admin/alias.rb +0 -19
- data/lib/postfix_admin/base.rb +120 -94
- data/lib/postfix_admin/cli.rb +184 -127
- data/lib/postfix_admin/concerns/dovecot_cram_md5_password.rb +0 -1
- data/lib/postfix_admin/domain.rb +35 -44
- data/lib/postfix_admin/doveadm.rb +11 -10
- data/lib/postfix_admin/mailbox.rb +14 -6
- data/lib/postfix_admin/runner.rb +35 -22
- data/lib/postfix_admin/version.rb +1 -1
- data/postfix_admin.gemspec +13 -9
- metadata +55 -21
- data/Dockerfile +0 -24
- data/docker-entrypoint.sh +0 -5
data/lib/postfix_admin/runner.rb
CHANGED
@@ -24,36 +24,41 @@ module PostfixAdmin
|
|
24
24
|
runner { puts PostfixAdmin::Doveadm.schemes.join(' ') }
|
25
25
|
end
|
26
26
|
|
27
|
-
desc "show [example.com | admin@example.com | user@example.com]",
|
27
|
+
desc "show [example.com | admin@example.com | user@example.com]",
|
28
|
+
"Display details about domains, admins, or accounts"
|
28
29
|
def show(name = nil)
|
29
30
|
runner { @cli.show(name) }
|
30
31
|
end
|
31
32
|
|
32
|
-
desc "setup example.com password", "
|
33
|
+
desc "setup example.com password", "Set up a domain"
|
33
34
|
def setup(domain_name, password)
|
34
35
|
runner { @cli.setup_domain(domain_name, password) }
|
35
36
|
end
|
36
37
|
|
37
|
-
desc "admin_passwd admin@example.com new_password",
|
38
|
+
desc "admin_passwd admin@example.com new_password",
|
39
|
+
"Change the password of an admin user"
|
38
40
|
def admin_passwd(user_name, password)
|
39
41
|
runner { @cli.change_admin_password(user_name, password) }
|
40
42
|
end
|
41
43
|
|
42
|
-
desc "account_passwd user@example.com new_password",
|
44
|
+
desc "account_passwd user@example.com new_password",
|
45
|
+
"Change the password of an account"
|
43
46
|
def account_passwd(user_name, password)
|
44
47
|
runner { @cli.change_account_password(user_name, password) }
|
45
48
|
end
|
46
49
|
|
47
|
-
desc "add_domain example.com", "Add a domain"
|
50
|
+
desc "add_domain example.com", "Add a new domain"
|
51
|
+
method_option :description, type: :string, aliases: "-d", desc: "description"
|
48
52
|
def add_domain(domain_name)
|
49
|
-
runner { @cli.add_domain(domain_name) }
|
53
|
+
runner { @cli.add_domain(domain_name, description: options[:description]) }
|
50
54
|
end
|
51
55
|
|
52
|
-
desc "edit_domain example.com", "Edit a domain
|
56
|
+
desc "edit_domain example.com", "Edit a domain"
|
53
57
|
method_option :aliases, type: :numeric, aliases: "-a", desc: "Edit aliases limitation"
|
54
58
|
method_option :mailboxes, type: :numeric, aliases: "-m", desc: "Edit mailboxes limitation"
|
55
59
|
method_option :maxquota, type: :numeric, aliases: "-q", desc: "Edit max quota limitation"
|
56
60
|
method_option :active, type: :boolean, desc: "Update active status"
|
61
|
+
method_option :description, type: :string, aliases: "-d", desc: "Edit description"
|
57
62
|
def edit_domain(domain_name)
|
58
63
|
runner do
|
59
64
|
if options.size == 0
|
@@ -70,7 +75,7 @@ module PostfixAdmin
|
|
70
75
|
runner { @cli.delete_domain(domain_name) }
|
71
76
|
end
|
72
77
|
|
73
|
-
desc "delete_admin admin@example.com", "Delete an admin"
|
78
|
+
desc "delete_admin admin@example.com", "Delete an admin user"
|
74
79
|
def delete_admin(user_name)
|
75
80
|
runner { @cli.delete_admin(user_name) }
|
76
81
|
end
|
@@ -80,7 +85,7 @@ module PostfixAdmin
|
|
80
85
|
runner { @cli.delete_account(address) }
|
81
86
|
end
|
82
87
|
|
83
|
-
desc "add_account user@example.com password", "Add
|
88
|
+
desc "add_account user@example.com password", "Add a new account"
|
84
89
|
method_option :scheme, type: :string, aliases: "-s", desc: "password scheme"
|
85
90
|
method_option :name, type: :string, aliases: "-n", desc: "full name"
|
86
91
|
def add_account(address, password)
|
@@ -100,10 +105,14 @@ module PostfixAdmin
|
|
100
105
|
end
|
101
106
|
|
102
107
|
desc "edit_account user@example.com", "Edit an account"
|
103
|
-
method_option :goto, type: :string, aliases: "-g",
|
104
|
-
|
105
|
-
method_option :
|
106
|
-
|
108
|
+
method_option :goto, type: :string, aliases: "-g",
|
109
|
+
desc: "mailboxes, addresses e-mails are delivered to"
|
110
|
+
method_option :quota, type: :numeric, aliases: "-q",
|
111
|
+
desc: "quota limitation (MB)"
|
112
|
+
method_option :name, type: :string, aliases: "-n",
|
113
|
+
desc: "full name"
|
114
|
+
method_option :active, type: :boolean,
|
115
|
+
desc: "Update active status"
|
107
116
|
def edit_account(address)
|
108
117
|
runner do
|
109
118
|
if options.size == 0
|
@@ -134,7 +143,7 @@ module PostfixAdmin
|
|
134
143
|
end
|
135
144
|
end
|
136
145
|
|
137
|
-
desc "add_admin admin@example.com password", "Add
|
146
|
+
desc "add_admin admin@example.com password", "Add a new admin user"
|
138
147
|
method_option :super, type: :boolean, aliases: "-S", desc: "register as a super admin"
|
139
148
|
method_option :scheme, type: :string, aliases: "-s", desc: "password scheme"
|
140
149
|
def add_admin(user_name, password)
|
@@ -148,12 +157,14 @@ module PostfixAdmin
|
|
148
157
|
end
|
149
158
|
end
|
150
159
|
|
151
|
-
desc "add_admin_domain admin@example.com example.com",
|
160
|
+
desc "add_admin_domain admin@example.com example.com",
|
161
|
+
"Grant an admin user access to a specific domain"
|
152
162
|
def add_admin_domain(user_name, domain_name)
|
153
163
|
runner { @cli.add_admin_domain(user_name, domain_name) }
|
154
164
|
end
|
155
165
|
|
156
|
-
desc "delete_admin_domain admin@example.com example.com",
|
166
|
+
desc "delete_admin_domain admin@example.com example.com",
|
167
|
+
"Revoke an admin user's access to a specific domain"
|
157
168
|
def delete_admin_domain(user_name, domain_name)
|
158
169
|
runner { @cli.delete_admin_domain(user_name, domain_name) }
|
159
170
|
end
|
@@ -173,7 +184,7 @@ module PostfixAdmin
|
|
173
184
|
end
|
174
185
|
end
|
175
186
|
|
176
|
-
desc "add_alias alias@example.com goto@example.net", "Add
|
187
|
+
desc "add_alias alias@example.com goto@example.net", "Add a new alias"
|
177
188
|
def add_alias(address, goto)
|
178
189
|
runner { @cli.add_alias(address, goto) }
|
179
190
|
end
|
@@ -183,9 +194,11 @@ module PostfixAdmin
|
|
183
194
|
runner { @cli.delete_alias(address) }
|
184
195
|
end
|
185
196
|
|
186
|
-
desc "log", "
|
197
|
+
desc "log", "Display action logs"
|
198
|
+
method_option :domain, type: :string, aliases: "-d", desc: "Filter by domain"
|
199
|
+
method_option :last, type: :numeric, aliases: "-l", desc: "Display the last N lines"
|
187
200
|
def log
|
188
|
-
runner { @cli.log }
|
201
|
+
runner { @cli.log(domain: options[:domain], last: options[:last]) }
|
189
202
|
end
|
190
203
|
|
191
204
|
desc "dump", "Dump all data"
|
@@ -193,7 +206,7 @@ module PostfixAdmin
|
|
193
206
|
runner { @cli.dump }
|
194
207
|
end
|
195
208
|
|
196
|
-
desc "version", "
|
209
|
+
desc "version", "Display the version of postfix_admin"
|
197
210
|
def version
|
198
211
|
require 'postfix_admin/version'
|
199
212
|
runner { say "postfix_admin #{VERSION}" }
|
@@ -201,9 +214,9 @@ module PostfixAdmin
|
|
201
214
|
|
202
215
|
private
|
203
216
|
|
204
|
-
def runner
|
217
|
+
def runner(&block)
|
205
218
|
@cli.db_setup
|
206
|
-
|
219
|
+
block.call
|
207
220
|
rescue StandardError => e
|
208
221
|
abort "Error: #{e.message}"
|
209
222
|
end
|
data/postfix_admin.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path("../lib/postfix_admin/version", __FILE__)
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = "postfix_admin"
|
@@ -10,17 +10,21 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.description = %q{Command Line Tools for Postfix Admin}
|
11
11
|
gem.homepage = "https://github.com/krhitoshi/postfix_admin"
|
12
12
|
|
13
|
-
gem.
|
14
|
-
|
15
|
-
gem.add_dependency
|
16
|
-
gem.
|
17
|
-
gem.
|
18
|
-
gem.
|
19
|
-
gem.add_development_dependency
|
13
|
+
gem.required_ruby_version = ">= 2.6.0"
|
14
|
+
|
15
|
+
gem.add_dependency "thor", "~> 1.3.1"
|
16
|
+
gem.add_dependency "activerecord", "~> 6.1.7"
|
17
|
+
gem.add_dependency "mysql2", "~> 0.5"
|
18
|
+
gem.add_dependency "terminal-table", "~> 3.0.2"
|
19
|
+
gem.add_development_dependency "pry"
|
20
|
+
gem.add_development_dependency "factory_bot", "~> 6.3.0"
|
21
|
+
gem.add_development_dependency "rake", "~> 13.2.1"
|
22
|
+
gem.add_development_dependency "rubocop"
|
23
|
+
gem.add_development_dependency "rspec", "~> 3.13.0"
|
20
24
|
|
21
25
|
# Specify which files should be added to the gem when it is released.
|
22
26
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
-
gem.files = Dir.chdir(File.expand_path(
|
27
|
+
gem.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
24
28
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
29
|
end
|
26
30
|
gem.bindir = "exe"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postfix_admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hitoshi Kurokawa
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -16,42 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.3.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.3.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 6.
|
33
|
+
version: 6.1.7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 6.
|
40
|
+
version: 6.1.7
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mysql2
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.5
|
47
|
+
version: '0.5'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.5
|
54
|
+
version: '0.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: terminal-table
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.0.2
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.0.2
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: pry
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,20 +80,34 @@ dependencies:
|
|
66
80
|
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: factory_bot
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 6.3.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 6.3.0
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: rake
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
101
|
- - "~>"
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version: 13.
|
103
|
+
version: 13.2.1
|
76
104
|
type: :development
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
108
|
- - "~>"
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version: 13.
|
110
|
+
version: 13.2.1
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rubocop
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +128,14 @@ dependencies:
|
|
100
128
|
requirements:
|
101
129
|
- - "~>"
|
102
130
|
- !ruby/object:Gem::Version
|
103
|
-
version: 3.
|
131
|
+
version: 3.13.0
|
104
132
|
type: :development
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
136
|
- - "~>"
|
109
137
|
- !ruby/object:Gem::Version
|
110
|
-
version: 3.
|
138
|
+
version: 3.13.0
|
111
139
|
description: Command Line Tools for Postfix Admin
|
112
140
|
email:
|
113
141
|
- hitoshi@nextseed.jp
|
@@ -116,18 +144,24 @@ executables:
|
|
116
144
|
extensions: []
|
117
145
|
extra_rdoc_files: []
|
118
146
|
files:
|
147
|
+
- ".github/workflows/ci.yml"
|
119
148
|
- ".gitignore"
|
120
149
|
- ".rubocop.yml"
|
121
150
|
- CHANGELOG.md
|
122
|
-
- Dockerfile
|
123
151
|
- Gemfile
|
124
152
|
- LICENSE
|
125
153
|
- README.md
|
126
154
|
- Rakefile
|
127
155
|
- Thorfile
|
128
156
|
- bin/console
|
157
|
+
- docker-admin/Dockerfile
|
158
|
+
- docker-admin/config.local.php
|
159
|
+
- docker-app/Dockerfile
|
160
|
+
- docker-app/my.cnf
|
129
161
|
- docker-compose.yml
|
130
|
-
- docker-
|
162
|
+
- docker-db/postfix.v1841.sql
|
163
|
+
- docker-db/postfix.v352.sql
|
164
|
+
- docker-db/postfix.v740.sql
|
131
165
|
- exe/postfix_admin
|
132
166
|
- lib/postfix_admin.rb
|
133
167
|
- lib/postfix_admin/admin.rb
|
@@ -153,7 +187,7 @@ files:
|
|
153
187
|
homepage: https://github.com/krhitoshi/postfix_admin
|
154
188
|
licenses: []
|
155
189
|
metadata: {}
|
156
|
-
post_install_message:
|
190
|
+
post_install_message:
|
157
191
|
rdoc_options: []
|
158
192
|
require_paths:
|
159
193
|
- lib
|
@@ -161,15 +195,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
195
|
requirements:
|
162
196
|
- - ">="
|
163
197
|
- !ruby/object:Gem::Version
|
164
|
-
version:
|
198
|
+
version: 2.6.0
|
165
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
200
|
requirements:
|
167
201
|
- - ">="
|
168
202
|
- !ruby/object:Gem::Version
|
169
203
|
version: '0'
|
170
204
|
requirements: []
|
171
|
-
rubygems_version: 3.
|
172
|
-
signing_key:
|
205
|
+
rubygems_version: 3.5.3
|
206
|
+
signing_key:
|
173
207
|
specification_version: 4
|
174
208
|
summary: ''
|
175
209
|
test_files: []
|
data/Dockerfile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
FROM centos:8
|
2
|
-
|
3
|
-
RUN dnf -y module enable ruby:2.6 \
|
4
|
-
&& dnf -y install \
|
5
|
-
ruby ruby-devel mariadb-devel sqlite-devel gcc make redhat-rpm-config \
|
6
|
-
mariadb dovecot git \
|
7
|
-
&& dnf clean all
|
8
|
-
|
9
|
-
WORKDIR /app
|
10
|
-
|
11
|
-
COPY Gemfile postfix_admin.gemspec ./
|
12
|
-
COPY ./lib/postfix_admin/version.rb ./lib/postfix_admin/version.rb
|
13
|
-
|
14
|
-
RUN gem install bundler && bundle install
|
15
|
-
|
16
|
-
COPY spec/postfix_admin.conf /root/.postfix_admin.conf
|
17
|
-
|
18
|
-
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
19
|
-
RUN chmod +x /docker-entrypoint.sh
|
20
|
-
ENTRYPOINT ["/docker-entrypoint.sh"]
|
21
|
-
|
22
|
-
EXPOSE 80
|
23
|
-
|
24
|
-
CMD ["/sbin/init"]
|