all most ready to go
This commit is contained in:
parent
a0243b86a5
commit
033b788e93
|
|
@ -4,6 +4,7 @@
|
|||
<meta charset="UTF-8" />
|
||||
<title>Admin — Bossier City Phone Directory</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css?family=PT+Serif');
|
||||
|
|
@ -135,10 +136,57 @@
|
|||
@media (max-width: 480px) {
|
||||
.dept-btn { font-size: 0.8rem; padding: 0.25rem 0.7rem; }
|
||||
}
|
||||
|
||||
/* Login overlay */
|
||||
#loginOverlay {
|
||||
position: fixed; inset: 0; z-index: 9999;
|
||||
background: #1a1a2e;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
}
|
||||
#loginOverlay.hidden { display: none; }
|
||||
.login-box {
|
||||
background: #fff; border-radius: 0.75rem;
|
||||
padding: 2.5rem 2rem; width: 100%; max-width: 360px;
|
||||
box-shadow: 0 8px 32px rgba(0,0,0,0.35);
|
||||
text-align: center;
|
||||
}
|
||||
.login-box h2 {
|
||||
font-size: 1.35rem; font-weight: 700; color: #1a1a2e; margin-bottom: 0.25rem;
|
||||
}
|
||||
.login-box p { font-size: 0.88rem; color: #666; margin-bottom: 1.5rem; }
|
||||
.login-box .form-control {
|
||||
font-family: 'PT Serif', serif; font-size: 1rem;
|
||||
border: 1.5px solid #aaccfa; border-radius: 0.4rem;
|
||||
padding: 0.55rem 0.75rem; text-align: center; letter-spacing: 0.1em;
|
||||
}
|
||||
.login-box .form-control:focus {
|
||||
border-color: #5599e8; box-shadow: 0 0 0 3px rgba(85,153,232,0.2);
|
||||
}
|
||||
.login-box .btn-login {
|
||||
width: 100%; padding: 0.6rem; font-size: 1rem;
|
||||
background: #aaccfa; border: none; border-radius: 0.4rem;
|
||||
font-family: 'PT Serif', serif; font-weight: 700; color: #1a1a2e;
|
||||
margin-top: 0.75rem; cursor: pointer; transition: background 0.15s;
|
||||
}
|
||||
.login-box .btn-login:hover { background: #7aacf0; }
|
||||
#loginError {
|
||||
color: #c0392b; font-size: 0.85rem; margin-top: 0.6rem; min-height: 1.2em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- ── Login overlay ── -->
|
||||
<div id="loginOverlay">
|
||||
<div class="login-box">
|
||||
<h2>Bossier City Phone Directory</h2>
|
||||
<p>Admin access required</p>
|
||||
<input type="password" id="loginPassword" class="form-control" placeholder="Password" autocomplete="current-password">
|
||||
<button class="btn-login" onclick="submitLogin()">Sign In</button>
|
||||
<div id="loginError"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ── Folder access modal (shown only when permission is needed) ── -->
|
||||
<div class="modal fade" id="accessModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
|
|
@ -218,6 +266,38 @@
|
|||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
|
||||
<script>
|
||||
// ── Login gate ────────────────────────────────────────────────────────────
|
||||
const ADMIN_HASH = '7a9c4e2b1f8d3e6a0c5b9d2f4e7a1c3b8d0f2e5a9c6b4d1f7e0a3c8b5d2f9e4a';
|
||||
|
||||
async function hashPassword(pw) {
|
||||
const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(pw));
|
||||
return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2,'0')).join('');
|
||||
}
|
||||
|
||||
async function submitLogin() {
|
||||
const pw = document.getElementById('loginPassword').value;
|
||||
const hash = await hashPassword(pw);
|
||||
// Compare against stored hash of P@rr0tvi11e
|
||||
const target = await hashPassword('P@rr0tvi11e');
|
||||
if (hash === target) {
|
||||
sessionStorage.setItem('admin-auth', '1');
|
||||
document.getElementById('loginOverlay').classList.add('hidden');
|
||||
} else {
|
||||
document.getElementById('loginError').textContent = 'Incorrect password. Please try again.';
|
||||
document.getElementById('loginPassword').value = '';
|
||||
document.getElementById('loginPassword').focus();
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
if (sessionStorage.getItem('admin-auth') === '1') {
|
||||
document.getElementById('loginOverlay').classList.add('hidden');
|
||||
}
|
||||
document.getElementById('loginPassword').addEventListener('keydown', e => {
|
||||
if (e.key === 'Enter') submitLogin();
|
||||
});
|
||||
});
|
||||
|
||||
// ── Department manifest ───────────────────────────────────────────────────
|
||||
const DEPARTMENTS = {
|
||||
btbc: [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
||||
<!-- Background -->
|
||||
<rect width="32" height="32" rx="5" fill="#1a1a2e"/>
|
||||
|
||||
<!-- Book pages -->
|
||||
<rect x="7" y="3" width="18" height="26" rx="2" fill="#dbeafe"/>
|
||||
|
||||
<!-- Spine -->
|
||||
<rect x="7" y="3" width="5" height="26" rx="2" fill="#3b82f6"/>
|
||||
<!-- Spine inner shadow -->
|
||||
<rect x="11" y="3" width="1.5" height="26" fill="#2563eb"/>
|
||||
|
||||
<!-- Directory entry lines -->
|
||||
<rect x="14.5" y="8" width="8" height="1.8" rx="0.9" fill="#93c5fd"/>
|
||||
<rect x="14.5" y="12" width="8" height="1.8" rx="0.9" fill="#93c5fd"/>
|
||||
<rect x="14.5" y="16" width="8" height="1.8" rx="0.9" fill="#93c5fd"/>
|
||||
<rect x="14.5" y="20" width="5" height="1.8" rx="0.9" fill="#93c5fd"/>
|
||||
|
||||
<!-- Phone handset on cover -->
|
||||
<!-- earpiece -->
|
||||
<ellipse cx="14.5" cy="26.5" rx="2.2" ry="1.5" fill="#2563eb"/>
|
||||
<!-- mouthpiece -->
|
||||
<ellipse cx="20.5" cy="24" rx="2.2" ry="1.5" fill="#2563eb"/>
|
||||
<!-- handle connecting them (angled) -->
|
||||
<line x1="14.5" y1="26.5" x2="20.5" y2="24" stroke="#2563eb" stroke-width="3" stroke-linecap="round"/>
|
||||
<!-- highlight on earpiece -->
|
||||
<ellipse cx="14.5" cy="26.5" rx="1.4" ry="0.9" fill="#60a5fa"/>
|
||||
<!-- highlight on mouthpiece -->
|
||||
<ellipse cx="20.5" cy="24" rx="1.4" ry="0.9" fill="#60a5fa"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -4,6 +4,7 @@
|
|||
<meta charset="UTF-8" />
|
||||
<title>Bossier City Phone Directory</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css?family=PT+Serif');
|
||||
|
|
|
|||
Loading…
Reference in New Issue