keep the matrix appservice registration in bao, with the host file as the last copy
This commit is contained in:
parent
fb6cd36b5f
commit
d5c5862654
1 changed files with 1014 additions and 273 deletions
|
|
@ -8,14 +8,13 @@
|
|||
//! here is a verb below, not a new crate.
|
||||
//!
|
||||
//! [`appservice`] mints the **swarm's** own appservice registration and
|
||||
//! publishes its token for `swarm-controller`.
|
||||
//! keeps it in step with the store and publishes its token for `swarm-controller`.
|
||||
//!
|
||||
//! 🩸 **A secret is a path, never a value.** The only identifier any verb here
|
||||
//! logs is the store path; see `swarm_matrix_client`'s module doc for the same rule
|
||||
//! applied to error messages.
|
||||
|
||||
mod appservice;
|
||||
mod registration;
|
||||
|
||||
use anyhow::Result;
|
||||
use clap::{Parser, Subcommand};
|
||||
|
|
@ -43,9 +42,10 @@ enum Appservice {
|
|||
/// Mint the tokens when absent and render the registration tuwunel loads.
|
||||
/// Local only: it runs before the homeserver and must not need a network.
|
||||
Render,
|
||||
/// Write the rendered `as_token` to the swarm secret store when the
|
||||
/// store's copy differs.
|
||||
Publish,
|
||||
/// Make the state dir hold the store's registration, seeding the store
|
||||
/// from it when the store holds none, and restart the homeserver when the
|
||||
/// registration is newer than its last start. Runs beside the homeserver, never before it.
|
||||
Sync,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
|
|
@ -59,7 +59,7 @@ async fn main() -> Result<()> {
|
|||
|
||||
match Cli::parse().command {
|
||||
Command::Appservice(Appservice::Render) => appservice::render(),
|
||||
Command::Appservice(Appservice::Publish) => appservice::publish().await,
|
||||
Command::Appservice(Appservice::Sync) => appservice::sync().await,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -83,12 +83,8 @@ mod tests {
|
|||
cli.command,
|
||||
Command::Appservice(Appservice::Render)
|
||||
));
|
||||
let cli =
|
||||
Cli::try_parse_from(["swarm-matrix-ctl", "appservice", "publish"]).expect("a verb");
|
||||
assert!(matches!(
|
||||
cli.command,
|
||||
Command::Appservice(Appservice::Publish)
|
||||
));
|
||||
let cli = Cli::try_parse_from(["swarm-matrix-ctl", "appservice", "sync"]).expect("a verb");
|
||||
assert!(matches!(cli.command, Command::Appservice(Appservice::Sync)));
|
||||
Cli::try_parse_from(["swarm-matrix-ctl", "appservice"])
|
||||
.expect_err("a sub-verb is required");
|
||||
}
|
||||
|
|
@ -99,7 +95,7 @@ mod tests {
|
|||
.expect_err("only declared verbs are accepted");
|
||||
}
|
||||
|
||||
/// A bare invocation must not silently do something. `appservice publish`
|
||||
/// A bare invocation must not silently do something. `appservice sync`
|
||||
/// writes a credential, so "no verb" defaulting to it would make a typo in
|
||||
/// the unit write rather than fail.
|
||||
#[test]
|
||||
|
|
|
|||
Loading…
Reference in a new issue