recovery mode in embassyd

This commit is contained in:
Aiden McClelland
2021-09-14 12:19:20 -06:00
committed by Aiden McClelland
parent df50197c5f
commit 6b3570e150
5 changed files with 82 additions and 5 deletions

View File

@@ -1,3 +1,4 @@
pub mod auth;
pub mod cors;
pub mod encrypt;
pub mod recovery;

View File

@@ -0,0 +1,36 @@
use futures::FutureExt;
use rpc_toolkit::hyper::http::Error as HttpError;
use rpc_toolkit::hyper::{Body, Request, Response};
use rpc_toolkit::rpc_server_helpers::{noop4, DynMiddlewareStage2, DynMiddlewareStage3};
use rpc_toolkit::yajrc::RpcMethod;
use rpc_toolkit::Metadata;
use crate::Error;
pub async fn recovery<M: Metadata>(
_req: &mut Request<Body>,
_metadata: M,
) -> Result<Result<DynMiddlewareStage2, Response<Body>>, HttpError> {
Ok(Ok(Box::new(|_, rpc_req| {
let method = rpc_req.method.as_str().to_owned();
async move {
let res: DynMiddlewareStage3 = Box::new(|_, rpc_res| {
async move {
if let Err(e) = rpc_res {
if e.code == -32601 {
*e = Error::new(
anyhow::anyhow!("{} is not available on the Recovery API", method),
crate::ErrorKind::RecoveryMode,
)
.into();
}
}
Ok(Ok(noop4()))
}
.boxed()
});
Ok::<_, HttpError>(Ok(res))
}
.boxed()
})))
}