sugoi-mail 0.1.0 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/INSTALL +94 -0
- data/app/apis/mailservice_api.rb +32 -22
- data/app/controllers/account_controller.rb +38 -22
- data/app/controllers/address_controller.rb +2 -0
- data/app/controllers/application.rb +12 -1
- data/app/controllers/base_user_controller.rb +29 -0
- data/app/controllers/domain_controller.rb +7 -8
- data/app/controllers/mail_admin_controller.rb +275 -0
- data/app/controllers/mailinglist_controller.rb +68 -14
- data/app/controllers/mailservice_controller.rb +116 -94
- data/app/controllers/navigation_controller.rb +3 -0
- data/app/controllers/root_admin_controller.rb +346 -0
- data/app/controllers/sugoi_admin_controller.rb +16 -13
- data/app/helpers/base_user_helper.rb +2 -0
- data/app/helpers/mail_admin_helper.rb +7 -0
- data/app/helpers/navigation_helper.rb +2 -0
- data/app/helpers/root_admin_helper.rb +2 -0
- data/app/models/address.rb +3 -4
- data/app/models/domain.rb +1 -1
- data/app/models/mail_admin.rb +2 -0
- data/app/models/mailinglist.rb +41 -19
- data/app/models/mailinglist_class.rb +1 -0
- data/app/models/message.rb +18 -36
- data/app/models/proxy_link.rb +14 -6
- data/app/views/account/login.rhtml +14 -12
- data/app/views/account/logout.rhtml +4 -8
- data/app/views/account/welcome.rhtml +3 -13
- data/app/views/base_user/add_address.rhtml +3 -0
- data/app/views/base_user/edit_address.rhtml +3 -0
- data/app/views/base_user/edit_user_list.rhtml +21 -0
- data/app/views/base_user/list_mailinglists.rhtml +3 -0
- data/app/views/base_user/remove_address.rhtml +3 -0
- data/app/views/base_user/unsubscribe_self.rhtml +3 -0
- data/app/views/layouts/application.rhtml +47 -0
- data/app/views/layouts/login.rhtml +34 -0
- data/app/views/layouts/sugoi_admin.rhtml +1 -0
- data/app/views/mail_admin/_form.rhtml +11 -0
- data/app/views/mail_admin/edit_admin_message.rhtml +12 -0
- data/app/views/mail_admin/list_admin_messages.rhtml +20 -0
- data/app/views/mail_admin/new_admin_message.rhtml +0 -0
- data/app/views/mailinglist/_address_form.rhtml +23 -0
- data/app/views/mailinglist/_form.rhtml +10 -14
- data/app/views/mailinglist/_new_class_form.rhtml +16 -0
- data/app/views/mailinglist/_new_form.rhtml +30 -0
- data/app/views/mailinglist/edit.rhtml +11 -5
- data/app/views/mailinglist/list.rhtml +15 -15
- data/app/views/mailinglist/list_mailinglist_classes.rhtml +18 -0
- data/app/views/mailinglist/new.rhtml +5 -5
- data/app/views/mailinglist/new_address.rhtml +10 -0
- data/app/views/mailinglist/new_mailinglist_class.rhtml +8 -0
- data/app/views/mailinglist/show.rhtml +15 -13
- data/app/views/navigation/_base_add_address_module.rhtml +2 -0
- data/app/views/navigation/_base_edit_address_module.rhtml +2 -0
- data/app/views/navigation/_base_edit_user_list_module.rhtml +5 -0
- data/app/views/navigation/_base_index_module.rhtml +2 -0
- data/app/views/navigation/_base_list_mailinglists_module.rhtml +3 -0
- data/app/views/navigation/_base_remove_address_module.rhtml +2 -0
- data/app/views/navigation/_base_unsubscribe_self_module.rhtml +2 -0
- data/app/views/navigation/_base_welcome_module.rhtml +3 -0
- data/app/views/navigation/_nav_module.rhtml +77 -0
- data/app/views/navigation/_root_add_address_module.rhtml +3 -0
- data/app/views/navigation/_root_add_mailinglist_module.rhtml +3 -0
- data/app/views/navigation/_root_add_user_module.rhtml +3 -0
- data/app/views/navigation/_root_change_user_password_module.rhtml +3 -0
- data/app/views/navigation/_root_edit_address_module.rhtml +13 -0
- data/app/views/navigation/_root_edit_mailinglist_module.rhtml +12 -0
- data/app/views/navigation/_root_edit_user_list_module.rhtml +3 -0
- data/app/views/navigation/_root_edit_user_module.rhtml +10 -0
- data/app/views/navigation/_root_index_module.rhtml +4 -0
- data/app/views/navigation/_root_list_addresses_module.rhtml +11 -0
- data/app/views/navigation/_root_list_mailinglists_module.rhtml +11 -0
- data/app/views/navigation/_root_list_users_module.rhtml +12 -0
- data/app/views/navigation/_root_remove_address_module.rhtml +12 -0
- data/app/views/navigation/_root_remove_mailinglist_module.rhtml +12 -0
- data/app/views/navigation/_root_remove_user_module.rhtml +12 -0
- data/app/views/navigation/_root_show_user_module.rhtml +10 -0
- data/app/views/navigation/_root_welcome_module.rhtml +3 -0
- data/app/views/navigation/chooseNav.rhtml +0 -0
- data/app/views/navigation/logout.rhtml +8 -0
- data/app/views/root_admin/_form.rhtml +21 -0
- data/app/views/root_admin/add_address.rhtml +3 -0
- data/app/views/root_admin/add_mailinglist.rhtml +3 -0
- data/app/views/root_admin/admin_user_list.rhtml +29 -0
- data/app/views/root_admin/admin_user_new.rhtml +8 -0
- data/app/views/root_admin/change_user_password.rhtml +3 -0
- data/app/views/root_admin/edit_address.rhtml +3 -0
- data/app/views/root_admin/edit_mailinglist.rhtml +3 -0
- data/app/views/root_admin/edit_user_list.rhtml +3 -0
- data/app/views/root_admin/list_addresses.rhtml +3 -0
- data/app/views/root_admin/list_mailinglists.rhtml +3 -0
- data/app/views/root_admin/list_users.rhtml +32 -0
- data/app/views/root_admin/remove_address.rhtml +3 -0
- data/app/views/root_admin/remove_mailinglist.rhtml +3 -0
- data/app/views/root_admin/remove_user.rhtml +3 -0
- data/app/views/root_admin/show_user.rhtml +3 -0
- data/app/views/sugoi_admin/_command_description.rhtml +1 -1
- data/app/views/sugoi_admin/_command_list.rhtml +1 -1
- data/app/views/sugoi_admin/create_domain.rhtml +1 -1
- data/app/views/sugoi_admin/create_list.rhtml +1 -1
- data/app/views/sugoi_admin/create_user.rhtml +1 -1
- data/app/views/sugoi_admin/help.rhtml +1 -1
- data/app/views/sugoi_admin/init.rhtml +1 -1
- data/app/views/sugoi_admin/list_addresses.rhtml +1 -1
- data/app/views/sugoi_admin/list_domains.rhtml +1 -1
- data/app/views/sugoi_admin/list_mailinglist_classes.rhtml +1 -1
- data/app/views/sugoi_admin/list_mailinglists.rhtml +1 -1
- data/app/views/sugoi_admin/list_users.rhtml +1 -1
- data/app/views/sugoi_admin/set_config.rhtml +4 -1
- data/app/views/sugoi_admin/show_config.rhtml +1 -1
- data/app/views/sugoi_admin/subscribe.rhtml +1 -1
- data/app/views/sugoi_admin/unsubscribe.rhtml +1 -1
- data/bin/maild +1 -1
- data/bin/sugoi-mail +1 -1
- data/config/environment.rb +2 -2
- data/config/routes.rb +4 -2
- data/db/migrate/028_add_sessions.rb +15 -0
- data/db/schema.rb +56 -48
- data/lib/login_system.rb +6 -6
- data/lib/tasks/release.rake +2 -2
- data/public/404.html +27 -5
- data/public/500.html +27 -5
- data/public/images/celltop1.jpg +0 -0
- data/public/images/title11.jpg +0 -0
- data/public/{index.html → index_default.html} +0 -0
- data/public/javascripts/dragdrop.js +1 -1
- data/public/javascripts/effects.js +1 -1
- data/public/javascripts/prototype.js +1 -1
- data/public/stylesheets/global.css +201 -0
- data/public/stylesheets/scaffold.css +176 -11
- data/public/stylesheets/trestle.css +176 -11
- data/script/cover +6 -0
- data/script/process/inspector +3 -0
- data/test/all.rb +2 -0
- data/test/fixtures/helps.yml +1 -1
- data/test/fixtures/mailinglist_classes.yml +4 -4
- data/test/fixtures/messages.yml +22 -2
- data/test/functional/base_user_controller_test.rb +18 -0
- data/test/functional/mail_admin_controller_test.rb +18 -0
- data/test/functional/mailservice_controller_test.rb +164 -19
- data/test/functional/navigation_controller_test.rb +18 -0
- data/test/functional/root_admin_controller_test.rb +18 -0
- data/test/functional/sugoi_admin_controller_test.rb +68 -10
- data/test/functionals.rb +2 -1
- data/test/integration/test_soap.rb +3 -1
- data/test/unit/address_test.rb +16 -1
- data/test/unit/domain_test.rb +5 -12
- data/test/unit/mailinglist_class_test.rb +2 -2
- data/test/unit/mailinglist_test.rb +138 -3
- data/test/unit/message_test.rb +256 -1
- data/test/unit/proxy_link_test.rb +37 -0
- data/test/unit/sys_config_test.rb +6 -0
- data/test/unit/user_test.rb +20 -0
- data/test/units.rb +2 -1
- metadata +94 -8
- data/app/views/layouts/address.rhtml +0 -13
- data/app/views/layouts/scaffold.rhtml +0 -13
@@ -0,0 +1,346 @@
|
|
1
|
+
class RootAdminController < MailserviceController
|
2
|
+
|
3
|
+
def admin_user_new
|
4
|
+
|
5
|
+
end
|
6
|
+
|
7
|
+
# Returns true if the user is an administrator and false otherwise
|
8
|
+
def is_admin
|
9
|
+
user_admin? rescue false
|
10
|
+
end
|
11
|
+
|
12
|
+
# Creates a new user. NOTE: This method requires that you're
|
13
|
+
# already signed in as an administrator.
|
14
|
+
def admin_user_signup
|
15
|
+
#if
|
16
|
+
# redirect_to :controller => 'mailinglist', :action => 'list_users'
|
17
|
+
#flash[:notice] = "IT WORKED"
|
18
|
+
#else
|
19
|
+
#end
|
20
|
+
# render :controller => 'mailservice', :action => 'admin_user_signup', :params => 'login, password, password_confirmation'
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns all users in this domain.
|
24
|
+
def admin_user_list
|
25
|
+
if session[:domain]
|
26
|
+
all_users=User.find_all_by_domain_id session[:domain].id
|
27
|
+
end
|
28
|
+
if all_users
|
29
|
+
@users = all_users
|
30
|
+
end
|
31
|
+
render :controller => 'mailservice', :action => 'admin_user_list'
|
32
|
+
end
|
33
|
+
|
34
|
+
def list_users # domain_name
|
35
|
+
#@users = session[:domain].users
|
36
|
+
domain_name = session[:domain]
|
37
|
+
domain = Domain.find_by_name domain_name
|
38
|
+
if domain then
|
39
|
+
@users = User.find_all_by_domain_id domain.id
|
40
|
+
else
|
41
|
+
# error "Domain \"#{domain_name}\" does not exist."
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns all users in this domain, as a hash
|
46
|
+
def admin_user_collection
|
47
|
+
render :controller => 'mailservice', :action => 'admin_user_collection'
|
48
|
+
end
|
49
|
+
|
50
|
+
# Resets a user's password.
|
51
|
+
def admin_user_reset_password login, password, password_confirmation
|
52
|
+
render :controller => 'mailservice', :action => 'admin_user_reset_password', :params => 'login, password, password_confirmation'
|
53
|
+
end
|
54
|
+
|
55
|
+
# Deletes a user.
|
56
|
+
def admin_user_delete login, login_confirmation
|
57
|
+
render :controller => 'mailservice', :action => 'admin_user_delete', :params => 'login, login_confirmation'
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the confirmation code for a particular combination of
|
61
|
+
# mailing list and address.
|
62
|
+
#
|
63
|
+
# This one should probably resend the confirmation message.
|
64
|
+
def admin_get_confirmation_code mailinglist_name, address
|
65
|
+
render :controller => 'mailservice', :action => 'admin_get_confirmation_code', :params => 'mailinglist_name, address'
|
66
|
+
end
|
67
|
+
|
68
|
+
# Returns all mailing lists in this domain.
|
69
|
+
def admin_mailinglists_all
|
70
|
+
render :controller => 'mailservice', :action => 'admin_mailinglists_all'
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
# model :mailinglist
|
82
|
+
|
83
|
+
# private
|
84
|
+
# def get_password
|
85
|
+
# password = ask "Password: " do |q| q.echo = false end
|
86
|
+
# confirmation = ask "Confirm: " do |q| q.echo = false end
|
87
|
+
#
|
88
|
+
# return [ password, confirmation ]
|
89
|
+
# end
|
90
|
+
#
|
91
|
+
# def format_errors errors
|
92
|
+
# errors.map do |facility, text|
|
93
|
+
# " #{facility}: #{text}\n"
|
94
|
+
# end
|
95
|
+
# end
|
96
|
+
#
|
97
|
+
# def error(error_text)
|
98
|
+
# callername = caller[0].gsub(/.*\`(\w+)\'.*/, '\1')
|
99
|
+
# @error = "#{callername}: #{error_text}"
|
100
|
+
# nil
|
101
|
+
# end
|
102
|
+
#
|
103
|
+
# def message(message_text)
|
104
|
+
# callername = caller[0].gsub(/.*\`(\w+)\'.*/, '\1')
|
105
|
+
# @messages ||= []
|
106
|
+
# @messages << "#{callername}: #{message_text}"
|
107
|
+
# end
|
108
|
+
#
|
109
|
+
# def ask_description(thing)
|
110
|
+
# description = ask "Description for #{thing}: "
|
111
|
+
# if description == "" then description = nil end
|
112
|
+
# description
|
113
|
+
# end
|
114
|
+
#
|
115
|
+
# public
|
116
|
+
#
|
117
|
+
# def init
|
118
|
+
# @alreadythere = []
|
119
|
+
# [ MailinglistClass, AdminMessage, SysConfig, Help ].each do |table|
|
120
|
+
# fixture = YAML.load(File.read(File.join(RAILS_ROOT,
|
121
|
+
# "test",
|
122
|
+
# "fixtures",
|
123
|
+
# table.name.tableize +
|
124
|
+
# ".yml")))
|
125
|
+
# fixture.values.sort_by do |values| values["id"].to_i end .
|
126
|
+
# each do |values|
|
127
|
+
# begin
|
128
|
+
# table.find values["id"]
|
129
|
+
# @alreadythere << "%s[%s]" % [ table.name, values["id"] ]
|
130
|
+
# rescue ActiveRecord::RecordNotFound
|
131
|
+
# configvar = table.new values
|
132
|
+
# configvar.id = values["id"].to_i # hohoho
|
133
|
+
# configvar.save
|
134
|
+
# end
|
135
|
+
# end
|
136
|
+
# end
|
137
|
+
# end
|
138
|
+
#
|
139
|
+
# def show_config(var_name=nil)
|
140
|
+
# unless var_name
|
141
|
+
# @config_vars = SysConfig.find_all
|
142
|
+
# else
|
143
|
+
# @config_vars = SysConfig.find_all_by_name(var_name)
|
144
|
+
# end
|
145
|
+
# end
|
146
|
+
#
|
147
|
+
# def set_config(var_name, new_value)
|
148
|
+
# @config_var = SysConfig.find_by_name(var_name)
|
149
|
+
# @config_var.value = new_value
|
150
|
+
# @config_var.save
|
151
|
+
# end
|
152
|
+
#
|
153
|
+
# def list_domains
|
154
|
+
# @domains = Domain.find_all
|
155
|
+
# end
|
156
|
+
#
|
157
|
+
# def list_mailinglists#(domain_name)
|
158
|
+
# flash[:notice] = "List of Mailing Lists"
|
159
|
+
## domain = Domain.find_by_name(domain_name)
|
160
|
+
## if domain then
|
161
|
+
## @mailinglists = domain.mailinglists
|
162
|
+
## else
|
163
|
+
## error "#{domain_name}: not found"
|
164
|
+
## end
|
165
|
+
# end
|
166
|
+
#
|
167
|
+
# def list_addresses#(mailinglist_address)
|
168
|
+
## @mailinglist = Mailinglist.find_by_address(mailinglist_address)
|
169
|
+
## if @mailinglist then
|
170
|
+
## @mailinglist=@mailinglist[0]
|
171
|
+
## @addresses = @mailinglist.addresses
|
172
|
+
## else
|
173
|
+
## error "#{mailinglist_address}: not found"
|
174
|
+
## end
|
175
|
+
# end
|
176
|
+
#
|
177
|
+
# def add_user #domain_name, username,
|
178
|
+
## email_address = nil,
|
179
|
+
## description = nil
|
180
|
+
## domain = Domain.find_by_name domain_name
|
181
|
+
## if domain then
|
182
|
+
## password, password_confirmation = get_password
|
183
|
+
##
|
184
|
+
## if email_address == nil then
|
185
|
+
## email_address = ask "Address to forward #{username}'s email to: "
|
186
|
+
## if email_address == "" then email_address = nil end
|
187
|
+
## end
|
188
|
+
##
|
189
|
+
## description ||= ask_description(username)
|
190
|
+
##
|
191
|
+
## user = User.new
|
192
|
+
## user.domain = domain
|
193
|
+
## user.login = username
|
194
|
+
## user.password = password
|
195
|
+
## user.password_confirmation = password_confirmation
|
196
|
+
## user.description = description
|
197
|
+
## user.domainadmin = false
|
198
|
+
## user.mailadmin = false
|
199
|
+
##
|
200
|
+
## if user.save then
|
201
|
+
## message "User \"#{username}@#{domain_name}\" created successfully"
|
202
|
+
## if email_address then
|
203
|
+
## addr=Address.find_or_create_by_address(email_address)
|
204
|
+
## user.addresses << addr
|
205
|
+
## end
|
206
|
+
## else
|
207
|
+
## error "User \"#{username}@#{domain_name}\" was not created:\n" +
|
208
|
+
## format_errors(user.errors).join("\n")
|
209
|
+
## end
|
210
|
+
## else
|
211
|
+
## error "Domain \"#{domain_name}\" does not exist."
|
212
|
+
## end
|
213
|
+
# end
|
214
|
+
#
|
215
|
+
# def list_users# domain_name
|
216
|
+
# flash[:notice] = "List of users"
|
217
|
+
## domain = Domain.find_by_name domain_name
|
218
|
+
## if domain then
|
219
|
+
## @users = User.find_all_by_domain_id domain.id
|
220
|
+
## else
|
221
|
+
## error "Domain \"#{domain_name}\" does not exist."
|
222
|
+
## end
|
223
|
+
# end
|
224
|
+
#
|
225
|
+
# def list_mailinglist_classes
|
226
|
+
# @mailinglist_classes = MailinglistClass.find :all, :order => :id
|
227
|
+
# end
|
228
|
+
#
|
229
|
+
# def list_mlclasses
|
230
|
+
# list_mailinglist_classes
|
231
|
+
# render "sugoi_admin/list_mailinglist_classes"
|
232
|
+
# end
|
233
|
+
#
|
234
|
+
# def remove_user
|
235
|
+
# end
|
236
|
+
#
|
237
|
+
# def unsubscribe_self
|
238
|
+
# end
|
239
|
+
#
|
240
|
+
# def unsubscribe_user
|
241
|
+
# end
|
242
|
+
#
|
243
|
+
# def edit_user_list
|
244
|
+
# end
|
245
|
+
#
|
246
|
+
# def change_user_password
|
247
|
+
# end
|
248
|
+
#
|
249
|
+
# def remove_mailinglist
|
250
|
+
# end
|
251
|
+
#
|
252
|
+
# def edit_mailinglist
|
253
|
+
# end
|
254
|
+
#
|
255
|
+
# def add_address
|
256
|
+
# end
|
257
|
+
#
|
258
|
+
# def remove_address
|
259
|
+
# end
|
260
|
+
#
|
261
|
+
# def edit_address
|
262
|
+
# end
|
263
|
+
#
|
264
|
+
# def show_address
|
265
|
+
# end
|
266
|
+
#
|
267
|
+
# def show_mailinglist
|
268
|
+
# end
|
269
|
+
#
|
270
|
+
# def show_user
|
271
|
+
# end
|
272
|
+
#
|
273
|
+
# def add_mailinglist mailinglist_name,
|
274
|
+
#domain_name, user_name, description = nil, mailinglist_class_id = 2
|
275
|
+
#
|
276
|
+
# mlclass = begin
|
277
|
+
# MailinglistClass.find mailinglist_class_id.to_i
|
278
|
+
# rescue ActiveRecord::RecordNotFound
|
279
|
+
# nil
|
280
|
+
# end
|
281
|
+
# unless mlclass
|
282
|
+
# return error("Invalid mailing list class: #{mailinglist_class_id}")
|
283
|
+
# end
|
284
|
+
#
|
285
|
+
# domain = Domain.find_by_name domain_name
|
286
|
+
# unless domain
|
287
|
+
# return error("Domain \"#{domain_name}\" not found.")
|
288
|
+
# end
|
289
|
+
#
|
290
|
+
# user = User.find_by_login_and_domain_id user_name, domain.id
|
291
|
+
# unless user
|
292
|
+
# return error("User \"#{user_name}\" not found "+
|
293
|
+
# "in domain \"#{domain_name}\".")
|
294
|
+
# end
|
295
|
+
#
|
296
|
+
# ml=Mailinglist.new
|
297
|
+
# ml.user = user
|
298
|
+
# ml.description = description
|
299
|
+
# ml.mailinglist_class = mlclass
|
300
|
+
# ml.name = mailinglist_name
|
301
|
+
#
|
302
|
+
# if ml.save then
|
303
|
+
# message "Mailing list \"#{ml.address}\" created successfully."
|
304
|
+
# end
|
305
|
+
# end
|
306
|
+
#
|
307
|
+
# def subscribe(mailinglist_address, new_address)
|
308
|
+
# address=Address.find_or_create_by_address new_address
|
309
|
+
# ml=Mailinglist.find_by_address(mailinglist_address)
|
310
|
+
# unless ml
|
311
|
+
# return error("Mailing list \"#{mailinglist_address}\" not found.")
|
312
|
+
# end
|
313
|
+
# ml=ml[0]
|
314
|
+
# ml.addresses << address
|
315
|
+
# message "Subscribed \"#{new_address}\" to \"#{mailinglist_address}\""
|
316
|
+
# end
|
317
|
+
#
|
318
|
+
# def unsubscribe(mailinglist_address, address_to_remove)
|
319
|
+
# address = Address.find_by_address address_to_remove
|
320
|
+
# unless address
|
321
|
+
# return error("Address \"#{address_to_remove}\" unknown.")
|
322
|
+
# end
|
323
|
+
#
|
324
|
+
# mailinglist = Mailinglist.find_by_address mailinglist_address
|
325
|
+
# unless mailinglist
|
326
|
+
# return error("Mailing list \"#{mailinglist_address}\" unknown.")
|
327
|
+
# end
|
328
|
+
#
|
329
|
+
# @mailinglist = mailinglist[0]
|
330
|
+
#
|
331
|
+
# unless @mailinglist.addresses.member? address
|
332
|
+
# return error("Address \"#{address}\" not in " + "
|
333
|
+
# mailing list \"#{mailinglist_address}\"")
|
334
|
+
# end
|
335
|
+
#
|
336
|
+
# @removed_addresses=@mailinglist.remove_addresses address
|
337
|
+
# end
|
338
|
+
#
|
339
|
+
# def help(command=nil)
|
340
|
+
# if command
|
341
|
+
# @help = Help.find_by_facility_and_command self.class.name, command
|
342
|
+
# else
|
343
|
+
# @help = Help.find_all_by_facility self.class.name
|
344
|
+
# end
|
345
|
+
# end
|
346
|
+
end
|
@@ -1,10 +1,8 @@
|
|
1
1
|
class SugoiAdminController < CommandlineController
|
2
|
-
model :mailinglist
|
3
|
-
|
4
2
|
private
|
5
3
|
def get_password
|
6
|
-
password = ask "
|
7
|
-
confirmation = ask "Confirm: " do |q| q.echo = false end
|
4
|
+
password = ask "New password: " do |q| q.echo = false end
|
5
|
+
confirmation = ask "Confirm new password: " do |q| q.echo = false end
|
8
6
|
|
9
7
|
return [ password, confirmation ]
|
10
8
|
end
|
@@ -59,7 +57,7 @@ class SugoiAdminController < CommandlineController
|
|
59
57
|
|
60
58
|
def show_config(var_name=nil)
|
61
59
|
unless var_name
|
62
|
-
@config_vars = SysConfig.
|
60
|
+
@config_vars = SysConfig.find(:all)
|
63
61
|
else
|
64
62
|
@config_vars = SysConfig.find_all_by_name(var_name)
|
65
63
|
end
|
@@ -67,12 +65,16 @@ class SugoiAdminController < CommandlineController
|
|
67
65
|
|
68
66
|
def set_config(var_name, new_value)
|
69
67
|
@config_var = SysConfig.find_by_name(var_name)
|
70
|
-
@config_var
|
71
|
-
|
68
|
+
if @config_var then
|
69
|
+
@config_var.value = new_value
|
70
|
+
@config_var.save
|
71
|
+
else
|
72
|
+
@missing_config_name = var_name
|
73
|
+
end
|
72
74
|
end
|
73
75
|
|
74
76
|
def list_domains
|
75
|
-
@domains = Domain.
|
77
|
+
@domains = Domain.find(:all)
|
76
78
|
end
|
77
79
|
|
78
80
|
def list_mailinglists(domain_name)
|
@@ -136,7 +138,8 @@ class SugoiAdminController < CommandlineController
|
|
136
138
|
user.password_confirmation = password_confirmation
|
137
139
|
user.description = description
|
138
140
|
user.domainadmin = false
|
139
|
-
|
141
|
+
user.mailinglistadmin = false
|
142
|
+
|
140
143
|
if user.save then
|
141
144
|
message "User \"#{username}@#{domain_name}\" created successfully"
|
142
145
|
if email_address then
|
@@ -167,7 +170,7 @@ class SugoiAdminController < CommandlineController
|
|
167
170
|
|
168
171
|
def list_mlclasses
|
169
172
|
list_mailinglist_classes
|
170
|
-
render
|
173
|
+
render :action => :list_mailinglist_classes
|
171
174
|
end
|
172
175
|
|
173
176
|
def create_list mailinglist_name,
|
@@ -229,11 +232,11 @@ class SugoiAdminController < CommandlineController
|
|
229
232
|
@mailinglist = mailinglist[0]
|
230
233
|
|
231
234
|
unless @mailinglist.addresses.member? address
|
232
|
-
return error("Address \"#{address}\" not in " +
|
233
|
-
mailing list \"#{mailinglist_address}\"")
|
235
|
+
return error("Address \"#{address}\" not in " +
|
236
|
+
"mailing list \"#{mailinglist_address}\"")
|
234
237
|
end
|
235
238
|
|
236
|
-
@removed_addresses=@mailinglist.
|
239
|
+
@removed_addresses=@mailinglist.addresses.delete address
|
237
240
|
end
|
238
241
|
|
239
242
|
def help(command=nil)
|
data/app/models/address.rb
CHANGED
@@ -89,15 +89,14 @@ class Address < ActiveRecord::Base
|
|
89
89
|
|
90
90
|
# Returns an anonymous proxy address for this user and a mailing list
|
91
91
|
def proxified ml
|
92
|
-
ProxyLink.find_or_create_by_address_id_and_mailinglist_id(
|
93
|
-
|
94
|
-
).proxy_address
|
92
|
+
ProxyLink.find_or_create_by_address_id_and_mailinglist_id(id, ml.id) .
|
93
|
+
proxy_address
|
95
94
|
end
|
96
95
|
|
97
96
|
# If the address has a proxy address, then return the user that
|
98
97
|
# the proxy address belongs to.
|
99
98
|
def user
|
100
|
-
ml = mailinglists.
|
99
|
+
ml = mailinglists.find(:all) do |ml|
|
101
100
|
ml.id == ml.user.mailinglist_id && !ml.user.virtual?
|
102
101
|
end[0]
|
103
102
|
if ml then ml.user end
|
data/app/models/domain.rb
CHANGED
data/app/models/mailinglist.rb
CHANGED
@@ -34,18 +34,18 @@
|
|
34
34
|
# subscriber when she unsubscribes from the
|
35
35
|
# mailing list.
|
36
36
|
|
37
|
+
class AlreadySubscribedError < Exception; end
|
38
|
+
|
37
39
|
class Mailinglist < ActiveRecord::Base
|
38
40
|
belongs_to :user
|
39
|
-
has_and_belongs_to_many :addresses
|
41
|
+
has_and_belongs_to_many :addresses, :before_add => :validate_unique_address
|
40
42
|
has_many :messages
|
41
43
|
has_many :proxy_links
|
42
44
|
validates_each :name, :on => :create do |record, attr, value|
|
43
45
|
if record.user
|
44
46
|
if Mailinglist.find_by_sql(
|
45
|
-
['select * from mailinglists m, users u
|
46
|
-
|
47
|
-
and u.domain_id = ?
|
48
|
-
and m.name = ?',
|
47
|
+
[ 'select * from mailinglists m, users u
|
48
|
+
where u.id = m.user_id and u.domain_id = ? and m.name = ?',
|
49
49
|
record.user.domain_id,
|
50
50
|
value ]).length > 0 then
|
51
51
|
record.errors.add("name",
|
@@ -54,11 +54,30 @@ class Mailinglist < ActiveRecord::Base
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
def validate_unique_address address
|
58
|
+
raise AlreadySubscribedError if addresses.member? address
|
59
|
+
end
|
60
|
+
|
57
61
|
validates_associated :user, :on => :create
|
58
62
|
|
59
63
|
validates_presence_of :user
|
64
|
+
validates_each :description, :on => :save do |record, attr, value|
|
65
|
+
if value
|
66
|
+
if value.length > 160
|
67
|
+
record.errors.add("description","Is too long (>160 chars)")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# validates_length_of :description, :within => 0..160, :on => :save
|
60
73
|
belongs_to :mailinglist_class
|
61
74
|
|
75
|
+
def self.find_all_by_domain_id domain_id
|
76
|
+
Mailinglist.find(:all).find_all do |ml| # yes, you're reading that right
|
77
|
+
ml.domain.id == domain_id
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
62
81
|
# Since rails's has_one interface apparently DOESN'T WORK, I
|
63
82
|
# have to do all these by hand.
|
64
83
|
|
@@ -220,33 +239,32 @@ class Mailinglist < ActiveRecord::Base
|
|
220
239
|
end
|
221
240
|
|
222
241
|
def subscribe(address,confirmationcode = nil)
|
223
|
-
addr=Address.find_or_create_by_address(address)
|
224
|
-
if confirmation?
|
242
|
+
addr=Address.find_or_create_by_address(address) unless Address === address
|
243
|
+
if confirmation? #used to be confirmation? but that method doesn't appear to exist!
|
225
244
|
if confirmed_addresses.member? addr
|
226
245
|
true
|
227
246
|
else
|
228
247
|
if confirmationcode then
|
229
248
|
confirm addr, confirmationcode
|
230
249
|
else
|
231
|
-
|
232
|
-
|
250
|
+
begin
|
251
|
+
addresses << addr
|
252
|
+
send_welcome_message(addr)
|
253
|
+
rescue AlreadySubscribedError
|
254
|
+
true
|
255
|
+
end
|
233
256
|
end
|
234
257
|
end
|
235
258
|
else
|
236
|
-
|
237
|
-
true
|
238
|
-
else
|
259
|
+
begin
|
239
260
|
addresses << addr
|
261
|
+
rescue AlreadySubscribedError
|
262
|
+
true
|
240
263
|
end
|
241
264
|
end
|
242
265
|
end
|
243
266
|
|
244
|
-
def send_welcome_message(
|
245
|
-
if Address === address then
|
246
|
-
addr = address
|
247
|
-
else
|
248
|
-
addr=Address.find_or_create_by_address(address)
|
249
|
-
end
|
267
|
+
def send_welcome_message(addr)
|
250
268
|
c=Confirmationcode.find_by_address_id_and_mailinglist_id addr.id, id
|
251
269
|
unless c
|
252
270
|
c=Confirmationcode.new
|
@@ -315,7 +333,7 @@ class Mailinglist < ActiveRecord::Base
|
|
315
333
|
:description => description,
|
316
334
|
:requestaddress => requestaddress
|
317
335
|
end
|
318
|
-
|
336
|
+
addresses.delete addr
|
319
337
|
end
|
320
338
|
end
|
321
339
|
|
@@ -352,4 +370,8 @@ class Mailinglist < ActiveRecord::Base
|
|
352
370
|
return unsubscribe(addresscandidate, confirmationcode)
|
353
371
|
end
|
354
372
|
end
|
373
|
+
|
374
|
+
def openposting
|
375
|
+
return false
|
376
|
+
end
|
355
377
|
end
|