gonzalo_domain/fleet/
mod.rs1mod atomic;
12mod audit;
13mod keys;
14mod link;
15mod records;
16
17pub use audit::{AuditEntry, AuditResult};
18pub use keys::FleetKeyError;
19pub use link::{Consumption, LinkSecret, LinkSecretError, LinkToken, RedeemError};
20pub use records::{
21 BindingOrigin, ChannelConfig, EmptyFollowSet, Follows, IdentityBinding, NotifyPreset, Person,
22 RoleGrant, VerifiedEmail,
23};
24
25use serde::{Deserialize, Serialize};
26
27pub const FLEET_NAMESPACE: &str = "fleet";
29pub const FLEET_AUDIT_NAMESPACE: &str = "fleet-audit";
32pub const PEOPLE_COLLECTION: &str = "people";
33pub const IDENTITY_BINDINGS_COLLECTION: &str = "identity-bindings";
34pub const ROLE_GRANTS_COLLECTION: &str = "role-grants";
35pub const CHANNELS_COLLECTION: &str = "channels";
36pub const LINK_TOKENS_COLLECTION: &str = "link-tokens";
37pub const AUDIT_ENTRIES_COLLECTION: &str = "entries";
38
39#[derive(
42 Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
43)]
44pub enum FleetRole {
45 #[default]
46 Viewer,
47 Operator,
48 Admin,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
53pub enum GrantScope {
54 Fleet,
55 Workspace(String),
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
61pub enum Authenticator {
62 Discord,
63 Slack,
64 Teams,
65 Oidc { issuer: String },
66 Other(String),
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
71pub enum FleetActor {
72 Person(String),
74 Unlinked {
75 authenticator: Authenticator,
76 subject: String,
77 },
78 Service(String),
80}
81
82#[cfg(test)]
83mod tests {
84 use super::*;
85
86 #[test]
87 fn roles_are_ordered_viewer_operator_admin() {
88 assert!(FleetRole::Viewer < FleetRole::Operator);
89 assert!(FleetRole::Operator < FleetRole::Admin);
90 assert_eq!(
91 FleetRole::Admin.min(FleetRole::Viewer),
92 FleetRole::Viewer,
93 "a viewer-ceiling channel caps an admin"
94 );
95 }
96}