mirror of
https://github.com/gabrielkheisa/tugas-pjpb.git
synced 2024-11-23 12:03:15 +07:00
first
This commit is contained in:
parent
efc709d079
commit
ad3f499895
27
README.md
27
README.md
@ -1 +1,28 @@
|
||||
<h1>Tugas Kelompok PJPB - Smart Contracts</h1>
|
||||
|
||||
<h2>Anggota kelompok</h2>
|
||||
|
||||
<ul>
|
||||
<li>Arina Salma Salsabila (20/459170/PA/19831)</li>
|
||||
<li>Gabriel Possenti Kheisa Drianasta (19/442374/PA/19123)</li>
|
||||
<li>Gregorius Adi Pradana (20/455382/PA/19597)</li>
|
||||
<li>Haikal Abdurrahman (19/445563/PA/19387)</li>
|
||||
<li>Timothy Cleytus Gultom (20/455390/PA/19605)</li>
|
||||
</ul>
|
||||
|
||||
<h2>Teknologi</h2>
|
||||
|
||||
<ul>
|
||||
<li>Back end: PHP 7.2 (vanilla)</li>
|
||||
<li>Database: MySQL</li>
|
||||
<li>Hosting: DigitalOcean</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>URL frontend: <a href-"https://testapp.pjpb.gabrielkheisa.xyz/login.php">https://testapp.pjpb.gabrielkheisa.xyz/login.php</a><h2>
|
||||
|
||||
<h2>Video demonstrasi dan penjelasan: <a href="https://drive.google.com/drive/u/1/folders/1L0w71TZnqa41XFDGfoZ3mM8ILZQeZeXE">https://drive.google.com/drive/u/1/folders/1L0w71TZnqa41XFDGfoZ3mM8ILZQeZeXE</a></h2>
|
||||
|
||||
|
||||
|
||||
|
||||
|
16
config.php
Normal file
16
config.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/* Database credentials. Assuming you are running MySQL
|
||||
server with default setting (user 'root' with no password) */
|
||||
define('DB_SERVER', '');
|
||||
define('DB_USERNAME', '');
|
||||
define('DB_PASSWORD', '');
|
||||
define('DB_NAME', '');
|
||||
|
||||
/* Attempt to connect to MySQL database */
|
||||
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
|
||||
|
||||
// Check connection
|
||||
if($link === false){
|
||||
die("ERROR: Could not connect. " . mysqli_connect_error());
|
||||
}
|
||||
?>
|
156
login.php
Normal file
156
login.php
Normal file
@ -0,0 +1,156 @@
|
||||
<?php
|
||||
// Initialize the session
|
||||
session_start();
|
||||
|
||||
// Check if the user is already logged in, if yes then redirect him to welcome page
|
||||
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
|
||||
header("location: welcome.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Include config file
|
||||
require_once "config.php";
|
||||
|
||||
// Define variables and initialize with empty values
|
||||
$username = $password = "";
|
||||
$username_err = $password_err = $login_err = "";
|
||||
|
||||
// Processing form data when form is submitted
|
||||
if($_SERVER["REQUEST_METHOD"] == "POST"){
|
||||
|
||||
// Check if username is empty
|
||||
if(empty(trim($_POST["username"]))){
|
||||
$username_err = "Please enter username.";
|
||||
} else{
|
||||
$username = trim($_POST["username"]);
|
||||
}
|
||||
|
||||
// Check if password is empty
|
||||
if(empty(trim($_POST["password"]))){
|
||||
$password_err = "Please enter your password.";
|
||||
} else{
|
||||
$password = trim($_POST["password"]);
|
||||
}
|
||||
|
||||
// Validate credentials
|
||||
if(empty($username_err) && empty($password_err)){
|
||||
// Prepare a select statement
|
||||
$sql = "SELECT id, username, password, role, hash FROM user_pjpb WHERE username = ?";
|
||||
|
||||
if($stmt = mysqli_prepare($link, $sql)){
|
||||
// Bind variables to the prepared statement as parameters
|
||||
mysqli_stmt_bind_param($stmt, "s", $param_username);
|
||||
|
||||
// Set parameters
|
||||
$param_username = $username;
|
||||
|
||||
// Attempt to execute the prepared statement
|
||||
if(mysqli_stmt_execute($stmt)){
|
||||
// Store result
|
||||
mysqli_stmt_store_result($stmt);
|
||||
|
||||
// Check if username exists, if yes then verify password
|
||||
if(mysqli_stmt_num_rows($stmt) == 1){
|
||||
// Bind result variables
|
||||
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password, $role, $hash);
|
||||
if(mysqli_stmt_fetch($stmt)){
|
||||
if(password_verify($password, $hashed_password)){
|
||||
// Password is correct, so start a new session
|
||||
session_start();
|
||||
|
||||
// Store data in session variables
|
||||
$_SESSION["loggedin"] = true;
|
||||
$_SESSION["id"] = $id;
|
||||
$_SESSION["username"] = $username;
|
||||
$_SESSION["role"] = $role;
|
||||
$_SESSION["hash"] = $hash;
|
||||
|
||||
// Redirect user to welcome page
|
||||
header("location: welcome.php");
|
||||
} else{
|
||||
// Password is not valid, display a generic error message
|
||||
$login_err = "Invalid username or password.";
|
||||
}
|
||||
}
|
||||
} else{
|
||||
// Username doesn't exist, display a generic error message
|
||||
$login_err = "Invalid username or password.";
|
||||
}
|
||||
} else{
|
||||
echo "Oops! Something went wrong. Please try again later.";
|
||||
}
|
||||
|
||||
// Close statement
|
||||
mysqli_stmt_close($stmt);
|
||||
}
|
||||
}
|
||||
|
||||
// Close connection
|
||||
mysqli_close($link);
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Login</title>
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
||||
<style>
|
||||
body{ font: 14px sans-serif; }
|
||||
.wrapper{ padding: 20px;
|
||||
max-width:1200px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
body {
|
||||
|
||||
font-size: 5em;
|
||||
}
|
||||
h2 {
|
||||
font-size: 2em;
|
||||
}
|
||||
.wrapper {
|
||||
}
|
||||
.form-control {
|
||||
|
||||
font-size: 1em;
|
||||
}
|
||||
.btn {
|
||||
font-size: 0.8em;
|
||||
height: 2em;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<h2>Login</h2>
|
||||
<p>Please fill in your credentials to login.</p><br>
|
||||
|
||||
<?php
|
||||
if(!empty($login_err)){
|
||||
echo '<div class="alert alert-danger">' . $login_err . '</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
|
||||
<div class="form-group">
|
||||
<label>Username</label>
|
||||
<input type="text" name="username" class="form-control <?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $username; ?>">
|
||||
<span class="invalid-feedback"><?php echo $username_err; ?></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Password</label>
|
||||
<input type="password" name="password" class="form-control <?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?>">
|
||||
<span class="invalid-feedback"><?php echo $password_err; ?></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="submit" class="btn btn-primary" value="Login">
|
||||
</div>
|
||||
<br>
|
||||
<p>Don't have an account? <a href="register.php">Sign up now</a>.</p>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
14
logout.php
Normal file
14
logout.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
// Initialize the session
|
||||
session_start();
|
||||
|
||||
// Unset all of the session variables
|
||||
$_SESSION = array();
|
||||
|
||||
// Destroy the session.
|
||||
session_destroy();
|
||||
|
||||
// Redirect to login page
|
||||
header("location: login.php");
|
||||
exit;
|
||||
?>
|
137
register.php
Normal file
137
register.php
Normal file
@ -0,0 +1,137 @@
|
||||
<?php
|
||||
// Include config file
|
||||
require_once "config.php";
|
||||
|
||||
// Define variables and initialize with empty values
|
||||
$username = $password = $confirm_password = "";
|
||||
$username_err = $password_err = $confirm_password_err = "";
|
||||
|
||||
// Processing form data when form is submitted
|
||||
if($_SERVER["REQUEST_METHOD"] == "POST"){
|
||||
|
||||
// Validate username
|
||||
if(empty(trim($_POST["username"]))){
|
||||
$username_err = "Please enter a username.";
|
||||
} elseif(!preg_match('/^[a-zA-Z0-9_]+$/', trim($_POST["username"]))){
|
||||
$username_err = "Username can only contain letters, numbers, and underscores.";
|
||||
} else{
|
||||
// Prepare a select statement
|
||||
$sql = "SELECT id FROM user_pjpb WHERE username = ?";
|
||||
|
||||
if($stmt = mysqli_prepare($link, $sql)){
|
||||
// Bind variables to the prepared statement as parameters
|
||||
mysqli_stmt_bind_param($stmt, "s", $param_username);
|
||||
|
||||
// Set parameters
|
||||
$param_username = trim($_POST["username"]);
|
||||
|
||||
// Attempt to execute the prepared statement
|
||||
if(mysqli_stmt_execute($stmt)){
|
||||
/* store result */
|
||||
mysqli_stmt_store_result($stmt);
|
||||
|
||||
if(mysqli_stmt_num_rows($stmt) == 1){
|
||||
$username_err = "This username is already taken.";
|
||||
} else{
|
||||
$username = trim($_POST["username"]);
|
||||
}
|
||||
} else{
|
||||
echo "Oops! Something went wrong. Please try again later.";
|
||||
}
|
||||
|
||||
// Close statement
|
||||
mysqli_stmt_close($stmt);
|
||||
}
|
||||
}
|
||||
|
||||
// Validate password
|
||||
if(empty(trim($_POST["password"]))){
|
||||
$password_err = "Please enter a password.";
|
||||
} elseif(strlen(trim($_POST["password"])) < 6){
|
||||
$password_err = "Password must have atleast 6 characters.";
|
||||
} else{
|
||||
$password = trim($_POST["password"]);
|
||||
}
|
||||
|
||||
// Validate confirm password
|
||||
if(empty(trim($_POST["confirm_password"]))){
|
||||
$confirm_password_err = "Please confirm password.";
|
||||
} else{
|
||||
$confirm_password = trim($_POST["confirm_password"]);
|
||||
if(empty($password_err) && ($password != $confirm_password)){
|
||||
$confirm_password_err = "Password did not match.";
|
||||
}
|
||||
}
|
||||
|
||||
// Check input errors before inserting in database
|
||||
if(empty($username_err) && empty($password_err) && empty($confirm_password_err)){
|
||||
|
||||
// Prepare an insert statement
|
||||
$sql = "INSERT INTO user_pjpb (username, password) VALUES (?, ?)";
|
||||
|
||||
if($stmt = mysqli_prepare($link, $sql)){
|
||||
// Bind variables to the prepared statement as parameters
|
||||
mysqli_stmt_bind_param($stmt, "ss", $param_username, $param_password);
|
||||
|
||||
// Set parameters
|
||||
$param_username = $username;
|
||||
$param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
|
||||
|
||||
// Attempt to execute the prepared statement
|
||||
if(mysqli_stmt_execute($stmt)){
|
||||
// Redirect to login page
|
||||
header("location: login.php");
|
||||
} else{
|
||||
echo "Oops! Something went wrong. Please try again later.";
|
||||
}
|
||||
|
||||
// Close statement
|
||||
mysqli_stmt_close($stmt);
|
||||
}
|
||||
}
|
||||
|
||||
// Close connection
|
||||
mysqli_close($link);
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Sign Up</title>
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
||||
<style>
|
||||
body{ font: 14px sans-serif; }
|
||||
.wrapper{ width: 360px; padding: 20px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<h2>Sign Up</h2>
|
||||
<p>Please fill this form to create an account.</p>
|
||||
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
|
||||
<div class="form-group">
|
||||
<label>Username</label>
|
||||
<input type="text" name="username" class="form-control <?php echo (!empty($username_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $username; ?>">
|
||||
<span class="invalid-feedback"><?php echo $username_err; ?></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Password</label>
|
||||
<input type="password" name="password" class="form-control <?php echo (!empty($password_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $password; ?>">
|
||||
<span class="invalid-feedback"><?php echo $password_err; ?></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Confirm Password</label>
|
||||
<input type="password" name="confirm_password" class="form-control <?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $confirm_password; ?>">
|
||||
<span class="invalid-feedback"><?php echo $confirm_password_err; ?></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="submit" class="btn btn-primary" value="Submit">
|
||||
<input type="reset" class="btn btn-secondary ml-2" value="Reset">
|
||||
</div>
|
||||
<p>Already have an account? <a href="login.php">Login here</a>.</p>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
106
reset-password.php
Normal file
106
reset-password.php
Normal file
@ -0,0 +1,106 @@
|
||||
<?php
|
||||
// Initialize the session
|
||||
session_start();
|
||||
|
||||
// Check if the user is logged in, otherwise redirect to login page
|
||||
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
|
||||
header("location: login.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Include config file
|
||||
require_once "config.php";
|
||||
|
||||
// Define variables and initialize with empty values
|
||||
$new_password = $confirm_password = "";
|
||||
$new_password_err = $confirm_password_err = "";
|
||||
|
||||
// Processing form data when form is submitted
|
||||
if($_SERVER["REQUEST_METHOD"] == "POST"){
|
||||
|
||||
// Validate new password
|
||||
if(empty(trim($_POST["new_password"]))){
|
||||
$new_password_err = "Please enter the new password.";
|
||||
} elseif(strlen(trim($_POST["new_password"])) < 6){
|
||||
$new_password_err = "Password must have atleast 6 characters.";
|
||||
} else{
|
||||
$new_password = trim($_POST["new_password"]);
|
||||
}
|
||||
|
||||
// Validate confirm password
|
||||
if(empty(trim($_POST["confirm_password"]))){
|
||||
$confirm_password_err = "Please confirm the password.";
|
||||
} else{
|
||||
$confirm_password = trim($_POST["confirm_password"]);
|
||||
if(empty($new_password_err) && ($new_password != $confirm_password)){
|
||||
$confirm_password_err = "Password did not match.";
|
||||
}
|
||||
}
|
||||
|
||||
// Check input errors before updating the database
|
||||
if(empty($new_password_err) && empty($confirm_password_err)){
|
||||
// Prepare an update statement
|
||||
$sql = "UPDATE users SET password = ? WHERE id = ?";
|
||||
|
||||
if($stmt = mysqli_prepare($link, $sql)){
|
||||
// Bind variables to the prepared statement as parameters
|
||||
mysqli_stmt_bind_param($stmt, "si", $param_password, $param_id);
|
||||
|
||||
// Set parameters
|
||||
$param_password = password_hash($new_password, PASSWORD_DEFAULT);
|
||||
$param_id = $_SESSION["id"];
|
||||
|
||||
// Attempt to execute the prepared statement
|
||||
if(mysqli_stmt_execute($stmt)){
|
||||
// Password updated successfully. Destroy the session, and redirect to login page
|
||||
session_destroy();
|
||||
header("location: login.php");
|
||||
exit();
|
||||
} else{
|
||||
echo "Oops! Something went wrong. Please try again later.";
|
||||
}
|
||||
|
||||
// Close statement
|
||||
mysqli_stmt_close($stmt);
|
||||
}
|
||||
}
|
||||
|
||||
// Close connection
|
||||
mysqli_close($link);
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Reset Password</title>
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
||||
<style>
|
||||
body{ font: 14px sans-serif; }
|
||||
.wrapper{ width: 360px; padding: 20px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<h2>Reset Password</h2>
|
||||
<p>Please fill out this form to reset your password.</p>
|
||||
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
|
||||
<div class="form-group">
|
||||
<label>New Password</label>
|
||||
<input type="password" name="new_password" class="form-control <?php echo (!empty($new_password_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $new_password; ?>">
|
||||
<span class="invalid-feedback"><?php echo $new_password_err; ?></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Confirm Password</label>
|
||||
<input type="password" name="confirm_password" class="form-control <?php echo (!empty($confirm_password_err)) ? 'is-invalid' : ''; ?>">
|
||||
<span class="invalid-feedback"><?php echo $confirm_password_err; ?></span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="submit" class="btn btn-primary" value="Submit">
|
||||
<a class="btn btn-link ml-2" href="welcome.php">Cancel</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
133
welcome.php
Normal file
133
welcome.php
Normal file
@ -0,0 +1,133 @@
|
||||
<?php
|
||||
// Initialize the session
|
||||
session_start();
|
||||
$checkURL = "https://ropsten.etherscan.io/tx/". htmlspecialchars($_SESSION["hash"]);
|
||||
|
||||
// Check if the user is logged in, if not then redirect him to login page
|
||||
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
|
||||
header("location: login.php");
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Welcome</title>
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
||||
<style>
|
||||
body{ font: 14px sans-serif; text-align: center; }
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
body {
|
||||
text-align: left;
|
||||
font-size: 4em;
|
||||
margin-left:5% !important;
|
||||
|
||||
}
|
||||
h2 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
h1 {
|
||||
font-size: 1.5em;
|
||||
|
||||
}
|
||||
.wrapper {
|
||||
max-width:1200px;
|
||||
}
|
||||
.form-control {
|
||||
|
||||
font-size: 1em;
|
||||
}
|
||||
.btn {
|
||||
font-size: 1.1em;
|
||||
height: 2.2em;
|
||||
text-align: center;
|
||||
}
|
||||
td {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
.tabel {
|
||||
overflow-x: auto !important;
|
||||
}
|
||||
.ov {
|
||||
overflow-x: auto !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
|
||||
<h1 class="my-5">Hi, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Welcome to our site.</h1>
|
||||
<h2 class="my-5">Your role is <b><?php echo htmlspecialchars($_SESSION["role"]); ?></b>.</h2>
|
||||
<h2 class="my-5 ov">Your certificate hash is <?php echo "<a href=\"$checkURL\">";?><b><?php echo htmlspecialchars($_SESSION["hash"]); ?></b></a>.</h2>
|
||||
<h2 class="my-5 ov">Download certificate here : <b><?php echo htmlspecialchars($_SESSION["hash"]); ?></b>.</h2>
|
||||
|
||||
<?php
|
||||
if($_SESSION["role"] == "Admin"){
|
||||
|
||||
echo "<div class=\"tabel\"><table class=\"\" style='margin-left: auto; margin-right: auto;'>";
|
||||
echo "<tr><th>Username</th><th>Role</th><th>Certificate hash</th></tr>";
|
||||
|
||||
class TableRows extends RecursiveIteratorIterator {
|
||||
function __construct($it) {
|
||||
parent::__construct($it, self::LEAVES_ONLY);
|
||||
}
|
||||
|
||||
function current() {
|
||||
return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
|
||||
}
|
||||
|
||||
function beginChildren() {
|
||||
echo "<tr>";
|
||||
}
|
||||
|
||||
function endChildren() {
|
||||
echo "</tr>" . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Include config file
|
||||
require_once "config.php";
|
||||
|
||||
$servername = DB_SERVER;
|
||||
$dbname = DB_USERNAME;
|
||||
$username = DB_PASSWORD;
|
||||
$password = DB_NAME;
|
||||
|
||||
try {
|
||||
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
|
||||
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
$stmt = $conn->prepare("SELECT username, role, hash FROM user_pjpb");
|
||||
$stmt->execute();
|
||||
|
||||
// set the resulting array to associative
|
||||
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
|
||||
|
||||
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
|
||||
echo $v;
|
||||
}
|
||||
}
|
||||
catch(PDOException $e) {
|
||||
echo "Error: " . $e->getMessage();
|
||||
}
|
||||
$conn = null;
|
||||
echo "</table></div><br><br>";
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<p>
|
||||
<a href="reset-password.php" class="btn btn-warning ml-5">Reset Your Password</a><br><br>
|
||||
<a href="logout.php" class="btn btn-danger ml-5">Sign Out of Your Account</a>
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user