317 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			317 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
// translator ready
 | 
						|
// addnews ready
 | 
						|
// mail ready
 | 
						|
define("ALLOW_ANONYMOUS",true);
 | 
						|
require_once("common.php");
 | 
						|
require_once("lib/is_email.php");
 | 
						|
require_once("lib/checkban.php");
 | 
						|
require_once("lib/http.php");
 | 
						|
 | 
						|
tlschema("create");
 | 
						|
 | 
						|
$trash = getsetting("expiretrashacct",1);
 | 
						|
$new = getsetting("expirenewacct",10);
 | 
						|
$old = getsetting("expireoldacct",45);
 | 
						|
 | 
						|
checkban();
 | 
						|
$op = httpget('op');
 | 
						|
 | 
						|
if ($op=="val"){
 | 
						|
	$id = httpget('id');
 | 
						|
	$sql = "SELECT acctid,login,password,name FROM ". db_prefix("accounts") . " WHERE emailvalidation='$id' AND emailvalidation!=''";
 | 
						|
	$result = db_query($sql);
 | 
						|
	if (db_num_rows($result)>0) {
 | 
						|
		$row = db_fetch_assoc($result);
 | 
						|
		$sql = "UPDATE " . db_prefix("accounts") . " SET emailvalidation='' WHERE emailvalidation='$id';";
 | 
						|
		db_query($sql);
 | 
						|
		output("`#`cYour email has been validated.  You may now log in.`c`0");
 | 
						|
		rawoutput("<form action='login.php' method='POST'>");
 | 
						|
		rawoutput("<input name='name' value=\"{$row['login']}\" type='hidden'>");
 | 
						|
		rawoutput("<input name='password' value=\"!md52!{$row['password']}\" type='hidden'>");
 | 
						|
		rawoutput("<input name='force' value='1' type='hidden'>");
 | 
						|
		output("Your email has been validated, your login name is `^%s`0.`n`n",
 | 
						|
				$row['login']);
 | 
						|
		$click = translate_inline("Click here to log in");
 | 
						|
		rawoutput("<input type='submit' class='button' value='$click'></form>");
 | 
						|
		output_notl("`n");
 | 
						|
		if ($trash > 0) {
 | 
						|
			output("`^Characters that have never been logged into will be deleted after %s day(s) of no activity.`n`0", $trash);
 | 
						|
		}
 | 
						|
		if ($new > 0) {
 | 
						|
			output("`^Characters that have never reached level 2 will be deleted after %s days of no activity.`n`0", $new);
 | 
						|
		}
 | 
						|
		if ($old > 0) {
 | 
						|
			output("`^Characters that have reached level 2 at least once will be deleted after %s days of no activity.`n`0", $old);
 | 
						|
		}
 | 
						|
		//only set this if they are not doing a forgotten password.
 | 
						|
		if (substr($id,0,1)!="x") {
 | 
						|
			savesetting("newestplayer", $row['acctid']);
 | 
						|
			invalidatedatacache('newest');
 | 
						|
		}
 | 
						|
	}else{
 | 
						|
		output("`#Your email could not be verified.");
 | 
						|
		output("This may be because you already validated your email.");
 | 
						|
		output("Try to log in, and if that doesn't help, use the petition link at the bottom of the page.");
 | 
						|
	}
 | 
						|
}
 | 
						|
if ($op=="forgot"){
 | 
						|
	$charname = httppost('charname');
 | 
						|
	if ($charname!=""){
 | 
						|
		$sql = "SELECT acctid,login,emailaddress,emailvalidation,password FROM " . db_prefix("accounts") . " WHERE login='$charname'";
 | 
						|
		$result = db_query($sql);
 | 
						|
		if (db_num_rows($result)>0){
 | 
						|
			$row = db_fetch_assoc($result);
 | 
						|
			if (trim($row['emailaddress'])!=""){
 | 
						|
				if ($row['emailvalidation']==""){
 | 
						|
					$row['emailvalidation']=substr("x".md5(date("Y-m-d H:i:s").$row['password']),0,32);
 | 
						|
					$sql = "UPDATE " . db_prefix("accounts") . " SET emailvalidation='{$row['emailvalidation']}' where login='{$row['login']}'";
 | 
						|
					db_query($sql);
 | 
						|
				}
 | 
						|
				$subj = translate_mail("LoGD Account Verification",$row['acctid']);
 | 
						|
				$msg = translate_mail(array("Someone from %s requested a forgotten password link for your account.  If this was you, then here is your"
 | 
						|
						." link, you may click it to log into your account and change your password from your preferences page in the village square.`n`n"
 | 
						|
						."If you didn't request this email, then don't sweat it, you're the one who is receiving this email, not them."
 | 
						|
						."`n`n  http://%s?op=val&id=%s `n`n Thanks for playing!",
 | 
						|
						$_SERVER['REMOTE_ADDR'],
 | 
						|
						($_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT'] == 80?"":":".$_SERVER['SERVER_PORT']).$_SERVER['SCRIPT_NAME']),
 | 
						|
						$row['emailvalidation']
 | 
						|
						),$row['acctid']);
 | 
						|
				mail($row['emailaddress'],$subj,str_replace("`n","\n",$msg),translate_inline("From:").getsetting("gameadminemail","postmaster@localhost.com"));
 | 
						|
				output("`#Sent a new validation email to the address on file for that account.");
 | 
						|
				output("You may use the validation email to log in and change your password.");
 | 
						|
			}else{
 | 
						|
				output("`#We're sorry, but that account does not have an email address associated with it, and so we cannot help you with your forgotten password.");
 | 
						|
				output("Use the Petition for Help link at the bottom of the page to request help with resolving your problem.");
 | 
						|
			}
 | 
						|
		}else{
 | 
						|
			output("`#Could not locate a character with that name.");
 | 
						|
			output("Look at the List Warriors page off the login page to make sure that the character hasn't expired and been deleted.");
 | 
						|
		}
 | 
						|
	}else{
 | 
						|
		rawoutput("<form action='create.php?op=forgot' method='POST'>");
 | 
						|
		output("`bForgotten Passwords:`b`n`n");
 | 
						|
		output("Enter your character's name: ");
 | 
						|
		rawoutput("<input name='charname'>");
 | 
						|
		output_notl("`n");
 | 
						|
		$send = translate_inline("Email me my password");
 | 
						|
		rawoutput("<input type='submit' class='button' value='$send'>");
 | 
						|
		rawoutput("</form>");
 | 
						|
	}
 | 
						|
}
 | 
						|
page_header("Create A Character");
 | 
						|
if (getsetting("allowcreation",1)==0){
 | 
						|
	output("`\$Creation of new accounts is disabled on this server.");
 | 
						|
	output("You may try it again another day or contact an administrator.");
 | 
						|
}else{
 | 
						|
	if ($op=="create"){
 | 
						|
		$emailverification="";
 | 
						|
		$shortname = sanitize_name(getsetting("spaceinname", 0), httppost('name'));
 | 
						|
 | 
						|
		if (soap($shortname)!=$shortname){
 | 
						|
			output("`\$Error`^: Bad language was found in your name, please consider revising it.`n");
 | 
						|
			$op="";
 | 
						|
		}else{
 | 
						|
			$blockaccount=false;
 | 
						|
			$email = httppost('email');
 | 
						|
			$pass1= httppost('pass1');
 | 
						|
			$pass2= httppost('pass2');
 | 
						|
			if (getsetting("blockdupeemail",0)==1 && getsetting("requireemail",0)==1){
 | 
						|
				$sql = "SELECT login FROM " . db_prefix("accounts") . " WHERE emailaddress='$email'";
 | 
						|
				$result = db_query($sql);
 | 
						|
				if (db_num_rows($result)>0){
 | 
						|
					$blockaccount=true;
 | 
						|
					$msg.= translate_inline("You may have only one account.`n");
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			$passlen = (int)httppost("passlen");
 | 
						|
			if (substr($pass1, 0, 5) != "!md5!" &&
 | 
						|
					substr($pass1, 0, 6) != "!md52!") {
 | 
						|
				$passlen = strlen($pass1);
 | 
						|
			}
 | 
						|
			if ($passlen<=3){
 | 
						|
					$msg.=translate_inline("Your password must be at least 4 characters long.`n");
 | 
						|
				$blockaccount=true;
 | 
						|
			}
 | 
						|
			if ($pass1!=$pass2){
 | 
						|
				$msg.=translate_inline("Your passwords do not match.`n");
 | 
						|
				$blockaccount=true;
 | 
						|
			}
 | 
						|
			if (strlen($shortname)<3){
 | 
						|
				$msg.=translate_inline("Your name must be at least 3 characters long.`n");
 | 
						|
				$blockaccount=true;
 | 
						|
			}
 | 
						|
			if (strlen($shortname)>25){
 | 
						|
				$msg.=translate_inline("Your character's name cannot exceed 25 characters.`n");
 | 
						|
				$blockaccount=true;
 | 
						|
			}
 | 
						|
			if (getsetting("requireemail",0)==1 && is_email($email) || getsetting("requireemail",0)==0){
 | 
						|
			}else{
 | 
						|
				$msg.=translate_inline("You must enter a valid email address.`n");
 | 
						|
				$blockaccount=true;
 | 
						|
			}
 | 
						|
			$args = modulehook("check-create", httpallpost());
 | 
						|
			if(isset($args['blockaccount']) && $args['blockaccount']) {
 | 
						|
				$msg .= $args['msg'];
 | 
						|
				$blockaccount = true;
 | 
						|
			}
 | 
						|
 | 
						|
			if (!$blockaccount){
 | 
						|
				$shortname = preg_replace("/\s+/", " ", $shortname);
 | 
						|
				$sql = "SELECT name FROM " . db_prefix("accounts") . " WHERE login='$shortname'";
 | 
						|
				$result = db_query($sql);
 | 
						|
				if (db_num_rows($result)>0){
 | 
						|
					output("`\$Error`^: Someone is already known by that name in this realm, please try again.");
 | 
						|
					$op="";
 | 
						|
				}else{
 | 
						|
					$sex = (int)httppost('sex');
 | 
						|
					// Inserted the following line to prevent hacking
 | 
						|
					// Reported by Eliwood
 | 
						|
					if ($sex <> SEX_MALE) $sex = SEX_FEMALE;
 | 
						|
					require_once("lib/titles.php");
 | 
						|
					$title = get_dk_title(0, $sex);
 | 
						|
					if (getsetting("requirevalidemail",0)){
 | 
						|
						$emailverification=md5(date("Y-m-d H:i:s").$email);
 | 
						|
					}
 | 
						|
					$refer = httpget('r');
 | 
						|
					if ($refer>""){
 | 
						|
						$sql = "SELECT acctid FROM " . db_prefix("accounts") . " WHERE login='$refer'";
 | 
						|
						$result = db_query($sql);
 | 
						|
						$ref = db_fetch_assoc($result);
 | 
						|
						$referer=$ref['acctid'];
 | 
						|
					}else{
 | 
						|
						$referer=0;
 | 
						|
					}
 | 
						|
					$dbpass = "";
 | 
						|
					if (substr($pass1, 0, 5) == "!md5!") {
 | 
						|
						$dbpass = md5(substr($pass1, 5));
 | 
						|
					} else {
 | 
						|
						$dbpass = md5(md5($pass1));
 | 
						|
					}
 | 
						|
					$sql = "INSERT INTO " . db_prefix("accounts") . "
 | 
						|
						(name, superuser, title, password, sex, login, laston, uniqueid, lastip, gold, emailaddress, emailvalidation, referer, regdate)
 | 
						|
						VALUES
 | 
						|
						('$title $shortname', '".getsetting("defaultsuperuser",0)."', '$title', '$dbpass', '$sex', '$shortname', '".date("Y-m-d H:i:s",strtotime("-1 day"))."', '".$_COOKIE['lgi']."', '".$_SERVER['REMOTE_ADDR']."', ".getsetting("newplayerstartgold",50).", '$email', '$emailverification', '$referer', NOW())";
 | 
						|
					db_query($sql);
 | 
						|
					if (db_affected_rows(LINK)<=0){
 | 
						|
						output("`\$Error`^: Your account was not created for an unknown reason, please try again. ");
 | 
						|
					}else{
 | 
						|
						$sql = "SELECT acctid FROM " . db_prefix("accounts") . " WHERE login='$shortname'";
 | 
						|
						$result = db_query($sql);
 | 
						|
						$row = db_fetch_assoc($result);
 | 
						|
						$args = httpallpost();
 | 
						|
						$args['acctid'] = $row['acctid'];
 | 
						|
						//insert output
 | 
						|
						$sql_output = "INSERT INTO " . db_prefix("accounts_output") . " VALUES ({$row['acctid']},'');";
 | 
						|
						db_query($sql_output);
 | 
						|
						//end
 | 
						|
						modulehook("process-create", $args);
 | 
						|
						if ($emailverification!=""){
 | 
						|
							$subj = translate_mail("LoGD Account Verification",0);
 | 
						|
							 $msg = translate_mail(array("Login name: %s `n`nIn order to verify your account, you will need to click on the link below.`n`n http://%s?op=val&id=%s `n`nThanks for playing!",$shortname,
 | 
						|
								($_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT'] == 80?"":":".$_SERVER['SERVER_PORT']).$_SERVER['SCRIPT_NAME']),
 | 
						|
								$emailverification),
 | 
						|
								0);
 | 
						|
							mail($email,$subj,str_replace("`n","\n",$msg),"From: ".getsetting("gameadminemail","postmaster@localhost.com"));
 | 
						|
							output("`4An email was sent to `\$%s`4 to validate your address.  Click the link in the email to activate your account.`0`n`n", $email);
 | 
						|
						}else{
 | 
						|
							rawoutput("<form action='login.php' method='POST'>");
 | 
						|
							rawoutput("<input name='name' value=\"$shortname\" type='hidden'>");
 | 
						|
							rawoutput("<input name='password' value=\"$pass1\" type='hidden'>");
 | 
						|
							output("Your account was created, your login name is `^%s`0.`n`n", $shortname);
 | 
						|
							$click = translate_inline("Click here to log in");
 | 
						|
							rawoutput("<input type='submit' class='button' value='$click'>");
 | 
						|
							rawoutput("</form>");
 | 
						|
							output_notl("`n");
 | 
						|
							if ($trash > 0) {
 | 
						|
								output("`^Characters that have never been logged into will be deleted after %s day(s) of no activity.`n`0", $trash);
 | 
						|
							}
 | 
						|
							if ($new > 0) {
 | 
						|
								output("`^Characters that have never reached level 2 will be deleted after %s days of no activity.`n`0",$new);
 | 
						|
							}
 | 
						|
							if ($old > 0) {
 | 
						|
								output("`^Characters that have reached level 2 at least once will be deleted after %s days of no activity.`n`0", $old);
 | 
						|
							}
 | 
						|
							savesetting("newestplayer", $row['acctid']);
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}else{
 | 
						|
				output("`\$Error`^:`n%s", $msg);
 | 
						|
				$op="";
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if ($op==""){
 | 
						|
		output("`&`c`bCreate a Character`b`c`0");
 | 
						|
		$refer=httpget('r');
 | 
						|
		if ($refer) $refer = "&r=".htmlentities($refer, ENT_COMPAT, getsetting("charset", "ISO-8859-1"));
 | 
						|
 | 
						|
		rawoutput("<script language='JavaScript' src='lib/md5.js'></script>");
 | 
						|
		rawoutput("<script language='JavaScript'>
 | 
						|
		<!--
 | 
						|
		function md5pass(){
 | 
						|
			// encode passwords
 | 
						|
			var plen = document.getElementById('passlen');
 | 
						|
			var pass1 = document.getElementById('pass1');
 | 
						|
			plen.value = pass1.value.length;
 | 
						|
 | 
						|
			if(pass1.value.substring(0, 5) != '!md5!') {
 | 
						|
				pass1.value = '!md5!'+hex_md5(pass1.value);
 | 
						|
			}
 | 
						|
			var pass2 = document.getElementById('pass2');
 | 
						|
			if(pass2.value.substring(0, 5) != '!md5!') {
 | 
						|
				pass2.value = '!md5!'+hex_md5(pass2.value);
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
		//-->
 | 
						|
		</script>");
 | 
						|
		rawoutput("<form action=\"create.php?op=create$refer\" method='POST' onSubmit=\"md5pass();\">");
 | 
						|
		// this is the first thing a new player will se, so let's make it look
 | 
						|
		// better
 | 
						|
		rawoutput("<input type='hidden' name='passlen' id='passlen' value='0'>");
 | 
						|
		rawoutput("<table><tr valign='top'><td>");
 | 
						|
		output("How will you be known to this world? ");
 | 
						|
		rawoutput("</td><td><input name='name'></td></tr><tr valign='top'><td>");
 | 
						|
		output("Enter a password: ");
 | 
						|
		rawoutput("</td><td><input type='password' name='pass1' id='pass1'></td></tr><tr valign='top'><td>");
 | 
						|
		output("Re-enter it for confirmation: ");
 | 
						|
		rawoutput("</td><td><input type='password' name='pass2' id='pass2'></td></tr><tr valign='top'><td>");
 | 
						|
		output("Enter your email address: ");
 | 
						|
		$r1 = translate_inline("`^(optional -- however, if you choose not to enter one, there will be no way that you can reset your password if you forget it!)`0");
 | 
						|
		$r2 = translate_inline("`\$(required)`0");
 | 
						|
		$r3 = translate_inline("`\$(required, an email will be sent to this address to verify it before you can log in)`0");
 | 
						|
		if (getsetting("requireemail", 0) == 0) {
 | 
						|
			$req = $r1;
 | 
						|
		} elseif (getsetting("requirevalidemail", 0) == 0) {
 | 
						|
			$req = $r2;
 | 
						|
		} else {
 | 
						|
			$req = $r3;
 | 
						|
		}
 | 
						|
		rawoutput("</td><td><input name='email'>");
 | 
						|
		output_notl("%s", $req);
 | 
						|
		rawoutput("</td></tr></table>");
 | 
						|
		output("`nAnd are you a %s Female or a %s Male?`n",
 | 
						|
				"<input type='radio' name='sex' value='1'>",
 | 
						|
				"<input type='radio' name='sex' value='0' checked>",true);
 | 
						|
		modulehook("create-form");
 | 
						|
		$createbutton = translate_inline("Create your character");
 | 
						|
		rawoutput("<input type='submit' class='button' value='$createbutton'>");
 | 
						|
		output_notl("`n`n");
 | 
						|
		if ($trash > 0) {
 | 
						|
			output("`^Characters that have never been logged into will be deleted after %s day(s) of no activity.`n`0", $trash);
 | 
						|
		}
 | 
						|
		if ($new > 0) {
 | 
						|
			output("`^Characters that have never reached level 2 will be deleted after %s days of no activity.`n`0",$new);
 | 
						|
		}
 | 
						|
		if ($old > 0) {
 | 
						|
			output("`^Characters that have reached level 2 at least once will be deleted after %s days of no activity.`n`0", $old);
 | 
						|
		}
 | 
						|
		rawoutput("</form>");
 | 
						|
	}
 | 
						|
}
 | 
						|
addnav("Login","index.php");
 | 
						|
page_footer();
 | 
						|
?>
 |