user-auth store test1
This commit is contained in:
13
backend/Cargo.lock
generated
13
backend/Cargo.lock
generated
@@ -464,6 +464,18 @@ dependencies = [
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-macros"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e4df0fc33ada14a338b799002f7e8657711422b25d4e16afb032708d6b185621"
|
||||
dependencies = [
|
||||
"heck 0.4.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-sessions"
|
||||
version = "0.4.1"
|
||||
@@ -602,6 +614,7 @@ dependencies = [
|
||||
"axum 0.6.1",
|
||||
"axum-extra 0.3.7",
|
||||
"axum-login",
|
||||
"axum-macros",
|
||||
"booksman-orm",
|
||||
"booksman-search",
|
||||
"chrono",
|
||||
|
||||
@@ -28,6 +28,7 @@ tracing-subscriber = "^0.3"
|
||||
itertools = "0.10"
|
||||
chrono = "0.4"
|
||||
axum-login = "0.4"
|
||||
axum-macros = "0.3"
|
||||
#features = ["sqlite"]
|
||||
|
||||
[dependencies.rand]
|
||||
|
||||
@@ -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
|
||||
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(),
|
||||
};
|
||||
return Json(res);
|
||||
// "success"
|
||||
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");
|
||||
|
||||
Reference in New Issue
Block a user