building out site
This commit is contained in:
parent
948b481bca
commit
d9db0eafac
9 changed files with 249 additions and 68 deletions
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>monotreme.org</title>
|
<title>About Us - monotreme.org</title>
|
||||||
<link rel="stylesheet" href="../styles.css">
|
<link rel="stylesheet" href="../styles.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>monotreme.org</title>
|
<title>blog - monotreme.org</title>
|
||||||
<link rel="stylesheet" href="../styles.css">
|
<link rel="stylesheet" href="../styles.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>monotreme.org</title>
|
<title>Contact us! - monotreme.org</title>
|
||||||
<link rel="stylesheet" href="../styles.css">
|
<link rel="stylesheet" href="../styles.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
56
login/forgot/index.html
Normal file
56
login/forgot/index.html
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Forgot Password - monotreme.org</title>
|
||||||
|
<link rel="stylesheet" href="../../styles.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<table>
|
||||||
|
<!-- Header -->
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="header">
|
||||||
|
<h1>Forgot Password</h1>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Main Content and Sidebar -->
|
||||||
|
<tr>
|
||||||
|
<!-- Sidebar -->
|
||||||
|
<td class="sidebar">
|
||||||
|
<p><strong>Quick Links</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/platypus/">The Noble Platypus</a></li>
|
||||||
|
<li><a href="/echidna/">The Royal Echidna</a></li>
|
||||||
|
<li><a href="/monotremes/">About Monotremes</a></li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Main Content Area -->
|
||||||
|
<td class="content">
|
||||||
|
<h2>Reset your password</h2>
|
||||||
|
<!-- Forgot Password Form -->
|
||||||
|
<div class="forgot-password">
|
||||||
|
<form action="/cgi-bin/forgot_password.cgi" method="post">
|
||||||
|
<label for="username">Username:</label>
|
||||||
|
<input type="text" id="username" name="username" required>
|
||||||
|
<br>
|
||||||
|
<label for="email">Email:</label>
|
||||||
|
<input type="email" id="email" name="email" required>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Reset Password">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="footer">
|
||||||
|
<p>© 2024 monotreme.org</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,12 +1,12 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>monotreme.org</title>
|
<title>monotreme.org</title>
|
||||||
<link rel="stylesheet" href="../styles.css">
|
<link rel="stylesheet" href="../styles.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<table>
|
<table>
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -51,6 +51,10 @@
|
||||||
<br>
|
<br>
|
||||||
<input type="submit" value="Login">
|
<input type="submit" value="Login">
|
||||||
</form>
|
</form>
|
||||||
|
<div class="controls">
|
||||||
|
<a href="/login/register/">Register</a>
|
||||||
|
<a href="/login/forgot/">Forgot <br />Password</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<img src="../echidna.png" alt="echidna">
|
<img src="../echidna.png" alt="echidna">
|
||||||
|
@ -65,5 +69,5 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
61
login/register/index.html
Normal file
61
login/register/index.html
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Register - monotreme.org</title>
|
||||||
|
<link rel="stylesheet" href="../../styles.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<table>
|
||||||
|
<!-- Header -->
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="header">
|
||||||
|
<h1>Register an account</h1>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Main Content and Sidebar -->
|
||||||
|
<tr>
|
||||||
|
<!-- Sidebar -->
|
||||||
|
<td class="sidebar">
|
||||||
|
<p><strong>Quick Links</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="/platypus/">The Noble Platypus</a></li>
|
||||||
|
<li><a href="/echidna/">The Royal Echidna</a></li>
|
||||||
|
<li><a href="/monotremes/">About Monotremes</a></li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<!-- Main Content Area -->
|
||||||
|
<td class="content">
|
||||||
|
<h2>Create a new account</h2>
|
||||||
|
<!-- Register Form -->
|
||||||
|
<div class="register">
|
||||||
|
<form action="/cgi-bin/register.cgi" method="post">
|
||||||
|
<label for="username">Username:</label>
|
||||||
|
<input type="text" id="username" name="username" required>
|
||||||
|
<br>
|
||||||
|
<label for="password">Password:</label>
|
||||||
|
<input type="password" id="password" name="password" required>
|
||||||
|
<br>
|
||||||
|
<label for="confirm_password">Confirm Password:</label>
|
||||||
|
<input type="password" id="confirm_password" name="confirm_password" required>
|
||||||
|
<br>
|
||||||
|
<label for="email">Email:</label>
|
||||||
|
<input type="email" id="email" name="email" required>
|
||||||
|
<input type="submit" value="Register">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="footer">
|
||||||
|
<p>© 2024 monotreme.org</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>monotreme.org</title>
|
<title>About the monotremes - monotreme.org</title>
|
||||||
<link rel="stylesheet" href="../styles.css">
|
<link rel="stylesheet" href="../styles.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
48
scripts/login.cgi
Normal file
48
scripts/login.cgi
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import sqlite3
|
||||||
|
import hashlib
|
||||||
|
import cgi
|
||||||
|
import os
|
||||||
|
import http.cookies
|
||||||
|
|
||||||
|
# Get form data
|
||||||
|
form = cgi.FieldStorage()
|
||||||
|
username = form.getvalue('username')
|
||||||
|
password = form.getvalue('password')
|
||||||
|
|
||||||
|
# Connect to SQLite and check credentials
|
||||||
|
db = sqlite3.connect('/var/lib/monotreme/data/monotreme.db')
|
||||||
|
cursor = db.cursor()
|
||||||
|
|
||||||
|
# Fetch the user's stored hashed password
|
||||||
|
cursor.execute("SELECT password_hash FROM users WHERE username=?", (username,))
|
||||||
|
result = cursor.fetchone()
|
||||||
|
|
||||||
|
if result:
|
||||||
|
stored_password_hash = result[0]
|
||||||
|
# Hash the entered password and compare it
|
||||||
|
entered_password_hash = hashlib.sha256(password.encode()).hexdigest()
|
||||||
|
|
||||||
|
if entered_password_hash == stored_password_hash:
|
||||||
|
# Create a session (a simple token could be enough for now)
|
||||||
|
session_token = hashlib.sha256(os.urandom(32)).hexdigest()
|
||||||
|
# Set the session cookie
|
||||||
|
print("Content-Type: text/html")
|
||||||
|
print(f"Set-Cookie: session_id={session_token}; Path=/; HttpOnly")
|
||||||
|
print()
|
||||||
|
|
||||||
|
# Show success message or redirect to user panel
|
||||||
|
print("<h1>Login successful!</h1>")
|
||||||
|
print("<a href='/user_panel/'>Go to your dashboard</a>")
|
||||||
|
else:
|
||||||
|
print("Content-Type: text/html")
|
||||||
|
print()
|
||||||
|
print("<h1>Invalid username or password</h1>")
|
||||||
|
else:
|
||||||
|
print("Content-Type: text/html")
|
||||||
|
print()
|
||||||
|
print("<h1>Invalid username or password</h1>")
|
||||||
|
|
||||||
|
# Close the database connection
|
||||||
|
db.close()
|
12
styles.css
12
styles.css
|
@ -104,6 +104,18 @@ body {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controls a {
|
||||||
|
color: #4682b4; /* Steel blue */
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
input[type="submit"] {
|
input[type="submit"] {
|
||||||
width: auto;
|
width: auto;
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
|
|
Loading…
Reference in a new issue