51 lines
1.4 KiB
Rust
51 lines
1.4 KiB
Rust
use crate::models::User;
|
|
use rocket::http::{Cookie, Cookies};
|
|
use rocket::request::{FlashMessage, Form};
|
|
use rocket::response::{Flash, Redirect};
|
|
use rocket_contrib::templates::Template;
|
|
use std::collections::HashMap;
|
|
|
|
pub(crate) fn routes() -> Vec<rocket::Route> {
|
|
routes![login, logout, login_user, login_page]
|
|
}
|
|
|
|
#[derive(FromForm)]
|
|
struct Login {
|
|
username: String,
|
|
password: String,
|
|
}
|
|
|
|
#[post("/login", data = "<login>")]
|
|
fn login(mut cookies: Cookies, login: Form<Login>) -> Result<Redirect, Flash<Redirect>> {
|
|
if login.username == "Sergio" && login.password == "password" {
|
|
cookies.add_private(Cookie::new("user_id", 1.to_string()));
|
|
Ok(Redirect::to(uri!(super::root::index)))
|
|
} else {
|
|
Err(Flash::error(
|
|
Redirect::to(uri!(login_page)),
|
|
"Invalid username/password.",
|
|
))
|
|
}
|
|
}
|
|
|
|
#[post("/logout")]
|
|
fn logout(mut cookies: Cookies) -> Flash<Redirect> {
|
|
cookies.remove_private(Cookie::named("user_id"));
|
|
Flash::success(Redirect::to(uri!(login_page)), "Successfully logged out.")
|
|
}
|
|
|
|
#[get("/login")]
|
|
fn login_user(_user: User) -> Redirect {
|
|
Redirect::to(uri!(super::root::index))
|
|
}
|
|
|
|
#[get("/login", rank = 2)]
|
|
fn login_page(flash: Option<FlashMessage>) -> Template {
|
|
let mut context = HashMap::new();
|
|
if let Some(ref msg) = flash {
|
|
context.insert("flash", msg.msg());
|
|
}
|
|
|
|
Template::render("login", &context)
|
|
}
|