/* * Copyright (C) 2022 Aravinth Manivannan * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ use actix_auth_middleware::{Authentication, GetLoginRoute}; use serde::*; use crate::serve::routes::Serve; /// constant [Pages](Pages) instance pub const PAGES: Pages = Pages::new(); #[derive(Serialize)] /// Top-level routes data structure for V1 AP1 pub struct Pages { /// Authentication routes pub auth: Auth, /// home page pub home: &'static str, pub dash: Dash, pub serve: Serve, } impl Pages { /// create new instance of Routes const fn new() -> Pages { let auth = Auth::new(); let dash = Dash::new(); let serve = Serve::new(); let home = "/"; Pages { auth, home, dash, serve } } } #[derive(Serialize)] /// Authentication routes pub struct Auth { /// logout route pub logout: &'static str, /// login route pub login: &'static str, /// registration route pub register: &'static str, } impl Auth { /// create new instance of Authentication route pub const fn new() -> Auth { let login = "/login"; let logout = "/logout"; let register = "/join"; Auth { logout, login, register, } } } #[derive(Serialize)] /// Dashboard routes pub struct Dash { /// home route pub home: &'static str, pub add_site: &'static str, } impl Dash { /// create new instance of Dash route pub const fn new() -> Dash { let home = "/dash"; let add_site = "/dash/sites/add"; Dash { home, add_site } } } pub fn get_auth_middleware() -> Authentication { Authentication::with_identity(PAGES) } impl GetLoginRoute for Pages { fn get_login_route(&self, src: Option<&str>) -> String { if let Some(redirect_to) = src { format!( "{}?redirect_to={}", self.auth.login, urlencoding::encode(redirect_to) ) } else { self.auth.login.to_string() } } }