Fix user admin page

This commit is contained in:
Chris Jean-Marie 2024-09-25 17:18:49 +00:00
parent 75f6b94005
commit 022a138e56
4 changed files with 30 additions and 25 deletions

View File

@ -54,14 +54,14 @@ pub struct AppState {
#[derive(Serialize, Deserialize)]
pub struct UserData {
#[allow(dead_code)]
pub user_id: i64,
pub user_email: String,
/* pub user_name: String,
pub user_discriminator: String,
pub user_avatar: String,
pub user_access_token: String,
pub user_refresh_token: String,
pub user_expires_at: i64,
pub id: i64,
pub email: String,
/* pub name: String,
pub discriminator: String,
pub avatar: String,
pub access_token: String,
pub refresh_token: String,
pub expires_at: i64,
*/}
#[tokio::main]
@ -83,7 +83,7 @@ async fn main() {
//Routes that require authentication
.route("/logout", get(logout))
.route("/profile", get(profile))
//.route("/useradmin", get(useradmin))
.route("/useradmin", get(useradmin))
.route_layer(middleware::from_fn_with_state(app_state.clone(), check_auth))
//Routes that don't require authentication
@ -105,13 +105,14 @@ async fn main() {
.serve(app.into_make_service())
.await
.unwrap();
}
async fn index<T>(
Extension(user_data): Extension<Option<UserData>>,
_request: Request<T>,
) -> impl IntoResponse {
let user_email = user_data.map(|s| s.user_email);
let user_email = user_data.map(|s| s.email);
let logged_in = user_email.is_some();
let name = user_email.unwrap_or_default();

View File

@ -40,19 +40,19 @@ pub async fn inject_user_data(
session_token_p2_cookie,
session_token_p2_db,
) {
let user_id = query.0;
let id = query.0;
let expires_at = query.1;
if expires_at > Utc::now().timestamp() {
let query: Result<(String,), _> =
sqlx::query_as(r#"SELECT email FROM users WHERE id=?"#)
.bind(user_id)
.bind(id)
.fetch_one(&db_pool)
.await;
if let Ok(query) = query {
let user_email = query.0;
let email = query.0;
request.extensions_mut().insert(Some(UserData {
user_id,
user_email,
id,
email,
}));
}
}

View File

@ -1,7 +1,6 @@
use askama_axum::Template;
use axum::{extract::State, response::IntoResponse, Extension};
use http::Request;
use serde::{Deserialize, Serialize};
use sqlx::SqlitePool;
use crate::{HtmlTemplate, UserData};
@ -17,16 +16,15 @@ pub async fn profile<T>(
Extension(user_data): Extension<Option<UserData>>,
_request: Request<T>,
) -> 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 email = user_data.map(|s| s.email);
let logged_in = email.is_some();
let name = email.unwrap_or_default();
let template = ProfileTemplate { logged_in, name};
HtmlTemplate(template)
}
/*
#[derive(Template)]
#[derive(Serialize, Deserialize)]
#[template(path = "useradmin.html")]
struct UserAdminTemplate {
logged_in: bool,
@ -40,7 +38,7 @@ pub async fn useradmin<T>(
_request: Request<T>,
) -> impl IntoResponse {
let user_email = user_data.map(|s| s.user_email);
let user_email = user_data.map(|s| s.email);
let logged_in = user_email.is_some();
let name = user_email.unwrap_or_default();
@ -52,4 +50,3 @@ pub async fn useradmin<T>(
let template = UserAdminTemplate { logged_in, name, users };
HtmlTemplate(template)
}
*/

View File

@ -1,6 +1,13 @@
{% extends "base.html" %}
{% block title %}User Profile{% endblock %}
{% block content %}
This is the user administration page. <br />
{{ users }}
<h1>Users</h1>
<table>
{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.email }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}