handle http errors

This commit is contained in:
postscriptum 2026-03-22 12:42:24 +02:00
parent 2a39387a48
commit ff661ae26b

View file

@ -10,7 +10,7 @@ use fast_socks5::{
use list::List;
use log::*;
use opt::{AuthMode, Opt};
use rocket::{State, serde::json::Json};
use rocket::{State, http::Status, serde::json::Json};
use stats::{Snapshot, Total};
use std::{future::Future, sync::Arc};
use structopt::StructOpt;
@ -22,19 +22,33 @@ async fn index(totals: &State<Arc<Total>>) -> Json<Snapshot> {
}
#[rocket::get("/allow/<rule>")]
async fn allow(rule: &str, list: &State<Arc<List>>, totals: &State<Arc<Total>>) -> Json<bool> {
async fn allow(
rule: &str,
list: &State<Arc<List>>,
totals: &State<Arc<Total>>,
) -> Result<Json<bool>, Status> {
let result = list.allow(rule).await;
totals.set_entries(list.entries().await);
info!("Delete `{rule}` from the in-memory rules (operation status: {result:?})");
Json(result.is_ok_and(|v| v))
Ok(Json(result.map_err(|e| {
error!("Allow request handle error for `{rule}`: `{e}`");
Status::InternalServerError
})?))
}
#[rocket::get("/block/<rule>")]
async fn block(rule: &str, list: &State<Arc<List>>, totals: &State<Arc<Total>>) -> Json<bool> {
async fn block(
rule: &str,
list: &State<Arc<List>>,
totals: &State<Arc<Total>>,
) -> Result<Json<bool>, Status> {
let result = list.block(rule).await;
totals.set_entries(list.entries().await);
info!("Add `{rule}` to the in-memory rules (operation status: {result:?})");
Json(result.is_ok_and(|v| v))
Ok(Json(result.map_err(|e| {
error!("Block request handle error for `{rule}`: `{e}`");
Status::InternalServerError
})?))
}
#[rocket::launch]