use std::{collections::BTreeMap, time::Duration};
use scion_proto::address::IsdAsn;
use serde::{Deserialize, Serialize};
use snap_control::server::state::dto::IoControlPlaneConfigDto;
use snap_dataplane::{
dto::DataPlaneStateDto,
session::state::dto::{SessionManagerStateDto, SessionTokenIssuerStateDto},
state::DataPlaneId,
tunnel_gateway::state::dto::IoDataPlaneConfigDto,
};
use utoipa::ToSchema;
use crate::{
endhost_api::{EndhostApiId, EndhostApiState},
network::scion::topology::dto::ScionTopologyDto,
state::{RouterId, SnapId},
};
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct SystemStateDto {
pub snap_token_public_key: String,
pub auth_server_state: Option<AuthServerStateDto>,
pub snaps: BTreeMap<SnapId, SnapStateDto>,
pub routers: BTreeMap<RouterId, RouterStateDto>,
pub endhost_apis: BTreeMap<EndhostApiId, EndhostApiState>,
pub topology: Option<ScionTopologyDto>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct AuthServerStateDto {
pub token_exchanger: TokenExchangerStateDto,
}
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct TokenExchangerStateDto {
pub config: TokenExchangerConfigDto,
pub id_mapping: BTreeMap<String, String>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct TokenExchangerConfigDto {
pub private_key: String,
pub token_lifetime: Duration,
pub fake_idp: FakeIdpDto,
}
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct FakeIdpDto {
pub(crate) public_key: String,
}
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct IoConfigDto {
pub auth_server: IoAuthServerConfigDto,
pub snaps: BTreeMap<SnapId, IoSnapConfigDto>,
pub router_sockets: BTreeMap<RouterId, String>,
pub endhost_apis: BTreeMap<EndhostApiId, String>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct IoAuthServerConfigDto {
pub(crate) addr: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct SnapStateDto {
pub session_manager: SessionManagerStateDto,
pub session_issuer: SessionTokenIssuerStateDto,
pub data_planes: BTreeMap<DataPlaneId, DataPlaneStateDto>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct IoSnapConfigDto {
pub control_plane: IoControlPlaneConfigDto,
pub data_planes: BTreeMap<DataPlaneId, IoDataPlaneConfigDto>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct RouterStateDto {
pub isd_as: IsdAsn,
pub if_ids: Vec<u16>,
}