Skip to content

Commit

Permalink
fix: allow lowercase score type/period for leaderboard route
Browse files Browse the repository at this point in the history
  • Loading branch information
chatasma committed Jul 14, 2024
1 parent 668b64a commit 7a2fe02
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/http/leaderboard/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::str::FromStr;
use rocket::{Rocket, Build, State, serde::json::Json};

use crate::{MarsAPIState, socket::leaderboard::{ScoreType, LeaderboardEntry, LeaderboardPeriod}, util::{r#macro::unwrap_helper, error::ApiErrorResponder}};
use crate::util::string::enumify;

const PUBLIC_SCORE_TYPES : &[ScoreType] = &[
ScoreType::Kills,
Expand Down Expand Up @@ -36,11 +37,11 @@ async fn get_leaderboard_entries(
period: &str,
limit: Option<u32>
) -> Result<Json<Vec<LeaderboardEntry>>, ApiErrorResponder> {
let score_type = unwrap_helper::return_default!(ScoreType::from_str(score_type).ok(), Err(ApiErrorResponder::validation_error()));
let score_type = unwrap_helper::return_default!(ScoreType::from_str(enumify(score_type).as_str()).ok(), Err(ApiErrorResponder::validation_error()));
if !PUBLIC_SCORE_TYPES.contains(&score_type) {
return Err(ApiErrorResponder::unauthorized());
};
let period = unwrap_helper::return_default!(LeaderboardPeriod::from_str(period).ok(), Err(ApiErrorResponder::validation_error()));
let period = unwrap_helper::return_default!(LeaderboardPeriod::from_str(enumify(period).as_str()).ok(), Err(ApiErrorResponder::validation_error()));
let limit = limit.unwrap_or(10);
let leaderboard = score_type.to_leaderboard(&state.leaderboards).fetch_top(&period, if limit > 50 { 50 } else { limit }).await;
Ok(Json(leaderboard))
Expand Down
4 changes: 4 additions & 0 deletions src/util/string.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ pub fn deflate_string(data: &[u8]) -> anyhow::Result<Vec<u8>> {
encoder.write_all(data)?;
Ok(encoder.finish()?)
}

pub fn enumify(target: &str) -> String {
target.trim().to_uppercase().replace(" ", "_")
}

0 comments on commit 7a2fe02

Please sign in to comment.