diff options
author | metamuffin <metamuffin@disroot.org> | 2023-12-11 01:19:51 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-12-11 01:19:51 +0100 |
commit | 36d7fb2790774c53415c96f8c6955be42bad952f (patch) | |
tree | 4481dac53a6d0896e90ff72b9b68665e59e159db /server/src/routes/api/mod.rs | |
parent | 767d6c4c7b8518198b0343781128027051b94ae5 (diff) | |
download | jellything-36d7fb2790774c53415c96f8c6955be42bad952f.tar jellything-36d7fb2790774c53415c96f8c6955be42bad952f.tar.bz2 jellything-36d7fb2790774c53415c96f8c6955be42bad952f.tar.zst |
(partially) fix security problem with federated session
Diffstat (limited to 'server/src/routes/api/mod.rs')
-rw-r--r-- | server/src/routes/api/mod.rs | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/server/src/routes/api/mod.rs b/server/src/routes/api/mod.rs index 615c836..87ed0e9 100644 --- a/server/src/routes/api/mod.rs +++ b/server/src/routes/api/mod.rs @@ -4,12 +4,12 @@ Copyright (C) 2023 metamuffin <metamuffin.org> */ use super::ui::{ - account::{login_logic, session::AdminSession, LoginForm}, + account::{login_logic, session::AdminSession}, error::MyResult, }; use crate::database::Database; use anyhow::{anyhow, Context}; -use jellycommon::Node; +use jellycommon::{user::UserPermission, Node}; use rocket::{ get, http::MediaType, @@ -20,8 +20,9 @@ use rocket::{ serde::json::Json, Request, State, }; +use serde::Deserialize; use serde_json::{json, Value}; -use std::ops::Deref; +use std::{collections::HashSet, ops::Deref}; #[get("/api")] pub fn r_api_root() -> Redirect { @@ -33,9 +34,26 @@ pub fn r_api_version() -> &'static str { "2" } +#[derive(Deserialize)] +pub struct CreateSessionParams { + username: String, + password: String, + expire: Option<i64>, + drop_permissions: Option<HashSet<UserPermission>>, +} + #[post("/api/create_session", data = "<data>")] -pub fn r_api_account_login(database: &State<Database>, data: Json<LoginForm>) -> MyResult<Value> { - let token = login_logic(database, &data.username, &data.password)?; +pub fn r_api_account_login( + database: &State<Database>, + data: Json<CreateSessionParams>, +) -> MyResult<Value> { + let token = login_logic( + database, + &data.username, + &data.password, + data.expire, + data.drop_permissions.clone(), + )?; Ok(json!(token)) } |