mirror of
https://github.com/Jackzmc/storage.git
synced 2025-05-10 01:23:21 +00:00
setup session
This commit is contained in:
parent
786aa30183
commit
2773305304
4 changed files with 111 additions and 18 deletions
62
server/Cargo.lock
generated
62
server/Cargo.lock
generated
|
@ -1331,7 +1331,7 @@ dependencies = [
|
||||||
"num-integer",
|
"num-integer",
|
||||||
"num-iter",
|
"num-iter",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"rand",
|
"rand 0.8.5",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
@ -1613,8 +1613,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"rand_chacha",
|
"rand_chacha 0.3.1",
|
||||||
"rand_core",
|
"rand_core 0.6.4",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
|
||||||
|
dependencies = [
|
||||||
|
"rand_chacha 0.9.0",
|
||||||
|
"rand_core 0.9.3",
|
||||||
|
"zerocopy",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1624,7 +1635,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ppv-lite86",
|
"ppv-lite86",
|
||||||
"rand_core",
|
"rand_core 0.6.4",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_chacha"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
|
||||||
|
dependencies = [
|
||||||
|
"ppv-lite86",
|
||||||
|
"rand_core 0.9.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1636,6 +1657,15 @@ dependencies = [
|
||||||
"getrandom 0.2.15",
|
"getrandom 0.2.15",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.9.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom 0.3.2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.5.11"
|
version = "0.5.11"
|
||||||
|
@ -1730,7 +1760,7 @@ dependencies = [
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"rand",
|
"rand 0.8.5",
|
||||||
"ref-cast",
|
"ref-cast",
|
||||||
"rocket_codegen",
|
"rocket_codegen",
|
||||||
"rocket_http",
|
"rocket_http",
|
||||||
|
@ -1748,6 +1778,19 @@ dependencies = [
|
||||||
"yansi",
|
"yansi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rocket-session-store"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0fec8901f53c6e4cc677c25771b8629a65f745869e2da77490f3580a0b09e1c5"
|
||||||
|
dependencies = [
|
||||||
|
"rand 0.9.0",
|
||||||
|
"rocket",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rocket_codegen"
|
name = "rocket_codegen"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
|
@ -1819,7 +1862,7 @@ dependencies = [
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"pkcs1",
|
"pkcs1",
|
||||||
"pkcs8",
|
"pkcs8",
|
||||||
"rand_core",
|
"rand_core 0.6.4",
|
||||||
"signature",
|
"signature",
|
||||||
"spki",
|
"spki",
|
||||||
"subtle",
|
"subtle",
|
||||||
|
@ -1984,7 +2027,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
|
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"digest",
|
"digest",
|
||||||
"rand_core",
|
"rand_core 0.6.4",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2162,7 +2205,7 @@ dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"rand",
|
"rand 0.8.5",
|
||||||
"rsa",
|
"rsa",
|
||||||
"serde",
|
"serde",
|
||||||
"sha1",
|
"sha1",
|
||||||
|
@ -2202,7 +2245,7 @@ dependencies = [
|
||||||
"md-5",
|
"md-5",
|
||||||
"memchr",
|
"memchr",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rand",
|
"rand 0.8.5",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"sha2",
|
"sha2",
|
||||||
|
@ -2281,6 +2324,7 @@ dependencies = [
|
||||||
"int-enum",
|
"int-enum",
|
||||||
"log",
|
"log",
|
||||||
"rocket",
|
"rocket",
|
||||||
|
"rocket-session-store",
|
||||||
"rocket_dyn_templates",
|
"rocket_dyn_templates",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|
|
@ -16,4 +16,5 @@ serde_json = "1.0.140"
|
||||||
int-enum = "1.2.0"
|
int-enum = "1.2.0"
|
||||||
dotenvy = "0.15.7"
|
dotenvy = "0.15.7"
|
||||||
rocket_dyn_templates = { version = "0.2.0", features = ["handlebars"] }
|
rocket_dyn_templates = { version = "0.2.0", features = ["handlebars"] }
|
||||||
humanize-bytes = "1.0.6"
|
humanize-bytes = "1.0.6"
|
||||||
|
rocket-session-store = "0.2.1"
|
|
@ -1,15 +1,21 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use std::time::Duration;
|
||||||
use log::{debug, error, info, trace, warn};
|
use log::{debug, error, info, trace, warn};
|
||||||
use rocket::{catch, launch, routes, Request, State};
|
use rocket::{catch, launch, routes, Request, State};
|
||||||
use rocket::data::ByteUnit;
|
use rocket::data::ByteUnit;
|
||||||
use rocket::fs::{relative, FileServer};
|
use rocket::fs::{relative, FileServer};
|
||||||
use rocket::futures::AsyncWriteExt;
|
use rocket::futures::AsyncWriteExt;
|
||||||
|
use rocket::http::private::cookie::CookieBuilder;
|
||||||
|
use rocket::serde::Serialize;
|
||||||
use rocket_dyn_templates::handlebars::{handlebars_helper, Context, Handlebars, Helper, HelperResult, Output, RenderContext};
|
use rocket_dyn_templates::handlebars::{handlebars_helper, Context, Handlebars, Helper, HelperResult, Output, RenderContext};
|
||||||
use rocket_dyn_templates::Template;
|
use rocket_dyn_templates::Template;
|
||||||
|
use rocket_session_store::memory::MemoryStore;
|
||||||
|
use rocket_session_store::SessionStore;
|
||||||
use sqlx::{migrate, Pool, Postgres};
|
use sqlx::{migrate, Pool, Postgres};
|
||||||
use sqlx::postgres::PgPoolOptions;
|
use sqlx::postgres::PgPoolOptions;
|
||||||
use sqlx::types::Json;
|
use sqlx::types::Json;
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
|
use tracing_subscriber::fmt::writer::MakeWriterExt;
|
||||||
use crate::managers::libraries::LibraryManager;
|
use crate::managers::libraries::LibraryManager;
|
||||||
use crate::managers::repos::RepoManager;
|
use crate::managers::repos::RepoManager;
|
||||||
use crate::objs::library::Library;
|
use crate::objs::library::Library;
|
||||||
|
@ -31,6 +37,11 @@ pub type DB = Pool<Postgres>;
|
||||||
|
|
||||||
const MAX_UPLOAD_SIZE: ByteUnit = ByteUnit::Mebibyte(100_000);
|
const MAX_UPLOAD_SIZE: ByteUnit = ByteUnit::Mebibyte(100_000);
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Serialize)]
|
||||||
|
struct SessionData {
|
||||||
|
user_name: String
|
||||||
|
}
|
||||||
|
|
||||||
#[launch]
|
#[launch]
|
||||||
async fn rocket() -> _ {
|
async fn rocket() -> _ {
|
||||||
setup_logger();
|
setup_logger();
|
||||||
|
@ -62,18 +73,26 @@ async fn rocket() -> _ {
|
||||||
Arc::new(Mutex::new(manager))
|
Arc::new(Mutex::new(manager))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let memory_store: MemoryStore::<SessionData> = MemoryStore::default();
|
||||||
|
let store: SessionStore<SessionData> = SessionStore {
|
||||||
|
store: Box::new(memory_store),
|
||||||
|
name: "storage-session".into(),
|
||||||
|
duration: Duration::from_secs(3600 * 24 * 14),
|
||||||
|
// The cookie builder is used to set the cookie's path and other options.
|
||||||
|
// Name and value don't matter, they'll be overridden on each request.
|
||||||
|
cookie_builder: CookieBuilder::new("", "")
|
||||||
|
// Most web apps will want to use "/", but if your app is served from
|
||||||
|
// `example.com/myapp/` for example you may want to use "/myapp/" (note the trailing
|
||||||
|
// slash which prevents the cookie from being sent for `example.com/myapp2/`).
|
||||||
|
.path("/")
|
||||||
|
};
|
||||||
|
|
||||||
rocket::build()
|
rocket::build()
|
||||||
.manage(pool)
|
.manage(pool)
|
||||||
.manage(repo_manager)
|
.manage(repo_manager)
|
||||||
.manage(libraries_manager)
|
.manage(libraries_manager)
|
||||||
.mount("/static", FileServer::from(relative!("static")))
|
|
||||||
.mount("/api/library", routes![
|
.attach(store.fairing())
|
||||||
api::library::move_file, api::library::upload_file, api::library::download_file, api::library::list_files, api::library::get_file, api::library::delete_file,
|
|
||||||
])
|
|
||||||
.mount("/", routes![
|
|
||||||
ui::help::about,
|
|
||||||
ui::user::index, ui::user::redirect_list_library_files, ui::user::list_library_files, ui::user::get_library_file
|
|
||||||
])
|
|
||||||
.attach(Template::custom(|engines| {
|
.attach(Template::custom(|engines| {
|
||||||
let hb = &mut engines.handlebars;
|
let hb = &mut engines.handlebars;
|
||||||
|
|
||||||
|
@ -83,6 +102,15 @@ async fn rocket() -> _ {
|
||||||
hb.register_helper("is-active-exact", Box::new(helpers::is_active));
|
hb.register_helper("is-active-exact", Box::new(helpers::is_active));
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
.mount("/static", FileServer::from(relative!("static")))
|
||||||
|
.mount("/api/library", routes![
|
||||||
|
api::library::move_file, api::library::upload_file, api::library::download_file, api::library::list_files, api::library::get_file, api::library::delete_file,
|
||||||
|
])
|
||||||
|
.mount("/", routes![
|
||||||
|
ui::help::about,
|
||||||
|
ui::user::index, ui::user::redirect_list_library_files, ui::user::list_library_files, ui::user::get_library_file,
|
||||||
|
ui::help::test_get, ui::help::test_set
|
||||||
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
#[catch(404)]
|
#[catch(404)]
|
||||||
|
|
|
@ -1,7 +1,27 @@
|
||||||
use rocket::{get, Route};
|
use rocket::{get, Route};
|
||||||
|
use rocket::serde::json::Json;
|
||||||
use rocket_dyn_templates::{context, Template};
|
use rocket_dyn_templates::{context, Template};
|
||||||
|
use rocket_session_store::{Session, SessionResult};
|
||||||
|
use serde::Serialize;
|
||||||
|
use crate::SessionData;
|
||||||
|
|
||||||
#[get("/help/about")]
|
#[get("/help/about")]
|
||||||
pub fn about(route: &Route) -> Template {
|
pub fn about(route: &Route) -> Template {
|
||||||
Template::render("about", context! { route: route.uri.path() })
|
Template::render("about", context! { route: route.uri.path() })
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/test/set")]
|
||||||
|
pub async fn test_set(session: Session<'_, SessionData>) -> &str {
|
||||||
|
session.set(SessionData {
|
||||||
|
user_name: "test".to_string()
|
||||||
|
}).await;
|
||||||
|
"set."
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/test/get")]
|
||||||
|
pub async fn test_get(session: Session<'_, SessionData>) -> Result<Json<SessionData>, String> {
|
||||||
|
session.get().await
|
||||||
|
.map_err(|e| e.to_string())?
|
||||||
|
.map(|d| Json(d))
|
||||||
|
.ok_or_else(|| "Could not find user".to_string())
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue