2024-03-23 20:24:14 +01:00
|
|
|
use axum::{routing::{get, post}, Router};
|
|
|
|
use sea_orm::DatabaseConnection;
|
|
|
|
use crate::activitypub as ap;
|
|
|
|
|
|
|
|
pub async fn serve(db: DatabaseConnection, domain: String) {
|
|
|
|
// build our application with a single route
|
|
|
|
let app = Router::new()
|
|
|
|
// core server inbox/outbox, maybe for feeds? TODO do we need these?
|
|
|
|
.route("/", get(ap::view))
|
|
|
|
// TODO shared inboxes and instance stream will come later, just use users *boxes for now
|
2024-03-24 04:58:49 +01:00
|
|
|
.route("/inbox", get(ap::inbox::get))
|
|
|
|
// .route("/inbox", post(ap::inbox::post))
|
|
|
|
// .route("/outbox", get(ap::outbox::get))
|
|
|
|
// .route("/outbox", get(ap::outbox::post))
|
2024-03-24 23:55:48 +01:00
|
|
|
// AUTH routes
|
|
|
|
.route("/auth", post(ap::auth))
|
2024-03-23 20:24:14 +01:00
|
|
|
// .well-known and discovery
|
|
|
|
.route("/.well-known/webfinger", get(ap::well_known::webfinger))
|
|
|
|
.route("/.well-known/host-meta", get(ap::well_known::host_meta))
|
|
|
|
.route("/.well-known/nodeinfo", get(ap::well_known::nodeinfo_discovery))
|
|
|
|
.route("/nodeinfo/:version", get(ap::well_known::nodeinfo))
|
|
|
|
// actor routes
|
|
|
|
.route("/users/:id", get(ap::user::view))
|
2024-03-25 02:00:57 +01:00
|
|
|
.route("/users/:id/inbox", get(ap::user::inbox::get))
|
|
|
|
.route("/users/:id/inbox", post(ap::user::inbox::post))
|
|
|
|
.route("/users/:id/outbox", get(ap::user::outbox::get))
|
|
|
|
.route("/users/:id/outbox/page", get(ap::user::outbox::page))
|
2024-03-23 20:24:14 +01:00
|
|
|
.route("/users/:id/followers", get(ap::user::follow___::<false>))
|
|
|
|
.route("/users/:id/following", get(ap::user::follow___::<true>))
|
|
|
|
// specific object routes
|
|
|
|
.route("/activities/:id", get(ap::activity::view))
|
|
|
|
.route("/objects/:id", get(ap::object::view))
|
2024-03-25 21:19:02 +01:00
|
|
|
.with_state(
|
|
|
|
crate::server::Context::new(db, domain).await.expect("could not create server state")
|
|
|
|
);
|
2024-03-23 20:24:14 +01:00
|
|
|
|
2024-03-24 04:58:49 +01:00
|
|
|
// run our app with hyper, listening locally on port 3000
|
|
|
|
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await.unwrap();
|
2024-03-23 20:24:14 +01:00
|
|
|
|
|
|
|
axum::serve(listener, app)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
}
|