Show sourcecode
The following files exists in this folder. Click to view.
webbsrvprg/exercises/slutprojekt/
actions.php
administer_users.php
create_code.php
database_include.php
dbconnection.php
index.php
login copy.php
login.php
main.php
password_renewals.php
play copy.php
play.php
setup.php
sign_up.php
statistics.php
verification.php
verify_mail.php
password_renewals.php
118 lines UTF-8 Windows (CRLF)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
<?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
include("database_include.php");
/** @var DBActions $dbActions */
// $db_actions är ett objekt med metoder som låter sidan interagera med databasen.
try {
// include("dbconnection.php"); I alla andra sidor är denna inkluderad men den bör egentligen ligga i database_include som jag gör här
// /** @var PDO $dbconn */
if(isset($_GET["code"])){
// Man har tagit emot en verifiering
// Rensar ut gamla förfrågningar ur tabellen.
// $dbconn->exec("DELETE FROM bs_password_renewals WHERE time_sent < NOW() - INTERVAL 15 MINUTE");
$dbActions->DltOldPswrdRenewals();
$user_id = $_GET["user_id"];
$code = $_GET["code"];
$info = $dbActions->SelectPswrdRenewals($user_id, $code);
if (!$info){
// Om lösenordsändringen ej hittades
$link = "https://labb.vgy.se/~harmol23/webbsrvprg/exercises/slutprojekt/password_renewals.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"];
$dbActions->UpdatePswrd($new_password, $user_id);
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);
$info = $dbActions->SelectUserIdAndMail($identifyer);
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
$dbActions->CreatePswrdRenewal($user_id, $code, $hashed_password); // Är nu redo att verifieras. Ej bytt ännu.
$link = "https://labb.vgy.se/~harmol23/webbsrvprg/exercises/slutprojekt/password_renewals.php?user_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>