###############################################################################
# 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~
~;
$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/>/>/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~
$prereg_txt{'1a'} |
$prereg_txt{'1'}
|
~;
require "$sourcedir/LogInOut.pl";
&sharedLogin;
$yymain .= qq~
~;
$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'} |
|
~;
}
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~
$prereg_txt{'1a'} |
$prereg_txt{'5'}
|
~;
require "$sourcedir/LogInOut.pl";
&sharedLogin;
$yymain .= qq~
~;
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;