false, 'message' => "Environment file not found" ]); exit; } try { $envDir = dirname($envFile); $dotenv = Dotenv::createImmutable($envDir, '.env.pw-encryption-key'); $dotenv->load(); } catch (Throwable $e) { http_response_code(500); echo json_encode([ 'success' => false, 'message' => "Dotenv error" ]); } $password = trim($_POST['password1']); $password2 = trim($_POST['password2']); if ($password === '' || $password2 === '') { return 'Beide Felder müssen ausgefüllt sein'; } if ($password !== $password2) { return 'Beide Passwörter müssen identisch sein'; } $hash = password_hash($password, PASSWORD_ARGON2ID); $iv_length = openssl_cipher_iv_length('aes-256-cbc'); $iv = random_bytes($iv_length); $encrypted = openssl_encrypt( 'SET_BY_OTL', 'aes-256-cbc', $_ENV['PW_ENCRYPTION_KEY'], 0, $iv ); $cipher_store = base64_encode($iv . $encrypted); // update password $updateResult = db_update($mysqli, $tableInternUsers, ['password_hash' => $hash, 'password_cipher' => $cipher_store, 'edited_by' => 'otlogin'], ['id' => $iduser]); if ($updateResult === false) { return 'Passwork konnte nicht neu gesetzt werden'; } // delete the one-time token if (!isset($_SESSION['otl_dbid'])) { return 'Interner Fehler'; } $dbid = intval($_SESSION['otl_dbid']); $stmt = $mysqli->prepare("DELETE FROM $tableOTL WHERE id = ?"); $stmt->bind_param("i", $dbid); if (!$stmt->execute()) { return "DB Error"; } $stmt->close(); $sql = "SELECT freigabe FROM $tableInternUsers WHERE id = ?"; $stmt = $mysqli->prepare($sql); $stmt->bind_param("i", $iduser); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); $freigabe = $row['freigabe']; $stmt->close(); $mysqli->close(); unset($_SESSION['set_new_password_id_user'], $_SESSION['set_new_password_granted'], $_SESSION['otl_dbid']); $freigabenArray = json_decode($freigabe, true) ?? []; $freigabenTypeArray = $freigabenArray['types'] ?? []; if (count($freigabenTypeArray) > 0) { $_SESSION = array(); session_destroy(); session_start(); } foreach ($freigabenTypeArray as $freigabeType){ $_SESSION['access_granted_'.$freigabeType] = true; $_SESSION['passcode'.$freigabeType.'_id'] = $iduser; } if (in_array('wk_leitung', $freigabenTypeArray)) { header("Location: /intern/wk-leitung/logindata"); exit; } elseif (in_array('trainer', $freigabenTypeArray)) { header("Location: /intern/trainer"); exit; } elseif (in_array('kampfrichter', $freigabenTypeArray)) { header("Location: /intern/kampfrichter"); exit; } else { return 'Dieser Benutzer hat keine Berechtigungen.'; } } /* ============================================================ PASSWORD SET ON POST ============================================================ */ if (isset($_POST['password1'], $_POST['password2'], $_POST['setpasswordbtn'], $_POST['user_id'])) { $error = logIn() ?? ''; } /* ============================================================ ONE-TIME-LOGIN VALIDATION (GET) ============================================================ */ $token = "QQa2UMbEYW8oOL7wz9DjtqECVCikSZsDuSdmzxiadEXFsKyujEUyQOW1AYMD2OqU8VXxClIRweRuWLzvBrZpPYL41e89Rs96tM7Lq1KpjA5E2mg2UfgvztheGRV"; require $baseDir .'/../scripts/db/db-verbindung-script-guest.php'; // fetch one-time login record $result = db_select( $guest, $tableOTL, 'id, user_id', 'url = ? AND timestamp >= NOW() - INTERVAL 24 HOUR', [$oturl] ); if (!$result || count($result) !== 1) { http_response_code(403); exit; } $dbid = intval($result[0]['id']); $iduser = intval($result[0]['user_id']); // store dbid for later deletion $_SESSION['otl_dbid'] = $dbid; $tableusers = 'wp_secure_lock'; // fetch user $userinfo = db_select($guest, $tableInternUsers, 'username', 'id = ?', [$iduser]); $guest->close(); if (!$userinfo || count($userinfo) !== 1) { echo 'Ungültige Benutzerinformationen'; exit; } $username = $userinfo[0]['username']; // set session token that grants password reset $_SESSION['set_new_password_id_user'] = $iduser; $_SESSION['set_new_password_granted'] = true; ?> Einmal Login
*/ ?>