about summary refs log tree commit diff
path: root/splorm/src/handler
diff options
context:
space:
mode:
authorgennyble <gen@nyble.dev>2026-09-26 01:48:05 -0500
committergennyble <gen@nyble.dev>2026-09-26 01:48:05 -0500
commit38cd35f4e2552b4baabbf6625627d56aa08ab8c1 (patch)
tree8fc6378fcecd7299e5625219cad646714c6a57cf /splorm/src/handler
parent6fb15557074e81042c2bde8cff73b1f3feb20c6c (diff)
/.me
Diffstat (limited to 'splorm/src/handler')
-rw-r--r--splorm/src/handler/me.rs21
-rw-r--r--splorm/src/handler/mod.rs1
2 files changed, 22 insertions, 0 deletions
diff --git a/splorm/src/handler/me.rs b/splorm/src/handler/me.rs
new file mode 100644
index 0000000..669e5f1
--- /dev/null
+++ b/splorm/src/handler/me.rs
@@ -0,0 +1,21 @@
+//! nested `/.me`
+//!
+//! Routes that return a 307 Temporary Redirect to information about me. These
+//! routes use different schemes to open the email application or phone dailer etc. etc.
+
+use axum::{Extension, Router, body::Body, http::StatusCode, response::Response, routing::get};
+
+use crate::{RuntimeError, config::Settings, state::SplormState};
+
+/// Routes nested under /.me
+pub fn routes() -> Router<SplormState> {
+	Router::new().route("/email", get(email))
+}
+
+async fn email(Extension(settings): Extension<Settings>) -> Result<Response, RuntimeError> {
+	Response::builder()
+		.status(StatusCode::TEMPORARY_REDIRECT)
+		.header("Location", format!("mailto:{}", settings.me_email()))
+		.body(Body::empty())
+		.map_err(|_| RuntimeError::Unknown)
+}
diff --git a/splorm/src/handler/mod.rs b/splorm/src/handler/mod.rs
index bac5c5c..5e57de6 100644
--- a/splorm/src/handler/mod.rs
+++ b/splorm/src/handler/mod.rs
@@ -23,6 +23,7 @@ use axum::{
 use sessionhash::RequestContext;
 
 pub mod api;
+pub mod me;
 pub mod quark;
 mod staticfile;
 mod templated;