1###############################################################################
2# Settings_Antispam.pm                                                        #
3# $Date: 12.02.14 $                                                           #
4###############################################################################
5# YaBB: Yet another Bulletin Board                                            #
6# Open-Source Community Software for Webmasters                               #
7# Version:        YaBB 2.6.11                                                 #
8# Packaged:       December 2, 2014                                            #
9# Distributed by: http://www.yabbforum.com                                    #
10# =========================================================================== #
11# Copyright (c) 2000-2014 YaBB (www.yabbforum.com) - All Rights Reserved.     #
12# Software by:  The YaBB Development Team                                     #
13#               with assistance from the YaBB community.                      #
14###############################################################################
15# use strict;
16use CGI::Carp qw(fatalsToBrowser);
17use English qw(-no_match_vars);
18our $VERSION = '2.6.11';
19
20$settings_antispampmver = 'YaBB 2.6.11 $Revision: 1611 $';
21if ( $action eq 'detailedversion' ) { return 1; }
22
23
24# TSC
25if ( -e "$vardir/spamrules.txt" ) {
26    fopen( SPAM, "$vardir/spamrules.txt" )
27      || fatal_error( 'cannot_open', 'spamrules.txt', 1 );
28
29    $spamlist = do { local $INPUT_RECORD_SEPARATOR = undef; <SPAM> };
30    fclose(SPAM);
31}
32
33# Email Domain Filter
34if ( -e "$vardir/email_domain_filter.txt" ) {
35    require "$vardir/email_domain_filter.txt";
36}
37$adomains =~ s/,/\n/gsxm;
38$bdomains =~ s/,/\n/gxsm;
39
40if ($min_reg_time eq q{}) {$min_reg_time = 15 ;}
41
42# List of settings
43our @settings = (
44    {
45        name  => $settings_txt{'generalspam'},
46        id    => 'spam',
47        items => [
48            {
49                description =>
50qq~<label for="post_speed_count">$admin_txt{'91'}<br /><span class="small">$admin_txt{'91a'}</span></label>~,
51                input_html =>
52qq~<input type="text" name="post_speed_count" id="post_speed_count" size="5" value="$post_speed_count" />~,
53                name     => 'post_speed_count',
54                validate => 'number',
55            },
56            {
57                description =>
58qq~<label for="minlinkpost">$admin_txt{'minlinkpost'}<br /><span class="small">$admin_txt{'minlinkpost_exp'}</span></label>~,
59                input_html =>
60qq~<input type="text" name="minlinkpost" id="minlinkpost" size="5" value="$minlinkpost" />~,
61                name     => 'minlinkpost',
62                validate => 'number',
63            },
64            {
65                description =>
66qq~<label for="minlinksig">$admin_txt{'minlinksig'}<br /><span class="small">$admin_txt{'minlinksig_exp'}</span></label>~,
67                input_html =>
68qq~<input type="text" name="minlinksig" id="minlinksig" size="5" value="$minlinksig" />~,
69                name     => 'minlinksig',
70                validate => 'number',
71            },
72            {
73                description =>
74qq~<label for="minlinkweb">$admin_txt{'minlinkweb'}<br /><span class="small">$admin_txt{'minlinkweb_exp'}</span></label>~,
75                input_html =>
76qq~<input type="text" name="minlinkweb" id="minlinkweb" size="5" value="$minlinkweb" />~,
77                name     => 'minlinkweb',
78                validate => 'number',
79            },
80            {
81                description =>
82qq~<label for="spd_detention_time">$admin_txt{'92'}<br /><span class="small">$admin_txt{'93'}</span></label>~,
83                input_html =>
84qq~<input type="text" name="spd_detention_time" id="spd_detention_time" size="5" value="$spd_detention_time" />~,
85                name     => 'spd_detention_time',
86                validate => 'number',
87            },
88            {
89                description =>
90                  qq~<label for="timeout">$admin_txt{'408'}</label>~,
91                input_html =>
92qq~<input type="text" name="timeout" id="timeout" size="4" value="$timeout" />~,
93                name     => 'timeout',
94                validate => 'number',
95            },
96            {
97                description => qq~<label for="min_reg_time">$admin_txt{'min_reg_time'}</label>~,
98                input_html => qq~<input type="text" name="min_reg_time" id="min_reg_time" size="4" value="$min_reg_time" />~,
99                name => 'min_reg_time',
100                validate => 'number',
101            },
102            { header => $settings_txt{'speedban'}, },
103            {
104                description =>
105                  qq~<label for="speedpostdetection">$admin_txt{'89'}</label>~,
106                input_html =>
107qq~<input type="checkbox" name="speedpostdetection" id="speedpostdetection" value="1" ${ischecked($speedpostdetection)}/>~,
108                name     => 'speedpostdetection',
109                validate => 'boolean',
110            },
111            {
112                description =>
113                  qq~<label for="min_post_speed">$admin_txt{'90'}</label>~,
114                input_html =>
115qq~<input type="text" name="min_post_speed" id="min_post_speed" size="5" value="$min_post_speed" />~,
116                name       => 'min_post_speed',
117                validate   => 'number',
118                depends_on => ['speedpostdetection'],
119            },
120            { header => $settings_txt{'spambot'}, },
121            {
122                description =>
123                  qq~<label for="honeypot">$admin_txt{'honeypot'}</label>~,
124                input_html =>
125qq~<input type="checkbox" name="honeypot" id="honeypot" value="1"${ischecked($honeypot)} />~,
126                name     => 'honeypot',
127                validate => 'boolean',
128            },
129            {
130                description =>
131                  qq~<label for="spamfruits">$admin_txt{'spamfruits'}</label>~,
132                input_html =>
133qq~<input type="checkbox" name="spamfruits" id="spamfruits" value="1"${ischecked($spamfruits)} />~,
134                name     => 'spamfruits',
135                validate => 'boolean',
136            },
137        ],
138    },
139    {
140        name  => $tsc_txt{'2'},
141        id    => 'tsc',
142        items => [
143            {
144                description =>
145qq~<label for="spamrules"><b>$tsc_txt{'4'}</b><br /><span class="small">$tsc_txt{'3'}</span></label>~,
146                input_html =>
147qq~<textarea cols="60" rows="35" name="spamrules" id="spamrules" style="width: 95%">$spamlist</textarea>~,
148                two_rows => 1,
149                name     => 'spamrules',
150                validate => 'fulltext,null',
151            },
152        ],
153    },
154    {
155        name  => $domain_filter_txt{'2'},
156        id    => 'emailfilter',
157        items => [
158            {
159                description =>
160qq~<label for="adomains"><b>$domain_filter_txt{'4'}</b><br /><span class="small">$domain_filter_txt{'3'}</span></label>~,
161                input_html =>
162qq~<textarea cols="60" rows="35" name="adomains" id="adomains" style="width: 95%">$adomains</textarea>~,
163                two_rows => 1,
164                name     => 'adomains',
165                validate => 'fulltext,null',
166            },
167            {
168                description =>
169qq~<label for="bdomains"><b>$domain_filter_txt{'6'}</b><br /><span class="small">$domain_filter_txt{'7'}</span></label>~,
170                input_html =>
171qq~<textarea cols="60" rows="35" name="bdomains" id="bdomains" style="width: 95%">$bdomains</textarea>~,
172                two_rows => 1,
173                name     => 'bdomains',
174                validate => 'fulltext,null',
175            },
176        ],
177    },
178);
179
180# Routine to save them
181sub SaveSettings {
182    my %settings = @_;
183
184    # TSC
185    $settings{'spamrules'} =~ s/\r(?=\n*)//gxsm;
186    fopen( SPAM, ">$vardir/spamrules.txt" );
187    print {SPAM} delete $settings{'spamrules'} or croak "$croak{'print'} SPAM";
188    fclose(SPAM);
189
190    # email domain filter
191    my @domains =
192      ( delete $settings{'adomains'}, delete $settings{'bdomains'} );
193    foreach (@domains) {
194        s/\n/,/gxsm;
195        s/\s+//gxsm;
196        s/(^,+|,+$)//gxsm;
197        s/,+/,/gxsm;
198        s/\@/\\@/gxsm;
199    }
200    fopen( FILE, ">$vardir/email_domain_filter.txt" );
201    print {FILE} qq~\$adomains = "$domains[0]";\n~ or croak "$croak{'print'} emain_domain";
202    print {FILE} qq~\$bdomains = "$domains[1]";\n~ or croak "$croak{'print'} email_domain";
203    print {FILE} q~1;~                             or croak "$croak{'print'} email_domain";
204    fclose(FILE);
205
206    # Settings.pm
207    SaveSettingsTo( 'Settings.pm', %settings );
208    return;
209}
210
2111;
212