############################################################################### # Register.pl # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBB 1 Gold - SP 1.3 # # Released: December 2001; Updated April 6, 2003 # # Distributed by: http://www.yabbforum.com # # =========================================================================== # # Copyright (c) 2000-2003 YaBB (www.yabbforum.com) - All Rights Reserved. # # Software by: The YaBB Development Team # # with assistance from the YaBB community. # # Sponsored by: Xnull Internet Media, Inc. - http://www.ximinc.com # ############################################################################### $registerplver = "1 Gold - SP 1.3"; sub Register { $yymain .= qq~
$txt{'97'} $txt{'97'} $txt{'517'}
~; if ($allow_hide_email == 1) { $yymain .= qq~ ~; } else { $yymain .= qq~ ~; } $yymain .= qq~ ~; unless( $emailpassword ) { $yymain .= qq~ ~; } if($req_location) { fopen(FILE, "$vardir/country.txt"); @country = ; fclose(FILE); chomp @country; foreach $curcountry (sort @country) { $curcountry =~ s/ //gi; $curcountry =~ s/\n//gi; $curcountry =~ s/\r//gi; $selektet = ""; $thevalue = $curcountry; $theopt = $curcountry; $theopt =~ s/\_/ /g; $cntropt .= qq~ ~; if($view_state) { $yymain .= qq~ ~; } $yymain .= qq~ ~; } require "$sourcedir/ExtendedProfiles.pl"; $yymain .= &ext_register . qq~
* $txt{'98'}:
$txt{'520'}
* $txt{'69'}:
$txt{'679'}
$txt{'721'}
$txt{'679'}
* $txt{'81'}:
* $txt{'82'}:
* $maptxt{'03'}:
$maptxt{'21'}:
* $maptxt{'04'}:
~; if ($RegAgree) { fopen(FILE, "$vardir/agreement.txt"); @agreement = ; fclose(FILE); $fullagree = join( "", @agreement ); $fullagree =~ s/\n/
/g; $yymain .= qq~

$fullagree

$txt{'585'}     $txt{'586'}
~; } $yymain .= qq~
~; $yytitle = "$txt{'97'}"; &template; exit; } sub Register2 { if($FORM{'regagree'} eq "no") { $yySetLocation = qq~$scripturl~; &redirectexit; } my %member; while( ($key,$value) = each(%FORM) ) { $value =~ s~\A\s+~~; $value =~ s~\s+\Z~~; $value =~ s~[\n\r]~~g; $member{$key} = $value; } $member{'username'} =~ s/\s/_/g; if (length($member{'username'}) > 25) { $member{'username'} = substr($member{'username'},0,25); } &fatal_error("($member{'username'}) $txt{'37'}") if($member{'username'} eq ''); &fatal_error("($member{'username'}) $txt{'99'}") if($member{'username'} eq '_' || $member{'username'} eq '|'); &fatal_error("$txt{'244'} $member{'username'}") if($member{'username'} =~ /guest/i); &fatal_error("$txt{'240'} $txt{'35'} $txt{'241'}") if($member{'username'} !~ /\A[0-9A-Za-z#%+-\.@^_]+\Z/); &fatal_error("$txt{'240'}") if($member{'username'} =~ /,/); &fatal_error("($member{'username'}) $txt{'76'}") if($member{'email'} eq ""); &fatal_error("($member{'username'}) $txt{'100'}") if(-e ("$memberdir/$member{'username'}.dat")); if($req_location) { &fatal_error("($member{'username'}) $maptxt{'24'}") if($member{'cityloc'} eq ''); &fatal_error("($member{'username'}) $maptxt{'25'}") if($member{'cityloc'} eq '_' || $member{'cityloc'} eq '|'); &fatal_error("$txt{'240'} $maptxt{'03'} $txt{'241'}") if($member{'cityloc'} !~ /\A[0-9A-Za-zæøåÆØÅäöÄÖ#%+-\.@^_]+\Z/); &fatal_error("($member{'username'}) $maptxt{'26'}") if($member{'mapcountry'} eq ''); } if ($send_welcomeim == 1) { $messageid = $^T.$$; $imtext =~ s/\&\&/\n/g; $imtext =~ s/\<//g; $imtext =~ s//>/g; $imtext =~ s/\t/ \  \  \ /g; $imtext =~ s/\cM//g; $imtext =~ s/\n/
/g; $imtext =~ s/\|/\|/g; fopen(FILE,">$memberdir/$member{'username'}.msg", 1); print FILE "$sendname|$imsubject|$date|$imtext|$messageid|$ENV{'REMOTE_ADDR'}|1\n"; fclose(FILE); } if( $emailpassword ) { srand(); $member{'passwrd1'} = int( rand(100) ); $member{'passwrd1'} =~ tr/0123456789/ymifxupbck/; $_ = int( rand(77) ); $_ =~ tr/0123456789/q8dv7w4jm3/; $member{'passwrd1'} .= $_; $_ = int( rand(89) ); $_ =~ tr/0123456789/y6uivpkcxw/; $member{'passwrd1'} .= $_; $_ = int( rand(188) ); $_ =~ tr/0123456789/poiuytrewq/; $member{'passwrd1'} .= $_; $_ = int( rand(65) ); $_ =~ tr/0123456789/lkjhgfdaut/; $member{'passwrd1'} .= $_; } else { &fatal_error("($member{'username'}) $txt{'213'}") if($member{'passwrd1'} ne $member{'passwrd2'}); &fatal_error("($member{'username'}) $txt{'91'}") if($member{'passwrd1'} eq ''); &fatal_error("$txt{'240'} $txt{'36'} $txt{'241'}") if($member{'passwrd1'} !~ /\A[\s0-9A-Za-z!@#$%\^&*\(\)_\+|`~\-=\\:;'",\.\/?\[\]\{\}]+\Z/); } &fatal_error("$txt{'240'} $txt{'69'} $txt{'241'}") if($member{'email'} !~ /[\w\-\.\+]+\@[\w\-\.\+]+\.(\w{2,4}$)/); &fatal_error("$txt{'500'}") if(($member{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/) || ($member{'email'} !~ /\A.+@\[?(\w|[-.])+\.[a-zA-Z]{2,4}|[0-9]{1,4}\]?\Z/)); fopen(FILE, "$vardir/ban_email.txt"); @banned = ; fclose(FILE); foreach $curban (@banned) { if($member{'email'} eq "$curban") { &fatal_error("$txt{'678'}$txt{'430'}!"); } } fopen(FILE, "$memberdir/memberlist.txt"); @memberlist = ; fclose(FILE); $testname = lc $member{'username'}; for ($a = 0; $a < @memberlist; $a++) { chomp $memberlist[$a]; $membername = lc $memberlist[$a]; if( fopen(FILE2, "$memberdir/$memberlist[$a].dat") ) { # Load users and check email if( !$yyUDLoaded{$memberlist[$a]} && -e("$memberdir/$memberlist[$a].dat") ) { # If user is not in memory, s/he must be loaded. &LoadUser($memberlist[$a]); if(lc($userprofile{$memberlist[$a]}->[2]) eq lc($member{'email'})) { &fatal_error("$txt{'730'} ($member{'email'}) $txt{'731'}"); } } $tmpa=; $realname=; fclose(FILE2); chomp $realname; $realname = lc $realname; if ($realname eq $testname || $membername eq $testname) { &fatal_error("($member{'username'}) $txt{'473'}"); } } elsif( $testname eq $membername ) { &fatal_error("($member{'username'}) $txt{'473'}"); } } &ToHTML($member{'email'}); fopen(FILE, "$vardir/reserve.txt") || &fatal_error("$txt{'23'} reserve.txt"); @reserve = ; fclose(FILE); fopen(FILE, "$vardir/reservecfg.txt") || &fatal_error("$txt{'23'} reservecfg.txt"); @reservecfg = ; fclose(FILE); for( $a = 0; $a < @reservecfg; $a++ ) { chomp $reservecfg[$a]; } $matchword = $reservecfg[0] eq 'checked'; $matchcase = $reservecfg[1] eq 'checked'; $matchuser = $reservecfg[2] eq 'checked'; $matchname = $reservecfg[3] eq 'checked'; $namecheck = $matchcase eq 'checked' ? $member{'username'} : lc $member{'username'}; foreach $reserved (@reserve) { chomp $reserved; $reservecheck = $matchcase ? $reserved : lc $reserved; if ($matchuser) { if ($matchword) { if ($namecheck eq $reservecheck) { &fatal_error("$txt{'244'} $reserved"); } } else { if ($namecheck =~ $reservecheck) { &fatal_error("$txt{'244'} $reserved"); } } } } &fatal_error("$txt{'100'})") if(-e ("$memberdir/$member{'username'}.dat")); if ($preregister){ require "$sourcedir/ExtendedProfiles.pl"; my $error = &ext_validate_submition($member{'username'},$member{'username'}); if ($error ne "") { &fatal_error($error); } else { &ext_saveprofile($member{'username'}); } ## If a pre-registration list exists load it ## if (-e "$memberdir/memberlist.inactive"){ fopen(FILE, "$memberdir/memberlist.inactive"); @reglist = ; fclose(FILE); } ## check if user isn't already in pre-registration ## foreach $regline (@reglist) { chomp $regline; ($dummy,$dummy,$regmember,$dummy) = split (/\|/, $regline); if ($member{'username'} eq $regmember){&fatal_error("$prereg_txt{'13'}"); last;} } ## create pre-registration .pre file and write log and inactive list ## $regpassword = $member{'passwrd1'}; $regtime = int(time); $activationcode = substr(&activation_key,0,20); fopen(FILE, ">$memberdir/$member{'username'}.pre"); print FILE "$member{'passwrd1'}\n"; print FILE "$member{'username'}\n"; print FILE "$member{'email'}\n"; if($req_location) { $memblocal = $member{'cityloc'}; if($view_state) { $membstate = $member{'mapstate'} } else { $membstate = "" } $membcountry = $member{'mapcountry'}; $membcontinent = ""; $membx = 0; $memby = 0; $loccode = "x0"; $member{'location'} .= qq($loccode|$memblocal|$membcountry|$membcontinent|$membx|$memby|$membstate); print FILE "\n\n\n0\n\n\n\n\n\n$txt{'209'}\nblank.gif\n$date\n"; print FILE "$member{'location'}\n\n\n\n"; } else { print FILE "\n\n\n0\n\n\n\n\n\n$txt{'209'}\nblank.gif\n$date\n\n\n\n\n"; } if ($FORM{'hideemail'} ne "checked") { $FORM{'hideemail'} = ""; } print FILE "$FORM{'hideemail'}\n\n\n\n"; fclose(FILE); fopen(FILE, ">$memberdir/memberlist.inactive", 1); foreach $curreg (@reglist) { print FILE "$curreg\n"; } print FILE "$regtime|$activationcode|$member{'username'}|$regpassword\n"; fclose(FILE); fopen(FILE, ">>$vardir/registration.log", 1); print FILE "$regtime|N|$member{'username'}\n"; fclose(FILE); &sendmail($member{'email'},"$txt{'700'} $mbname", "$txt{'248'} $member{'username'}!\n\n$prereg_txt{'2'} $member{'username'}.\n\n$prereg_txt{'3'}.\n\n$prereg_txt{'4'}\n\n$scripturl?action=activate;username=$member{'username'};activationkey=$activationcode\n\n$txt{'130'}"); &FormatUserName($member{'username'}); $yymain .= qq~

~; require "$sourcedir/LogInOut.pl"; &sharedLogin; $yymain .= qq~
$prereg_txt{'1a'} $prereg_txt{'1a'}

$prereg_txt{'1'}



~; $yytitle="$prereg_txt{'1a'}"; } else { require "$sourcedir/ExtendedProfiles.pl"; my $error = &ext_validate_submition($member{'username'},$member{'username'}); if ($error ne "") { &fatal_error($error); } else { &ext_saveprofile($member{'username'}); } fopen(FILE, ">$memberdir/$member{'username'}.dat"); print FILE "$member{'passwrd1'}\n"; print FILE "$member{'username'}\n"; print FILE "$member{'email'}\n"; if($req_location) { $memblocal = $member{'cityloc'}; if($view_state) { $membstate = $member{'mapstate'} } else { $membstate = "" } $membcountry = $member{'mapcountry'}; $membcontinent = ""; $membx = 0; $memby = 0; $loccode = "x0"; $member{'location'} .= qq($loccode|$memblocal|$membcountry|$membcontinent|$membx|$memby|$membstate); print FILE "\n\n\n0\n\n\n\n\n\n$txt{'209'}\nblank.gif\n$date\n"; print FILE "$member{'location'}\n\n\n\n"; } else { print FILE "\n\n\n0\n\n\n\n\n\n$txt{'209'}\nblank.gif\n$date\n\n\n\n\n"; } if ($FORM{'hideemail'} ne "checked") { $FORM{'hideemail'} = ""; } print FILE "$FORM{'hideemail'}\n"; fclose(FILE); fopen(FILE, ">$memberdir/memberlist.txt", 1); foreach $curmem (@memberlist) { print FILE "$curmem\n"; } print FILE "$member{'username'}\n"; fclose(FILE); my $membershiptotal = @memberlist + 1; fopen(FILE, "+>$memberdir/members.ttl"); print FILE qq~$membershiptotal|$member{'username'}~; fclose(FILE); ###### Start YaMS add-on Member-number ###### fopen(FILE, "$memberdir/membernumb.txt"); @membernumb = ; $membernumber = @membernumb; fclose(FILE); fopen(FILE, ">$memberdir/membernumb.txt", 1); foreach $curnum (@membernumb) { chomp $curnum; print FILE "$curnum\n"; } print FILE "$membernumber|$member{'username'}\n"; fclose(FILE); fopen(FILE, ">$memberdir/$member{'username'}.yam"); print FILE "$membernumber\n"; print FILE "0|0|0\n"; fclose(FILE); chmod(0666,"$memberdir/$member{'username'}.yam"); ###### End YaMS add-on Member-number ###### &FormatUserName($member{'username'}); if($emailpassword) { &sendmail($member{'email'},"$txt{'700'} $mbname", "$txt{'248'} $member{'username'}!\n\n$txt{'719'} $member{'username'}, $txt{'492'} $member{'passwrd1'}\n\n$txt{'701'}\n$scripturl?action=profile;username=$useraccount{$member{'username'}}\n\n$txt{'130'}"); $yymain .= qq~
~; require "$sourcedir/LogInOut.pl"; $sharedLogin_title="$txt{'97'}"; $sharedLogin_text="$txt{'703'}"; &sharedLogin; $yymain .= qq~
~; } else { if($emailwelcome) { &sendmail($member{'email'},"$txt{'700'} $mbname", "$txt{'248'} $member{'username'}!\n\n$txt{'719'} $member{'username'}, $txt{'492'} $member{'passwrd1'}\n\n$txt{'701'}\n$scripturl?action=profile;username=$useraccount{$member{'username'}}\n\n$txt{'130'}"); } $yymain .= qq~

$txt{'97'} $txt{'97'}

$txt{'431'}



~; } if ($popup_on) { $y = "on"; } open(FILE, ">$memberdir/$member{'username'}.imconfig"); print FILE "\n\n$sound\n$y"; close(FILE); $yytitle="$txt{'245'}"; } &template; exit; } sub activation_check{ $changed = 0; $timer = int(time); $timespan = $preregspan * 3600; fopen(INFILE, "$memberdir/memberlist.inactive"); @actlist = ; fclose(INFILE); ## check if user is in pre-registration and check activation key ## foreach $regline (@actlist) { ($regtime,$dummy,$regmember,$dummy) = split (/\|/, $regline); $difftime = $timer - $regtime; if ($difftime > $timespan){ $changed = 1; unlink "$memberdir/$regmember.pre"; ## add entry to registration log ## fopen(REG, ">>$vardir/registration.log", 1); print REG "$timer|T|$regmember\n"; fclose(REG); } else { ## update non activate user list ## ## write valid registration to the list again ## push(@outlist,$regline); } } if($changed){ ## re-open inactive list for update if changed ## fopen(OUTFILE, ">$memberdir/memberlist.inactive", 1); print OUTFILE @outlist; fclose(OUTFILE); } } sub user_activation { $changed = 0; $reguser = $INFO{'username'}; $activationkey = $INFO{'activationkey'}; if(!-e "$memberdir/$reguser.pre"){&fatal_error("$prereg_txt{'14'}");} ## If a pre-registration list exists load it ## if (-e "$memberdir/memberlist.inactive"){ fopen(FILE, "$memberdir/memberlist.inactive"); @reglist = ; fclose(FILE); } ## check if user is in pre-registration and check activation key ## foreach $regline (@reglist) { ($regtime,$testkey,$regmember,$regpassword) = split (/\|/, $regline); ## update non activate user list ## if ($regmember ne $reguser){ push(@chnglist, $regline); } else { if ($activationkey ne $testkey){ push(@chnglist, $regline); ## add entry to registration log ## my $logtime = int(time); fopen(FILE, ">>$vardir/registration.log", 1); print FILE "$logtime|E|$reguser\n"; fclose(FILE); &fatal_error("$prereg_txt{'10'}"); } else { $changed = 1; ## user is in list and the keys match, so let him/her in ## fopen(FILE, "$memberdir/memberlist.txt"); @memberlist = ; fclose(FILE); rename("$memberdir/$reguser.pre","$memberdir/$reguser.dat"); fopen(FILE, ">$memberdir/memberlist.txt", 1); foreach $curmem (@memberlist) { print FILE "$curmem\n"; } print FILE "$reguser\n"; fclose(FILE); ## update member total my $membershiptotal = @memberlist + 1; fopen(FILE, "+>$memberdir/members.ttl"); print FILE qq~$membershiptotal|$reguser~; fclose(FILE); ###### Start YaMS add-on Member-number ###### fopen(FILE, "$memberdir/membernumb.txt"); @membernumb = ; $membernumber = @membernumb; fclose(FILE); fopen(FILE, ">$memberdir/membernumb.txt", 1); foreach $curnum (@membernumb) { chomp $curnum; print FILE "$curnum\n"; } print FILE "$membernumber|$member{'username'}\n"; fclose(FILE); fopen(FILE, ">$memberdir/$member{'username'}.yam"); print FILE "$membernumber\n"; print FILE "0|0|0\n"; fclose(FILE); chmod(0666,"$memberdir/$member{'username'}.yam"); ###### End YaMS add-on Member-number ###### ## add entry to registration log ## my $logtime = int(time); fopen(FILE, ">>$vardir/registration.log", 1); print FILE "$logtime|A|$reguser\n"; fclose(FILE); if($emailpassword) { LoadUser("$reguser"); &sendmail($userprofile{$user}->[2],"$txt{'700'} $mbname", "$txt{'248'} $reguser!\n\n$txt{'719'} $reguser, $txt{'492'} $regpassword\n\n$txt{'701'}\n$scripturl?action=profile;username=$reguser\n\n$txt{'130'}"); $yymain .= qq~
~; require "$sourcedir/LogInOut.pl"; $sharedLogin_title="$txt{'97'}"; $sharedLogin_text="$txt{'703'}"; &sharedLogin; $yymain .= qq~
~; } else { if($emailwelcome) { LoadUser("$reguser"); &sendmail($userprofile{$user}->[2],"$txt{'700'} $mbname", "$txt{'248'} $reguser!\n\n$txt{'719'} $reguser, $txt{'492'} $regpassword\n\n$txt{'701'}\n$scripturl?action=profile;username=$reguser\n\n$txt{'130'}"); } } } } } if($changed){ ## if changed write new inactive list ## fopen(INACT, ">$memberdir/memberlist.inactive"); print INACT @chnglist; fclose(INACT); } $yymain .= qq~

~; require "$sourcedir/LogInOut.pl"; &sharedLogin; $yymain .= qq~
$prereg_txt{'1a'} $prereg_txt{'1a'}

$prereg_txt{'5'}



~; if ($popup_on) { $y = "on"; } open(FILE, ">$memberdir/$member{'username'}.imconfig"); print FILE "\n\n$sound\n$y"; close(FILE); $yytitle="$prereg_txt{'5'}"; &template; exit; } 1;