|
|
|
@ -7,7 +7,7 @@ use actix_web::{
|
|
|
|
|
};
|
|
|
|
|
use core::future::Ready;
|
|
|
|
|
use futures_util::future::LocalBoxFuture;
|
|
|
|
|
use lemmy_apub::plugins::{call_plugin, load_plugins};
|
|
|
|
|
use lemmy_apub::plugins::Plugins;
|
|
|
|
|
use serde_json::Value;
|
|
|
|
|
use std::{future::ready, rc::Rc};
|
|
|
|
|
use tracing::info;
|
|
|
|
@ -61,33 +61,30 @@ where
|
|
|
|
|
let path = service_req.path().replace("/api/v3/", "").replace("/", "_");
|
|
|
|
|
// TODO: naming can be a bit silly, `POST /api/v3/post` becomes `api_before_post_post`
|
|
|
|
|
let before_plugin_hook = format!("api_before_{method}_{path}").to_lowercase();
|
|
|
|
|
let mut plugins = Plugins::load()?;
|
|
|
|
|
|
|
|
|
|
info!("Calling plugin hook {}", &before_plugin_hook);
|
|
|
|
|
if let Some(mut plugins) = load_plugins()? {
|
|
|
|
|
if plugins.function_exists(&before_plugin_hook) {
|
|
|
|
|
let payload = service_req.extract::<Bytes>().await?;
|
|
|
|
|
|
|
|
|
|
let mut json: Value = serde_json::from_slice(&payload.to_vec())?;
|
|
|
|
|
call_plugin(plugins, &before_plugin_hook, &mut json)?;
|
|
|
|
|
|
|
|
|
|
let (_, mut new_payload) = Payload::create(true);
|
|
|
|
|
new_payload.unread_data(Bytes::from(serde_json::to_vec(&json)?));
|
|
|
|
|
service_req.set_payload(new_payload.into());
|
|
|
|
|
}
|
|
|
|
|
if plugins.exists(&before_plugin_hook) {
|
|
|
|
|
let payload = service_req.extract::<Bytes>().await?;
|
|
|
|
|
let mut json: Value = serde_json::from_slice(&payload.to_vec()).unwrap_or(Value::Null);
|
|
|
|
|
plugins.call(&before_plugin_hook, &mut json)?;
|
|
|
|
|
let (_, mut new_payload) = Payload::create(true);
|
|
|
|
|
new_payload.unread_data(Bytes::from(serde_json::to_vec(&json)?));
|
|
|
|
|
service_req.set_payload(new_payload.into());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let mut res = svc.call(service_req).await?;
|
|
|
|
|
|
|
|
|
|
let after_plugin_hook = format!("api_after_{method}_{path}").to_lowercase();
|
|
|
|
|
|
|
|
|
|
info!("Calling plugin hook {}", &after_plugin_hook);
|
|
|
|
|
if let Some(mut plugins) = load_plugins()? {
|
|
|
|
|
if plugins.function_exists(&before_plugin_hook) {
|
|
|
|
|
res = res.map_body(|_, body| {
|
|
|
|
|
let mut json: Value =
|
|
|
|
|
serde_json::from_slice(&body.try_into_bytes().unwrap().to_vec()).unwrap();
|
|
|
|
|
call_plugin(plugins, &after_plugin_hook, &mut json).unwrap();
|
|
|
|
|
BoxBody::new(Bytes::from(serde_json::to_vec(&json).unwrap()))
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
if plugins.exists(&after_plugin_hook) {
|
|
|
|
|
res = res.map_body(|_, body| {
|
|
|
|
|
let mut json: Value =
|
|
|
|
|
serde_json::from_slice(&body.try_into_bytes().unwrap().to_vec()).unwrap();
|
|
|
|
|
plugins.call(&after_plugin_hook, &mut json).unwrap();
|
|
|
|
|
BoxBody::new(Bytes::from(serde_json::to_vec(&json).unwrap()))
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(res)
|
|
|
|
|