From 4269d49ddfcb1b520a2757e190357ff8fe9e3dac Mon Sep 17 00:00:00 2001 From: Chris Jean-Marie Date: Mon, 23 Sep 2024 03:48:26 +0000 Subject: [PATCH] Add profile route Reorder routes and layers to protect required routes --- .gitignore | 1 + backend/src/main.rs | 11 +++++++---- backend/src/routes.rs | 24 ++++++++++++++++++++++++ backend/templates/profile.html | 2 +- 4 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 backend/src/routes.rs diff --git a/.gitignore b/.gitignore index e44ccbc..64aadb7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ backend/target +backend/db diff --git a/backend/src/main.rs b/backend/src/main.rs index ba08fdf..718d18e 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -8,14 +8,16 @@ use sqlx::{sqlite::SqlitePoolOptions, SqlitePool}; use tower_http::services::ServeDir; mod error_handling; -use middlewares::{check_auth, inject_user_data}; mod google_oauth; mod middlewares; mod oauth; +mod routes; use error_handling::AppError; use google_oauth::*; +use middlewares::{check_auth, inject_user_data}; use oauth::{login, logout, google_auth_return}; +use routes::*; struct HtmlTemplate(T); @@ -76,12 +78,13 @@ async fn main() { // build our application with some routes let app = Router::new() + .route("/logout", get(logout)) + .route("/profile", get(profile)) + .route_layer(middleware::from_fn_with_state(app_state.clone(), check_auth)) .nest_service("/assets", ServeDir::new("templates/assets") .fallback(get_service(ServeDir::new("templates/assets")))) - .route_layer(middleware::from_fn_with_state(app_state.clone(), check_auth)) .route("/", get(index)) .route("/login", get(login)) - .route("/logout", get(logout)) .route("/google_auth", get(google_auth)) .route("/google_auth_return", get(google_auth_return)) .route_layer(middleware::from_fn_with_state(app_state.db_pool.clone(), inject_user_data)) @@ -90,7 +93,7 @@ async fn main() { ; // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 40192)); + let addr = SocketAddr::from(([0, 0, 0, 0], 40192)); tracing::debug!("listening on {}", addr); axum_server::bind(addr) .serve(app.into_make_service()) diff --git a/backend/src/routes.rs b/backend/src/routes.rs new file mode 100644 index 0000000..7286af9 --- /dev/null +++ b/backend/src/routes.rs @@ -0,0 +1,24 @@ +use askama::Template; +use axum::{response::IntoResponse, Extension}; +use http::Request; + +use crate::{HtmlTemplate, UserData}; + +#[derive(Template)] +#[template(path = "profile.html")] +struct ProfileTemplate { + logged_in: bool, + name: String, +} + +pub async fn profile( + Extension(user_data): Extension>, + _request: Request, +) -> impl IntoResponse { + let user_email = user_data.map(|s| s.user_email); + let logged_in = user_email.is_some(); + let name = user_email.unwrap_or_default(); + + let template = ProfileTemplate { logged_in, name}; + HtmlTemplate(template) +} \ No newline at end of file diff --git a/backend/templates/profile.html b/backend/templates/profile.html index d4a52ff..b8a9c8b 100644 --- a/backend/templates/profile.html +++ b/backend/templates/profile.html @@ -2,5 +2,5 @@ {% block title %}User Profile{% endblock %} {% block content %} This is your user profile page.
-Your email address: {{ user_email }}. +Your email address: {{ name }}. {% endblock %}