diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..0fe1acd --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "mikestead.dotenv", + "EditorConfig.EditorConfig", + "leonzalion.vscode-ejs", + "dbaeumer.vscode-eslint", + "stylelint.vscode-stylelint" + ] +} diff --git a/public/css/auth/login.css b/public/css/auth/login.css index 84f7c26..ae96ca0 100644 --- a/public/css/auth/login.css +++ b/public/css/auth/login.css @@ -116,6 +116,37 @@ width: 100%; } +.password-group { + position: relative; + width: 100%; +} + +.password-wrapper { + position: relative; + width: 100%; +} + +.password-wrapper input { + width: 100%; + padding-right: 2rem; +} + +.toggle-password { + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + cursor: pointer; + width: 20px; + height: 20px; + fill: var(--text-secondary); + transition: fill 0.2s; +} + +.toggle-password:hover { + fill: var(--accent); +} + .error-message { color: var(--error); background-color: rgb(237 66 69 / 10%); diff --git a/public/js/auth/login.js b/public/js/auth/login.js index b95dec2..b107efe 100644 --- a/public/js/auth/login.js +++ b/public/js/auth/login.js @@ -35,3 +35,18 @@ if (loginForm) { } }); } + +const passwordInput = document.getElementById("password"); +const togglePassword = document.getElementById("toggle-password"); + +togglePassword.addEventListener("click", () => { + if (passwordInput.type === "password") { + passwordInput.type = "text"; + togglePassword.innerHTML = + ''; + } else { + passwordInput.type = "password"; + togglePassword.innerHTML = + ''; + } +}); diff --git a/src/routes/auth/login.ts b/src/routes/auth/login.ts index 74cf330..0c24f39 100644 --- a/src/routes/auth/login.ts +++ b/src/routes/auth/login.ts @@ -7,7 +7,9 @@ const routeDef: RouteDef = { returns: "text/html", }; -async function handler(): Promise { +async function handler(request: ExtendedRequest): Promise { + if (request.session) return Response.redirect("/"); + const instanceName: string = (await getSetting("instance_name")) || "Unnamed Instance"; diff --git a/src/views/auth/login.ejs b/src/views/auth/login.ejs index 252f932..7776779 100644 --- a/src/views/auth/login.ejs +++ b/src/views/auth/login.ejs @@ -30,9 +30,14 @@ -
+
- +
+ + + + +