diff --git a/otter/src/server/web/mod.rs b/otter/src/server/web/mod.rs index 2099ab4..b8ec379 100644 --- a/otter/src/server/web/mod.rs +++ b/otter/src/server/web/mod.rs @@ -22,6 +22,11 @@ const SESSION_ID_COOKIE: &str = "sessionid"; pub fn router(ctx: Context) -> Router { Router::new() + .route("/sessions", get(get_sessions)) + .route_layer(axum::middleware::from_fn_with_state( + ctx.clone(), + auth_web_middleware, + )) .route("/", get(get_index)) // .layer(middleware::from_fn_with_state( // ctx.clone(), @@ -161,3 +166,14 @@ pub async fn auth_web_middleware( Err(err) => err.into_response(), } } + +pub async fn get_sessions( + State(ctx): State, + headers: HeaderMap, +) -> TemplateResponse> { + View::Sessions(Vec::new()) + .page(&headers) + .headers(&headers) + .authenticated(true) + .response(&ctx.tera) +} diff --git a/otter/src/web/mod.rs b/otter/src/web/mod.rs index f2a03ee..0035779 100644 --- a/otter/src/web/mod.rs +++ b/otter/src/web/mod.rs @@ -79,6 +79,10 @@ pub fn initialize_tera() -> tera::Result { View::Login.template(), include_str!("templates/views/login.html"), ), + ( + View::Sessions(Vec::new()).template(), + include_str!("templates/views/sessions.html"), + ), ])?; Ok(tera) diff --git a/otter/src/web/templates/base.html b/otter/src/web/templates/base.html index bf13d16..c60df08 100644 --- a/otter/src/web/templates/base.html +++ b/otter/src/web/templates/base.html @@ -21,12 +21,12 @@ a:hover {
    -
  • - {% if authenticated %} - Logout - {% else %} - Login - {% endif %} + {% if authenticated %} +
  • Sessions
  • +
  • Logout
  • + {% else %} +
  • Login
  • + {% endif %}
diff --git a/otter/src/web/templates/views/sessions.html b/otter/src/web/templates/views/sessions.html new file mode 100644 index 0000000..679a565 --- /dev/null +++ b/otter/src/web/templates/views/sessions.html @@ -0,0 +1,18 @@ +

Sessions

+ + + + + + + + + + + + + + + + +
User AgentLast seenAction
FirefoxyesterdayRemove
diff --git a/otter/src/web/view.rs b/otter/src/web/view.rs index 236d8a5..4f15834 100644 --- a/otter/src/web/view.rs +++ b/otter/src/web/view.rs @@ -3,6 +3,7 @@ use super::Template; pub enum View { Index, Login, + Sessions(Vec), } impl Template for View { @@ -10,10 +11,19 @@ impl Template for View { match self { Self::Index => "views/index.html", Self::Login => "views/login.html", + Self::Sessions(_) => "views/sessions.html", } } fn render(&self, tera: &tera::Tera) -> tera::Result { - tera.render(self.template(), &tera::Context::new()) + let mut ctx = tera::Context::new(); + + // match self { + // Self::Sessions(sessions) => { + // ctx.insert("sessions", sessions); + // } + // }; + + tera.render(self.template(), &ctx) } }