sugoi-mail 0.1.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -115,6 +115,8 @@ class User < ActiveRecord::Base
115
115
  end
116
116
  if ml.save then
117
117
  self.mailinglist=ml
118
+ self.password = self.password_confirmation
119
+ self.save
118
120
  return true
119
121
  end
120
122
  end
data/bin/maild CHANGED
@@ -1,11 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- RAILS_BASE=File.join(File.dirname(__FILE__),"..")
3
+ RAILS_BASE=File.expand_path(File.join(File.dirname(__FILE__),".."))
4
4
  CONFIGDIR=File.join(RAILS_BASE,"config")
5
5
  TMPDIR=File.join(RAILS_BASE,"tmp")
6
6
  PIDFILE=File.join(TMPDIR, "maild.pid")
7
7
  SOCKETFILE=File.join(RAILS_BASE,"tmp","sockets","maild.socket")
8
8
 
9
+ #-------DEBUG-----
10
+ ENV["RAILS_ENV"] = "development"
11
+
9
12
  require File.join(CONFIGDIR,"boot")
10
13
  require File.join(CONFIGDIR,"environment")
11
14
  require "active_record"
@@ -58,18 +61,15 @@ class MailDaemon
58
61
  $logger.err "PID file exists--already running?"
59
62
  end
60
63
 
64
+ $logger.info "Ready to accept mail"
65
+
66
+ unless @debug
67
+ daemonize
68
+ end
61
69
  File.open(PIDFILE,"w") do |f|
62
70
  f.puts Process.pid
63
71
  end
64
72
 
65
- trap("INT") do
66
- @server.close
67
- File.unlink(@SOCK_PATH)
68
- File.unlink(PIDFILE)
69
- end
70
-
71
- $logger.info "Ready to accept mail"
72
- self
73
73
  end
74
74
 
75
75
  def read_gurgitate_rules(gurgitatefile)
@@ -97,6 +97,9 @@ class MailDaemon
97
97
 
98
98
  def process client_info
99
99
  LimitedFork.fork do
100
+ Signal.trap("SIGTERM"){
101
+ exit!
102
+ }
100
103
  begin
101
104
  # pp client_info
102
105
  g=Gurgitate::Mailmessage.new(client_info[:message],
@@ -111,31 +114,52 @@ class MailDaemon
111
114
  $logger.warning " from #{tr}"
112
115
  end
113
116
  end
114
- exit! # since we're a child process
117
+ # since we're a child process
118
+ exit!
115
119
  end
116
120
  end
117
121
 
118
122
  def run
119
- start
120
-
121
- begin
122
- unless @debug
123
- daemonize
124
- end
125
-
126
- loop do
127
- client = @server.accept
123
+ start
124
+ loop do
125
+ begin
126
+ Signal.trap("SIGTERM"){
127
+ $logger.info "caught SIGTERM"
128
+ shutdown
129
+ }
130
+ #NOTE: A SIGTERM (kill or kill -15) or SIGINT
131
+ # (ctrl+C, kill -2) will be caught and maild
132
+ # will clean up after itself (call shutdown)
133
+
134
+ begin
135
+ client = @server.accept_nonblock
136
+ rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR
137
+ IO.select([@server])
138
+ retry
139
+ end
140
+
128
141
  client_info = Marshal.load client
129
142
  process client_info
143
+
144
+ rescue SignalException
145
+ #catches SIGINT
146
+ shutdown
130
147
  end
131
- rescue
132
- @server.close
133
- File.unlink(@SOCK_PATH)
134
- raise
135
148
  end
136
149
  end
150
+
151
+ def shutdown
152
+ $logger.info "shutdown has been called.."
153
+
154
+ @server.close
155
+ File.unlink(@SOCK_PATH)
156
+ File.unlink(PIDFILE)
157
+ exit 0
158
+ end
137
159
  end
138
160
 
161
+
162
+
139
163
  if ARGV[0] == "-d" then
140
164
  maild=MailDaemon.new :debug => true
141
165
  else
@@ -143,3 +167,7 @@ else
143
167
  end
144
168
 
145
169
  maild.run
170
+
171
+
172
+
173
+
@@ -16,6 +16,14 @@ command = ARGV.shift.gsub(/-/,"_")
16
16
  request = ActionController::CommandlineRequest.new(command, *ARGV)
17
17
  response = ActionController::CommandlineResponse.new
18
18
 
19
- admin.process(request, response)
20
-
21
- puts response.body
19
+ begin
20
+ admin.process(request, response)
21
+
22
+ puts response.body
23
+ rescue UnknownAction => e
24
+ puts "sugoi-admin: Command error: #{e}"
25
+ exit 1
26
+ rescue RuntimeError => e
27
+ puts "sugoi-admin: Error: #{e}"
28
+ exit 1
29
+ end
@@ -11,13 +11,6 @@
11
11
  # joinable: true -> people can subscribe to the list at will <- DEFAULT
12
12
  # false -> only the owner can subscribe or unsubscribe people
13
13
 
14
- # NOTE FOR JOSUIKAI!
15
- # ******************
16
- #
17
- # There needs to be another kind of "joinable" which says that only
18
- # people who already have accounts on the system can join a mailing
19
- # list.
20
-
21
14
  class AddMailinglistTypes < ActiveRecord::Migration
22
15
 
23
16
  class MailinglistClass < ActiveRecord::Base; end
@@ -49,19 +49,16 @@ to.each do |to_address|
49
49
  return
50
50
  else
51
51
  matches = to_address.match(/(.*?)#(.*?)@(.*)/)
52
- puts "hey, found a funky rewrite thingy"
52
+ $logger.debug "hey, found a funky rewrite thingy"
53
53
 
54
54
  if matches then
55
- localpart, destdomain, domain = matches[1..3]
56
- to_address = "#{localpart}@#{destdomain}"
57
- p "from address is: #{from}"
58
55
  proxy_address=Address.proxyaddress(from)
59
- p "proxy address is: #{proxy_address.inspect}"
56
+ $logger.debug "proxy address is: #{proxy_address.inspect}"
60
57
  if proxy_address
61
- # mailinglist = Mailinglist.find_by_address(proxy_address)[0]
62
58
  mess=Message.from_message(self)
63
- p mess
64
- mess.proxy_deliver proxy_address, to_address
59
+
60
+ mess.mailinglist = Mailinglist.find_by_address(proxy_address)[0]
61
+ mess.deliver
65
62
  end
66
63
  end
67
64
  # bounce, or report to postmaster, or something
@@ -1,6 +1,6 @@
1
1
  require 'rake/gempackagetask'
2
2
 
3
- PKG_VERSION = "0.1.5"
3
+ PKG_VERSION = "0.3.0"
4
4
  PKG_NAME = "sugoi-mail"
5
5
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
6
6
 
@@ -9,14 +9,13 @@ spec = Gem::Specification.new do |s|
9
9
  s.version = PKG_VERSION
10
10
  s.required_ruby_version = ">= 1.8.4"
11
11
  s.summary = "Powerful mailing list manager."
12
- # s.description = "FIXME"
13
12
  s.has_rdoc = true
14
13
 
15
14
  s.files = Dir.glob('**/*', File::FNM_DOTMATCH).reject do |f|
16
15
  [ /\.$/, /config\/database.yml$/, /config\/database.yml-/,
17
16
  /database\.sqlite/,
18
17
  /\.log$/, /^pkg/, /\.svn/, /^vendor\/rails/, /\~$/,
19
- /\/\._/, /\/#/ ].any? {|regex| f =~ regex }
18
+ /\/\._/, /\/#/, /\/coverage\// ].any? {|regex| f =~ regex }
20
19
  end
21
20
  s.require_path = '.'
22
21
  s.author = "Dave Brown"
@@ -0,0 +1,237 @@
1
+ #! /bin/sh
2
+
3
+ # Sugoi-Mail boot-up script.
4
+ # This file should be in /etc/init.d/
5
+ # DO NOT FORGET TO SET YOUR INSTALLPATH AND SUGOIUSER
6
+ # please rename this file to sugoi-mail (without the .EDIT_ME)
7
+
8
+ #Written by: aavdacev@invio.co.jp
9
+
10
+
11
+ INSTALLPATH="/--SET INSTALL PATH--" #ie: '/home/sugoi-user/sugoi-mail'
12
+ SUGOIUSER="--SET USER RUNNING SUGOIMAIL--" #ie: 'sugoi-user'
13
+
14
+ RunTests(){
15
+ maild_socket_exists=0
16
+ maild_pid=''
17
+ maild_running=0
18
+ mongrel_pid=''
19
+ mongrel_running=0
20
+
21
+
22
+ if test -e $INSTALLPATH/tmp/sockets/maild.socket
23
+ then
24
+ maild_socket_exists=1
25
+ fi
26
+
27
+ if test -e $INSTALLPATH/tmp/maild.pid
28
+ then
29
+ maild_pid=`cat $INSTALLPATH/tmp/maild.pid`
30
+ fi
31
+
32
+ if [ ! -z "$(ps -fu $SUGOIUSER | grep ruby[\ ]$INSTALLPATH/bin/maild)" ]
33
+ then
34
+ maild_running=1
35
+ fi
36
+
37
+ if test -e $INSTALLPATH/log/mongrel.pid
38
+ then
39
+ mongrel_pid=`cat $INSTALLPATH/log/mongrel.pid`
40
+ if [ ! -z "$(ps -fu $SUGOIUSER | grep [\ ]$mongrel_pid[\ ].*mongrel_rails)" ]
41
+ then
42
+ mongrel_running=1
43
+ fi
44
+ fi
45
+ }
46
+
47
+ Status(){
48
+ RunTests
49
+ status_msg=""
50
+ if [ "$maild_socket_exists" -eq 1 ]; then
51
+ status_msg="$status_msg - 'tmp/sockets/maild.socket' exists. \n"
52
+ fi
53
+
54
+ if [ ! -z "$maild_pid" ]; then
55
+ status_msg="$status_msg - 'tmp/maild.pid' exists and reads: $maild_pid \n"
56
+ fi
57
+
58
+ if [ "$maild_running" -eq 1 ]; then
59
+ status_msg="$status_msg - Maild belonging to $SUGOIUSER is running. \n"
60
+ fi
61
+
62
+ if [ ! -z "$mongrel_pid" ]; then
63
+ status_msg="$status_msg - 'log/mongrel.pid' exists and reads $mongrel_pid \n"
64
+ fi
65
+
66
+ if [ "$mongrel_running" -eq 1 ]; then
67
+ status_msg="$status_msg - Mongrel webserver is running"
68
+ fi
69
+
70
+ if [ "$1" = "output" ]
71
+ then
72
+ echo -e "$status_msg"
73
+ fi
74
+
75
+ if [ "$maild_socket_exists" -eq 1 ] &&
76
+ [ ! -z "$maild_pid" ] &&
77
+ [ "$maild_running" -eq 1 ] &&
78
+ [ ! -z "$mongrel_pid" ] &&
79
+ [ "$mongrel_running" -eq 1 ]
80
+ then
81
+ echo "Sugoi-mail: all systems are running."
82
+
83
+ elif [ ! "$maild_socket_exists" -eq 1 ] &&
84
+ [ -z "$maild_pid" ] &&
85
+ [ ! "$maild_running" -eq 1 ] &&
86
+ [ -z "$mongrel_pid" ] &&
87
+ [ ! "$mongrel_running" -eq 1 ]
88
+ then
89
+ echo "Sugoi-mail: all processes safely stopped."
90
+
91
+ else
92
+ echo "Sugoi-mail: irregular state. Failed to start or stop properly."
93
+ echo ">> Try 'cleanup' or consult 'help'."
94
+ fi
95
+
96
+ }
97
+
98
+ Menu(){
99
+ case $1 in
100
+ start)
101
+ if [ "$mongrel_running" -eq 1 ]; then
102
+ echo "ERR: Sugoi mail is already being served by mongrel. Consult 'help'"
103
+ elif [ "$maild_running" -eq 1 ]; then
104
+ echo "ERR: Maild is already running. Consult 'help'."
105
+ else
106
+ echo " - Clearing PID and socket-files.."
107
+ rm -f $INSTALLPATH/tmp/maild.pid
108
+ rm -f $INSTALLPATH/tmp/sockets/maild.socket
109
+
110
+ echo " - Starting maild Daemon.."
111
+ su - $SUGOIUSER -c "$INSTALLPATH/bin/maild;exit;"
112
+
113
+ echo " - Starting Mongrel webserver.."
114
+ su - $SUGOIUSER -c "cd $INSTALLPATH; mongrel_rails start -d;exit;"
115
+
116
+ #timeout for 3 sec for mongrel to boot, ensure correct status msg
117
+ sleep 3s
118
+ Status
119
+ fi
120
+
121
+ ;;
122
+
123
+ status)
124
+ Status "output"
125
+ ;;
126
+
127
+ cleanup)
128
+ echo "Sugoi-mail cleanup.. [ started ]"
129
+ echo "- stopping maild, mongrel, and cleaning up files.."
130
+ if [ "$mongrel_running" -eq 1 ]; then
131
+ su - $SUGOIUSER -c "cd $INSTALLPATH; mongrel_rails stop"
132
+ fi
133
+
134
+ if [ "$maild_running" -eq 1 ]; then
135
+ kill -9 $maild_pid
136
+ fi
137
+
138
+ if [ "$maild_socket_exists" -eq 1 ]; then
139
+ rm -f $INSTALLPATH/tmp/sockets/maild.socket
140
+ fi
141
+
142
+ if [ ! -z "$maild_pid" ]; then
143
+ rm -f $INSTALLPATH/tmp/maild.pid
144
+ fi
145
+
146
+ Status
147
+ ;;
148
+ restart)
149
+ if [ ! "$maild_running" -eq 1 ]; then
150
+ echo "CAN'T RESTART: Maild belonging to $SUGOIUSER is not running. Use 'start'"
151
+ elif [ ! "$mongrel_running" ]; then
152
+ echo "CAN'T RESTART: Sugoi-Mail is not being served by Mongrel. Try 'cleanup'"
153
+ else
154
+ if [ -z "$maild_pid" ]; then
155
+ echo "ERR: no PID file exists, but maild is running. Consult 'help'"
156
+ else
157
+ echo "Restarting Sugoi-Mail..."
158
+ Menu stop
159
+
160
+ echo "..Booting up again.."
161
+ Menu start
162
+ fi
163
+ fi
164
+ ;;
165
+ stop)
166
+ if [ ! "$maild_running" -eq 1 ]; then
167
+ echo "ERR: Maild belonging to $SUGOIUSER is not running. Use 'start'"
168
+ elif [ ! "$mongrel_running" ]; then
169
+ echo "ERR: Sugoi-Mail is not being served by Mongrel. Consult 'help'"
170
+ else
171
+ if [ -z "$maild_pid" ]; then
172
+ echo "ERR: no PID file exists, but maild is running. Consult 'help'"
173
+ else
174
+ echo " - Stopping Mongrel webservice.."
175
+ su - $SUGOIUSER -c "cd $INSTALLPATH; mongrel_rails stop"
176
+ echo " - Stopping maild daemon.."
177
+ su - $SUGOIUSER -c "kill -2 $maild_pid"
178
+
179
+ Status
180
+ fi
181
+ fi
182
+ ;;
183
+
184
+ *)
185
+ echo "-- SUGOI-MAIL BOOT SCRIPT HELP --
186
+
187
+ INFO:
188
+ This file is a boot script for Sugoi-Mail and should be located in /etc/init.d
189
+ Please ensure the installpath and sugoi-user have been set properly:
190
+ - Sugoi-mail installpath: $INSTALLPATH
191
+ - Sugoi-mail user: $SUGOIUSER
192
+
193
+ SYNTAX:
194
+ sugoi-mail [ command ]
195
+
196
+ COMMANDS:
197
+
198
+ start
199
+ If sugoi-mail is not running, 'start' will clean up PID & socketfiles,
200
+ boot maild daemon, start Mongrel webserver, and finally print sugoi-mail
201
+ program status.
202
+
203
+ stop
204
+ If sugoi-mail is running, 'stop' will stop Mongrel webservice, terminate the
205
+ maild daemon, and print the sugoi-mail program status.
206
+
207
+ restart
208
+ If sugoi-mail is running, 'restart' will call 'stop', and then 'start'
209
+ the behaviour of 'stop' and 'start' are described above.
210
+
211
+ cleanup
212
+ At any point in time 'cleanup' will restore sugoi-mail to a 'stopped' state.
213
+ 'cleanup' does not check the current program state, harshly (kill -9) stops
214
+ maild daemon, cleans up the PID and socketfiles manualy, stops Mongrel
215
+ webservice, and then prints a status message
216
+
217
+ help
218
+ Display this help message
219
+
220
+ * All other commands default to 'help'
221
+
222
+ ERROR HANDLING:
223
+ Most error states can be resoved with 'cleanup'. If maild is running, but the
224
+ PID-file does not exist, you must kill maild manually by finding its process
225
+ id in the 'ps -ef' listing
226
+
227
+ AUTHOR:
228
+ aavdacev@invio.co.jp
229
+ "
230
+ ;;
231
+
232
+ esac
233
+ }
234
+
235
+ RunTests
236
+ Menu $1
237
+ exit 0