server: extract opaque_handler to a separate crate

This commit is contained in:
Valentin Tolmer
2025-04-04 22:02:20 -05:00
committed by nitnelave
parent dbba4c4e26
commit a49ddeaa02
16 changed files with 91 additions and 60 deletions
+7
View File
@@ -102,6 +102,9 @@ path = "../crates/domain-handlers"
[dependencies.lldap_frontend_options]
path = "../crates/frontend-options"
[dependencies.lldap_opaque_handler]
path = "../crates/opaque-handler"
[dependencies.lldap_validation]
path = "../crates/validation"
@@ -182,6 +185,10 @@ features = ["sync", "tls-rustls"]
path = "../crates/auth"
features = ["test"]
[dev-dependencies.lldap_opaque_handler]
path = "../crates/opaque-handler"
features = ["test"]
[dev-dependencies.reqwest]
version = "*"
default-features = false
-1
View File
@@ -1,6 +1,5 @@
pub mod deserialize;
pub mod ldap;
pub mod opaque_handler;
pub mod sql_backend_handler;
pub mod sql_group_backend_handler;
pub mod sql_migrations;
-46
View File
@@ -1,46 +0,0 @@
use async_trait::async_trait;
use lldap_domain::types::UserId;
use lldap_domain_model::error::Result;
pub use lldap_auth::{login, registration};
#[async_trait]
pub trait OpaqueHandler: Send + Sync {
async fn login_start(
&self,
request: login::ClientLoginStartRequest,
) -> Result<login::ServerLoginStartResponse>;
async fn login_finish(&self, request: login::ClientLoginFinishRequest) -> Result<UserId>;
async fn registration_start(
&self,
request: registration::ClientRegistrationStartRequest,
) -> Result<registration::ServerRegistrationStartResponse>;
async fn registration_finish(
&self,
request: registration::ClientRegistrationFinishRequest,
) -> Result<()>;
}
#[cfg(test)]
mockall::mock! {
pub TestOpaqueHandler{}
impl Clone for TestOpaqueHandler {
fn clone(&self) -> Self;
}
#[async_trait]
impl OpaqueHandler for TestOpaqueHandler {
async fn login_start(
&self,
request: login::ClientLoginStartRequest
) -> Result<login::ServerLoginStartResponse>;
async fn login_finish(&self, request: login::ClientLoginFinishRequest ) -> Result<UserId>;
async fn registration_start(
&self,
request: registration::ClientRegistrationStartRequest
) -> Result<registration::ServerRegistrationStartResponse>;
async fn registration_finish(
&self,
request: registration::ClientRegistrationFinishRequest
) -> Result<()>;
}
}
+1 -1
View File
@@ -54,7 +54,7 @@ pub mod tests {
}
pub async fn insert_user(handler: &SqlBackendHandler, name: &str, pass: &str) {
use crate::domain::opaque_handler::OpaqueHandler;
use lldap_opaque_handler::OpaqueHandler;
insert_user_no_password(handler, name).await;
let mut rng = rand::rngs::OsRng;
let client_registration_start =
@@ -1,5 +1,5 @@
use async_trait::async_trait;
use crate::domain::sql_backend_handler::SqlBackendHandler;
use async_trait::async_trait;
use lldap_access_control::UserReadableBackendHandler;
use lldap_domain::{
requests::{CreateGroupRequest, UpdateGroupRequest},
+2 -4
View File
@@ -1,7 +1,4 @@
use super::{
opaque_handler::{OpaqueHandler, login, registration},
sql_backend_handler::SqlBackendHandler,
};
use crate::domain::sql_backend_handler::SqlBackendHandler;
use async_trait::async_trait;
use base64::Engine;
use lldap_auth::opaque;
@@ -11,6 +8,7 @@ use lldap_domain_model::{
error::{DomainError, Result},
model::{self, UserColumn},
};
use lldap_opaque_handler::{OpaqueHandler, login, registration};
use sea_orm::{ActiveModelTrait, ActiveValue, EntityTrait, QuerySelect};
use secstr::SecUtf8;
use tracing::{debug, info, instrument, warn};
+4 -6
View File
@@ -1,9 +1,6 @@
use crate::{
domain::opaque_handler::OpaqueHandler,
infra::{
tcp_backend_handler::*,
tcp_server::{AppState, TcpError, TcpResult, error_to_http_response},
},
use crate::infra::{
tcp_backend_handler::*,
tcp_server::{AppState, TcpError, TcpResult, error_to_http_response},
};
use actix_web::{
HttpRequest, HttpResponse,
@@ -28,6 +25,7 @@ use lldap_domain_handlers::handler::{
BackendHandler, BindRequest, LoginHandler, UserRequestFilter,
};
use lldap_domain_model::{error::DomainError, model::UserColumn};
use lldap_opaque_handler::OpaqueHandler;
use sha2::Sha512;
use std::{
collections::HashSet,
+4 -6
View File
@@ -1,11 +1,9 @@
use crate::{
domain::ldap::{
error::{LdapError, LdapResult},
utils::{LdapInfo, UserOrGroupName, get_user_or_group_id_from_distinguished_name},
},
use crate::domain::ldap::{
error::{LdapError, LdapResult},
utils::{LdapInfo, UserOrGroupName, get_user_or_group_id_from_distinguished_name},
};
use lldap_access_control::AdminBackendHandler;
use ldap3_proto::proto::{LdapOp, LdapResult as LdapResultOp, LdapResultCode};
use lldap_access_control::AdminBackendHandler;
use lldap_domain::types::{GroupName, UserId};
use lldap_domain_handlers::handler::GroupRequestFilter;
use lldap_domain_model::error::DomainError;
+4 -6
View File
@@ -1,10 +1,7 @@
use crate::{
domain::{
ldap::{
error::{LdapError, LdapResult},
utils::{LdapInfo, parse_distinguished_name},
},
opaque_handler::OpaqueHandler,
domain::ldap::{
error::{LdapError, LdapResult},
utils::{LdapInfo, parse_distinguished_name},
},
infra::ldap::{
compare, create, delete, modify,
@@ -24,6 +21,7 @@ use lldap_access_control::AccessControlledBackendHandler;
use lldap_auth::access_control::ValidationResults;
use lldap_domain::types::AttributeName;
use lldap_domain_handlers::handler::{BackendHandler, LoginHandler};
use lldap_opaque_handler::OpaqueHandler;
use tracing::{debug, instrument};
use super::delete::make_del_response;
+4 -6
View File
@@ -1,10 +1,7 @@
use crate::{
domain::{
ldap::{
error::{LdapError, LdapResult},
utils::{LdapInfo, get_user_id_from_distinguished_name},
},
opaque_handler::OpaqueHandler,
domain::ldap::{
error::{LdapError, LdapResult},
utils::{LdapInfo, get_user_id_from_distinguished_name},
},
infra::ldap::{
handler::make_modify_response,
@@ -15,6 +12,7 @@ use ldap3_proto::proto::{LdapModify, LdapModifyRequest, LdapModifyType, LdapOp,
use lldap_access_control::UserReadableBackendHandler;
use lldap_auth::access_control::ValidationResults;
use lldap_domain::types::UserId;
use lldap_opaque_handler::OpaqueHandler;
async fn handle_modify_change(
opaque_handler: &impl OpaqueHandler,
+6 -10
View File
@@ -1,23 +1,19 @@
use crate::{
domain::{
ldap::{
error::{LdapError, LdapResult},
utils::{LdapInfo, get_user_id_from_distinguished_name},
},
opaque_handler::OpaqueHandler,
},
infra::{
ldap::handler::make_extended_response,
domain::ldap::{
error::{LdapError, LdapResult},
utils::{LdapInfo, get_user_id_from_distinguished_name},
},
infra::ldap::handler::make_extended_response,
};
use lldap_access_control::{AccessControlledBackendHandler, UserReadableBackendHandler};
use anyhow::Result;
use ldap3_proto::proto::{
LdapBindCred, LdapBindRequest, LdapOp, LdapPasswordModifyRequest, LdapResultCode,
};
use lldap_access_control::{AccessControlledBackendHandler, UserReadableBackendHandler};
use lldap_auth::access_control::ValidationResults;
use lldap_domain::types::UserId;
use lldap_domain_handlers::handler::{BackendHandler, BindRequest, LoginHandler};
use lldap_opaque_handler::OpaqueHandler;
pub(crate) async fn do_bind(
ldap_info: &LdapInfo,
+5 -7
View File
@@ -1,18 +1,16 @@
use crate::{
domain::opaque_handler::OpaqueHandler,
infra::{
configuration::{Configuration, LdapsOptions},
ldap::handler::LdapHandler,
},
use crate::infra::{
configuration::{Configuration, LdapsOptions},
ldap::handler::LdapHandler,
};
use lldap_access_control::AccessControlledBackendHandler;
use actix_rt::net::TcpStream;
use actix_server::ServerBuilder;
use actix_service::{ServiceFactoryExt, fn_service};
use anyhow::{Context, Result, anyhow};
use ldap3_proto::{LdapCodec, control::LdapControl, proto::LdapMsg, proto::LdapOp};
use lldap_access_control::AccessControlledBackendHandler;
use lldap_domain::types::AttributeName;
use lldap_domain_handlers::handler::{BackendHandler, LoginHandler};
use lldap_opaque_handler::OpaqueHandler;
use rustls::PrivateKey;
use tokio_rustls::TlsAcceptor as RustlsTlsAcceptor;
use tokio_util::codec::{FramedRead, FramedWrite};
+7 -9
View File
@@ -1,13 +1,9 @@
use crate::{
domain::opaque_handler::OpaqueHandler,
infra::{
auth_service,
configuration::{Configuration, MailOptions},
logging::CustomRootSpanBuilder,
tcp_backend_handler::*,
},
use crate::infra::{
auth_service,
configuration::{Configuration, MailOptions},
logging::CustomRootSpanBuilder,
tcp_backend_handler::*,
};
use lldap_access_control::{AccessControlledBackendHandler, ReadonlyBackendHandler};
use actix_files::Files;
use actix_http::{HttpServiceBuilder, header};
use actix_server::ServerBuilder;
@@ -15,8 +11,10 @@ use actix_service::map_config;
use actix_web::{App, HttpResponse, Responder, dev::AppConfig, guard, web};
use anyhow::{Context, Result};
use hmac::Hmac;
use lldap_access_control::{AccessControlledBackendHandler, ReadonlyBackendHandler};
use lldap_domain_handlers::handler::{BackendHandler, LoginHandler};
use lldap_domain_model::error::DomainError;
use lldap_opaque_handler::OpaqueHandler;
use sha2::Sha512;
use std::collections::HashSet;
use std::path::PathBuf;
+10 -3
View File
@@ -1,14 +1,21 @@
use crate::domain::opaque_handler::*;
use lldap_domain::{
requests::{
CreateAttributeRequest, CreateGroupRequest, CreateUserRequest, UpdateGroupRequest,
UpdateUserRequest,
},
schema::{AttributeList, AttributeSchema, Schema},
types::*,
types::{
AttributeName, AttributeType, Group, GroupDetails, GroupId, LdapObjectClass, User,
UserAndGroups, UserId,
},
};
use lldap_domain_handlers::handler::{
BackendHandler, BindRequest, GroupBackendHandler, GroupListerBackendHandler,
GroupRequestFilter, LoginHandler, ReadSchemaBackendHandler, SchemaBackendHandler,
UserBackendHandler, UserListerBackendHandler, UserRequestFilter,
};
use lldap_domain_handlers::handler::*;
use lldap_domain_model::error::Result;
use lldap_opaque_handler::{OpaqueHandler, login, registration};
use async_trait::async_trait;
use std::collections::HashSet;