refactor(common): move Policy types from types.rs into policy.rs
This commit is contained in:
@@ -1 +1,75 @@
|
||||
// Policy parsing implemented in Phase 2.
|
||||
//! Policy types and (Phase 2) parsing/merging logic. Wire-typed for D-Bus.
|
||||
|
||||
use crate::types::{Method, Mode};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, zvariant::Type, Default)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
#[zvariant(signature = "s")]
|
||||
pub enum StorageBackend {
|
||||
#[default]
|
||||
PerUser,
|
||||
Central,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, zvariant::Type)]
|
||||
pub struct StackPolicy {
|
||||
pub mode: Mode,
|
||||
pub methods: Vec<Method>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, zvariant::Type, Default)]
|
||||
pub struct Storage {
|
||||
#[serde(default)]
|
||||
pub backend: StorageBackend,
|
||||
#[serde(default)]
|
||||
pub central_path: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, zvariant::Type, Default)]
|
||||
pub struct Firstrun {
|
||||
#[serde(default)]
|
||||
pub default_required_methods: Vec<Method>,
|
||||
#[serde(default)]
|
||||
pub deadline_hours: u32,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, zvariant::Type, Default)]
|
||||
pub struct Policy {
|
||||
#[serde(default)]
|
||||
pub stacks: BTreeMap<String, StackPolicy>,
|
||||
#[serde(default)]
|
||||
pub storage: Storage,
|
||||
#[serde(default)]
|
||||
pub firstrun: Firstrun,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn policy_default_is_all_disabled() {
|
||||
let p = Policy::default();
|
||||
assert!(p.stacks.is_empty());
|
||||
assert_eq!(p.storage.backend, StorageBackend::PerUser);
|
||||
assert!(p.firstrun.default_required_methods.is_empty());
|
||||
assert_eq!(p.firstrun.deadline_hours, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn policy_serde_via_json() {
|
||||
let mut p = Policy::default();
|
||||
p.stacks.insert(
|
||||
"sudo".to_string(),
|
||||
StackPolicy {
|
||||
mode: Mode::Required,
|
||||
methods: vec![Method::Fido2],
|
||||
},
|
||||
);
|
||||
let json = serde_json::to_string(&p).unwrap();
|
||||
let back: Policy = serde_json::from_str(&json).unwrap();
|
||||
assert_eq!(p, back);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user