2021-01-10 01:49:33 +00:00
|
|
|
use crate::{nav::NavState, rendered, Error};
|
2020-12-16 02:40:41 +00:00
|
|
|
use actix_web::{http::header::LOCATION, web, HttpResponse, Scope};
|
|
|
|
use hyaenidae_accounts::{
|
2021-01-08 04:44:43 +00:00
|
|
|
CookiesArgs, CookiesPageArgs, DeleteUserArgs, DeleteUserPageArgs, LoginArgs, LoginPageArgs,
|
2021-01-10 01:49:33 +00:00
|
|
|
LogoutArgs, Pages as _, RegisterArgs, RegisterPageArgs, UpdatePasswordArgs,
|
2021-01-08 04:44:43 +00:00
|
|
|
UpdatePasswordPageArgs, UpdateUsernameArgs, UpdateUsernamePageArgs, User,
|
2020-12-16 02:40:41 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
pub(crate) struct Pages;
|
|
|
|
|
|
|
|
impl hyaenidae_accounts::Pages for Pages {
|
|
|
|
fn home_path(&self) -> String {
|
|
|
|
"/".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn not_found_path(&self) -> String {
|
|
|
|
"/404".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn internal_server_error_path(&self) -> String {
|
|
|
|
"/500".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn cookies_path(&self) -> String {
|
|
|
|
"/session/cookies".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn login_path(&self) -> String {
|
|
|
|
"/session/auth/login".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn register_path(&self) -> String {
|
|
|
|
"/session/auth/register".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn logout_path(&self) -> String {
|
|
|
|
"/session/auth/logout".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn accounts_path(&self) -> String {
|
|
|
|
"/session/account".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn update_username_path(&self) -> String {
|
|
|
|
"/session/account/username".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn update_password_path(&self) -> String {
|
|
|
|
"/session/account/password".to_owned()
|
|
|
|
}
|
|
|
|
|
|
|
|
fn delete_user_path(&self) -> String {
|
|
|
|
"/session/account/delete".to_owned()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub(crate) fn scope() -> Scope {
|
|
|
|
web::scope("/session")
|
|
|
|
.service(
|
|
|
|
web::resource("/cookies")
|
|
|
|
.route(web::get().to(cookies_page))
|
|
|
|
.route(web::post().to(cookies)),
|
|
|
|
)
|
|
|
|
.service(
|
|
|
|
web::scope("/auth")
|
|
|
|
.service(
|
|
|
|
web::resource("/login")
|
|
|
|
.route(web::get().to(login_page))
|
|
|
|
.route(web::post().to(login)),
|
|
|
|
)
|
|
|
|
.service(
|
|
|
|
web::resource("/register")
|
|
|
|
.route(web::get().to(register_page))
|
|
|
|
.route(web::post().to(register)),
|
|
|
|
)
|
|
|
|
.service(web::resource("/logout").route(web::post().to(logout))),
|
|
|
|
)
|
|
|
|
.service(
|
|
|
|
web::scope("/account")
|
|
|
|
.service(web::resource("").route(web::get().to(account_page)))
|
|
|
|
.service(
|
|
|
|
web::resource("/username")
|
|
|
|
.route(web::get().to(to_account))
|
|
|
|
.route(web::post().to(update_username)),
|
|
|
|
)
|
|
|
|
.service(
|
|
|
|
web::resource("/password")
|
|
|
|
.route(web::get().to(to_account))
|
|
|
|
.route(web::post().to(update_password)),
|
|
|
|
)
|
|
|
|
.service(
|
|
|
|
web::resource("/delete")
|
|
|
|
.route(web::get().to(delete_account_page))
|
|
|
|
.route(web::post().to(delete_account)),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
async fn cookies_page(args: CookiesPageArgs, nav_state: NavState) -> Result<HttpResponse, Error> {
|
|
|
|
let mut cookie_state = match hyaenidae_accounts::cookies_page(args) {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
cookie_state.dark(true);
|
|
|
|
|
2020-12-16 02:40:41 +00:00
|
|
|
rendered(HttpResponse::Ok(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::cookies(cursor, &cookie_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-01-09 04:35:35 +00:00
|
|
|
async fn cookies(args: CookiesArgs) -> Result<HttpResponse, Error> {
|
|
|
|
Ok(hyaenidae_accounts::cookies(args).await?)
|
2020-12-16 02:40:41 +00:00
|
|
|
}
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
async fn login_page(args: LoginPageArgs, nav_state: NavState) -> Result<HttpResponse, Error> {
|
|
|
|
let mut login_state = match hyaenidae_accounts::login_page(args) {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
login_state.dark(true);
|
|
|
|
|
2020-12-16 02:40:41 +00:00
|
|
|
rendered(HttpResponse::Ok(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::login(cursor, &login_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
async fn login(args: LoginArgs, nav_state: NavState) -> Result<HttpResponse, Error> {
|
|
|
|
let mut login_state = match hyaenidae_accounts::login(args).await? {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
login_state.dark(true);
|
|
|
|
|
2020-12-16 02:40:41 +00:00
|
|
|
rendered(HttpResponse::BadRequest(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::login(cursor, &login_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
async fn register_page(args: RegisterPageArgs, nav_state: NavState) -> Result<HttpResponse, Error> {
|
|
|
|
let mut register_state = match hyaenidae_accounts::register_page(args) {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
register_state.dark(true);
|
|
|
|
|
2020-12-16 02:40:41 +00:00
|
|
|
rendered(HttpResponse::Ok(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::register(cursor, ®ister_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
async fn register(args: RegisterArgs, nav_state: NavState) -> Result<HttpResponse, Error> {
|
|
|
|
let mut register_state = match hyaenidae_accounts::register(args).await? {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
register_state.dark(true);
|
|
|
|
|
2020-12-16 02:40:41 +00:00
|
|
|
rendered(HttpResponse::BadRequest(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::register(cursor, ®ister_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn logout(args: LogoutArgs) -> HttpResponse {
|
|
|
|
hyaenidae_accounts::logout(args)
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn account_page(
|
|
|
|
uname_args: UpdateUsernamePageArgs,
|
|
|
|
pass_args: UpdatePasswordPageArgs,
|
2021-01-08 04:44:43 +00:00
|
|
|
user: User,
|
2021-01-10 01:49:33 +00:00
|
|
|
nav_state: NavState,
|
2021-01-09 04:35:35 +00:00
|
|
|
) -> Result<HttpResponse, Error> {
|
2021-01-10 01:49:33 +00:00
|
|
|
let mut uname_state = hyaenidae_accounts::update_username_page(uname_args);
|
|
|
|
let mut pass_state = hyaenidae_accounts::update_password_page(pass_args);
|
|
|
|
|
|
|
|
let dark = true;
|
|
|
|
uname_state.dark(dark);
|
|
|
|
pass_state.dark(dark);
|
2020-12-16 02:40:41 +00:00
|
|
|
|
|
|
|
rendered(HttpResponse::Ok(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::account(cursor, &user, &uname_state, &pass_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn to_account() -> HttpResponse {
|
|
|
|
HttpResponse::SeeOther()
|
|
|
|
.header(LOCATION, Pages.accounts_path())
|
|
|
|
.finish()
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn update_username(
|
|
|
|
uname_args: UpdateUsernameArgs,
|
|
|
|
pass_args: UpdatePasswordPageArgs,
|
2021-01-08 04:44:43 +00:00
|
|
|
user: User,
|
2021-01-10 01:49:33 +00:00
|
|
|
nav_state: NavState,
|
2021-01-09 04:35:35 +00:00
|
|
|
) -> Result<HttpResponse, Error> {
|
2021-01-10 01:49:33 +00:00
|
|
|
let mut uname_state = match hyaenidae_accounts::update_username(uname_args).await? {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
2021-01-10 01:49:33 +00:00
|
|
|
let mut pass_state = hyaenidae_accounts::update_password_page(pass_args);
|
|
|
|
|
|
|
|
let dark = true;
|
|
|
|
uname_state.dark(dark);
|
|
|
|
pass_state.dark(dark);
|
2020-12-16 02:40:41 +00:00
|
|
|
|
|
|
|
rendered(HttpResponse::BadRequest(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::account(cursor, &user, &uname_state, &pass_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn update_password(
|
|
|
|
uname_args: UpdateUsernamePageArgs,
|
|
|
|
pass_args: UpdatePasswordArgs,
|
2021-01-08 04:44:43 +00:00
|
|
|
user: User,
|
2021-01-10 01:49:33 +00:00
|
|
|
nav_state: NavState,
|
2021-01-09 04:35:35 +00:00
|
|
|
) -> Result<HttpResponse, Error> {
|
2021-01-10 01:49:33 +00:00
|
|
|
let mut uname_state = hyaenidae_accounts::update_username_page(uname_args);
|
|
|
|
let mut pass_state = match hyaenidae_accounts::update_password(pass_args).await? {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
let dark = true;
|
|
|
|
uname_state.dark(dark);
|
|
|
|
pass_state.dark(dark);
|
|
|
|
|
2020-12-16 02:40:41 +00:00
|
|
|
rendered(HttpResponse::BadRequest(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::account(cursor, &user, &uname_state, &pass_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn delete_account_page(
|
|
|
|
args: DeleteUserPageArgs,
|
2021-01-10 01:49:33 +00:00
|
|
|
nav_state: NavState,
|
2021-01-09 04:35:35 +00:00
|
|
|
) -> Result<HttpResponse, Error> {
|
2021-01-10 01:49:33 +00:00
|
|
|
let mut delete_state = match hyaenidae_accounts::delete_user_page(args) {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
let dark = true;
|
|
|
|
delete_state.dark(dark);
|
|
|
|
|
2020-12-16 02:40:41 +00:00
|
|
|
rendered(HttpResponse::Ok(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::delete_account(cursor, &delete_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
async fn delete_account(args: DeleteUserArgs, nav_state: NavState) -> Result<HttpResponse, Error> {
|
|
|
|
let mut delete_state = match hyaenidae_accounts::delete_user(args).await? {
|
2020-12-16 02:40:41 +00:00
|
|
|
Ok(state) => state,
|
|
|
|
Err(res) => return Ok(res),
|
|
|
|
};
|
|
|
|
|
2021-01-10 01:49:33 +00:00
|
|
|
let dark = true;
|
|
|
|
delete_state.dark(dark);
|
|
|
|
|
2020-12-16 02:40:41 +00:00
|
|
|
rendered(HttpResponse::BadRequest(), |cursor| {
|
2021-01-10 01:49:33 +00:00
|
|
|
crate::templates::session::delete_account(cursor, &delete_state, &nav_state)
|
2020-12-16 02:40:41 +00:00
|
|
|
})
|
|
|
|
}
|