|
|
@ -3,8 +3,9 @@ mod users;
|
|
|
|
mod webfinger;
|
|
|
|
mod webfinger;
|
|
|
|
|
|
|
|
|
|
|
|
use std::{
|
|
|
|
use std::{
|
|
|
|
fmt,
|
|
|
|
fmt::{self, Debug},
|
|
|
|
iter::once,
|
|
|
|
iter::once,
|
|
|
|
|
|
|
|
panic,
|
|
|
|
task::{Context, Poll},
|
|
|
|
task::{Context, Poll},
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -14,7 +15,7 @@ use axum::{
|
|
|
|
routing::{get, post},
|
|
|
|
routing::{get, post},
|
|
|
|
};
|
|
|
|
};
|
|
|
|
use inbox::inbox_post;
|
|
|
|
use inbox::inbox_post;
|
|
|
|
use log::{info, trace};
|
|
|
|
use log::{error, info, trace};
|
|
|
|
use tower_layer::Layer;
|
|
|
|
use tower_layer::Layer;
|
|
|
|
use tower_service::Service;
|
|
|
|
use tower_service::Service;
|
|
|
|
use users::users_get;
|
|
|
|
use users::users_get;
|
|
|
@ -34,13 +35,42 @@ fn init_logger() {
|
|
|
|
async fn main() {
|
|
|
|
async fn main() {
|
|
|
|
init_logger();
|
|
|
|
init_logger();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
panic::set_hook(Box::new(|i| {
|
|
|
|
|
|
|
|
if let Some(loc) = i.location() {
|
|
|
|
|
|
|
|
if let Some(s) = i.payload().downcast_ref::<&str>() {
|
|
|
|
|
|
|
|
error!(
|
|
|
|
|
|
|
|
"Panicked at {}:{}:{}\n{}",
|
|
|
|
|
|
|
|
loc.file(),
|
|
|
|
|
|
|
|
loc.line(),
|
|
|
|
|
|
|
|
loc.column(),
|
|
|
|
|
|
|
|
sanitize_printable(s)
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
} else if let Some(s) = i.payload().downcast_ref::<String>() {
|
|
|
|
|
|
|
|
error!(
|
|
|
|
|
|
|
|
"Panicked at {}:{}:{}\n{}",
|
|
|
|
|
|
|
|
loc.file(),
|
|
|
|
|
|
|
|
loc.line(),
|
|
|
|
|
|
|
|
loc.column(),
|
|
|
|
|
|
|
|
sanitize_printable(s)
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if let Some(s) = i.payload().downcast_ref::<&str>() {
|
|
|
|
|
|
|
|
error!("Panicked\n{s:?}",);
|
|
|
|
|
|
|
|
} else if let Some(s) = i.payload().downcast_ref::<String>() {
|
|
|
|
|
|
|
|
error!("Panicked\n{s:?}",);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
|
|
let app = Router::new()
|
|
|
|
let app = Router::new()
|
|
|
|
.route("/", get(root))
|
|
|
|
.route("/", get(root))
|
|
|
|
.route("/.well-known/webfinger", get(webfinger_get))
|
|
|
|
.route("/.well-known/webfinger", get(webfinger_get))
|
|
|
|
.route("/users/{users}/", get(users_get))
|
|
|
|
.route("/users/{users}/", get(users_get))
|
|
|
|
.route("/users/{users}", get(users_get))
|
|
|
|
.route("/users/{users}", get(users_get))
|
|
|
|
.route("/inbox/{users}/", post(inbox_post))
|
|
|
|
.route("/inbox/{users}/", post(inbox_post))
|
|
|
|
.fallback(fallback);
|
|
|
|
.fallback(fallback)
|
|
|
|
|
|
|
|
.layer(TraceLayer);
|
|
|
|
|
|
|
|
|
|
|
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:8000").await.unwrap();
|
|
|
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:8000").await.unwrap();
|
|
|
|
axum::serve(listener, app).await.unwrap();
|
|
|
|
axum::serve(listener, app).await.unwrap();
|
|
|
|