joblin / frontend /forgot-password.html
Britzzy's picture
feat: corporate ATS scrapers (Ashby, Greenhouse), O&G, government boards, posted_date fixes
7db43bc
Raw
History Blame Contribute Delete
3.62 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joblin - Reset Password</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="auth-page">
<div class="auth-card" id="step1">
<a href="index.html" class="auth-brand">
<div class="auth-brand-icon">J</div>
<h1>Job<span>lin</span></h1>
</a>
<h1>Reset Password</h1>
<p class="subtitle">Enter your email to get a reset token</p>
<form id="tokenForm">
<div class="form-group">
<label>Email</label>
<input type="email" id="email" placeholder="you@example.com" required autocomplete="email">
</div>
<button type="submit" class="btn btn-primary btn-lg" style="width:100%" id="tokenBtn">Get Reset Token</button>
</form>
<p class="footer-link"><a href="login.html">Back to sign in</a></p>
</div>
<div class="auth-card" id="step2" style="display:none">
<a href="index.html" class="auth-brand">
<div class="auth-brand-icon">J</div>
<h1>Job<span>lin</span></h1>
</a>
<h1>Reset Password</h1>
<p class="subtitle">Use the token below to set a new password</p>
<div class="reset-token-box" id="tokenDisplay"></div>
<form id="resetForm">
<div class="form-group">
<label>Reset Token</label>
<input type="text" id="resetToken" placeholder="Paste or copy the token above" required>
</div>
<div class="form-group">
<label>New Password</label>
<div class="pwd-wrapper">
<input type="password" id="newPassword" placeholder="At least 6 characters" required minlength="6" autocomplete="new-password">
<span class="pwd-toggle" onclick="togglePwd('newPassword',this)">&#128065;</span>
</div>
</div>
<button type="submit" class="btn btn-primary btn-lg" style="width:100%" id="resetBtn">Reset Password</button>
</form>
<p class="footer-link"><a href="login.html">Back to sign in</a></p>
</div>
</div>
<script src="app.js"></script>
<script>document.getElementById("tokenForm").addEventListener("submit", async (e) => {
e.preventDefault();
const btn = document.getElementById("tokenBtn");
btn.disabled = true;
btn.innerHTML = '<span class="spinner"></span> Sending...';
try {
const data = await apiFetch("POST", "/api/auth/forgot-password", {
email: document.getElementById("email").value,
});
document.getElementById("tokenDisplay").textContent = data.token || "Token generated (check console)";
if (!data.token) console.log("Reset token:", data);
document.getElementById("step1").style.display = "none";
document.getElementById("step2").style.display = "block";
} catch (err) {
showToast(err.message, "error");
btn.disabled = false;
btn.textContent = "Get Reset Token";
}
});
document.getElementById("resetForm").addEventListener("submit", async (e) => {
e.preventDefault();
const btn = document.getElementById("resetBtn");
btn.disabled = true;
btn.innerHTML = '<span class="spinner"></span> Resetting...';
try {
const data = await apiFetch("POST", "/api/auth/reset-password", {
token: document.getElementById("resetToken").value,
password: document.getElementById("newPassword").value,
});
showToast("Password reset successfully! Redirecting to login...");
setTimeout(() => { window.location.href = "login.html"; }, 1500);
} catch (err) {
showToast(err.message, "error");
btn.disabled = false;
btn.textContent = "Reset Password";
}
});
</script>
</body>
</html>