08919752e3
Checkpoint multi-chantiers (arbre vert : tsc 0 erreur, 70 tests, build OK). - tâche 1.9 Phase 1 : schéma socle (machine_state/events/reports/raw_artifacts/ hardware/metrics + colonnes étendues) + wiring refresh/execute. Migration 0002. - tâche 1.9 Phase 2 : machine_credentials + machine_host_keys (non destructif, dual-read + backfill). Migration 0003. Fix séquence journal de migration. - tâche 2 : SJ-0 (types étendus rétro-compatibles, réducteur Docker, resolveTemplate), SJ-1 (update-analyze enrichi), SJ-2 (apply + diff dpkg + timeout inactivité SSH), SJ-3 (reboot vérifié boot_id). - WIP parallèle inclus : /api/capabilities, auth/apiTokens/apiClients, system metrics, scaffold app_rust, ajustements frontend. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
1.3 KiB
Rust
60 lines
1.3 KiB
Rust
use std::env;
|
|
|
|
pub const KEYRING_SERVICE: &str = "system-update";
|
|
pub const KEYRING_ACCOUNT: &str = "api-token";
|
|
|
|
pub fn keyring_identity() -> (&'static str, &'static str) {
|
|
(KEYRING_SERVICE, KEYRING_ACCOUNT)
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub enum TokenSource {
|
|
CliArgument(String),
|
|
Environment(Option<String>),
|
|
}
|
|
|
|
impl TokenSource {
|
|
pub fn from_env() -> Self {
|
|
Self::Environment(env::var("SYSTEM_UPDATE_TOKEN").ok())
|
|
}
|
|
|
|
pub fn load(self) -> Option<String> {
|
|
match self {
|
|
Self::CliArgument(token) => clean_token(token),
|
|
Self::Environment(token) => token.and_then(clean_token),
|
|
}
|
|
}
|
|
}
|
|
|
|
fn clean_token(token: String) -> Option<String> {
|
|
let trimmed = token.trim().to_string();
|
|
if trimmed.is_empty() {
|
|
None
|
|
} else {
|
|
Some(trimmed)
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn trims_cli_token() {
|
|
assert_eq!(
|
|
TokenSource::CliArgument(" su_token ".to_string()).load(),
|
|
Some("su_token".to_string())
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn ignores_empty_token() {
|
|
assert_eq!(TokenSource::CliArgument(" ".to_string()).load(), None);
|
|
}
|
|
|
|
#[test]
|
|
fn documents_future_keyring_identity() {
|
|
assert_eq!(keyring_identity(), ("system-update", "api-token"));
|
|
}
|
|
}
|