use serde::Deserialize;
use std::{fs::File, io::Read};
use uuid::Uuid;
use super::errors::DeviceError;
use super::{IssuerUrl, ClientId};
#[derive(Deserialize, Debug)]
pub struct DeviceConfig {
pub client_id: ClientId,
pub domain: String,
pub host: String,
pub id: Uuid,
pub initiated_on: String,
pub is_managed: bool,
pub key_security: String,
pub key_type: String,
pub location: String,
pub role: String,
pub title: String,
}
impl DeviceConfig {
pub fn get_issuer_url(&self) -> Result<IssuerUrl, openidconnect::url::ParseError> {
IssuerUrl::new(format!("{}/oidc", self.host))
}
}
pub fn load_device_config(file_path: &str) -> Result<DeviceConfig, DeviceError> {
let mut file = File::open(file_path)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
let config: DeviceConfig = serde_yml::from_str(&contents)?;
Ok(config)
}