INNER CODE UNIT · Rust
rotate_token
ovexro/dockpanel · panel/agent/src/routes/mod.rs:212
pub async fn rotate_token(
axum::extract::State(state): axum::extract::State<AppState>,
) -> Result<axum::Json<serde_json::Value>, StatusCode> {
let new_token = uuid::Uuid::new_v4().to_string();
// Move current token to previous (with grace period)
let old_token = state.token.read().await.clone();
{
let mut prev = state.previous_token.write().await;
*prev = Some((old_token, std::time::Instant::now()));
}
// Write new token to disk atomically
let token_path = format!("{}/agent.token", super::CONFIG_DIR);
let tmp_path = format!("{}.tmp", token_path);
if let Err(e) = std::fs::write(&tmp_path, &new_token) {
tracing::error!("Failed to write temp token file: {e}");
return Err(StatusCode::INTERNAL_SERVER_ERROR);