diff --git a/src/main.rs b/src/main.rs index 85d15cf..8cbd87a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,6 +36,16 @@ struct QueuePostPayload { queueItem: QueueSong } +#[derive(Deserialize)] +#[serde(crate = "rocket::serde")] +struct SongPayload { + uuid: String, + key: String, + song: String, + cover: Option +} + + #[derive(Deserialize)] #[serde(crate = "rocket::serde")] struct QueueUpdatePayload { @@ -278,11 +288,21 @@ async fn set_telemetry(pool: &State>, telemetry: Json) -> Usage::set_telemetry(data, pool).await.map_or(Err(Status::InternalServerError), |_| Ok(())) } -#[post("/song.php", format = "json", data = "")] -async fn set_song(pool: &State>, song: Json) -> Result<(), Status> { +#[post("/song.php?", format = "json", data = "")] +async fn set_song(pool: &State>, api_key: String, song: Json) -> Result<(), Status> { let data = song.into_inner(); - verify_access_key(&data.uuid, &data.key, pool).await?; - Song::set_song(data, pool).await.map_or(Err(Status::InternalServerError), |_| Ok(())) + + let cover = data.cover.map_or_else(String::new, |cover| cover); + + let song: Song = Song { + uuid: data.uuid, + song: data.song, + cover, + key: api_key, + }; + + verify_access_key(&song.uuid, &data.key, pool).await?; + Song::set_song(song, pool).await.map_or(Err(Status::InternalServerError), |_| Ok(())) } #[rocket::main]