Mercurial > hgrepos > hgweb.cgi > after5
comparison after5.rb @ 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 |
comparison
equal
deleted
inserted
replaced
68:db1502243712 | 69:bdb7e40c2d4f |
---|---|
2 # -*- coding: euc-jp -*- | 2 # -*- coding: euc-jp -*- |
3 # | 3 # |
4 # Associative Scheduling Table - after5 | 4 # Associative Scheduling Table - after5 |
5 # (C)2003, 2004, 2006, 2008, 2012 by HIROSE Yuuji [yuuji<at>gentei.org] | 5 # (C)2003, 2004, 2006, 2008, 2012 by HIROSE Yuuji [yuuji<at>gentei.org] |
6 # $Id: after5.rb,v 1.19 2012/04/01 11:52:25 yuuji Exp yuuji $ | 6 # $Id: after5.rb,v 1.19 2012/04/01 11:52:25 yuuji Exp yuuji $ |
7 # Last modified Thu Jun 28 09:42:37 2012 on firestorm | 7 # Last modified Thu Jun 28 11:51:17 2012 on firestorm |
8 # See http://www.gentei.org/~yuuji/software/after5/ | 8 # See http://www.gentei.org/~yuuji/software/after5/ |
9 # このスクリプトはEUCで保存してください。 | 9 # このスクリプトはEUCで保存してください。 |
10 $hgid = <<_HGID_.split[1..-2].join(" ") | 10 $hgid = <<_HGID_.split[1..-2].join(" ") |
11 $HGid$ | 11 $HGid$ |
12 _HGID_ | 12 _HGID_ |
298 next unless test(?s, file) && test(?r, file) | 298 next unless test(?s, file) && test(?r, file) |
299 map[u][attr] = IO.readlines(file).join.toeuc.strip | 299 map[u][attr] = IO.readlines(file).join.toeuc.strip |
300 } | 300 } |
301 } | 301 } |
302 map | 302 map |
303 end | |
304 def ismembersemail(email) | |
305 @usermap.keys.each {|u| | |
306 return u if u==email | |
307 return u if mailaddress(u).split(/,\s*|\s+/).grep(email)[0] | |
308 } | |
309 nil | |
303 end | 310 end |
304 def putuserattr(user, attr, text) | 311 def putuserattr(user, attr, text) |
305 # if text==nil, remove it | 312 # if text==nil, remove it |
306 d = File.join(@usermapdir, user) | 313 d = File.join(@usermapdir, user) |
307 Dir.mkdir(d) unless test(?d, d) | 314 Dir.mkdir(d) unless test(?d, d) |
1297 phones tend to return only from: address.'], | 1304 phones tend to return only from: address.'], |
1298 'inviteonly' => ['管理者のみ加入操作可能', | 1305 'inviteonly' => ['管理者のみ加入操作可能', |
1299 'Only administrators can add new members.'], | 1306 'Only administrators can add new members.'], |
1300 'invite-error' => ['%s への加入はグループ管理者のみが操作できます。', | 1307 'invite-error' => ['%s への加入はグループ管理者のみが操作できます。', |
1301 "Only administrator of this group(`%s') can add you."], | 1308 "Only administrator of this group(`%s') can add you."], |
1309 'limitsender' => ['アカウント保持者のみ送信可能', | |
1310 'Allow only account holders to post to ML'], | |
1302 'personal' => ['個人で', 'personal'], | 1311 'personal' => ['個人で', 'personal'], |
1303 'registas' => ['グループ予定として登録?', 'Register as group?'], | 1312 'registas' => ['グループ予定として登録?', 'Register as group?'], |
1304 'headsched' => ['下の枠内に予定を記入: 1行以内で短めに。 | 1313 'headsched' => ['下の枠内に予定を記入: 1行以内で短めに。 |
1305 長くなるときは2行目以降に詳細を。', | 1314 長くなるときは2行目以降に詳細を。', |
1306 'Put shortest sentence as possible within 1 line. | 1315 'Put shortest sentence as possible within 1 line. |
2772 bracket = @sc.getgroupattr(name, 'subjtag') || @params['mailbracket'] | 2781 bracket = @sc.getgroupattr(name, 'subjtag') || @params['mailbracket'] |
2773 fromhack = @sc.getgroupattr(name, 'fromhack') | 2782 fromhack = @sc.getgroupattr(name, 'fromhack') |
2774 mldir = "ml/"+name | 2783 mldir = "ml/"+name |
2775 to = @sc.getgroupattr(name, 'mladdress') || defaultmladdress(name) | 2784 to = @sc.getgroupattr(name, 'mladdress') || defaultmladdress(name) |
2776 returnpath = to.sub("@", @mailadmsuffix+"-@") | 2785 returnpath = to.sub("@", @mailadmsuffix+"-@") |
2786 adminaddr = to.sub("@", @mailadmsuffix+"@") | |
2777 subj = @params['subject'] || "Message from "+@myname | 2787 subj = @params['subject'] || "Message from "+@myname |
2778 sjtag = bracket.gsub("%n", nickname(name)). | 2788 sjtag = bracket.gsub("%n", nickname(name)). |
2779 gsub("%i", name). | 2789 gsub("%i", name). |
2780 gsub(/%(\d*)c/){("%0"+$1+"d") % [mlseq(mldir)]} | 2790 gsub(/%(\d*)c/){("%0"+$1+"d") % [mlseq(mldir)]} |
2781 tagpt = Regexp.quote(bracket). # compute bracket pattern | 2791 tagpt = Regexp.quote(bracket). # compute bracket pattern |
2801 rcpts = if grepgroup(name) | 2811 rcpts = if grepgroup(name) |
2802 @sc.members(name) | 2812 @sc.members(name) |
2803 else | 2813 else |
2804 [name] | 2814 [name] |
2805 end.collect {|u| mailaddress(u, name).split(/,\s*|\s+/)}.flatten | 2815 end.collect {|u| mailaddress(u, name).split(/,\s*|\s+/)}.flatten |
2816 ENV["QMAILINJECT"] = "r" # for ML mode, use verp | |
2817 # | |
2818 # On mail mode, check if sender can send message to list. | |
2819 if viamail && @sc.getgroupattr(name, 'limitsender') | |
2820 s = ENV['SENDER'] | |
2821 if !catch(:senderok) { | |
2822 throw :senderok, true if rcpts.grep(s)[0] | |
2823 throw :senderok, true if @sc.ismembersemail(s) | |
2824 } | |
2825 # sender is not allowed to send to ML | |
2826 sendMail(s, "You are not allowed to send to this ML", | |
2827 ("Before posting to this list(%s),\n"+ | |
2828 "subscribe to %s") % [to, @opt['url']], | |
2829 adminaddr, nil, {"Return-path" => returnpath}) | |
2830 exit 0 | |
2831 end | |
2832 end | |
2806 # p rcpts | 2833 # p rcpts |
2807 # p to | 2834 # p to |
2808 ENV["QMAILINJECT"] = "r" # for ML mode, use verp | |
2809 sendMail(to, subj, body, from, rcpts, | 2835 sendMail(to, subj, body, from, rcpts, |
2810 header, | 2836 header, |
2811 ENV['SENDER'], | 2837 ENV['SENDER'], |
2812 @opt['mlspooling'] ? mldir : nil) | 2838 @opt['mlspooling'] ? mldir : nil) |
2813 if !viamail then | 2839 if !viamail then |
3319 } | 3345 } |
3320 } | 3346 } |
3321 }.join | 3347 }.join |
3322 } | 3348 } |
3323 } + \ | 3349 } + \ |
3324 ["fromhack", "inviteonly"].collect do |param| | 3350 ["fromhack", "inviteonly", "limitsender"].collect do |param| |
3325 @H.checkbox(param, "yes", msg(param), | 3351 @H.checkbox(param, "yes", msg(param), |
3326 @sc.getgroupattr(group, param)) + "<br>\n" | 3352 @sc.getgroupattr(group, param)) + "<br>\n" |
3327 end.join + \ | 3353 end.join + \ |
3328 (group ? @H.elementln("p") { | 3354 (group ? @H.elementln("p") { |
3329 sprintf(msg('mladdress'), defaultmladdress(group)) + \ | 3355 sprintf(msg('mladdress'), defaultmladdress(group)) + \ |
3540 end | 3566 end |
3541 end | 3567 end |
3542 end # groups | 3568 end # groups |
3543 # Change parameter(s) | 3569 # Change parameter(s) |
3544 # To be more generic... | 3570 # To be more generic... |
3545 ["fromhack", "inviteonly"].each {|param| | 3571 ["fromhack", "inviteonly", "limitsender"].each {|param| |
3546 parsetp = (@params[param] && /^yes/i =~ @params[param]) | 3572 parsetp = (@params[param] && /^yes/i =~ @params[param]) |
3547 cursetp = (@sc.getgroupattr(group, param)!=nil) | 3573 cursetp = (@sc.getgroupattr(group, param)!=nil) |
3548 if cursetp ^ parsetp | 3574 if cursetp ^ parsetp |
3549 @sc.putgroupattr(group, param, @params[param]) | 3575 @sc.putgroupattr(group, param, @params[param]) |
3550 @O.print @H.elementln("p") { | 3576 @O.print @H.elementln("p") { |