postfix_admin 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  require 'thor'
2
2
  require 'postfix_admin'
3
3
  require 'postfix_admin/cli'
4
+ require 'postfix_admin/doveadm'
4
5
 
5
6
  module PostfixAdmin
6
7
  class Runner < Thor
@@ -14,9 +15,14 @@ module PostfixAdmin
14
15
  runner{ @cli.show_summary(domain_name) }
15
16
  end
16
17
 
17
- desc "show [example.com | user@example.com]", "Show domains or mailboxes"
18
- def show(domain_name=nil)
19
- runner{ @cli.show(domain_name) }
18
+ desc "schemes", "List all supported password schemes"
19
+ def schemes
20
+ runner{ puts PostfixAdmin::Doveadm.schemes.join(' ') }
21
+ end
22
+
23
+ desc "show [example.com | admin@example.com | user@example.com]", "Show domains or admins or mailboxes"
24
+ def show(name=nil)
25
+ runner{ @cli.show(name) }
20
26
  end
21
27
 
22
28
  desc "setup example.com password", "Setup a domain"
@@ -76,27 +82,55 @@ module PostfixAdmin
76
82
  end
77
83
 
78
84
  desc "add_account user@example.com password", "Add an account"
85
+ method_option :scheme, :type => :string, :aliases => "-s", :desc => "password scheme"
86
+ method_option :name, :type => :string, :aliases => "-n", :desc => "full name"
79
87
  def add_account(address, password)
80
- runner{ @cli.add_account(address, password) }
88
+ runner do
89
+ if options[:scheme] == 'scheme'
90
+ warn "Specify password scheme"
91
+ help('add_account')
92
+ else
93
+ if options[:name] == 'name'
94
+ warn "Specify name"
95
+ help('add_account')
96
+ else
97
+ @cli.add_account(address, password, options[:scheme], options[:name])
98
+ end
99
+ end
100
+ end
81
101
  end
82
102
 
83
103
  desc "edit_account user@example.com", "Edit an account"
84
- method_option :quota, :type => :numeric, :aliases => "-q", :desc => "Edit quota limitation"
104
+ method_option :quota, :type => :numeric, :aliases => "-q", :desc => "quota limitation"
105
+ method_option :name, :type => :string, :aliases => "-n", :desc => "full name"
85
106
  def edit_account(address)
86
107
  runner do
87
108
  if options.size == 0
88
109
  warn "Use one or more options."
89
110
  help('edit_account')
90
111
  else
91
- @cli.edit_account(address, options)
112
+ if options[:name] == 'name'
113
+ warn "Specify name"
114
+ help('edit_account')
115
+ else
116
+ @cli.edit_account(address, options)
117
+ end
92
118
  end
93
119
  end
94
120
  end
95
121
 
96
122
  desc "add_admin admin@example.com password", "Add an admin user"
97
- method_option :super, :type => :boolean, :aliases => "-s", :desc => "register as a super admin"
123
+ method_option :super, :type => :boolean, :aliases => "-S", :desc => "register as a super admin"
124
+ method_option :scheme, :type => :string, :aliases => "-s", :desc => "password scheme"
98
125
  def add_admin(user_name, password)
99
- runner{ @cli.add_admin(user_name, password, options[:super]) }
126
+ runner do
127
+ if options[:scheme] == 'scheme'
128
+ warn "Specify password scheme"
129
+ help('add_admin')
130
+ else
131
+ @cli.add_admin(user_name, password, options[:super], options[:scheme])
132
+ end
133
+ end
100
134
  end
101
135
 
102
136
  desc "add_admin_domain admin@example.com example.com", "Add admin_domain"
@@ -120,6 +154,11 @@ module PostfixAdmin
120
154
  runner{ @cli.delete_alias(address) }
121
155
  end
122
156
 
157
+ desc "dump", "Dump all data"
158
+ def dump
159
+ runner{ @cli.dump }
160
+ end
161
+
123
162
  desc "version", "Show postfix_admin version"
124
163
  def version
125
164
  require 'postfix_admin/version'
@@ -132,7 +171,7 @@ module PostfixAdmin
132
171
  begin
133
172
  yield
134
173
  rescue Error, ArgumentError => e
135
- warn e.message
174
+ abort e.message
136
175
  end
137
176
  end
138
177
  end
@@ -1,3 +1,3 @@
1
1
  module PostfixAdmin
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -3,9 +3,10 @@ require File.expand_path('../lib/postfix_admin/version', __FILE__)
3
3
  Gem::Specification.new do |gem|
4
4
  gem.add_dependency 'thor'
5
5
  gem.add_dependency 'data_mapper'
6
- gem.add_dependency 'do_mysql', '>= 0.10.9'
6
+ gem.add_dependency 'do_mysql', '>= 0.10.17'
7
7
  gem.add_dependency 'dm-mysql-adapter'
8
- gem.add_development_dependency 'rspec', '~> 2.11.0'
8
+ gem.add_development_dependency 'rake', '~> 10.5.0'
9
+ gem.add_development_dependency 'rspec', '~> 3.4.0'
9
10
  gem.add_development_dependency 'dm-sqlite-adapter'
10
11
 
11
12
  gem.authors = ["Hitoshi Kurokawa"]
data/spec/base_spec.rb CHANGED
@@ -12,7 +12,8 @@ describe PostfixAdmin::Base do
12
12
  'database' => 'mysql://postfix:password@localhost/postfix',
13
13
  'aliases' => 30,
14
14
  'mailboxes' => 30,
15
- 'maxquota' => 100
15
+ 'maxquota' => 100,
16
+ 'scheme' => 'CRAM-MD5',
16
17
  }
17
18
  end
18
19
 
@@ -33,25 +34,26 @@ describe PostfixAdmin::Base do
33
34
  @base.config[:mailboxes].should == 30
34
35
  @base.config[:maxquota].should == 100
35
36
  @base.config[:mailbox_quota].should == 100 * KB_TO_MB
37
+ @base.config[:scheme].should == 'CRAM-MD5'
36
38
  end
37
39
 
38
40
  it "#domain_exist?" do
39
- Domain.exist?('example.com').should be_true
41
+ Domain.exist?('example.com').should be true
40
42
  end
41
43
 
42
44
  it "#alias_exist?" do
43
- Alias.exist?('user@example.com').should be_true
44
- Alias.exist?('unknown@example.com').should be_false
45
+ Alias.exist?('user@example.com').should be true
46
+ Alias.exist?('unknown@example.com').should be false
45
47
  end
46
48
 
47
49
  it "#mailbox_exist?" do
48
- Mailbox.exist?('user@example.com').should be_true
49
- Mailbox.exist?('unknown@example.com').should be_false
50
+ Mailbox.exist?('user@example.com').should be true
51
+ Mailbox.exist?('unknown@example.com').should be false
50
52
  end
51
53
 
52
54
  it "#admin_exist?" do
53
- Admin.exist?('admin@example.com').should be_true
54
- Admin.exist?('unknown_admin@example.com').should be_false
55
+ Admin.exist?('admin@example.com').should be true
56
+ Admin.exist?('unknown_admin@example.com').should be false
55
57
  end
56
58
 
57
59
  describe "#add_domain" do
@@ -79,6 +81,14 @@ describe PostfixAdmin::Base do
79
81
  (Alias.count - num_aliases).should be(1)
80
82
  end
81
83
 
84
+ it "refuse empty password" do
85
+ lambda{ @base.add_account('new_user@example.com', '') }.should raise_error Error
86
+ end
87
+
88
+ it "refuse nil password" do
89
+ lambda{ @base.add_account('new_user@example.com', nil) }.should raise_error Error
90
+ end
91
+
82
92
  it "can not add account which hsas invalid address" do
83
93
  lambda{ @base.add_account('invalid.example.com', 'password') }.should raise_error Error
84
94
  end
@@ -100,10 +110,18 @@ describe PostfixAdmin::Base do
100
110
  it "can add an new admin" do
101
111
  num_admins = Admin.count
102
112
  @base.add_admin('admin@example.net', 'password')
103
- Admin.exist?('admin@example.net').should be_true
113
+ Admin.exist?('admin@example.net').should be true
104
114
  (Admin.count - num_admins).should be(1)
105
115
  end
106
116
 
117
+ it "refuse empty password" do
118
+ lambda{ @base.add_admin('admin@example.net', '') }.should raise_error Error
119
+ end
120
+
121
+ it "refuse nil password" do
122
+ lambda{ @base.add_admin('admin@example.net', nil) }.should raise_error Error
123
+ end
124
+
107
125
  it "can not add exist admin" do
108
126
  lambda{ @base.add_admin('admin@example.com', 'password') }.should raise_error Error
109
127
  end
@@ -112,7 +130,7 @@ describe PostfixAdmin::Base do
112
130
  describe "#add_admin_domain" do
113
131
  it "#add_admin_domain" do
114
132
  @base.add_admin_domain('admin@example.com', 'example.org')
115
- Admin.find('admin@example.com').has_domain?('example.org').should be_true
133
+ Admin.find('admin@example.com').has_domain?('example.org').should be true
116
134
  end
117
135
 
118
136
  it "can not add unknown domain for an admin" do
@@ -131,7 +149,7 @@ describe PostfixAdmin::Base do
131
149
  describe "#delete_admin_domain" do
132
150
  it "#delete_admin_domain" do
133
151
  lambda{ @base.delete_admin_domain('admin@example.com', 'example.com') }.should_not raise_error
134
- Admin.find('admin@example.com').has_domain?('example.com').should be_false
152
+ Admin.find('admin@example.com').has_domain?('example.com').should be false
135
153
  end
136
154
 
137
155
  it "can not delete not administrated domain" do
@@ -152,7 +170,7 @@ describe PostfixAdmin::Base do
152
170
  num_aliases = Alias.count
153
171
  lambda { @base.add_alias('new_alias@example.com', 'goto@example.jp') }.should_not raise_error
154
172
  (Alias.count - num_aliases).should be(1)
155
- Alias.exist?('new_alias@example.com').should be_true
173
+ Alias.exist?('new_alias@example.com').should be true
156
174
  end
157
175
 
158
176
  it "can not add an alias which has a same name as a mailbox" do
@@ -172,7 +190,7 @@ describe PostfixAdmin::Base do
172
190
  describe "#delete_alias" do
173
191
  it "can delete an alias" do
174
192
  lambda{ @base.delete_alias('alias@example.com') }.should_not raise_error
175
- Alias.exist?('alias@example.com').should be_false
193
+ Alias.exist?('alias@example.com').should be false
176
194
  end
177
195
 
178
196
  it "can not delete mailbox" do
@@ -196,8 +214,8 @@ describe PostfixAdmin::Base do
196
214
  it "can delete a domain" do
197
215
  lambda{ @base.delete_domain('example.com') }.should_not raise_error
198
216
 
199
- Domain.exist?('example.com').should be_false
200
- Admin.exist?('admin@example.com').should be_false
217
+ Domain.exist?('example.com').should be false
218
+ Admin.exist?('admin@example.com').should be false
201
219
 
202
220
  Alias.all(:domain_name => 'example.com').count.should be(0)
203
221
  Mailbox.all(:domain_name => 'example.com').count.should be(0)
@@ -213,7 +231,7 @@ describe PostfixAdmin::Base do
213
231
  describe "#delete_admin" do
214
232
  it "can delete an admin" do
215
233
  lambda{ @base.delete_admin('admin@example.com') }.should_not raise_error
216
- Admin.exist?('admin@example.com').should be_false
234
+ Admin.exist?('admin@example.com').should be false
217
235
  end
218
236
 
219
237
  it "can not delete unknown admin" do
@@ -224,8 +242,8 @@ describe PostfixAdmin::Base do
224
242
  describe "#delete_account" do
225
243
  it "can delete an account" do
226
244
  lambda{ @base.delete_account('user@example.com') }.should_not raise_error
227
- Mailbox.exist?('user@example.com').should be_false
228
- Alias.exist?('user@example.com').should be_false
245
+ Mailbox.exist?('user@example.com').should be false
246
+ Alias.exist?('user@example.com').should be false
229
247
  end
230
248
 
231
249
  it "can not delete unknown account" do
data/spec/cli_spec.rb CHANGED
@@ -54,14 +54,16 @@ describe PostfixAdmin::CLI do
54
54
  capture(:stdout){ @cli.show_domain }.should_not =~ /ALL/
55
55
  end
56
56
 
57
- describe "#show_account" do
57
+ describe "#show_account_details" do
58
58
  it "shows information of an account" do
59
- lambda { @cli.show_account('user@example.com') }.should_not raise_error
60
- capture(:stdout){ @cli.show_account('user@example.com') }.should =~ /Quota/
59
+ lambda { @cli.show_account_details('user@example.com') }.should_not raise_error
60
+ result = capture(:stdout){ @cli.show_account_details('user@example.com') }
61
+ result.should =~ /Name/
62
+ result.should =~ /Quota/
61
63
  end
62
64
 
63
65
  it "raises error when unknown account" do
64
- lambda { @cli.show_account('unknown@example.com') }.should raise_error Error
66
+ lambda { @cli.show_account_details('unknown@example.com') }.should raise_error Error
65
67
  end
66
68
  end
67
69
 
@@ -104,12 +106,12 @@ describe PostfixAdmin::CLI do
104
106
  describe "#super_admin" do
105
107
  it "enables super admin flag of an admin" do
106
108
  lambda{ @cli.super_admin('admin@example.com', false) }.should_not raise_error
107
- Admin.find('admin@example.com').super_admin?.should be_true
109
+ Admin.find('admin@example.com').super_admin?.should be true
108
110
  end
109
111
 
110
112
  it "disable super admin flag of an admin" do
111
113
  lambda{ @cli.super_admin('all@example.com', true) }.should_not raise_error
112
- Admin.find('all@example.com').super_admin?.should be_false
114
+ Admin.find('all@example.com').super_admin?.should be false
113
115
  end
114
116
 
115
117
  it "can not user for unknown admin" do
@@ -119,7 +121,7 @@ describe PostfixAdmin::CLI do
119
121
 
120
122
  it "#change_admin_password" do
121
123
  lambda { @cli.change_admin_password('admin@example.com', 'new_password') }.should_not raise_error
122
- Admin.find('admin@example.com').password.should == 'new_password'
124
+ Admin.find('admin@example.com').password.should == CRAM_MD5_NEW_PASS
123
125
  lambda { @cli.change_admin_password('unknown_admin@example.com', 'new_password') }.should raise_error Error
124
126
 
125
127
  lambda { @cli.change_admin_password('admin@example.com', '1234') }.should raise_error ArgumentError
@@ -127,7 +129,7 @@ describe PostfixAdmin::CLI do
127
129
 
128
130
  it "#change_account_password" do
129
131
  lambda { @cli.change_account_password('user@example.com', 'new_password') }.should_not raise_error
130
- Mailbox.find('user@example.com').password.should == 'new_password'
132
+ Mailbox.find('user@example.com').password.should == CRAM_MD5_NEW_PASS
131
133
  lambda { @cli.change_account_password('unknown@example.com', 'new_password') }.should raise_error Error
132
134
  lambda { @cli.change_account_password('user@example.com', '1234') }.should raise_error ArgumentError
133
135
  end
@@ -135,7 +137,7 @@ describe PostfixAdmin::CLI do
135
137
  describe "#add_admin" do
136
138
  it "can add a new admin" do
137
139
  lambda { @cli.add_admin('new_admin@example.com', 'password') }.should_not raise_error
138
- Admin.exist?('new_admin@example.com').should be_true
140
+ Admin.exist?('new_admin@example.com').should be true
139
141
  end
140
142
 
141
143
  it "can not add exist admin" do
@@ -150,18 +152,18 @@ describe PostfixAdmin::CLI do
150
152
  describe "#delete_admin" do
151
153
  it "can delete an admin" do
152
154
  lambda { @cli.delete_admin('admin@example.com') }.should_not raise_error
153
- Admin.exist?('admin@example.com').should be_false
155
+ Admin.exist?('admin@example.com').should be false
154
156
  end
155
157
 
156
158
  it "can delete a super admin" do
157
159
  lambda { @cli.delete_admin('all@example.com') }.should_not raise_error
158
- Admin.exist?('all@example.com').should be_false
160
+ Admin.exist?('all@example.com').should be false
159
161
  end
160
162
 
161
163
  it "can delete an admin whish has multiple domains" do
162
164
  @cli.add_admin_domain('admin@example.com', 'example.org')
163
165
  lambda { @cli.delete_admin('admin@example.com') }.should_not raise_error
164
- Admin.exist?('admin@example.com').should be_false
166
+ Admin.exist?('admin@example.com').should be false
165
167
  end
166
168
 
167
169
  it "can not delete unknown admin" do
@@ -170,22 +172,22 @@ describe PostfixAdmin::CLI do
170
172
  end
171
173
 
172
174
  it "#add_alias and #delete_alias" do
173
- lambda { @cli.add_alias('user@example.com', 'goto@example.jp') }.should raise_error
174
- lambda { @cli.delete_alias('user@example.com') }.should raise_error
175
- lambda { @cli.delete_alias('unknown@example.com') }.should raise_error
175
+ lambda { @cli.add_alias('user@example.com', 'goto@example.jp') }.should raise_error Error
176
+ lambda { @cli.delete_alias('user@example.com') }.should raise_error Error
177
+ lambda { @cli.delete_alias('unknown@example.com') }.should raise_error Error
176
178
 
177
179
  lambda { @cli.add_alias('new_alias@example.com', 'goto@example.jp') }.should_not raise_error
178
- Alias.exist?('new_alias@example.com').should be_true
180
+ Alias.exist?('new_alias@example.com').should be true
179
181
 
180
182
  lambda { @cli.delete_alias('new_alias@example.com') }.should_not raise_error
181
- Alias.exist?('new_alias@example.com').should be_false
183
+ Alias.exist?('new_alias@example.com').should be false
182
184
  end
183
185
 
184
186
  describe "#add_account" do
185
187
  it "can add an account" do
186
188
  lambda { @cli.add_account('new_user@example.com', 'password') }.should_not raise_error
187
- Mailbox.exist?('new_user@example.com').should be_true
188
- Alias.exist?('new_user@example.com').should be_true
189
+ Mailbox.exist?('new_user@example.com').should be true
190
+ Alias.exist?('new_user@example.com').should be true
189
191
  end
190
192
 
191
193
  it "can not add account of unknown domain" do
@@ -200,8 +202,8 @@ describe PostfixAdmin::CLI do
200
202
  describe "#delete_accont" do
201
203
  it "can delete an account" do
202
204
  lambda { @cli.delete_account('user@example.com') }.should_not raise_error
203
- Mailbox.exist?('user@example.com').should be_false
204
- Alias.exist?('user@example.com').should be_false
205
+ Mailbox.exist?('user@example.com').should be false
206
+ Alias.exist?('user@example.com').should be false
205
207
  end
206
208
 
207
209
  it "can not delete unknown account" do
@@ -216,7 +218,7 @@ describe PostfixAdmin::CLI do
216
218
 
217
219
  it "upcase will convert to downcase" do
218
220
  lambda{ @cli.add_domain('ExAmPle.NeT') }.should_not raise_error
219
- Domain.exist?('example.net').should be_true
221
+ Domain.exist?('example.net').should be true
220
222
  end
221
223
 
222
224
  it "can not add exist domain" do
@@ -249,12 +251,12 @@ describe PostfixAdmin::CLI do
249
251
  describe "#delete_domain" do
250
252
  it "can delete exist domain" do
251
253
  lambda { @cli.delete_domain('example.com') }.should_not raise_error
252
- Domain.exist?('example.net').should be_false
254
+ Domain.exist?('example.net').should be false
253
255
  end
254
256
 
255
257
  it "upcase will convert to downcase" do
256
258
  lambda { @cli.delete_domain('eXaMplE.cOm') }.should_not raise_error
257
- Domain.exist?('example.com').should be_false
259
+ Domain.exist?('example.com').should be false
258
260
  end
259
261
 
260
262
  it "can delete related admins, addresses and aliases" do
@@ -268,19 +270,35 @@ describe PostfixAdmin::CLI do
268
270
  @cli.add_admin('no_related@example.com', 'password')
269
271
 
270
272
  lambda { @cli.delete_domain('example.com') }.should_not raise_error
271
- Admin.exist?('admin@example.com').should be_false
272
- Admin.exist?('admin@example.org').should be_true
273
- Admin.exist?('other_admin@example.com').should be_false
274
- Admin.exist?('no_related@example.com').should be_true
273
+ Admin.exist?('admin@example.com').should be false
274
+ Admin.exist?('admin@example.org').should be true
275
+ Admin.exist?('other_admin@example.com').should be false
276
+ Admin.exist?('no_related@example.com').should be true
275
277
 
276
278
  # aliases should be removed
277
- Alias.exist?('alias@example.com').should be_false
278
- Alias.exist?('user@example.com').should be_false
279
- Alias.exist?('user2@example.com').should be_false
279
+ Alias.exist?('alias@example.com').should be false
280
+ Alias.exist?('user@example.com').should be false
281
+ Alias.exist?('user2@example.com').should be false
280
282
 
281
283
  # mailboxes should be removed
282
- Mailbox.exist?('user@example.com').should be_false
283
- Mailbox.exist?('user2@example.com').should be_false
284
+ Mailbox.exist?('user@example.com').should be false
285
+ Mailbox.exist?('user2@example.com').should be false
286
+ end
287
+ end
288
+
289
+ describe "#dump" do
290
+ it do
291
+ lambda { @cli.dump }.should_not raise_error
292
+ end
293
+
294
+ it "print infomation of all domains" do
295
+ result = capture(:stdout){ @cli.dump }
296
+ result.should =~ /example.com,100,true/
297
+ result.should =~ /example.org,100,true/
298
+ result.should =~ /admin@example.com,"9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740",false,true/
299
+ result.should =~ /user@example.com,"","9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740",102400000,"example.com\/user@example.com\/",true/
300
+ result.should =~ /alias@example.com,"goto@example.jp",true/
301
+ result.should =~ /user@example.com,"goto@example.jp",true/
284
302
  end
285
303
  end
286
304
  end