mirror of
https://github.com/lldap/lldap.git
synced 2026-07-25 17:58:44 +00:00
server: Introduce True/False for filters
This should help clean up the filter debug representations
This commit is contained in:
committed by
nitnelave
parent
4018a6933c
commit
b4f636ded9
@@ -39,23 +39,27 @@ fn attribute_condition(name: AttributeName, value: Option<Serialized>) -> Cond {
|
||||
fn get_group_filter_expr(filter: GroupRequestFilter) -> Cond {
|
||||
use GroupRequestFilter::*;
|
||||
let group_table = Alias::new("groups");
|
||||
fn bool_to_expr(b: bool) -> Cond {
|
||||
SimpleExpr::Value(b.into()).into_condition()
|
||||
}
|
||||
fn get_repeated_filter(
|
||||
fs: Vec<GroupRequestFilter>,
|
||||
condition: Cond,
|
||||
default_value: bool,
|
||||
) -> Cond {
|
||||
if fs.is_empty() {
|
||||
bool_to_expr(default_value)
|
||||
} else {
|
||||
fs.into_iter()
|
||||
.map(get_group_filter_expr)
|
||||
.fold(condition, Cond::add)
|
||||
}
|
||||
}
|
||||
match filter {
|
||||
And(fs) => {
|
||||
if fs.is_empty() {
|
||||
SimpleExpr::Value(true.into()).into_condition()
|
||||
} else {
|
||||
fs.into_iter()
|
||||
.fold(Cond::all(), |c, f| c.add(get_group_filter_expr(f)))
|
||||
}
|
||||
}
|
||||
Or(fs) => {
|
||||
if fs.is_empty() {
|
||||
SimpleExpr::Value(false.into()).into_condition()
|
||||
} else {
|
||||
fs.into_iter()
|
||||
.fold(Cond::any(), |c, f| c.add(get_group_filter_expr(f)))
|
||||
}
|
||||
}
|
||||
True => bool_to_expr(true),
|
||||
False => bool_to_expr(false),
|
||||
And(fs) => get_repeated_filter(fs, Cond::all(), true),
|
||||
Or(fs) => get_repeated_filter(fs, Cond::any(), false),
|
||||
Not(f) => get_group_filter_expr(*f).not(),
|
||||
DisplayName(name) => GroupColumn::LowercaseDisplayName
|
||||
.eq(name.as_str().to_lowercase())
|
||||
|
||||
@@ -54,13 +54,16 @@ fn user_id_subcondition(filter: Cond) -> Cond {
|
||||
fn get_user_filter_expr(filter: UserRequestFilter) -> Cond {
|
||||
use UserRequestFilter::*;
|
||||
let group_table = Alias::new("r1");
|
||||
fn bool_to_expr(b: bool) -> Cond {
|
||||
SimpleExpr::Value(b.into()).into_condition()
|
||||
}
|
||||
fn get_repeated_filter(
|
||||
fs: Vec<UserRequestFilter>,
|
||||
condition: Cond,
|
||||
default_value: bool,
|
||||
) -> Cond {
|
||||
if fs.is_empty() {
|
||||
SimpleExpr::Value(default_value.into()).into_condition()
|
||||
bool_to_expr(default_value)
|
||||
} else {
|
||||
fs.into_iter()
|
||||
.map(get_user_filter_expr)
|
||||
@@ -68,6 +71,8 @@ fn get_user_filter_expr(filter: UserRequestFilter) -> Cond {
|
||||
}
|
||||
}
|
||||
match filter {
|
||||
True => bool_to_expr(true),
|
||||
False => bool_to_expr(false),
|
||||
And(fs) => get_repeated_filter(fs, Cond::all(), true),
|
||||
Or(fs) => get_repeated_filter(fs, Cond::any(), false),
|
||||
Not(f) => get_user_filter_expr(*f).not(),
|
||||
@@ -519,13 +524,7 @@ mod tests {
|
||||
#[tokio::test]
|
||||
async fn test_list_users_false_filter() {
|
||||
let fixture = TestFixture::new().await;
|
||||
let users = get_user_names(
|
||||
&fixture.handler,
|
||||
Some(UserRequestFilter::Not(Box::new(UserRequestFilter::And(
|
||||
vec![],
|
||||
)))),
|
||||
)
|
||||
.await;
|
||||
let users = get_user_names(&fixture.handler, Some(UserRequestFilter::False)).await;
|
||||
assert_eq!(users, Vec::<String>::new());
|
||||
}
|
||||
|
||||
@@ -633,7 +632,7 @@ mod tests {
|
||||
let users = get_user_names(
|
||||
&fixture.handler,
|
||||
Some(UserRequestFilter::Or(vec![
|
||||
UserRequestFilter::Or(vec![]),
|
||||
UserRequestFilter::False,
|
||||
UserRequestFilter::Or(vec![
|
||||
UserRequestFilter::UserId(UserId::new("bob")),
|
||||
UserRequestFilter::UserId(UserId::new("John")),
|
||||
|
||||
Reference in New Issue
Block a user