From 2c209bf8d5cc5c4a84130fe1d12d4b611673dbb7 Mon Sep 17 00:00:00 2001 From: realaravinth Date: Fri, 28 May 2021 21:26:36 +0530 Subject: [PATCH] widget template --- src/main.rs | 3 + src/pages/panel/sitekey/view.rs | 2 +- src/pages/routes.rs | 2 + src/widget/mod.rs | 102 ++++++++++++++++++ .../components/details-footer/index.html | 4 + templates/components/headers.html | 45 +------- templates/components/raw-headers.html | 48 +++++++++ templates/widget/index.html | 87 +++++++++++++++ 8 files changed, 249 insertions(+), 44 deletions(-) create mode 100644 src/widget/mod.rs create mode 100644 templates/components/raw-headers.html create mode 100644 templates/widget/index.html diff --git a/src/main.rs b/src/main.rs index 866128fb..36273fcc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,8 +38,10 @@ mod stats; #[cfg(test)] #[macro_use] mod tests; +mod widget; pub use api::v1::ROUTES as V1_API_ROUTES; +pub use widget::WIDGET_ROUTES; pub use data::Data; pub use docs::DOCS; pub use pages::routes::ROUTES as PAGES; @@ -109,6 +111,7 @@ async fn main() -> std::io::Result<()> { actix_middleware::normalize::TrailingSlash::Trim, )) .configure(v1::services) + .configure(widget::services) .configure(docs::services) .configure(static_assets::services) .configure(pages::services) diff --git a/src/pages/panel/sitekey/view.rs b/src/pages/panel/sitekey/view.rs index 2a5a9e66..54844859 100644 --- a/src/pages/panel/sitekey/view.rs +++ b/src/pages/panel/sitekey/view.rs @@ -123,7 +123,7 @@ mod test { let mut app = get_app!(data).await; - let url = format!("/sitekey/view/{}", &key.key); + let url = format!("/sitekey/{}/view", &key.key); let list_sitekey_resp = test::call_service( &mut app, diff --git a/src/pages/routes.rs b/src/pages/routes.rs index c39a6d7d..a7f4e24d 100644 --- a/src/pages/routes.rs +++ b/src/pages/routes.rs @@ -29,6 +29,7 @@ pub struct Routes { pub thanks: &'static str, pub donate: &'static str, pub security: &'static str, + pub privacy: &'static str, } impl Routes { @@ -44,6 +45,7 @@ impl Routes { thanks: "/thanks", donate: "/donate", security: "/security", + privacy: "/privacy-policy", } } } diff --git a/src/widget/mod.rs b/src/widget/mod.rs new file mode 100644 index 00000000..272b0a9a --- /dev/null +++ b/src/widget/mod.rs @@ -0,0 +1,102 @@ +/* +* Copyright (C) 2021 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 . +*/ + +pub const WIDGET_ROUTES: routes::Widget = routes::Widget::new(); + +pub mod routes { + pub struct Widget { + pub verification_widget: &'static str, + } + + impl Widget { + pub const fn new() -> Self { + Widget { verification_widget: "/widget" } + } + } +} + + +use actix_web::{web, HttpResponse, Responder}; +use lazy_static::lazy_static; +use sailfish::TemplateOnce; + +use crate::errors::*; + +#[derive(TemplateOnce, Clone)] +#[template(path = "widget/index.html")] +pub struct IndexPage; + +const PAGE: &str = "mCaptcha CAPTCHA verification"; + +impl IndexPage { + fn new() -> Self { + IndexPage { } + } +} + +lazy_static! { + static ref INDEX_PAGE: String = IndexPage::new().render_once().unwrap(); +} + +/// render a client side widget for CAPTCHA verification +#[my_codegen::get(path = "crate::WIDGET_ROUTES.verification_widget")]//, wrap = "crate::CheckLogin")] +async fn show_widget() -> PageResult { + Ok(HttpResponse::Ok() + .content_type("text/html; charset=utf-8") + .body(&*INDEX_PAGE)) +} + + +pub fn services(cfg: &mut web::ServiceConfig) { + cfg.service(show_widget); +} + + + + +#[cfg(test)] +mod test { + use actix_web::http::StatusCode; + use actix_web::test; + use actix_web::web::Bytes; + + use crate::*; + + #[actix_rt::test] + async fn captcha_widget_route_works() { + let mut app = test::init_service( + actix_web::App::new() + .wrap(get_identity_service()) + .wrap(actix_middleware::NormalizePath::new( + actix_middleware::normalize::TrailingSlash::Trim, + )) + .configure(crate::widget::services) + ).await; + + + let list_sitekey_resp = test::call_service( + &mut app, + test::TestRequest::get() + .uri(crate::WIDGET_ROUTES.verification_widget) + .to_request(), + ) + .await; + + assert_eq!(list_sitekey_resp.status(), StatusCode::OK); + + } +} diff --git a/templates/components/details-footer/index.html b/templates/components/details-footer/index.html index b8744c72..a11d5cd8 100644 --- a/templates/components/details-footer/index.html +++ b/templates/components/details-footer/index.html @@ -12,6 +12,10 @@
  • Donate +
  • +
  • + Privacy
  • - - - - <.= PAGE .> | <.= crate::pages::NAME .> - - - - - - - - - - - - - - - - - - - - - +<. include!("./raw-headers.html"); .> + diff --git a/templates/components/raw-headers.html b/templates/components/raw-headers.html new file mode 100644 index 00000000..caf670fa --- /dev/null +++ b/templates/components/raw-headers.html @@ -0,0 +1,48 @@ + + + + + <.= PAGE .> | <.= crate::pages::NAME .> + + + + + + + + + + + + " + /> + + + + + " + /> + + + + + diff --git a/templates/widget/index.html b/templates/widget/index.html new file mode 100644 index 00000000..07f909f3 --- /dev/null +++ b/templates/widget/index.html @@ -0,0 +1,87 @@ +<. include!("../components/raw-headers.html"); .> + +
    + + + + + +