github: PATs live in swarm bao; the agent fetches them itself
An operator links an agent's GitHub personal access token in the swarm UI
(LinkGithubAccountForm, "link github account" on /agents). swarm-controller's
PUT /api/hives/{hive}/agents/{agent}/github-account stores it at
swarm/agents/<agent>/github-token (swarm_secret_client::github), a flat leaf
under the agent's prefix that the agent's existing read grant already covers:
no policy change, and no list grant, since there is one token per agent.
In the agent, hive-agent-github-token (oneshot + 2-minute timer, as the agent
user, under its own store certificate, ordered before hive-github-notify)
reads that path and writes <state>/github-token, 0600 and agent-owned, the
file the gh wrapper, git credential helper and hive-github-notify already
read. It replaces the file by rename only when the bytes changed and never
deletes it: a hive-written github-token stays until a token is linked in the
swarm UI. It is installed only with a store address and
services.hyperhive.agent.github.enable.
Removed: the dashboard's CR3D3NTIALS page (credentials.html/js/css, its
build entries and H0M3 tile; GITHUB was its only tab), hive-c0re's
dashboard/matrix_accounts.rs with GET/POST /api/github-account,
priv_client::write_agent_github_token, the host socket's
SetAgentGithubToken and `hivectl github set-token`, and hive-priv's
WriteAgentGithubToken with write_agent_state_file, its only caller gone.
Docs: integrations/github.md and swarm/ui.md describe the swarm path,
swarm/credentials.md gains the store-path row, and the hive UI docs,
hivectl docs and security.md's hive-priv table drop the removed pieces.
Closes #4347
This commit is contained in:
parent
2b2608a491
commit
8e23feb01b
41 changed files with 804 additions and 846 deletions
|
|
@ -5,7 +5,7 @@
|
|||
//! Container lifecycle + the approval queue (`agent <name> <spawn|kill|
|
||||
//! rebuild|restart|choom|…>`, `list-agents`, `approvals <pending|approve|
|
||||
//! deny>`, `stop` / `start`) and provisioning (`forge` / `matrix` /
|
||||
//! `github` / `gateway`) all forward to the daemon, which owns the broker,
|
||||
//! `gateway`) all forward to the daemon, which owns the broker,
|
||||
//! the credentials, and the provisioning logic — a running daemon is
|
||||
//! required for those. A couple of verbs work off local host state
|
||||
//! directly instead (`wg` / `peer-config` read the mesh key + TLS CA), so
|
||||
|
|
@ -27,7 +27,7 @@ mod client;
|
|||
/// Rebuild-queue node progress rendering (`wait_for_nodes` + the spinner /
|
||||
/// plain renderers), split out to keep this file manageable.
|
||||
mod dag_progress;
|
||||
use cli::{Cli, Cmd, ForgeCmd, GatewayCmd, GithubCmd, WgCmd};
|
||||
use cli::{Cli, Cmd, ForgeCmd, GatewayCmd, WgCmd};
|
||||
mod completions;
|
||||
mod quota;
|
||||
mod util;
|
||||
|
|
@ -41,10 +41,8 @@ use open::open_url;
|
|||
mod wg;
|
||||
use wg::{peer_config, require_hive_domain, wg_init, wg_peer, wg_status};
|
||||
mod choom;
|
||||
mod github;
|
||||
mod watch;
|
||||
use github::github_set_token;
|
||||
mod forge;
|
||||
mod watch;
|
||||
use forge::forge_reconcile_config;
|
||||
mod agents;
|
||||
use agents::{agents_list, run_agent};
|
||||
|
|
@ -73,13 +71,6 @@ async fn main() -> Result<()> {
|
|||
} => forge_reconcile_config(&socket, &agent, from, verbose).await,
|
||||
},
|
||||
Cmd::Matrix { cmd } => run_matrix_cmd(&socket, cmd).await,
|
||||
Cmd::Github { cmd } => match cmd {
|
||||
GithubCmd::SetToken {
|
||||
agent,
|
||||
token,
|
||||
token_stdin,
|
||||
} => github_set_token(&socket, &agent, token, token_stdin).await,
|
||||
},
|
||||
Cmd::Gateway { cmd } => match cmd {
|
||||
GatewayCmd::CreateUser {
|
||||
username,
|
||||
|
|
|
|||
Loading…
Reference in a new issue