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") {

yatex.org