Add tagged VFS undo journal, host API, and world CLI
This commit is contained in:
@@ -4,6 +4,7 @@ mod auth;
|
||||
mod pages;
|
||||
mod server;
|
||||
mod ssh;
|
||||
mod undo;
|
||||
pub use server::{Listener, Options, run_with_userland};
|
||||
|
||||
use crate::cred::{self, Caller, Cred, entry::EntryKey, webauthn::Passkeys};
|
||||
@@ -23,6 +24,7 @@ pub struct Api {
|
||||
pub passkeys: Mutex<Passkeys<rusqlite::Connection>>,
|
||||
pub entry: EntryKey,
|
||||
requests: Mutex<HashMap<u32, (Instant, u32)>>,
|
||||
journal: Mutex<Option<Arc<sausage_vfs::journal::Journal>>>,
|
||||
}
|
||||
impl Api {
|
||||
/// Own the connection and ceremony state shared by both transports.
|
||||
@@ -51,8 +53,12 @@ impl Api {
|
||||
passkeys: Mutex::new(passkeys),
|
||||
entry,
|
||||
requests: Mutex::new(HashMap::new()),
|
||||
journal: Mutex::new(None),
|
||||
}
|
||||
}
|
||||
pub(crate) fn attach_journal(&self, journal: Option<Arc<sausage_vfs::journal::Journal>>) {
|
||||
*self.journal.lock().unwrap() = journal;
|
||||
}
|
||||
fn rate_limit(&self, caller: &Caller) -> Result<()> {
|
||||
let now = Instant::now();
|
||||
let mut requests = self.requests.lock().map_err(|_| Error(500, "storage"))?;
|
||||
@@ -132,6 +138,9 @@ fn request_view(request: cred::requests::Request) -> Result<Value> {
|
||||
|
||||
/// Handle a request without a network transport. Errors contain only static error kinds.
|
||||
pub async fn handle(ctx: &Api, caller: Caller, request: Request<Bytes>) -> Response<Bytes> {
|
||||
if request.uri().path() == "/undo" || request.uri().path().starts_with("/undo/") {
|
||||
return undo::handle(ctx, caller, request).await;
|
||||
}
|
||||
respond(ctx, caller, request)
|
||||
}
|
||||
fn respond(ctx: &Api, caller: Caller, request: Request<Bytes>) -> Response<Bytes> {
|
||||
|
||||
Reference in New Issue
Block a user