user-auth store test1

This commit is contained in:
2022-12-30 20:48:13 +05:30
parent ec8122536d
commit ac80269c66
3 changed files with 70 additions and 32 deletions

View File

@@ -5,7 +5,6 @@ use axum::{
Json, Router,
extract::{Extension, Path},
};
use axum_extra::routing::SpaRouter;
use clap::Parser;
use image;
use serde::{Deserialize, Serialize};
@@ -40,7 +39,7 @@ use axum_login::{
use rand::Rng;
use std::sync::Arc;
#[derive(Debug, Default, Clone)]
#[derive(Debug, Default, Clone, Deserialize, Serialize)]
struct User {
id: i32,
password_hash: String,
@@ -269,9 +268,14 @@ pub async fn main() {
let usersmodels : Vec<user::Model> = QueryCore::list_all_users(&conn).await.unwrap_or(Vec::new());
//let users : Vec<User> = get_users_seaorm(conn);
//let user = User::get_rusty_user();
//for user in users.iter() {
// store.write().await.insert(user.get_id(), user);
//}
for usermodel in usersmodels.iter() {
let user = User{
id: usermodel.id,
name: usermodel.user_name.clone().unwrap(),
password_hash : usermodel.password_hash.clone(),
};
store.write().await.insert(user.get_id(), user);
}
let user_store = AuthMemoryStore::new(&store);
let auth_layer = AuthLayer::new(user_store, &secret);
@@ -279,22 +283,6 @@ pub async fn main() {
let meili_client = Client::new(meili_url, meili_key);
async fn login_handler(mut auth: AuthContext, Json(user_sent): Json<User>) {
auth.login(&user_sent).await.unwrap();
}
async fn register_handler(mut auth: AuthContext, Json(user_sent): Json<User>) {
// add to db
//store.write().await.insert(user_sent.get_id(), user_sent);
auth.login(&user_sent).await.unwrap();
}
async fn logout_handler(mut auth: AuthContext) {
dbg!("Logging out user: {}", &auth.current_user);
auth.logout().await;
}
let app = Router::new()
.route("/api/search_openlibrary", get(search_openlibrary))
.route("/api/create_by_isbn", get(create_by_isbn))
@@ -307,10 +295,12 @@ pub async fn main() {
.route("/api/login", post(login_handler))
.route("/api/register", post(register_handler))
.route("/api/logout", post(logout_handler))
.nest("/images", get_service(ServeDir::new(images_dir)).handle_error(handle_error))
.merge(SpaRouter::new("/assets", opt.static_dir))
.nest_service("/images", get_service(ServeDir::new(images_dir)).handle_error(handle_error))
.nest_service("/assets", get_service(ServeDir::new(opt.static_dir)).handle_error(handle_error))
// .merge(SpaRouter::new("/assets", opt.static_dir))
.layer(auth_layer)
.layer(session_layer)
.layer(Extension(store))
.layer(ServiceBuilder::new().layer(TraceLayer::new_for_http()))
.layer(Extension(conn))
.layer(Extension(meili_client))
@@ -340,18 +330,52 @@ pub async fn main() {
.expect("Unable to start server");
}
#[axum_macros::debug_handler]
async fn register_handler(mut auth: AuthContext, Extension(ref conn): Extension<DatabaseConnection>,
Extension(ref store): Extension<RwLock<HashMap<i32, User>>>,
Json(user_sent): Json<User>) -> impl IntoResponse {
// add to db
let user: user::Model = user::Model{
id: user_sent.id,
user_name: Some(user_sent.clone().name),
password_hash: user_sent.clone().password_hash,
};
let created_user = MutationCore::create_user(conn, user).await.expect("Failed to create user");
store.write().await.insert(created_user.last_insert_id, user_sent.clone());
auth.login(&user_sent).await.unwrap();
return "success";
}
async fn list_users(
Extension(ref conn): Extension<DatabaseConnection>,
axum::extract::Query(params): axum::extract::Query<HashMap<String, String>>,
) -> impl IntoResponse {
let res = PaginatedBookUIList{
num_pages: books.1 as u32,
books: resbooks
};
return Json(res);
// "success"
let usersmodels : Vec<user::Model> = QueryCore::list_all_users(&conn).await.unwrap_or(Vec::new());
let mut users : Vec<User> = Vec::new();
for usermodel in usersmodels.iter() {
let user = User{
id: usermodel.id,
name: usermodel.user_name.clone().unwrap().clone(),
password_hash : "".to_string(),
};
users.push(user);
}
return Json(users);
}
async fn login_handler(mut auth: AuthContext, Json(user_sent): Json<User>) -> impl IntoResponse {
auth.login(&user_sent).await.unwrap();
return "success";
}
//
async fn logout_handler(mut auth: AuthContext) {
dbg!("Logging out user: {}", &auth.current_user);
auth.logout().await;
}
//https://openlibrary.org/api/books?bibkeys=ISBN:9780980200447&jscmd=data&format=json
@@ -633,7 +657,7 @@ async fn list_book(
let backend_url = env::var("BACKEND_URL").expect("BACKEND_URL is not set in .env file");
let page: usize = params.get("page").unwrap().parse().unwrap();
let userid = params.get("userid").unwrap();
let userid: usize = params.get("userid").unwrap().parse().unwrap();
let books = QueryCore::find_books_plus_meta_in_page(conn,page,userid,12)
.await
@@ -687,7 +711,7 @@ async fn list_search_book(
) -> impl IntoResponse {
let page: usize = params.get("page").unwrap().parse().unwrap();
let search = params.get("search").unwrap();
let userid = params.get("userid").unwrap();
let userid: i32 = params.get("userid").unwrap().parse().unwrap();
dotenvy::dotenv().ok();
let backend_url = env::var("BACKEND_URL").expect("BACKEND_URL is not set in .env file");