sugoi-mail 0.1.0 → 0.1.5
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.
- 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
|