Update API RPC module

This commit is contained in:
Dorian 2026-01-27 22:32:18 +00:00
parent 1c024c5d64
commit ccd9bf6ec8
621 changed files with 38 additions and 1 deletions

View File

@ -1,3 +1,4 @@
use crate::auth::AuthManager;
use crate::config::Config;
use crate::container::DevContainerOrchestrator;
use anyhow::{Context, Result};
@ -25,13 +26,18 @@ struct RpcError {
data: Option<serde_json::Value>,
}
/// Default dev password when no user is set up (matches mock-backend).
const DEV_DEFAULT_PASSWORD: &str = "password123";
pub struct RpcHandler {
_config: Config,
auth_manager: AuthManager,
orchestrator: Option<Arc<DevContainerOrchestrator>>,
}
impl RpcHandler {
pub async fn new(config: Config) -> Result<Self> {
let auth_manager = AuthManager::new(config.data_dir.clone());
let orchestrator = if config.dev_mode {
Some(Arc::new(
DevContainerOrchestrator::new(config.clone()).await?,
@ -42,6 +48,7 @@ impl RpcHandler {
Ok(Self {
_config: config,
auth_manager,
orchestrator,
})
}
@ -64,6 +71,7 @@ impl RpcHandler {
let result = match rpc_req.method.as_str() {
"echo" => self.handle_echo(rpc_req.params).await,
"server.echo" => self.handle_echo(rpc_req.params).await,
"auth.login" => self.handle_auth_login(rpc_req.params).await,
"container-install" => self.handle_container_install(rpc_req.params).await,
"container-start" => self.handle_container_start(rpc_req.params).await,
"container-stop" => self.handle_container_stop(rpc_req.params).await,
@ -115,6 +123,35 @@ impl RpcHandler {
Ok(serde_json::json!({ "message": "Hello from Archipelago!" }))
}
async fn handle_auth_login(
&self,
params: Option<serde_json::Value>,
) -> Result<serde_json::Value> {
let params = params.ok_or_else(|| anyhow::anyhow!("Missing params"))?;
let password = params
.get("password")
.and_then(|v| v.as_str())
.ok_or_else(|| anyhow::anyhow!("Missing password"))?;
let is_setup = self.auth_manager.is_setup().await?;
if !is_setup {
// Dev mode: allow default password so UI can log in without running setup
if self._config.dev_mode && password == DEV_DEFAULT_PASSWORD {
return Ok(serde_json::Value::Null);
}
return Err(anyhow::anyhow!(
"User not set up. Please complete setup first."
));
}
let valid = self.auth_manager.verify_password(password).await?;
if !valid {
return Err(anyhow::anyhow!("Password Incorrect"));
}
Ok(serde_json::Value::Null)
}
async fn handle_container_install(
&self,
params: Option<serde_json::Value>,

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More