domain-model: move domain::model module to separate crate

This commit is contained in:
Simon Broeng Jensen
2025-02-05 09:11:27 +01:00
committed by nitnelave
parent 3c0359eb8a
commit d854ace89f
39 changed files with 125 additions and 42 deletions

20
Cargo.lock generated
View File

@@ -2536,6 +2536,7 @@ dependencies = [
"lettre",
"lldap_auth",
"lldap_domain",
"lldap_domain_model",
"lldap_validation",
"log",
"mockall",
@@ -2644,6 +2645,25 @@ dependencies = [
"uuid 1.11.0",
]
[[package]]
name = "lldap_domain_model"
version = "0.1.0"
dependencies = [
"base64 0.21.7",
"bincode",
"chrono",
"derive_more 1.0.0",
"lldap_auth",
"lldap_domain",
"orion",
"pretty_assertions",
"sea-orm",
"serde",
"serde_bytes",
"thiserror",
"uuid 1.11.0",
]
[[package]]
name = "lldap_migration_tool"
version = "0.4.2"

View File

@@ -2,6 +2,7 @@
members = [
"crates/auth",
"crates/domain",
"crates/domain-model",
"crates/validation",
"server",
"app",

View File

@@ -0,0 +1,50 @@
[package]
authors = ["Valentin Tolmer <valentin@tolmer.fr>"]
name = "lldap_domain_model"
version = "0.1.0"
edition = "2021"
[features]
test = []
[dependencies]
base64 = "0.21"
bincode = "1.3"
orion = "0.17"
serde = "1"
serde_bytes = "0.11"
thiserror = "1"
[dev-dependencies]
pretty_assertions = "1"
[dependencies.chrono]
features = ["serde"]
version = "0.4"
[dependencies.derive_more]
features = ["debug", "display", "from", "from_str"]
default-features = false
version = "1"
[dependencies.lldap_auth]
path = "../auth"
features = ["opaque_server", "opaque_client", "sea_orm"]
[dependencies.lldap_domain]
path = "../domain"
[dependencies.sea-orm]
version = "0.12"
default-features = false
features = [
"macros",
"with-chrono",
"with-uuid",
"sqlx-all",
"runtime-actix-rustls",
]
[dependencies.uuid]
features = ["v1", "v3"]
version = "1"

View File

@@ -0,0 +1,2 @@
pub mod error;
pub mod model;

View File

@@ -1,4 +1,4 @@
use crate::domain::error::DomainError;
use crate::error::DomainError;
use lldap_domain::{
schema::AttributeList,
types::{Attribute, AttributeName, AttributeType, AttributeValue, Cardinality, Serialized},
@@ -6,7 +6,7 @@ use lldap_domain::{
// Value must be a serialized attribute value of the type denoted by typ,
// and either a singleton or unbounded list, depending on is_list.
pub(crate) fn deserialize_attribute_value(
pub fn deserialize_attribute_value(
value: &Serialized,
typ: AttributeType,
is_list: bool,
@@ -39,7 +39,7 @@ pub(crate) fn deserialize_attribute_value(
}
}
pub(crate) fn deserialize_attribute(
pub fn deserialize_attribute(
name: AttributeName,
value: &Serialized,
schema: &AttributeList,

View File

@@ -1,6 +1,6 @@
pub mod prelude;
pub(crate) mod deserialize;
pub mod deserialize;
pub mod groups;
pub mod jwt_refresh_storage;
pub mod jwt_storage;

View File

@@ -91,6 +91,9 @@ path = "../crates/domain"
path = "../crates/domain"
features = ["test"]
[dependencies.lldap_domain_model]
path = "../crates/domain-model"
[dependencies.lldap_validation]
path = "../crates/validation"

View File

@@ -1,4 +1,3 @@
use crate::domain::{error::Result, model::UserColumn};
use async_trait::async_trait;
use lldap_domain::{
requests::{
@@ -11,6 +10,7 @@ use lldap_domain::{
User, UserAndGroups, UserId, Uuid,
},
};
use lldap_domain_model::{error::Result, model::UserColumn};
use serde::{Deserialize, Serialize};
use std::collections::HashSet;

View File

@@ -16,12 +16,12 @@ use crate::domain::{
LdapInfo, UserFieldType,
},
},
model::UserColumn,
schema::PublicSchema,
};
use lldap_domain::types::{
AttributeName, AttributeType, GroupDetails, LdapObjectClass, User, UserAndGroups, UserId,
};
use lldap_domain_model::model::UserColumn;
pub fn get_user_attribute(
user: &User,

View File

@@ -7,7 +7,6 @@ use tracing::{debug, instrument, warn};
use crate::domain::{
handler::SubStringFilter,
ldap::error::{LdapError, LdapResult},
model::UserColumn,
schema::PublicSchema,
};
use lldap_domain::types::{
@@ -29,6 +28,7 @@ impl From<LdapSubstringFilter> for SubStringFilter {
}
}
}
use lldap_domain_model::model::UserColumn;
fn make_dn_pair<I>(mut iter: I) -> LdapResult<(String, String)>
where

View File

@@ -1,8 +1,6 @@
pub mod deserialize;
pub mod error;
pub mod handler;
pub mod ldap;
pub mod model;
pub mod opaque_handler;
pub mod schema;
pub mod sql_backend_handler;

View File

@@ -1,6 +1,6 @@
use crate::domain::error::Result;
use async_trait::async_trait;
use lldap_domain::types::UserId;
use lldap_domain_model::error::Result;
pub use lldap_auth::{login, registration};

View File

@@ -1,8 +1,6 @@
use crate::{
domain::{
error::{DomainError, Result},
handler::{GroupBackendHandler, GroupListerBackendHandler, GroupRequestFilter},
model::{self, deserialize, GroupColumn, MembershipColumn},
sql_backend_handler::SqlBackendHandler,
},
infra::access_control::UserReadableBackendHandler,
@@ -12,6 +10,10 @@ use lldap_domain::{
requests::{CreateGroupRequest, UpdateGroupRequest},
types::{AttributeName, Group, GroupDetails, GroupId, Serialized, Uuid},
};
use lldap_domain_model::{
error::{DomainError, Result},
model::{self, deserialize, GroupColumn, MembershipColumn},
};
use sea_orm::{
sea_query::{Alias, Cond, Expr, Func, IntoCondition, OnConflict, SimpleExpr},
ActiveModelTrait, ColumnTrait, DatabaseTransaction, EntityTrait, QueryFilter, QueryOrder,

View File

@@ -1,7 +1,5 @@
use super::{
error::{DomainError, Result},
handler::{BindRequest, LoginHandler},
model::{self, UserColumn},
opaque_handler::{login, registration, OpaqueHandler},
sql_backend_handler::SqlBackendHandler,
};
@@ -9,6 +7,10 @@ use async_trait::async_trait;
use base64::Engine;
use lldap_auth::opaque;
use lldap_domain::types::UserId;
use lldap_domain_model::{
error::{DomainError, Result},
model::{self, UserColumn},
};
use sea_orm::{ActiveModelTrait, ActiveValue, EntityTrait, QuerySelect};
use secstr::SecUtf8;
use tracing::{debug, info, instrument, warn};

View File

@@ -1,7 +1,5 @@
use crate::domain::{
error::{DomainError, Result},
handler::{ReadSchemaBackendHandler, SchemaBackendHandler},
model,
sql_backend_handler::SqlBackendHandler,
};
use async_trait::async_trait;
@@ -10,6 +8,10 @@ use lldap_domain::{
schema::{AttributeList, AttributeSchema, Schema},
types::{AttributeName, LdapObjectClass},
};
use lldap_domain_model::{
error::{DomainError, Result},
model,
};
use sea_orm::{
ActiveModelTrait, DatabaseTransaction, EntityTrait, QueryOrder, Set, TransactionTrait,
};

View File

@@ -1,9 +1,7 @@
use crate::domain::{
error::{DomainError, Result},
handler::{
ReadSchemaBackendHandler, UserBackendHandler, UserListerBackendHandler, UserRequestFilter,
},
model::{self, deserialize, GroupColumn, UserColumn},
sql_backend_handler::SqlBackendHandler,
};
use async_trait::async_trait;
@@ -11,6 +9,10 @@ use lldap_domain::{
requests::{CreateUserRequest, UpdateUserRequest},
types::{AttributeName, GroupDetails, GroupId, Serialized, User, UserAndGroups, UserId, Uuid},
};
use lldap_domain_model::{
error::{DomainError, Result},
model::{self, deserialize, GroupColumn, UserColumn},
};
use sea_orm::{
sea_query::{
query::OnConflict, Alias, Cond, Expr, Func, IntoColumnRef, IntoCondition, SimpleExpr,
@@ -414,10 +416,9 @@ impl UserBackendHandler for SqlBackendHandler {
#[cfg(test)]
mod tests {
use super::*;
use crate::domain::{
handler::SubStringFilter, model::UserColumn, sql_backend_handler::tests::*,
};
use crate::domain::{handler::SubStringFilter, sql_backend_handler::tests::*};
use lldap_domain::types::{Attribute, JpegPhoto};
use lldap_domain_model::model::UserColumn;
use pretty_assertions::{assert_eq, assert_ne};
#[tokio::test]

View File

@@ -4,7 +4,6 @@ use async_trait::async_trait;
use tracing::info;
use crate::domain::{
error::Result,
handler::{
BackendHandler, GroupBackendHandler, GroupListerBackendHandler, GroupRequestFilter,
ReadSchemaBackendHandler, SchemaBackendHandler, UserBackendHandler,
@@ -23,6 +22,7 @@ use lldap_domain::{
UserAndGroups, UserId,
},
};
use lldap_domain_model::error::Result;
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum Permission {

View File

@@ -23,12 +23,11 @@ use tracing::{debug, info, instrument, warn};
use lldap_auth::{login, password_reset, registration, JWTClaims};
use lldap_domain::types::{GroupDetails, GroupName, UserId};
use lldap_domain_model::{error::DomainError, model::UserColumn};
use crate::{
domain::{
error::DomainError,
handler::{BackendHandler, BindRequest, LoginHandler, UserRequestFilter},
model::UserColumn,
opaque_handler::OpaqueHandler,
},
infra::{

View File

@@ -1,9 +1,9 @@
use crate::domain::{
model::{self, JwtRefreshStorageColumn, JwtStorageColumn, PasswordResetTokensColumn},
sql_tables::DbConnection,
};
use crate::domain::sql_tables::DbConnection;
use actix::prelude::{Actor, AsyncContext, Context};
use cron::Schedule;
use lldap_domain_model::model::{
self, JwtRefreshStorageColumn, JwtStorageColumn, PasswordResetTokensColumn,
};
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
use std::{str::FromStr, time::Duration};
use tracing::{error, info, instrument};

View File

@@ -5,7 +5,6 @@ use crate::{
deserialize::deserialize_attribute_value,
handler::{BackendHandler, ReadSchemaBackendHandler},
ldap::utils::{map_user_field, UserFieldType},
model::UserColumn,
schema::PublicSchema,
},
infra::{
@@ -19,6 +18,7 @@ use juniper::{graphql_object, FieldResult, GraphQLInputObject};
use lldap_domain::types::{
AttributeType, Cardinality, GroupDetails, GroupId, LdapObjectClass, UserId,
};
use lldap_domain_model::model::UserColumn;
use serde::{Deserialize, Serialize};
use tracing::{debug, debug_span, Instrument, Span};

View File

@@ -926,16 +926,18 @@ mod tests {
use super::*;
use crate::{
domain::handler::*,
domain::model::UserColumn,
infra::test_utils::{setup_default_schema, MockTestBackendHandler},
};
use chrono::TimeZone;
use ldap3_proto::proto::{
LdapDerefAliases, LdapSearchScope, LdapSubstringFilter, LdapWhoamiRequest,
};
use lldap_domain::schema::{AttributeList, AttributeSchema, Schema};
use lldap_domain::types::*;
use lldap_domain::uuid;
use lldap_domain::{
schema::{AttributeList, AttributeSchema, Schema},
types::*,
uuid,
};
use lldap_domain_model::model::UserColumn;
use mockall::predicate::eq;
use pretty_assertions::assert_eq;
use std::collections::HashSet;
@@ -1854,7 +1856,7 @@ mod tests {
]))))
.times(1)
.return_once(|_| {
Err(crate::domain::error::DomainError::InternalError(
Err(lldap_domain_model::error::DomainError::InternalError(
"Error getting groups".to_string(),
))
});

View File

@@ -1,12 +1,12 @@
use super::tcp_backend_handler::TcpBackendHandler;
use crate::domain::{
error::*,
model::{self, JwtRefreshStorageColumn, JwtStorageColumn, PasswordResetTokensColumn},
sql_backend_handler::SqlBackendHandler,
};
use crate::domain::sql_backend_handler::SqlBackendHandler;
use async_trait::async_trait;
use chrono::NaiveDateTime;
use lldap_domain::types::UserId;
use lldap_domain_model::{
error::*,
model::{self, JwtRefreshStorageColumn, JwtStorageColumn, PasswordResetTokensColumn},
};
use sea_orm::{
sea_query::{Cond, Expr},
ActiveModelTrait, ColumnTrait, EntityTrait, IntoActiveModel, QueryFilter, QuerySelect,

View File

@@ -2,8 +2,8 @@ use async_trait::async_trait;
use chrono::NaiveDateTime;
use std::collections::HashSet;
use crate::domain::error::Result;
use lldap_domain::types::UserId;
use lldap_domain_model::error::Result;
#[async_trait]
pub trait TcpBackendHandler: Sync {

View File

@@ -1,6 +1,5 @@
use crate::{
domain::{
error::DomainError,
handler::{BackendHandler, LoginHandler},
opaque_handler::OpaqueHandler,
},
@@ -19,6 +18,7 @@ use actix_service::map_config;
use actix_web::{dev::AppConfig, guard, web, App, HttpResponse, Responder};
use anyhow::{Context, Result};
use hmac::Hmac;
use lldap_domain_model::error::DomainError;
use sha2::Sha512;
use std::collections::HashSet;
use std::path::PathBuf;

View File

@@ -1,4 +1,4 @@
use crate::domain::{error::Result, handler::*, opaque_handler::*};
use crate::domain::{handler::*, opaque_handler::*};
use lldap_domain::{
requests::{
CreateAttributeRequest, CreateGroupRequest, CreateUserRequest, UpdateGroupRequest,
@@ -7,6 +7,7 @@ use lldap_domain::{
schema::{AttributeList, AttributeSchema, Schema},
types::*,
};
use lldap_domain_model::error::Result;
use async_trait::async_trait;
use std::collections::HashSet;