#!/usr/bin/perl #################################### ## AutoPost Professional v2.1.1 ## ############################################################### ## accounts.cgi ## ## ------------ ## ## This script controls the member's accounts. ## ############################################################### ############################################################### ## DO NOT EDIT THIS FILE ## ############################################################### package acts; use GDBM_File; use strict; print "Content-type: text/html\n\n"; eval { require "functions.cgi"; }; if( $@ ) { print "Script Error: $@"; exit -1; } my($frm, %tmpl, %mem, %bans); if($ENV{'REQUEST_METHOD'} eq "GET") { if($ENV{'QUERY_STRING'}) { *function = $ENV{'QUERY_STRING'}; eval { &function(); }; if($@) { print "Script Error: $@"; } } else { display_add(); } } elsif($ENV{'REQUEST_METHOD'} eq "POST") { my($call); $frm = fnct::parse(1); $call = lc( $frm->{'submit'} ); $call =~ s/ /_/g; *function = $call; fnct::derror(1010, "No Function Selected") unless( $call ); eval { &function(); }; if($@) { print "Script Error: $@"; } } exit; sub login { $tmpl{'USERNAME_FIELD'} = qq||; $tmpl{'PASSWORD_FIELD'} = qq||; $tmpl{'EDIT_RADIO'} = qq||; $tmpl{'STATS_RADIO'} = qq||; $tmpl{'LINK_RADIO'} = qq||; $tmpl{'SUBMIT_BUTTON'} = qq||; fnct::parsetmpl("_account_login.htmlt", \%tmpl); } sub remind { $tmpl{'EMAIL_FIELD'} = qq||; $tmpl{'SUBMIT_BUTTON'} = qq||; fnct::parsetmpl("_account_remind.htmlt", \%tmpl); } sub display_add { $tmpl{'EM_FIELD'} = qq||; $tmpl{'ST_FIELD'} = qq||; $tmpl{'SU_FIELD'} = qq||; $tmpl{'SD_FIELD'} = qq||; $tmpl{'BU_FIELD'} = qq||; $tmpl{'CT_FIELD'} = get_cat_select(undef); $tmpl{'UN_FIELD'} = qq||; $tmpl{'PW_FIELD'} = qq||; $tmpl{'VP_FIELD'} = qq||; $tmpl{'SUBMIT'} = qq||; fnct::parsetmpl("_account_add.htmlt", \%tmpl); } sub display_edit { dbmopen(%mem, "$fnct::sd_dir/members", 0666) || fnct::serror("members", "adm::edit_account()", $!, $frm); my @md = split(/\|/, $mem{$frm->{'un'}}); dbmclose(%mem); fnct::derror(1014, "This Account Is Locked") unless( int($md[14]) ); fnct::derror(1015, "This Account Is Suspended") unless( int($md[13]) ); my $pass = unpack('u', $md[12]); $tmpl{'EM_FIELD'} = qq||; $tmpl{'ST_FIELD'} = qq||; $tmpl{'SU_FIELD'} = qq||; $tmpl{'SD_FIELD'} = qq||; $tmpl{'BU_FIELD'} = qq||; $tmpl{'CT_FIELD'} = get_cat_select($md[7]); $tmpl{'PW_FIELD'} = qq||; $tmpl{'SUBMIT'} = qq||; $tmpl{'SUBMIT'} .= qq||; $tmpl{'SUBMIT'} .= qq||; fnct::parsetmpl("_account_edit.htmlt", \%tmpl); } sub display_stats { dbmopen(%mem, "$fnct::sd_dir/members", 0666) || fnct::serror("members", "acts::edit_account()", $!, $frm); my @md = split(/\|/, $mem{$frm->{'un'}}); dbmclose(%mem); $tmpl{'HITS_IN'} = $md[0]; $tmpl{'HITS_OUT'} = $md[1]; $tmpl{'PREVRANK'} = $md[4]; $tmpl{'PREVIN'} = $md[3]; if( -e "$fnct::md_dir/$frm->{'un'}.sts" ) { open(STATS, "$fnct::md_dir/$frm->{'un'}.sts") || fnct::serror("$frm->{'un'}.sts", "acts::display_stats()", $!, $frm); my $line; while( $line = ) { $tmpl{'STATS'} .= $line; } close(STATS); } fnct::parsetmpl("_account_stats.htmlt", \%tmpl); } sub display_farm { $tmpl{'URL'} = $VAR::CU . "/rankem.cgi?action=in&id=" . $frm->{'un'}; fnct::parsetmpl("_account_farm.htmlt", \%tmpl); } ################################################## sub update_account { checkpass(); verifyup(); dbmopen(%mem, "$fnct::sd_dir/members", 0666) || fnct::serror("members", "acts::update_account()", $!, $frm); my @md = split(/\|/, $mem{$frm->{'un'}}); my $cp = crypt($frm->{'np_rq'}, 'aa'); my $up = pack('u', $frm->{'np_rq'}); chomp( $up ); $frm->{'pw'} = $frm->{'np_rq'}; $mem{$frm->{'un'}} = "$md[0]|$md[1]|$md[2]|$md[3]|$md[4]|$frm->{'st_rq'}|$frm->{'sd_rq'}|$frm->{'ct'}|$frm->{'su_rq'}"; $mem{$frm->{'un'}} .= "|$frm->{'bu'}|$frm->{'em_rq'}|$cp|$up|$md[13]|$md[14]|$md[15]|$md[16]|$md[17]"; dbmclose(%mem); fnct::parsetmpl("_account_updated.htmlt", undef) } sub log_in { checkpass(); if( $frm->{'choice'} eq "edit" ) { display_edit(); } elsif( $frm->{'choice'} eq "stat" ) { display_stats(); } elsif( $frm->{'choice'} eq "link" ) { display_farm(); } else { fnct::derror(1010, "No Function Selected"); } } sub remind_me { dbmopen(%mem, "$fnct::sd_dir/members", 0666) || fnct::serror("members", "act::remind_me()", $!, $frm); my($found, $user) = (0, 0); for( keys %mem ) { my @md = split(/\|/, $mem{$_}); if( $md[10] eq $frm->{'em'} && $_ !~ /_REV$/ ) { $found = 1; $user = $_; my $pass = unpack('u', $md[12]); my %etmpl; $etmpl{'PASS'} = $pass; $etmpl{'USER'} = $user; $etmpl{'EMAIL'} = $frm->{'em'}; $etmpl{'LINK'} = $VAR::CU . "/rankem.cgi?action=in&id=" . $user; $etmpl{'EDIT'} = $VAR::CU . "/accounts.cgi?login"; $etmpl{'FROM'} = $VAR::EM; fnct::prep_email("_email_remind.etmpl", \%etmpl); last; } } fnct::derror(1013, "E-mail Address Not Found") unless($found); $tmpl{'EMAIL'} = $frm->{'em'}; $tmpl{'USERNAME'} = $user; fnct::parsetmpl("_account_reminded.htmlt", \%tmpl); } sub add_account { verifyin(); if( $OPT::EML && !$OPT::REV ) { my %etmpl; $etmpl{'EMAIL'} = $frm->{'em_rq'}; $etmpl{'FROM'} = $VAR::EM; $etmpl{'USER'} = $frm->{'un_rq'}; $etmpl{'PASS'} = $frm->{'pw_rq'}; $etmpl{'SEND_URL'} = $VAR::CU . "/rankem.cgi?action=in&id=" . $frm->{'un_rq'}; $etmpl{'LOGIN_URL'} = $VAR::CU . "/accounts.cgi?login"; $etmpl{'MAIN_PAGE'} = $VAR::FU; fnct::prep_email("_email_added.etmpl", \%etmpl); } if( $OPT::ADM ) { my %etmpl; $etmpl{'TO'} = $VAR::EM; $etmpl{'FROM'} = $VAR::EM; $etmpl{'EMAIL'} = $frm->{'em_rq'}; $etmpl{'USER'} = $frm->{'un_rq'}; $etmpl{'TITLE'} = $frm->{'st_rq'}; $etmpl{'DESC'} = $frm->{'sd_rq'}; $etmpl{'URL'} = $frm->{'su_rq'}; $etmpl{'ADMIN'} = $VAR::CU . "/admin.cgi"; fnct::prep_email("_email_admin.etmpl", \%etmpl); } my $key = $frm->{'un_rq'}; $key .= "_REV" if( $OPT::REV ); my $cp = crypt($frm->{'pw_rq'}, 'aa'); my $up = pack('u', $frm->{'pw_rq'}); chomp($up); dbmopen(%mem, "$fnct::sd_dir/members", 0666) || fnct::serror("members", "fnct::add_account()", $!, $frm); $mem{$key} = "0|0|0|0|0|$frm->{'st_rq'}|$frm->{'sd_rq'}|$frm->{'ct'}|$frm->{'su_rq'}|$frm->{'bu'}"; $mem{$key} .= "|$frm->{'em_rq'}|$cp|$up|1|1|none|0.0.0.0|" . time; dbmclose(%mem); $tmpl{'TRACK_URL'} = $VAR::CU . "/rankem.cgi?action=in&id=" . $frm->{'un_rq'}; $tmpl{'E-MAIL'} = $frm->{'em_rq'}; $tmpl{'SITE_TITLE'} = $frm->{'st_rq'}; $tmpl{'SITE_URL'} = $frm->{'su_rq'}; $tmpl{'SITE_DESC'} = $frm->{'sd_rq'}; $tmpl{'BANNER_URL'} = $frm->{'bu'}; $tmpl{'USERNAME'} = $frm->{'un_rq'}; $tmpl{'PASSWORD'} = $frm->{'pw_rq'}; $tmpl{'LOGIN_URL'} = $VAR::CU . "/accounts.cgi?login"; fnct::parsetmpl("_account_added.htmlt", \%tmpl); } sub verifyin { for ( keys %{ $frm } ) { $frm->{$_} =~ s/"|\|//g; fnct::derror(1001, "Required Field Left Blank") if(/_rq$/ && $frm->{$_} eq ""); } checkbans(); dbmopen(%mem, "$fnct::sd_dir/members", 0666) || fnct::serror("members", "acts::verify_data()", $!, $frm); if( defined $mem{$frm->{'un_rq'}} ) { dbmclose(%mem); fnct::derror(1005, "Username Taken"); } dbmclose(%mem); fnct::derror(1019, "Description Too Large") if( length($frm->{'sd_rq'}) > $VAR::MD ); fnct::derror(1020, "Title Too Large") if( length($frm->{'st_rq'}) > $VAR::MT ); fnct::derror(1016, "Invalid Site URL") unless( $frm->{'su_rq'} =~ /^http:\/\// ); fnct::derror(1003, "Username Too Short") if(length($frm->{'un_rq'}) < 5); fnct::derror(1002, "Invalid Character In Username") if($frm->{'un_rq'} !~ m/^[a-zA-Z0-9]*$/gi); fnct::derror(1003, "Password Too Short") if(length($frm->{'pw_rq'}) < 5); fnct::derror(1004, "Passwords Don't Match") if($frm->{'pw_rq'} ne $frm->{'vp_rq'}); } sub verifyup { for ( keys %{ $frm } ) { $frm->{$_} =~ s/"|\|//g; fnct::derror(1001, "Required Field Left Blank") if(/_rq$/ && $frm->{$_} eq ""); } checkbans(); fnct::derror(1019, "Description Too Large") if( length($frm->{'sd_rq'}) > $VAR::MD ); fnct::derror(1020, "Title Too Large") if( length($frm->{'st_rq'}) > $VAR::MT ); fnct::derror(1016, "Invalid Site URL") unless( $frm->{'su_rq'} =~ /^http:\/\// ); fnct::derror(1003, "Password Too Short") if(length($frm->{'np_rq'}) < 5); } sub checkbans { dbmopen(%bans, "$fnct::sd_dir/bans", 0666) || fnct::serror("bans", "acts::checkbans()", $!, $frm); for( keys %bans ) { if( $_ =~ /^url_/ ) { fnct::derror(1006, "Banned Domain") if($frm->{'su_rq'} =~ m/$bans{$_}/gi); } elsif( $_ =~ /^word_/ ) { fnct::derror(1006, "Banned Word") if($frm->{'st_rq'} =~ m/$bans{$_}/gi); fnct::derror(1006, "Banned Word") if($frm->{'sd_rq'} =~ m/$bans{$_}/gi); } else { fnct::derror(1006, "Banned E-Mail") if($frm->{'em_rq'} =~ m/$bans{$_}/gi); } } dbmclose(%bans); } sub get_cat_select { my $in = shift; my $html = qq|"; $html; } sub pisv { my($ep, $vp, $cep) = @_; $cep = crypt($ep, 'aa'); return $cep eq $vp; } sub checkpass { fnct::derror(1018, "Invalid Username") if( $frm->{'un'} =~ /_REV$/ ); dbmopen(%mem, "$fnct::sd_dir/members", 0666) || FNCT("members", "acts::checkpass()", $!, $frm); if(!defined $mem{$frm->{'un'}} ) { dbmclose(%mem); fnct::derror(1018, "Invalid Username"); } my $pass = (split(/\|/, $mem{$frm->{'un'}}))[11]; dbmclose(%mem); fnct::derror(1000, "Invalid Password") unless( pisv($frm->{'pw'}, $pass) ); }