fix: drop --server flag from hivectl matrix; discover server_name from homeserver
Add matrix::discover_server_name() via GET /_matrix/key/v2/server (unauthenticated federation endpoint, always returns server_name). hivectl is always talking to the local hive — no reason to require the operator to spell out the server_name.
This commit is contained in:
parent
8757dc615d
commit
c4a8b90236
2 changed files with 42 additions and 35 deletions
|
|
@ -598,6 +598,34 @@ pub async fn reset_user_password(
|
|||
)
|
||||
}
|
||||
|
||||
/// Discover the matrix `server_name` from the running homeserver via
|
||||
/// `GET /_matrix/key/v2/server` (unauthenticated federation key endpoint).
|
||||
/// The response JSON always includes `"server_name"` per the matrix spec.
|
||||
pub async fn discover_server_name(client: &reqwest::Client) -> Result<String> {
|
||||
let url = format!("{MATRIX_HTTP}/_matrix/key/v2/server");
|
||||
let resp = client
|
||||
.get(&url)
|
||||
.send()
|
||||
.await
|
||||
.context("matrix: GET /_matrix/key/v2/server")?;
|
||||
let status = resp.status();
|
||||
let body = resp
|
||||
.json::<serde_json::Value>()
|
||||
.await
|
||||
.context("matrix: parse /_matrix/key/v2/server response")?;
|
||||
if !status.is_success() {
|
||||
anyhow::bail!(
|
||||
"matrix: /_matrix/key/v2/server returned HTTP {status}, body: {body}"
|
||||
);
|
||||
}
|
||||
body["server_name"]
|
||||
.as_str()
|
||||
.map(str::to_owned)
|
||||
.with_context(|| {
|
||||
format!("matrix: /_matrix/key/v2/server response missing server_name field: {body}")
|
||||
})
|
||||
}
|
||||
|
||||
/// Read the hive admin access token from disk. Returns an error if it
|
||||
/// is absent — callers should gate their admin-API calls on this.
|
||||
pub fn read_admin_token() -> Result<String> {
|
||||
|
|
|
|||
Loading…
Reference in a new issue