hvz/endpoints/
settings.rs1use actix_web::{HttpRequest, HttpResponse, Responder, get, post, web};
2
3use crate::{
4 player::Player, settings::{CHECKPOINT, HAS_STARTED, MAINTENANCE, Settings}, token::Token,
5};
6
7#[post("/settings/set_maintenance/{url_id}")]
9async fn set_maintenance(
10 url_id: web::Path<String>,
11 req: HttpRequest,
12 form: web::Json<bool>,
13) -> impl Responder {
14 if let Err(e) = Token::check_token(&req, &url_id).await {
15 return HttpResponse::Forbidden().body(e);
16 }
17
18 let admin = match Player::get_player(url_id.into_inner()).await {
19 Ok(Some(player)) => {
20 if let Err(err) = player.ensure_admin().await {
21 return HttpResponse::Unauthorized().body(err);
22 };
23 player
24 }
25 Ok(None) => return HttpResponse::NotFound().body("Player not found"),
26 Err(err) => return HttpResponse::InternalServerError().body(err),
27 };
28
29 let result = Settings::set_settings(MAINTENANCE, if form.0 { "true" } else { "false" }).await;
30
31 match result {
32 Ok(_) => HttpResponse::Ok().body("Maintenance mode enabled"),
33 Err(err) => HttpResponse::InternalServerError().body(err),
34 }
35}
36
37#[get("/settings/get_maintenance")]
39async fn get_maintenance(req: HttpRequest) -> impl Responder {
40 let maintenance: Result<String, _> = Settings::get_settings(MAINTENANCE).await;
41
42 match maintenance {
43 Ok(maintenance) => HttpResponse::Ok().body(maintenance),
44 Err(err) => HttpResponse::InternalServerError().body(err),
45 }
46}
47
48#[post("/settings/start_edition/{url_id}")]
50async fn start_edition(
51 url_id: web::Path<String>,
52 req: HttpRequest,
53 form: web::Json<bool>,
54) -> impl Responder {
55 if let Err(e) = Token::check_token(&req, &url_id).await {
56 return HttpResponse::Forbidden().body(e);
57 }
58
59 let admin = match Player::get_player(url_id.into_inner()).await {
60 Ok(Some(player)) => {
61 if let Err(err) = player.ensure_admin().await {
62 return HttpResponse::Unauthorized().body(err);
63 };
64 player
65 }
66 Ok(None) => return HttpResponse::NotFound().body("Player not found"),
67 Err(err) => return HttpResponse::InternalServerError().body(err),
68 };
69
70 let result = Settings::set_settings(HAS_STARTED, "true").await;
71
72 match result {
73 Ok(_) => HttpResponse::Ok().body("Edition started"),
74 Err(err) => HttpResponse::InternalServerError().body(err),
75 }
76}
77
78#[post("/settings/stop_edition/{url_id}")]
80async fn stop_edition(
81 url_id: web::Path<String>,
82 req: HttpRequest,
83) -> impl Responder {
84 if let Err(e) = Token::check_token(&req, &url_id).await {
85 return HttpResponse::Forbidden().body(e);
86 }
87
88 let admin = match Player::get_player(url_id.into_inner()).await {
89 Ok(Some(player)) => {
90 if let Err(err) = player.ensure_admin().await {
91 return HttpResponse::Unauthorized().body(err);
92 };
93 player
94 }
95 Ok(None) => return HttpResponse::NotFound().body("Player not found"),
96 Err(err) => return HttpResponse::InternalServerError().body(err),
97 };
98
99 let result = Settings::set_settings(HAS_STARTED, "false").await;
100
101 match result {
102 Ok(_) => HttpResponse::Ok().body("Edition stopped"),
103 Err(err) => HttpResponse::InternalServerError().body(err),
104 }
105}
106
107#[get("/settings/edition")]
109async fn get_edition() -> impl Responder {
110 let edition: Result<String, _> = Settings::get_settings(HAS_STARTED).await;
111
112 match edition {
113 Ok(edition) => HttpResponse::Ok().body(edition),
114 Err(err) => HttpResponse::InternalServerError().body(err),
115 }
116}
117
118#[post("/settings/set_checkpoint/{url_id}")]
120async fn set_checkpoint(url_id: web::Path<String>, req: HttpRequest, form: web::Json<String>) -> impl Responder {
121 if let Err(e) = Token::check_token(&req, &url_id).await {
122 return HttpResponse::Unauthorized().body(e);
123 }
124
125 let admin = match Player::get_player(url_id.into_inner()).await {
126 Ok(Some(player)) => {
127 if let Err(err) = player.ensure_admin().await {
128 return HttpResponse::Unauthorized().body(err);
129 }
130 player
131 }
132 Ok(None) => return HttpResponse::NotFound().body("Player not found"),
133 Err(err) => return HttpResponse::InternalServerError().body(err),
134 };
135
136 let result = Settings::set_settings(CHECKPOINT, form.into_inner()).await;
137
138 match result {
139 Ok(_) => HttpResponse::Ok().body("Checkpoint set"),
140 Err(err) => HttpResponse::InternalServerError().body(err),
141 }
142}
143
144#[get("/settings/get_checkpoint")]
146async fn get_checkpoint() -> impl Responder {
147 let checkpoint: Result<String, _> = Settings::get_settings(CHECKPOINT).await;
148
149 match checkpoint {
150 Ok(checkpoint) => HttpResponse::Ok().body(checkpoint),
151 Err(err) => HttpResponse::InternalServerError().body(err),
152 }
153}