############################################################################### # GuardianAdmin.pm # # $Date: 01 Sep 2026 $ # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBBForum 3.2 # # Packaged: 01 Sep 2026 # # Distributed by: https://yabbforum.nz # # =========================================================================== # # Copyright (c) 2000-2026 YaBB (yabbforum.nz) - All Rights Reserved. # # Software by: The YaBB Development Team # # with assistance from the YaBB community. # ############################################################################### use CGI::Carp qw(fatalsToBrowser); our $VERSION = '3.2'; $guardianadminpmver = 'YaBBForum 3.2'; if ( $action eq 'detailedversion' ) { return 1; } LoadLanguage('Guardian'); $admin_images = "$yyhtml_root/Templates/Admin/default"; $guardimg = 'guardian.png'; sub setup_guardian { is_admin_or_gmod(); # figure out what to print if ($use_guardian) { $guardian_checked = ' checked="checked" ' } if ($use_htaccess) { $htaccess_checked = ' checked="checked" ' } if ($disallow_proxy_on) { $proxy_on_checked = ' checked="checked" ' } if ($disallow_proxy_notify) { $proxy_notify_checked = ' checked="checked" '; } if ($disallow_proxy_htaccess) { $proxy_htaccess_checked = ' checked="checked" '; } if ($referer_on) { $referer_on_checked = ' checked="checked" ' } if ($referer_notify) { $referer_notify_checked = ' checked="checked" ' } if ($referer_htaccess) { $referer_htaccess_checked = ' checked="checked" ' } if ($harvester_on) { $harvester_on_checked = ' checked="checked" ' } if ($harvester_notify) { $harvester_notify_checked = ' checked="checked" ' } if ($harvester_htaccess) { $harvester_htaccess_checked = ' checked="checked" '; } if ($request_on) { $request_on_checked = ' checked="checked" ' } if ($request_notify) { $request_notify_checked = ' checked="checked" ' } if ($request_htaccess) { $request_htaccess_checked = ' checked="checked" ' } if ($string_on) { $string_on_checked = ' checked="checked" ' } if ($string_notify) { $string_notify_checked = ' checked="checked" ' } if ($string_htaccess) { $string_htaccess_checked = ' checked="checked" ' } if ($union_on) { $union_on_checked = ' checked="checked" ' } if ($union_notify) { $union_notify_checked = ' checked="checked" ' } if ($union_htaccess) { $union_htaccess_checked = ' checked="checked" ' } if ($clike_on) { $clike_on_checked = ' checked="checked" ' } if ($clike_notify) { $clike_notify_checked = ' checked="checked" ' } if ($clike_htaccess) { $clike_htaccess_checked = ' checked="checked" ' } if ($script_on) { $script_on_checked = ' checked="checked" ' } if ($script_notify) { $script_notify_checked = ' checked="checked" ' } if ($script_htaccess) { $script_htaccess_checked = ' checked="checked" ' } ## make splits turn into linefeeds for the forms chomp $banned_harvesters; chomp $banned_referers; chomp $banned_requests; chomp $banned_strings; chomp $whitelist; $banned_harvesters =~ s/\|/\n/gxsm; $banned_referers =~ s/\|/\n/gxsm; $banned_requests =~ s/\|/\n/gxsm; $banned_strings =~ s/\|/\n/gxsm; $whitelist =~ s/\|/\n/gxsm; @access_denied = update_htaccess('load'); foreach (@access_denied) { chomp $_; $acc_denied .= "$_\n"; } $yymain .= qq~
~; $yytitle = $guardian_txt{'setup'}; $action_area = 'setup_guardian'; AdminTemplate(); return; } sub setup_guardian2 { is_admin_or_gmod(); my @onoff = qw{ use_guardian use_htaccess disallow_proxy_on disallow_proxy_htaccess referer_on referer_htaccess harvester_on harvester_htaccess request_on request_htaccess string_on string_htaccess union_on union_htaccess clike_on clike_htaccess script_on script_htaccess disallow_proxy_notify referer_notify harvester_notify request_notify string_notify union_notify clike_notify script_notify}; # Set as 0 or 1 if box was checked or not my $fi; map { $fi = lc $_; ${$_} = $FORM{$fi} == 1 ? 1 : 0; } @onoff; $banned_harvesters = $FORM{'banned_harvesters'}; $banned_referers = $FORM{'banned_referers'}; $banned_requests = $FORM{'banned_requests'}; $banned_strings = $FORM{'banned_strings'}; $access_denied = $FORM{'access_denied'}; $whitelist = $FORM{'whitelist'}; chomp $banned_harvesters; chomp $banned_referers; chomp $banned_requests; chomp $banned_strings; chomp $whitelist; $banned_harvesters =~ s/\r//gxsm; $banned_referers =~ s/\r//gxsm; $banned_requests =~ s/\r//gxsm; $banned_strings =~ s/\r//gxsm; $access_denied =~ s/\r//gxsm; $whitelist =~ s/\r//gxsm; $banned_harvesters =~ s/\n/|/gxsm; $banned_referers =~ s/\n/|/gxsm; $banned_requests =~ s/\n/|/gxsm; $banned_strings =~ s/\n/|/gxsm; $access_denied =~ s/\n/,/gxsm; $whitelist =~ s/\n/|/gxsm; # We shouldn't let them block POST and GET since it'll mess things up. $banned_requests =~ s/post//igsm; $banned_requests =~ s/get//igsm; $banned_requests =~ s/\|+/\|/igsm; # Clean up extra pipes require Admin::NewSettings; SaveSettingsTo('Settings.pm'); @access_denied = split /\,/xsm, $access_denied; update_htaccess( 'save', @access_denied ); $yySetLocation = qq~$adminurl?action=setup_guardian~; redirectexit(); return; } sub update_htaccess { my ( $action, @values ) = @_; my ( $htheader, $htfooter, @denies, @htout ); if ( !$action ) { return 0; } fopen( HTA, '.htaccess' ); @htlines =