summaryrefslogtreecommitdiff
path: root/crates/directory/src/memory
diff options
context:
space:
mode:
authormdecimus <mauro@stalw.art>2023-07-09 11:06:37 +0200
committermdecimus <mauro@stalw.art>2023-07-09 11:06:37 +0200
commit843e61139af590a3d9aacc937dae3bb2641f4f3b (patch)
tree76b6609e5801b4e0a937938c6b1ff7dbd2a30004 /crates/directory/src/memory
parent705762c3125d976a9d6b589df4c9430fead10435 (diff)
Installation binary first part.
Diffstat (limited to 'crates/directory/src/memory')
-rw-r--r--crates/directory/src/memory/config.rs24
1 files changed, 17 insertions, 7 deletions
diff --git a/crates/directory/src/memory/config.rs b/crates/directory/src/memory/config.rs
index 8d6c16c2..4909b610 100644
--- a/crates/directory/src/memory/config.rs
+++ b/crates/directory/src/memory/config.rs
@@ -12,12 +12,26 @@ impl MemoryDirectory {
prefix: impl AsKey,
) -> utils::config::Result<Arc<dyn Directory>> {
let prefix = prefix.as_key();
- let mut directory = MemoryDirectory::default();
+ let mut directory = MemoryDirectory {
+ opt: DirectoryOptions::from_config(config, prefix.clone())?,
+ ..Default::default()
+ };
for lookup_id in config.sub_keys((prefix.as_str(), "users")) {
let name = config
.value_require((prefix.as_str(), "users", lookup_id, "name"))?
.to_string();
+ let mut typ = Type::Individual;
+ let mut member_of = Vec::new();
+
+ for (_, group) in config.values((prefix.as_str(), "users", lookup_id, "member-of")) {
+ if !group.eq_ignore_ascii_case(&directory.opt.superuser_group) {
+ member_of.push(group.to_string());
+ } else {
+ typ = Type::Superuser;
+ }
+ }
+
directory.principals.insert(
name.clone(),
Principal {
@@ -26,17 +40,14 @@ impl MemoryDirectory {
.values((prefix.as_str(), "users", lookup_id, "secret"))
.map(|(_, v)| v.to_string())
.collect(),
- typ: Type::Individual,
+ typ,
description: config
.value((prefix.as_str(), "users", lookup_id, "description"))
.map(|v| v.to_string()),
quota: config
.property((prefix.as_str(), "users", lookup_id, "quota"))?
.unwrap_or(0),
- member_of: config
- .values((prefix.as_str(), "users", lookup_id, "member-of"))
- .map(|(_, v)| v.to_string())
- .collect(),
+ member_of,
},
);
let mut emails = Vec::new();
@@ -105,7 +116,6 @@ impl MemoryDirectory {
directory
.domains
.extend(config.parse_lookup_list((&prefix, "lookup.domains"))?);
- directory.opt = DirectoryOptions::from_config(config, prefix)?;
Ok(Arc::new(directory))
}