use actix_web::Result as AwResult;
use actix_web::{HttpRequest, get, web};
use super::render_layout;
use super::session_auth::get_username_from_request;
use crate::auth::NotesContext;
fn wrap_auth_content(content: &maud::Markup) -> maud::Markup {
maud::html! {
div id="auth-content" class="flex flex-column items-center justify-center" style="min-height: calc(100vh - 12rem); padding: 2rem 1rem;" {
div class="w-100 mw6" {
(content)
}
}
}
}
#[get("/auth/login")]
pub async fn login_page(
req: HttpRequest,
auth_state: web::Data<NotesContext>,
) -> AwResult<maud::Markup> {
let username = get_username_from_request(&req, &auth_state).await;
let content = maud::html! {
div class="bg-white pa4 shadow-4 ba b--black-10" {
h1 class="f3 fw6 mb4 tc brand" { "Sign In to Later Notes" }
form
hx-post="/auth/login"
hx-target="#login-result"
hx-target-error="#login-result"
hx-swap="innerHTML"
{
div class="mb3" {
label class="db f6 fw6 black-70 mb2" for="username" { "Username" }
input
type="text"
name="username"
id="username"
required
class="db w-100 pa3 ba b--black-20 f5"
placeholder="Enter your username";
}
div class="mb4" {
label class="db f6 fw6 black-70 mb2" for="password" { "Password" }
input
type="password"
name="password"
id="password"
required
class="db w-100 pa3 ba b--black-20 f5"
placeholder="Enter your password";
}
button
type="submit"
class="w-100 pa3 btn-brand f5 fw6 cursor-pointer"
{
"Login"
}
}
div id="login-result" class="mt3" {}
}
};
if req.headers().get("HX-Request").is_some() {
Ok(content)
} else {
Ok(render_layout(
&wrap_auth_content(&content),
username.as_deref(),
))
}
}
pub fn render_login_success(username: &str) -> maud::Markup {
maud::html! {
div class="ba b--green pa3 bg-washed-green" {
h2 class="f4 fw6 mb3 dark-green" { "Login successful!" }
p class="f6 dark-green mb2" {
"Welcome, " (username) "!"
}
p class="f6 dark-green mb3" {
"Redirecting to dashboard..."
}
}
}
}