Internal directory + CLI improvements
This commit is contained in:
@@ -79,7 +79,7 @@ async fn imap_directory() {
|
||||
assert_eq!(
|
||||
&LookupResult::from(
|
||||
handle
|
||||
.query(QueryBy::Credentials(item.as_credentials()))
|
||||
.query(QueryBy::Credentials(item.as_credentials()), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_some()
|
||||
@@ -99,7 +99,7 @@ async fn imap_directory() {
|
||||
tokio::spawn(async move {
|
||||
LookupResult::from(
|
||||
handle
|
||||
.query(QueryBy::Credentials(item.as_credentials()))
|
||||
.query(QueryBy::Credentials(item.as_credentials()), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_some(),
|
||||
|
||||
@@ -158,10 +158,13 @@ async fn internal_directory() {
|
||||
assert_eq!(store.vrfy("jane").await.unwrap(), vec!["jane@example.org"]);
|
||||
assert_eq!(
|
||||
store
|
||||
.query(QueryBy::Credentials(&Credentials::new(
|
||||
"jane".to_string(),
|
||||
"my_secret".to_string()
|
||||
)))
|
||||
.query(
|
||||
QueryBy::Credentials(&Credentials::new(
|
||||
"jane".to_string(),
|
||||
"my_secret".to_string()
|
||||
)),
|
||||
true
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Some(Principal {
|
||||
@@ -176,10 +179,13 @@ async fn internal_directory() {
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.query(QueryBy::Credentials(&Credentials::new(
|
||||
"jane".to_string(),
|
||||
"wrong_password".to_string()
|
||||
)))
|
||||
.query(
|
||||
QueryBy::Credentials(&Credentials::new(
|
||||
"jane".to_string(),
|
||||
"wrong_password".to_string()
|
||||
)),
|
||||
true
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
None
|
||||
@@ -208,12 +214,23 @@ async fn internal_directory() {
|
||||
name: "list".to_string(),
|
||||
typ: Type::List,
|
||||
emails: vec!["list@example.org".to_string()],
|
||||
member_of: vec!["john".to_string(), "jane".to_string()],
|
||||
..Default::default()
|
||||
})
|
||||
.await,
|
||||
Ok(2)
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.update_account(
|
||||
QueryBy::Name("list"),
|
||||
vec![PrincipalUpdate::set(
|
||||
PrincipalField::Members,
|
||||
PrincipalValue::StringList(vec!["john".to_string(), "jane".to_string()]),
|
||||
),],
|
||||
)
|
||||
.await,
|
||||
Ok(())
|
||||
);
|
||||
assert!(store.rcpt("list@example.org").await.unwrap());
|
||||
assert_eq!(
|
||||
store.email_to_ids("list@example.org").await.unwrap(),
|
||||
@@ -221,15 +238,15 @@ async fn internal_directory() {
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.map_group_ids(store.query(QueryBy::Name("list")).await.unwrap().unwrap())
|
||||
.query(QueryBy::Name("list"), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap(),
|
||||
Principal {
|
||||
name: "list".to_string(),
|
||||
id: 2,
|
||||
typ: Type::List,
|
||||
emails: vec!["list@example.org".to_string()],
|
||||
member_of: vec!["john".to_string(), "jane".to_string()],
|
||||
..Default::default()
|
||||
}
|
||||
);
|
||||
@@ -283,7 +300,13 @@ async fn internal_directory() {
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.map_group_ids(store.query(QueryBy::Name("john")).await.unwrap().unwrap())
|
||||
.map_group_ids(
|
||||
store
|
||||
.query(QueryBy::Name("john"), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap()
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Principal {
|
||||
@@ -291,7 +314,11 @@ async fn internal_directory() {
|
||||
description: Some("John Doe".to_string()),
|
||||
secrets: vec!["secret".to_string(), "secret2".to_string()],
|
||||
emails: vec!["john@example.org".to_string()],
|
||||
member_of: vec!["sales".to_string(), "support".to_string()],
|
||||
member_of: vec![
|
||||
"list".to_string(),
|
||||
"sales".to_string(),
|
||||
"support".to_string()
|
||||
],
|
||||
..Default::default()
|
||||
}
|
||||
);
|
||||
@@ -327,7 +354,13 @@ async fn internal_directory() {
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.map_group_ids(store.query(QueryBy::Name("john")).await.unwrap().unwrap())
|
||||
.map_group_ids(
|
||||
store
|
||||
.query(QueryBy::Name("john"), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap()
|
||||
)
|
||||
.await
|
||||
.unwrap(),
|
||||
Principal {
|
||||
@@ -335,7 +368,7 @@ async fn internal_directory() {
|
||||
description: Some("John Doe".to_string()),
|
||||
secrets: vec!["secret".to_string(), "secret2".to_string()],
|
||||
emails: vec!["john@example.org".to_string()],
|
||||
member_of: vec!["sales".to_string()],
|
||||
member_of: vec!["list".to_string(), "sales".to_string()],
|
||||
..Default::default()
|
||||
}
|
||||
);
|
||||
@@ -380,7 +413,7 @@ async fn internal_directory() {
|
||||
store
|
||||
.map_group_ids(
|
||||
store
|
||||
.query(QueryBy::Name("john.doe"))
|
||||
.query(QueryBy::Name("john.doe"), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap()
|
||||
@@ -394,7 +427,7 @@ async fn internal_directory() {
|
||||
emails: vec!["john.doe@example.org".to_string()],
|
||||
quota: 1024,
|
||||
typ: Type::Superuser,
|
||||
member_of: vec!["sales".to_string()],
|
||||
member_of: vec!["list".to_string(), "sales".to_string()],
|
||||
..Default::default()
|
||||
}
|
||||
);
|
||||
@@ -408,7 +441,7 @@ async fn internal_directory() {
|
||||
.update_account(
|
||||
QueryBy::Name("list"),
|
||||
vec![PrincipalUpdate::remove_item(
|
||||
PrincipalField::MemberOf,
|
||||
PrincipalField::Members,
|
||||
PrincipalValue::String("john.doe".to_string()),
|
||||
)],
|
||||
)
|
||||
@@ -416,25 +449,15 @@ async fn internal_directory() {
|
||||
Ok(())
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.map_group_ids(store.query(QueryBy::Name("list")).await.unwrap().unwrap())
|
||||
.await
|
||||
.unwrap(),
|
||||
Principal {
|
||||
name: "list".to_string(),
|
||||
id: 2,
|
||||
typ: Type::List,
|
||||
emails: vec!["list@example.org".to_string()],
|
||||
member_of: vec!["jane".to_string()],
|
||||
..Default::default()
|
||||
}
|
||||
store.email_to_ids("list@example.org").await.unwrap(),
|
||||
vec![1]
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.update_account(
|
||||
QueryBy::Name("list"),
|
||||
vec![PrincipalUpdate::add_item(
|
||||
PrincipalField::MemberOf,
|
||||
PrincipalField::Members,
|
||||
PrincipalValue::String("john.doe".to_string()),
|
||||
)],
|
||||
)
|
||||
@@ -442,18 +465,8 @@ async fn internal_directory() {
|
||||
Ok(())
|
||||
);
|
||||
assert_eq!(
|
||||
store
|
||||
.map_group_ids(store.query(QueryBy::Name("list")).await.unwrap().unwrap())
|
||||
.await
|
||||
.unwrap(),
|
||||
Principal {
|
||||
name: "list".to_string(),
|
||||
id: 2,
|
||||
typ: Type::List,
|
||||
emails: vec!["list@example.org".to_string()],
|
||||
member_of: vec!["jane".to_string(), "john.doe".to_string()],
|
||||
..Default::default()
|
||||
}
|
||||
store.email_to_ids("list@example.org").await.unwrap(),
|
||||
vec![0, 1]
|
||||
);
|
||||
|
||||
// Field validation
|
||||
|
||||
@@ -46,10 +46,13 @@ async fn ldap_directory() {
|
||||
// Test authentication
|
||||
assert_eq!(
|
||||
handle
|
||||
.query(QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "john".to_string(),
|
||||
secret: "12345".to_string()
|
||||
}))
|
||||
.query(
|
||||
QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "john".to_string(),
|
||||
secret: "12345".to_string()
|
||||
}),
|
||||
true
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap()
|
||||
@@ -71,10 +74,13 @@ async fn ldap_directory() {
|
||||
);
|
||||
assert_eq!(
|
||||
handle
|
||||
.query(QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "bill".to_string(),
|
||||
secret: "password".to_string()
|
||||
}))
|
||||
.query(
|
||||
QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "bill".to_string(),
|
||||
secret: "password".to_string()
|
||||
}),
|
||||
true
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap()
|
||||
@@ -94,10 +100,13 @@ async fn ldap_directory() {
|
||||
.into_sorted()
|
||||
);
|
||||
assert!(handle
|
||||
.query(QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "bill".to_string(),
|
||||
secret: "invalid".to_string()
|
||||
}))
|
||||
.query(
|
||||
QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "bill".to_string(),
|
||||
secret: "invalid".to_string()
|
||||
}),
|
||||
true
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_none());
|
||||
@@ -105,7 +114,7 @@ async fn ldap_directory() {
|
||||
// Get user by name
|
||||
assert_eq!(
|
||||
handle
|
||||
.query(QueryBy::Name("jane"))
|
||||
.query(QueryBy::Name("jane"), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap()
|
||||
@@ -125,7 +134,11 @@ async fn ldap_directory() {
|
||||
|
||||
// Get group by name
|
||||
assert_eq!(
|
||||
handle.query(QueryBy::Name("sales")).await.unwrap().unwrap(),
|
||||
handle
|
||||
.query(QueryBy::Name("sales"), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap(),
|
||||
Principal {
|
||||
id: base_store.get_account_id("sales").await.unwrap().unwrap(),
|
||||
name: "sales".to_string(),
|
||||
|
||||
@@ -97,7 +97,7 @@ async fn smtp_directory() {
|
||||
let result: LookupResult = match item {
|
||||
Item::IsAccount(v) => handle.rcpt(v).await.unwrap().into(),
|
||||
Item::Authenticate(v) => handle
|
||||
.query(QueryBy::Credentials(v))
|
||||
.query(QueryBy::Credentials(v), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_some()
|
||||
@@ -129,7 +129,7 @@ async fn smtp_directory() {
|
||||
let result: LookupResult = match &item {
|
||||
Item::IsAccount(v) => handle.rcpt(v).await.unwrap().into(),
|
||||
Item::Authenticate(v) => handle
|
||||
.query(QueryBy::Credentials(v))
|
||||
.query(QueryBy::Credentials(v), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_some()
|
||||
|
||||
@@ -133,10 +133,13 @@ async fn sql_directory() {
|
||||
// Test authentication
|
||||
assert_eq!(
|
||||
handle
|
||||
.query(QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "john".to_string(),
|
||||
secret: "12345".to_string()
|
||||
}))
|
||||
.query(
|
||||
QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "john".to_string(),
|
||||
secret: "12345".to_string()
|
||||
}),
|
||||
true
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap(),
|
||||
@@ -157,10 +160,13 @@ async fn sql_directory() {
|
||||
);
|
||||
assert_eq!(
|
||||
handle
|
||||
.query(QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "bill".to_string(),
|
||||
secret: "password".to_string()
|
||||
}))
|
||||
.query(
|
||||
QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "bill".to_string(),
|
||||
secret: "password".to_string()
|
||||
}),
|
||||
true
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap(),
|
||||
@@ -178,17 +184,24 @@ async fn sql_directory() {
|
||||
}
|
||||
);
|
||||
assert!(handle
|
||||
.query(QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "bill".to_string(),
|
||||
secret: "invalid".to_string()
|
||||
}))
|
||||
.query(
|
||||
QueryBy::Credentials(&Credentials::Plain {
|
||||
username: "bill".to_string(),
|
||||
secret: "invalid".to_string()
|
||||
}),
|
||||
true
|
||||
)
|
||||
.await
|
||||
.unwrap()
|
||||
.is_none());
|
||||
|
||||
// Get user by name
|
||||
assert_eq!(
|
||||
handle.query(QueryBy::Name("jane")).await.unwrap().unwrap(),
|
||||
handle
|
||||
.query(QueryBy::Name("jane"), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap(),
|
||||
Principal {
|
||||
id: base_store.get_account_id("jane").await.unwrap().unwrap(),
|
||||
name: "jane".to_string(),
|
||||
@@ -203,7 +216,11 @@ async fn sql_directory() {
|
||||
|
||||
// Get group by name
|
||||
assert_eq!(
|
||||
handle.query(QueryBy::Name("sales")).await.unwrap().unwrap(),
|
||||
handle
|
||||
.query(QueryBy::Name("sales"), true)
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap(),
|
||||
Principal {
|
||||
id: base_store.get_account_id("sales").await.unwrap().unwrap(),
|
||||
name: "sales".to_string(),
|
||||
|
||||
Reference in New Issue
Block a user