From 63376af86fff92794e4d9ac7c50573c20a86ebd2 Mon Sep 17 00:00:00 2001 From: frosty Date: Mon, 12 Jan 2026 16:57:57 -0500 Subject: [PATCH] i hate israel --- 2026-01-12_16:52.patch | 67 +++++++++++++++++++++++++++++++++++++++ 2026-01-12_16:55.patch | 67 +++++++++++++++++++++++++++++++++++++++ src/web/mod.rs | 1 + src/web/pages/login.rs | 48 ++++++++++++++++++++++++++++ src/web/pages/mod.rs | 2 ++ static/index.css | 70 +++++++++++++++++++++++++++++++++++++++++ static/usericon.png | Bin 0 -> 22078 bytes templates/base.html | 1 + templates/header.html | 19 +++++++++++ templates/login.html | 14 +++++++++ 10 files changed, 289 insertions(+) create mode 100644 2026-01-12_16:52.patch create mode 100644 2026-01-12_16:55.patch create mode 100644 src/web/pages/login.rs create mode 100644 static/index.css create mode 100644 static/usericon.png create mode 100644 templates/login.html diff --git a/2026-01-12_16:52.patch b/2026-01-12_16:52.patch new file mode 100644 index 0000000..d4e4bee --- /dev/null +++ b/2026-01-12_16:52.patch @@ -0,0 +1,67 @@ +diff --git a/src/web/mod.rs b/src/web/mod.rs +index f919e6e..4f03aa9 100644 +--- a/src/web/mod.rs ++++ b/src/web/mod.rs +@@ -11,6 +11,7 @@ pub async fn start() -> anyhow::Result<()> { + let addr = "0.0.0.0:3000"; + let app = Router::new() + .route("/", get(pages::home::get_page)) ++ .route("/login", get(pages::login::get_page)) + .nest_service( + "/static", + ServiceBuilder::new() +diff --git a/src/web/pages/mod.rs b/src/web/pages/mod.rs +index 0c1f8ad..d4fc7a0 100644 +--- a/src/web/pages/mod.rs ++++ b/src/web/pages/mod.rs +@@ -1,6 +1,8 @@ + + ++ + pub mod home; ++pub mod login; + pub mod error; + + +diff --git a/templates/base.html b/templates/base.html +index 6731e87..86574ca 100644 +--- a/templates/base.html ++++ b/templates/base.html +@@ -3,6 +3,7 @@ + + + {{ self.title() }} ++ + + + {% include "header.html" %} +diff --git a/templates/header.html b/templates/header.html +index c247db4..cf4fb71 100644 +--- a/templates/header.html ++++ b/templates/header.html +@@ -1,6 +1,25 @@ +
+ + ++ + + +
diff --git a/2026-01-12_16:55.patch b/2026-01-12_16:55.patch new file mode 100644 index 0000000..d4e4bee --- /dev/null +++ b/2026-01-12_16:55.patch @@ -0,0 +1,67 @@ +diff --git a/src/web/mod.rs b/src/web/mod.rs +index f919e6e..4f03aa9 100644 +--- a/src/web/mod.rs ++++ b/src/web/mod.rs +@@ -11,6 +11,7 @@ pub async fn start() -> anyhow::Result<()> { + let addr = "0.0.0.0:3000"; + let app = Router::new() + .route("/", get(pages::home::get_page)) ++ .route("/login", get(pages::login::get_page)) + .nest_service( + "/static", + ServiceBuilder::new() +diff --git a/src/web/pages/mod.rs b/src/web/pages/mod.rs +index 0c1f8ad..d4fc7a0 100644 +--- a/src/web/pages/mod.rs ++++ b/src/web/pages/mod.rs +@@ -1,6 +1,8 @@ + + ++ + pub mod home; ++pub mod login; + pub mod error; + + +diff --git a/templates/base.html b/templates/base.html +index 6731e87..86574ca 100644 +--- a/templates/base.html ++++ b/templates/base.html +@@ -3,6 +3,7 @@ + + + {{ self.title() }} ++ + + + {% include "header.html" %} +diff --git a/templates/header.html b/templates/header.html +index c247db4..cf4fb71 100644 +--- a/templates/header.html ++++ b/templates/header.html +@@ -1,6 +1,25 @@ +
+ + ++ + + +
diff --git a/src/web/mod.rs b/src/web/mod.rs index f919e6e..4f03aa9 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -11,6 +11,7 @@ pub async fn start() -> anyhow::Result<()> { let addr = "0.0.0.0:3000"; let app = Router::new() .route("/", get(pages::home::get_page)) + .route("/login", get(pages::login::get_page)) .nest_service( "/static", ServiceBuilder::new() diff --git a/src/web/pages/login.rs b/src/web/pages/login.rs new file mode 100644 index 0000000..e824252 --- /dev/null +++ b/src/web/pages/login.rs @@ -0,0 +1,48 @@ +use askama::Template; +use axum::response::{Html, IntoResponse, Response}; + +use axum::{ + routing::{get, post}, + http::StatusCode, + Json, Router, +}; + +use crate::web::pages::{BaseTemplate, BaseTemplateCtx}; + +#[derive(Template)] +#[template(path = "login.html")] +pub struct HomeTemplate { + pub ctx: BaseTemplateCtx, + +} + +impl BaseTemplate for HomeTemplate { + fn ctx(&self) -> &BaseTemplateCtx { + &self.ctx + } + fn ctx_mut(&mut self) -> &mut BaseTemplateCtx { + &mut self.ctx + } + +} + +#[axum::debug_handler] +pub async fn get_page() -> Response { + fn inner() -> anyhow::Result<(StatusCode, String)> { + let mut template = HomeTemplate { + ctx: Default::default() + }; + + template.set_title("Login"); + + Ok((StatusCode::OK, template.render()?)) + } + + match inner() { + Ok((status, s)) => (status, Html(s)).into_response(), + Err(e) => { + let s = crate::web::pages::error::get_error_page(e.to_string()).await; + (StatusCode::INTERNAL_SERVER_ERROR, Html(s)).into_response() + } + } +} diff --git a/src/web/pages/mod.rs b/src/web/pages/mod.rs index 0c1f8ad..d4fc7a0 100644 --- a/src/web/pages/mod.rs +++ b/src/web/pages/mod.rs @@ -1,6 +1,8 @@ + pub mod home; +pub mod login; pub mod error; diff --git a/static/index.css b/static/index.css new file mode 100644 index 0000000..3eda125 --- /dev/null +++ b/static/index.css @@ -0,0 +1,70 @@ +body,html { + font-family: sans-serif; + margin: 0; + padding: 0; +} + +.nav { + display: flex; + list-style: none; + gap: 10px; + background: gray; + padding: 8px; + margin: 0px; +} + +.right { + margin-left: auto; +} + +.pfp { + width: 25px; + height: 25px; + object-fit: cover; + vertical-align: middle; + margin-right: 5px; + +} + +.nav a { + font-weight: bold; + text-decoration: none; + color: white; + background: gray; + vertical-align: middle; + +} + +.nav a:hover { + color: #FFFF88 +} + +footer { + position: absolute; + bottom: 0px; + width: 100%; + padding: 5px; + padding-left: 10px; + background: gray; + color: white; + +} + +.login-form { + + background: gray; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding: 10px; +} + +.login-form input[type="email"],input[type="password"] { + width: 95%; +} + +.login-form input[type="submit"] { + width: 98%; + margin-top: 10px; +} diff --git a/static/usericon.png b/static/usericon.png new file mode 100644 index 0000000000000000000000000000000000000000..0834409b76f9aad43143a9e7f6929a4394e90236 GIT binary patch literal 22078 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 literal 0 HcmV?d00001 diff --git a/templates/base.html b/templates/base.html index 6731e87..86574ca 100644 --- a/templates/base.html +++ b/templates/base.html @@ -3,6 +3,7 @@ {{ self.title() }} + {% include "header.html" %} diff --git a/templates/header.html b/templates/header.html index c247db4..cf4fb71 100644 --- a/templates/header.html +++ b/templates/header.html @@ -1,6 +1,25 @@
+
diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..44f83f6 --- /dev/null +++ b/templates/login.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block content %} + + + +{% endblock %}