changeset 69:bdb7e40c2d4f draft

`limitsender' option to prohibit anonymous user to send to ML
author HIROSE Yuuji <yuuji@gentei.org>
date Thu, 28 Jun 2012 11:56:34 +0900
parents db1502243712
children 2e293d4d8db4
files after5.rb
diffstat 1 files changed, 30 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/after5.rb	Thu Jun 28 09:43:29 2012 +0900
+++ b/after5.rb	Thu Jun 28 11:56:34 2012 +0900
@@ -4,7 +4,7 @@
 # Associative Scheduling Table - after5
 # (C)2003, 2004, 2006, 2008, 2012 by HIROSE Yuuji [yuuji<at>gentei.org]
 # $Id: after5.rb,v 1.19 2012/04/01 11:52:25 yuuji Exp yuuji $
-# Last modified Thu Jun 28 09:42:37 2012 on firestorm
+# Last modified Thu Jun 28 11:51:17 2012 on firestorm
 # See http://www.gentei.org/~yuuji/software/after5/
 # このスクリプトはEUCで保存してください。
 $hgid = <<_HGID_.split[1..-2].join(" ")
@@ -301,6 +301,13 @@
     }
     map
   end
+  def ismembersemail(email)
+    @usermap.keys.each {|u|
+      return u if u==email
+      return u if mailaddress(u).split(/,\s*|\s+/).grep(email)[0]
+    }
+    nil
+  end
   def putuserattr(user, attr, text)
     # if text==nil, remove it
     d = File.join(@usermapdir, user)
@@ -1299,6 +1306,8 @@
                             'Only administrators can add new members.'],
         'invite-error'	=> ['%s への加入はグループ管理者のみが操作できます。',
 "Only administrator of this group(`%s') can add you."],
+        'limitsender'	=> ['アカウント保持者のみ送信可能',
+                            'Allow only account holders to post to ML'],
 	'personal'	=> ['個人で', 'personal'],
 	'registas'	=> ['グループ予定として登録?', 'Register as group?'],
         'headsched'	=> ['下の枠内に予定を記入: 1行以内で短めに。
@@ -2774,6 +2783,7 @@
     mldir = "ml/"+name
     to = @sc.getgroupattr(name, 'mladdress') || defaultmladdress(name)
     returnpath = to.sub("@", @mailadmsuffix+"-@")
+    adminaddr  = to.sub("@", @mailadmsuffix+"@")
     subj = @params['subject'] || "Message from "+@myname
     sjtag = bracket.gsub("%n", nickname(name)).
       gsub("%i", name).
@@ -2803,9 +2813,25 @@
             else
               [name]
             end.collect {|u| mailaddress(u, name).split(/,\s*|\s+/)}.flatten
+    ENV["QMAILINJECT"] = "r"    # for ML mode, use verp
+    #
+    # On mail mode, check if sender can send message to list.
+    if viamail && @sc.getgroupattr(name, 'limitsender')
+      s = ENV['SENDER']
+      if !catch(:senderok) {
+          throw :senderok, true if rcpts.grep(s)[0]
+          throw :senderok, true if @sc.ismembersemail(s)
+        }
+        # sender is not allowed to send to ML
+        sendMail(s, "You are not allowed to send to this ML",
+                 ("Before posting to this list(%s),\n"+
+                  "subscribe to %s") % [to, @opt['url']],
+                 adminaddr, nil, {"Return-path" => returnpath})
+        exit 0
+      end
+    end
     # p rcpts
     # p to
-    ENV["QMAILINJECT"] = "r"    # for ML mode, use verp
     sendMail(to, subj, body, from, rcpts,
              header,
              ENV['SENDER'],
@@ -3321,7 +3347,7 @@
           }.join
         }
       } + \
-      ["fromhack", "inviteonly"].collect do |param|
+      ["fromhack", "inviteonly", "limitsender"].collect do |param|
         @H.checkbox(param, "yes", msg(param),
                     @sc.getgroupattr(group, param)) + "<br>\n"
       end.join + \
@@ -3542,7 +3568,7 @@
     end # groups
     # Change parameter(s)
     # To be more generic...
-    ["fromhack", "inviteonly"].each {|param|
+    ["fromhack", "inviteonly", "limitsender"].each {|param|
       parsetp = (@params[param] && /^yes/i =~ @params[param])
       cursetp = (@sc.getgroupattr(group, param)!=nil)
       if cursetp ^ parsetp

yatex.org