Show sourcecode
The following files exists in this folder. Click to view.
webbsrvprg/exercises/slutprojekt/
actions.php
administer_users.php
create_code.php
index.php
login copy.php
login.php
main.php
password_renewals.php
setup.php
sign_up.php
verification.php
verify_mail.php
password_renewals.php
126 lines UTF-8 Windows (CRLF)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Byt lösenord</title>
<style>
fieldset {
margin: 5px;
padding: 5px;
border: 2px solid black;
}
#show_password {
width: 10em;
border: 1px solid gray;
background-color: lightgray;
}
* {
box-sizing: border-box;
}
</style>
</head>
<body>
<?php
/** @var PDO $dbconn */
try {
include("../databaser/dbconnection.php");
if(isset($_GET["code"])){
// Man har tagit emot en verifiering
// Rensar ut gamla förfrågningar ur tabellen.
$sql = "DELETE FROM bs_password_renewals WHERE time_sent < NOW() - INTERVAL 15 MINUTE";
$user_id = $_GET["user_id"];
$code = $_GET["code"];
$sql = "SELECT * FROM bs_password_renewals WHERE user_id = ? AND code = ?";
$stmt = $dbconn->prepare($sql);
$data = [$user_id, $code];
$stmt->execute($data);
$info = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$info){
// Om lösenordsändringen ej hittades
$link = "https://labb.vgy.se/~harmol23/webbsrvprg/exercises/slutprojekt/password_renewal.php;";
echo("Något gick fel. Möjligen tog du för lång tid på dig.<br>");
echo('<a href="' . $link . '">Försök igen/a><br>');
exit(); // Slutar köra PHPn
}
// Kommer man förbi här så har ens lösenordsbyte hittats
$new_password = $info["password"];
$sql = "UPDATE bs_users SET password = ? WHERE id = ?";
$stmt = $dbconn->prepare($sql);
$data = [$new_password, $user_id];
$stmt->execute($data); // Nu läggs det nya lösenordet in.
echo("Ditt lösenord är bytt");
} else if (isset($_POST["identifyer"])) {
// Man ska skicka en verifiering
$identifyer = $_POST["identifyer"];
$password = $_POST["password"];
$hashed_password = $password_hash($password, PASSWORD_DEFAULT);
$sql = "SELECT id, mail FROM bs_users WHERE username = ? OR mail = ?";
$stmt = $dbconn->prepare($sql);
$data = [$identifyer, $identifyer];
$stmt->execute($data);
$info = $stmt->fetch(PDO::FETCH_ASSOC);
if ($info){
// Om man angett korrekt information så bör ett resultat komma.
$mail = $info["mail"]; // Oavsett om man redan hade angett mejl. Lättast så här.
$user_id = $info["id"];
include("create_code.php"); // Skapar en fin lång kod
$sql = "INSERT INTO bs_password_renewals user_id, code, password values(?,?,?)";
$stmt = $dbconn->prepare($sql);
$data = [$user_id, $code, $hashed_password];
$stmt->execute($data); // Är nu redo att verifieras. Ej bytt ännu.
$link = "https://labb.vgy.se/~harmol23/webbsrvprg/exercises/slutprojekt/password_renewal.php?id=" . $user_id . "&code=" . $code;
mail($mail, "Losenordsandring", "Här kommer din länk för att ändra lösenord. Det nya lösenordet är redan satt. Om du inte har bytt lösenord bör du inte klicka på länken. Du har 15 minuter på dig att svara. $link");
}
echo("Om denna användare finns så har den fått ett mejl för att bekräfta lösenordsändringen");
} else {
// Om ett formulär inte skickats in så presenteras ett.
echo ('
<form method="POST">
<fieldset>
<input type="text" name="identifyer" id="identifyer" required><label for="identifyer">Användarnamn eller e-post</label><br>
<input type="password" name="password" id="password" required maxlength="200" minlength="8"><label for="password">Nytt lösenord</label><br>
<button type="submit">Byt lösenord</button>
</fieldset>
</form>
<script>
const show_pass_btn = document.getElementById("show_password");
const password_input = document.getElementById("password");
show_pass_btn.addEventListener("mouseover", function() {
password_input.type = "text";
})
show_pass_btn.addEventListener("mouseleave", function() {
password_input.type = "password";
})
</script>'
);
}
} catch (PDOException $e) {
echo ($e->getMessage());
}
?>
</body>
</html>