mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-08 14:57:54 +00:00
feat(api): update rust deps, move /private/meta endpoint to rust-api
This commit is contained in:
parent
f14c421e23
commit
e415c6704f
20 changed files with 1835 additions and 244 deletions
|
|
@ -1,8 +1,9 @@
|
|||
use crate::error::PKError;
|
||||
use axum::{
|
||||
body::Body,
|
||||
http::{HeaderValue, Request, Response, StatusCode, Uri},
|
||||
http::{HeaderValue, StatusCode},
|
||||
response::IntoResponse,
|
||||
};
|
||||
use serde_json::{json, to_string, Value};
|
||||
use tracing::error;
|
||||
|
||||
pub fn header_or_unknown(header: Option<&HeaderValue>) -> &str {
|
||||
|
|
@ -19,21 +20,41 @@ pub fn header_or_unknown(header: Option<&HeaderValue>) -> &str {
|
|||
}
|
||||
}
|
||||
|
||||
pub async fn rproxy(req: Request<Body>) -> Response<Body> {
|
||||
let uri = Uri::from_static(&libpk::config.api.remote_url).to_string();
|
||||
|
||||
match hyper_reverse_proxy::call("0.0.0.0".parse().unwrap(), &uri[..uri.len() - 1], req).await {
|
||||
Ok(response) => response,
|
||||
Err(error) => {
|
||||
error!("error proxying request: {:?}", error);
|
||||
Response::builder()
|
||||
.status(StatusCode::INTERNAL_SERVER_ERROR)
|
||||
.body(Body::empty())
|
||||
.unwrap()
|
||||
}
|
||||
pub fn wrapper<F>(handler: F) -> impl Fn() -> axum::response::Response
|
||||
where
|
||||
F: Fn() -> anyhow::Result<Value>,
|
||||
{
|
||||
move || match handler() {
|
||||
Ok(v) => (StatusCode::OK, to_string(&v).unwrap()).into_response(),
|
||||
Err(error) => match error.downcast_ref::<PKError>() {
|
||||
Some(pkerror) => json_err(
|
||||
pkerror.response_code,
|
||||
to_string(&json!({ "message": pkerror.message, "code": pkerror.json_code }))
|
||||
.unwrap(),
|
||||
),
|
||||
None => {
|
||||
error!(
|
||||
"error in handler {}: {:#?}",
|
||||
std::any::type_name::<F>(),
|
||||
error
|
||||
);
|
||||
json_err(
|
||||
StatusCode::INTERNAL_SERVER_ERROR,
|
||||
r#"{"message": "500: Internal Server Error", "code": 0}"#.to_string(),
|
||||
)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_panic(err: Box<dyn std::any::Any + Send + 'static>) -> axum::response::Response {
|
||||
error!("caught panic from handler: {:#?}", err);
|
||||
json_err(
|
||||
StatusCode::INTERNAL_SERVER_ERROR,
|
||||
r#"{"message": "500: Internal Server Error", "code": 0}"#.to_string(),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn json_err(code: StatusCode, text: String) -> axum::response::Response {
|
||||
let mut response = (code, text).into_response();
|
||||
let headers = response.headers_mut();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue