use axum::{extract::Path, response::IntoResponse, Extension, Json}; use crate::cookie::CookieJar; use crate::{get_user_from_token, routes::api::v1::UpdateUploadAlt, State}; use tetratto_core::model::{oauth, ApiReturn, Error}; pub async fn delete_request( jar: CookieJar, Extension(data): Extension, Path((bucket, id)): Path<(String, usize)>, ) -> impl IntoResponse { let data = &(data.read().await).0; let user = match get_user_from_token!(jar, data, oauth::AppScope::UserManageUploads) { Some(ua) => ua, None => return Json(Error::NotAllowed.into()), }; let upload = match data.2.get_upload_by_id_bucket(id, &bucket).await { Ok(x) => x, Err(e) => return Json(Error::MiscError(e.to_string()).into()), }; if user.id != upload.owner { return Json(Error::NotAllowed.into()); } match data.2.delete_upload_with_bucket(id, &bucket).await { Ok(_) => Json(ApiReturn { ok: true, message: "Upload deleted".to_string(), payload: (), }), Err(e) => Json(Error::MiscError(e.to_string()).into()), } } pub async fn update_alt_request( jar: CookieJar, Extension(data): Extension, Path(id): Path, Json(props): Json, ) -> impl IntoResponse { let data = &(data.read().await).0; let user = match get_user_from_token!(jar, data, oauth::AppScope::UserManageUploads) { Some(ua) => ua, None => return Json(Error::NotAllowed.into()), }; let mut upload = match data.2.get_upload_by_id(id).await { Ok(x) => x, Err(e) => return Json(Error::MiscError(e.to_string()).into()), }; if user.id != upload.owner { return Json(Error::NotAllowed.into()); } upload.metadata.alt = props.alt; match data.2.update_upload_metadata(id, upload.metadata).await { Ok(_) => Json(ApiReturn { ok: true, message: "Upload updated".to_string(), payload: (), }), Err(e) => Json(Error::MiscError(e.to_string()).into()), } }