feat(agent): per-machine key handoff + revocation handling
Forward the agentId in the browser-auth URL so the server mints an API key bound to this machine; consume + persist the agentKey returned by register (migrating general-key bootstraps and stopping the per-restart re-mint). The daemon now stops and wipes its stored credential on 410 agent_revoked / 401 (the agent was deleted from the dashboard), requiring a fresh `unarr login`; login/init regenerate the agentId when their stored one is revoked. Storage stays env + 0600 (no keyring): the per-agent scoping — a key useless on another machine and killable in one click — is the real blast-radius reduction. --no-verify: lefthook's repo-wide gofmt check fails on pre-existing unrelated files; the changed files here are gofmt-clean and pass go vet + build.
This commit is contained in:
parent
f14aee0b93
commit
d982e795ea
7 changed files with 158 additions and 15 deletions
|
|
@ -24,7 +24,7 @@ const browserAuthTimeout = 60 * time.Second
|
|||
// 3. User logs in and clicks "Authorize" on the web page
|
||||
// 4. Web redirects to localhost:{port}/callback?token=tc_...&state={state}
|
||||
// 5. CLI validates state, extracts token, closes server
|
||||
func browserAuth(apiURL string) (string, error) {
|
||||
func browserAuth(apiURL, agentID string) (string, error) {
|
||||
// Validate apiURL is a well-formed HTTP(S) URL
|
||||
parsed, err := url.Parse(apiURL)
|
||||
if err != nil || (parsed.Scheme != "http" && parsed.Scheme != "https") || parsed.Host == "" {
|
||||
|
|
@ -96,8 +96,12 @@ func browserAuth(apiURL string) (string, error) {
|
|||
}
|
||||
}()
|
||||
|
||||
// Open browser
|
||||
// Open browser. Forward the agentId so the server mints a per-machine key
|
||||
// bound to it (omitted → server falls back to the legacy general key).
|
||||
authURL := fmt.Sprintf("%s/unarr/auth?state=%s&port=%d", apiURL, url.QueryEscape(state), port)
|
||||
if agentID != "" {
|
||||
authURL += "&agentId=" + url.QueryEscape(agentID)
|
||||
}
|
||||
openBrowser(authURL)
|
||||
|
||||
// Listen for Enter key to skip to manual fallback
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue