67 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
|     const MESSAGE = 'Hallo %%NAME%%,<br/><br/>wir haben soeben eine Anfrage zur Zurücksetzung des Passworts für deinen 4Creative-Account erhalten.<br/><br/>Klicke <a href="%%RESET_LINK%%">hier</a>, um ein neues Passwort festzulegen. Dieser Link läuft in 24 Stunden ab.<br/><br/>Falls du diese Anfrage nicht gesendet hast, ignoriere sie einfach. Bei weiteren Fragen kannst du uns unter info@4creative.net oder per Discord über @ikeytan erreichen.';
 | |
| 
 | |
| 	$HTML = new HTML();
 | |
| 	$HTML->setHTMLTitle("Passwort vergessen");
 | |
| 	$HTML->importHTML("forgot.html");
 | |
| 
 | |
|     if($_SERVER['REQUEST_METHOD'] == 'POST') {
 | |
|         include_once 'app/FormValidator.php';
 | |
| 		$validator = new FormValidator(array(
 | |
| 			'username' => array('required' => true, 'regex' => '/^[^\\/<>\s]{1,64} [^\\/<>\s]{1,64}$/'),
 | |
|             'email' => array('required' => true, 'regex' => '/^\S{1,64}@\S{1,250}.\S{2,64}$/')
 | |
| 		));
 | |
| 		
 | |
| 		if(!$validator->isValid($_POST)) {
 | |
|             $HTML->ReplaceLayoutInhalt('%%MESSAGE%%', 'Bitte gebe deinen Benutzernamen (Vor- und Nachname) und die dazugehörige E-Mail-Adresse ein');
 | |
|             $HTML->ReplaceLayoutInhalt('%%MESSAGECOLOR%%', 'red');
 | |
|         }
 | |
|         else {        
 | |
|             $nameParts = explode(" ", $_POST['username']);
 | |
|             $email = strtolower(trim($_POST['email']));
 | |
| 
 | |
|             $getAccount = $RUNTIME['pdo']->prepare('SELECT Email,FirstName,LastName,PrincipalID FROM UserAccounts WHERE FirstName = ? AND LastName = ? AND Email = ?');
 | |
|             $getAccount->execute([trim($nameParts[0]), trim($nameParts[1]), $email]);
 | |
|             $validRequest = $getAccount->rowCount() == 1;
 | |
|             if($res = $getAccount->fetch()) {
 | |
|                 $email = $res['Email'];
 | |
|                 $uuid = $res['PrincipalID'];
 | |
|                 $name = $res['FirstName'].' '.$res['LastName'];
 | |
|             }
 | |
| 
 | |
|             foreach($blockedDomains as $domain) {
 | |
|                 if(str_ends_with($email, $domain)) {
 | |
|                     $validRequest = false;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             $HTML->ReplaceLayoutInhalt('%%MESSAGE%%', 'Falls Name und E-Mail-Adresse bei uns registriert sind, erhältst du in Kürze eine E-Mail mit weiteren Informationen.');
 | |
|             $HTML->ReplaceLayoutInhalt('%%MESSAGECOLOR%%', 'green');
 | |
|             $HTML->build();
 | |
|             echo $HTML->ausgabe();
 | |
|             fastcgi_finish_request();
 | |
| 
 | |
|             if($validRequest) {
 | |
|                 $getReqTime = $RUNTIME['pdo']->prepare('SELECT RequestTime FROM PasswordResetTokens WHERE PrincipalID=?');
 | |
|                 $getReqTime->execute([$uuid]);
 | |
|                 if(($res = $getReqTime->fetch()) && time() - $res['RequestTime'] < 900) {
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 require_once 'app/utils.php';
 | |
|                 $token = generateToken(32);
 | |
|                 $setToken = $RUNTIME['pdo']->prepare('REPLACE INTO PasswordResetTokens(PrincipalID,Token,RequestTime) VALUES(?,?,?)');
 | |
|                 $setToken->execute([$uuid, $token, time()]);
 | |
| 
 | |
|                 sendMail(str_replace('%%NAME%%', $name, str_replace('%%RESET_LINK%%', 'https://'.$RUNTIME['DOMAIN'].'/index.php?page=reset-password&token='.$token, MESSAGE)), "Zurücksetzung des Passworts für ".$name, 'Dein Passwort zurücksetzen', 'Folge diesen Anweisungen, um ein neues Passwort für deinen 4Creative-Account festzulegen');
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     else {
 | |
|         $HTML->ReplaceLayoutInhalt('%%MESSAGE%%', '');
 | |
|         $HTML->ReplaceLayoutInhalt('%%MESSAGECOLOR%%', 'red');
 | |
|         $HTML->build();
 | |
|         echo $HTML->ausgabe();
 | |
|     }
 | |
| 
 | |
| ?>
 |