actix-web-example: add inbox
This commit is contained in:
parent
fe7e417e40
commit
fba736e7f7
|
@ -1,17 +1,23 @@
|
|||
use actix_web::{middleware::Logger, web, App, HttpServer, ResponseError};
|
||||
use apub_actix_web::{
|
||||
serve_objects, RepoFactory, SignatureConfig, Verifier, VerifierFactory, VerifyError,
|
||||
inbox, serve_objects, RepoFactory, SignatureConfig, Verifier, VerifierFactory, VerifyError,
|
||||
};
|
||||
use apub_core::{
|
||||
deref::{Dereference, Repo},
|
||||
ingest::Ingest,
|
||||
};
|
||||
use apub_core::deref::{Dereference, Repo};
|
||||
use apub_rustcrypto::{RsaVerifier, RustcryptoError};
|
||||
use dashmap::DashMap;
|
||||
use example_types::{object_id, Note, NoteType, ObjectId};
|
||||
use std::future::{ready, Ready};
|
||||
use example_types::{AcceptedActivity, ActivityType, ObjectId};
|
||||
use std::{
|
||||
future::{ready, Ready},
|
||||
sync::Arc,
|
||||
};
|
||||
use url::Url;
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
struct MemoryRepo {
|
||||
inner: DashMap<Url, serde_json::Value>,
|
||||
inner: Arc<DashMap<Url, serde_json::Value>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
|
@ -102,6 +108,20 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a> Ingest<'a, AcceptedActivity, ()> for MemoryRepo {
|
||||
type Error = serde_json::Error;
|
||||
type Future = Ready<Result<(), Self::Error>>;
|
||||
|
||||
fn ingest(
|
||||
&'a self,
|
||||
_authority: Option<Url>,
|
||||
activity: AcceptedActivity,
|
||||
_metadata: (),
|
||||
) -> Self::Future {
|
||||
ready(self.insert(activity.id().clone(), &activity))
|
||||
}
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
if std::env::var("RUST_LOG").is_ok() {
|
||||
|
@ -113,30 +133,30 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
};
|
||||
|
||||
let repo = MemoryRepo::default();
|
||||
let id = object_id("http://localhost:8008/notes/asdf".parse()?);
|
||||
repo.insert(
|
||||
id.clone(),
|
||||
&Note {
|
||||
id,
|
||||
kind: NoteType::Note,
|
||||
content: String::from("hi"),
|
||||
},
|
||||
)?;
|
||||
let verifier = repo.clone();
|
||||
let ingest = repo.clone();
|
||||
let config = SignatureConfig::default();
|
||||
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
.wrap(Logger::default())
|
||||
.service(
|
||||
web::scope("/notes").configure(serve_objects::<ObjectId<NoteType>, _, _>(
|
||||
repo.clone(),
|
||||
verifier.clone(),
|
||||
config.clone(),
|
||||
"http://localhost:8008".to_string(),
|
||||
false,
|
||||
)),
|
||||
)
|
||||
.service(web::scope("/shared_inbox").configure(inbox(
|
||||
ingest.clone(),
|
||||
verifier.clone(),
|
||||
config.clone(),
|
||||
false,
|
||||
)))
|
||||
.service(web::scope("/activities").configure(serve_objects::<
|
||||
ObjectId<ActivityType>,
|
||||
_,
|
||||
_,
|
||||
>(
|
||||
repo.clone(),
|
||||
verifier.clone(),
|
||||
config.clone(),
|
||||
"http://localhost:8008".to_string(),
|
||||
false,
|
||||
)))
|
||||
})
|
||||
.bind("127.0.0.1:8008")?
|
||||
.run()
|
||||
|
|
Loading…
Reference in a new issue