Intial code for user administration
This commit is contained in:
parent
fa317acbbf
commit
75f6b94005
|
|
@ -4,7 +4,8 @@ use axum::{
|
||||||
middleware, response::{Html, IntoResponse, Response}, routing::{get, get_service}, Extension, Router
|
middleware, response::{Html, IntoResponse, Response}, routing::{get, get_service}, Extension, Router
|
||||||
};
|
};
|
||||||
use http::{Request, StatusCode};
|
use http::{Request, StatusCode};
|
||||||
use sqlx::{sqlite::SqlitePoolOptions, SqlitePool};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use sqlx::{prelude::FromRow, sqlite::SqlitePoolOptions, SqlitePool};
|
||||||
use tower_http::services::ServeDir;
|
use tower_http::services::ServeDir;
|
||||||
|
|
||||||
mod error_handling;
|
mod error_handling;
|
||||||
|
|
@ -49,7 +50,8 @@ pub struct AppState {
|
||||||
pub db_pool: SqlitePool,
|
pub db_pool: SqlitePool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, FromRow)]
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct UserData {
|
pub struct UserData {
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub user_id: i64,
|
pub user_id: i64,
|
||||||
|
|
@ -81,7 +83,7 @@ async fn main() {
|
||||||
//Routes that require authentication
|
//Routes that require authentication
|
||||||
.route("/logout", get(logout))
|
.route("/logout", get(logout))
|
||||||
.route("/profile", get(profile))
|
.route("/profile", get(profile))
|
||||||
.route("/useradmin", get(useradmin))
|
//.route("/useradmin", get(useradmin))
|
||||||
.route_layer(middleware::from_fn_with_state(app_state.clone(), check_auth))
|
.route_layer(middleware::from_fn_with_state(app_state.clone(), check_auth))
|
||||||
|
|
||||||
//Routes that don't require authentication
|
//Routes that don't require authentication
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
use askama_axum::Template;
|
use askama_axum::Template;
|
||||||
use axum::{response::IntoResponse, Extension};
|
use axum::{extract::State, response::IntoResponse, Extension};
|
||||||
use http::Request;
|
use http::Request;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use sqlx::SqlitePool;
|
||||||
|
|
||||||
use crate::{HtmlTemplate, UserData};
|
use crate::{HtmlTemplate, UserData};
|
||||||
|
|
||||||
|
|
@ -22,22 +24,32 @@ pub async fn profile<T>(
|
||||||
let template = ProfileTemplate { logged_in, name};
|
let template = ProfileTemplate { logged_in, name};
|
||||||
HtmlTemplate(template)
|
HtmlTemplate(template)
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
#[derive(Template)]
|
#[derive(Template)]
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
#[template(path = "useradmin.html")]
|
#[template(path = "useradmin.html")]
|
||||||
struct UserAdminTemplate {
|
struct UserAdminTemplate {
|
||||||
logged_in: bool,
|
logged_in: bool,
|
||||||
name: String,
|
name: String,
|
||||||
|
users: Vec<UserData>
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn useradmin<T>(
|
pub async fn useradmin<T>(
|
||||||
Extension(user_data): Extension<Option<UserData>>,
|
Extension(user_data): Extension<Option<UserData>>,
|
||||||
|
State(db_pool): State<SqlitePool>,
|
||||||
_request: Request<T>,
|
_request: Request<T>,
|
||||||
) -> impl IntoResponse {
|
) -> impl IntoResponse {
|
||||||
|
|
||||||
let user_email = user_data.map(|s| s.user_email);
|
let user_email = user_data.map(|s| s.user_email);
|
||||||
let logged_in = user_email.is_some();
|
let logged_in = user_email.is_some();
|
||||||
let name = user_email.unwrap_or_default();
|
let name = user_email.unwrap_or_default();
|
||||||
|
|
||||||
let template = UserAdminTemplate { logged_in, name};
|
let users = sqlx::query_as::<_, UserData>("SELECT * FROM users")
|
||||||
|
.fetch_all(&db_pool)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let template = UserAdminTemplate { logged_in, name, users };
|
||||||
HtmlTemplate(template)
|
HtmlTemplate(template)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
@ -2,5 +2,5 @@
|
||||||
{% block title %}User Profile{% endblock %}
|
{% block title %}User Profile{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
This is the user administration page. <br />
|
This is the user administration page. <br />
|
||||||
Your email address: {{ name }}.
|
{{ users }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
Loading…
Reference in New Issue