mirror of
https://github.com/nitnelave/lldap.git
synced 2023-04-12 14:25:13 +00:00
Fix the pipeline_factory
We can now bring up the two servers
This commit is contained in:
parent
6eaf859ba9
commit
c63c7105aa
@ -5,7 +5,7 @@ name = "lldap"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix = "0.11.0-beta.3"
|
actix = "0.11.0-beta.3"
|
||||||
actix-rt = "*"
|
actix-rt = "2.1.0"
|
||||||
actix-server = "2.0.0-beta.3"
|
actix-server = "2.0.0-beta.3"
|
||||||
actix-service = "2.0.0-beta.4"
|
actix-service = "2.0.0-beta.4"
|
||||||
actix-web = "4.0.0-beta.3"
|
actix-web = "4.0.0-beta.3"
|
||||||
@ -18,8 +18,8 @@ ldap3_server = "*"
|
|||||||
log = "*"
|
log = "*"
|
||||||
serde = "*"
|
serde = "*"
|
||||||
thiserror = "*"
|
thiserror = "*"
|
||||||
tokio = { version = "*", features = ["full"] }
|
tokio = { version = "1.2.0", features = ["full"] }
|
||||||
tokio-util = "*"
|
tokio-util = "0.6.3"
|
||||||
tracing = "*"
|
tracing = "*"
|
||||||
tracing-actix-web = "0.3.0-beta.2"
|
tracing-actix-web = "0.3.0-beta.2"
|
||||||
tracing-log = "*"
|
tracing-log = "*"
|
||||||
|
@ -11,6 +11,7 @@ use crate::infra::cli::CLIOpts;
|
|||||||
pub struct Configuration {
|
pub struct Configuration {
|
||||||
pub ldap_port: u16,
|
pub ldap_port: u16,
|
||||||
pub ldaps_port: u16,
|
pub ldaps_port: u16,
|
||||||
|
pub http_port: u16,
|
||||||
pub secret_pepper: String,
|
pub secret_pepper: String,
|
||||||
pub some_text: String,
|
pub some_text: String,
|
||||||
pub verbose: bool,
|
pub verbose: bool,
|
||||||
@ -21,6 +22,7 @@ impl Default for Configuration {
|
|||||||
Configuration {
|
Configuration {
|
||||||
ldap_port: 3890,
|
ldap_port: 3890,
|
||||||
ldaps_port: 6360,
|
ldaps_port: 6360,
|
||||||
|
http_port: 17170,
|
||||||
secret_pepper: String::from("secretsecretpepper"),
|
secret_pepper: String::from("secretsecretpepper"),
|
||||||
some_text: String::new(),
|
some_text: String::new(),
|
||||||
verbose: false,
|
verbose: false,
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
use crate::infra::configuration::Configuration;
|
use crate::infra::configuration::Configuration;
|
||||||
use actix_rt::net::TcpStream;
|
use actix_rt::net::TcpStream;
|
||||||
use actix_server::Server;
|
use actix_server::ServerBuilder;
|
||||||
use actix_service::pipeline_factory;
|
use actix_service::{fn_service, pipeline_factory};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use futures_util::future::{err, ok};
|
use futures_util::future::ok;
|
||||||
use log::*;
|
use log::*;
|
||||||
|
|
||||||
use ldap3_server::simple::*;
|
use ldap3_server::simple::*;
|
||||||
@ -13,13 +13,6 @@ pub struct LdapSession {
|
|||||||
dn: String,
|
dn: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init(config: Configuration) -> Result<()> {
|
|
||||||
debug!("LDAP: init");
|
|
||||||
actix::run(run_ldap_server(config))?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
impl LdapSession {
|
impl LdapSession {
|
||||||
pub fn do_bind(&mut self, sbr: &SimpleBindRequest) -> LdapMsg {
|
pub fn do_bind(&mut self, sbr: &SimpleBindRequest) -> LdapMsg {
|
||||||
if sbr.dn == "cn=Directory Manager" && sbr.pw == "password" {
|
if sbr.dn == "cn=Directory Manager" && sbr.pw == "password" {
|
||||||
@ -70,15 +63,18 @@ impl LdapSession {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn run_ldap_server(config: Configuration) {
|
pub fn build_ldap_server(
|
||||||
|
config: &Configuration,
|
||||||
|
server_builder: ServerBuilder,
|
||||||
|
) -> Result<ServerBuilder> {
|
||||||
use futures_util::SinkExt;
|
use futures_util::SinkExt;
|
||||||
use futures_util::StreamExt;
|
use futures_util::StreamExt;
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
use tokio_util::codec::{FramedRead, FramedWrite};
|
use tokio_util::codec::{FramedRead, FramedWrite};
|
||||||
|
|
||||||
Server::build()
|
Ok(
|
||||||
.bind("test-tcp", ("0.0.0.0", config.ldap_port), move || {
|
server_builder.bind("ldap", ("0.0.0.0", config.ldap_port), move || {
|
||||||
pipeline_factory(move |mut stream: TcpStream| async {
|
pipeline_factory(fn_service(move |mut stream: TcpStream| async {
|
||||||
// Configure the codec etc.
|
// Configure the codec etc.
|
||||||
let (r, w) = stream.split();
|
let (r, w) = stream.split();
|
||||||
let mut reqs = FramedRead::new(r, LdapCodec);
|
let mut reqs = FramedRead::new(r, LdapCodec);
|
||||||
@ -93,8 +89,8 @@ async fn run_ldap_server(config: Configuration) {
|
|||||||
.map_err(|_e| ())
|
.map_err(|_e| ())
|
||||||
.and_then(|msg| ServerOps::try_from(msg))
|
.and_then(|msg| ServerOps::try_from(msg))
|
||||||
{
|
{
|
||||||
Ok(aValue) => aValue,
|
Ok(a_value) => a_value,
|
||||||
Err(anError) => {
|
Err(an_error) => {
|
||||||
let _err = resp
|
let _err = resp
|
||||||
.send(DisconnectionNotice::gen(
|
.send(DisconnectionNotice::gen(
|
||||||
LdapResultCode::Other,
|
LdapResultCode::Other,
|
||||||
@ -102,23 +98,19 @@ async fn run_ldap_server(config: Configuration) {
|
|||||||
))
|
))
|
||||||
.await;
|
.await;
|
||||||
let _err = resp.flush().await;
|
let _err = resp.flush().await;
|
||||||
break;
|
return Err(format!("Internal server error: {:?}", an_error));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
ok::<TcpStream, ()>(stream)
|
Ok(stream)
|
||||||
})
|
}))
|
||||||
.map_err(|err| error!("Service Error: {:?}", err))
|
.map_err(|err| error!("Service Error: {:?}", err))
|
||||||
// catch
|
// catch
|
||||||
.and_then(move |_| {
|
.and_then(move |_| {
|
||||||
// finally
|
// finally
|
||||||
ok(())
|
ok(())
|
||||||
})
|
})
|
||||||
})
|
})?,
|
||||||
.unwrap()
|
)
|
||||||
.workers(1)
|
|
||||||
.run()
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,16 @@
|
|||||||
use crate::infra::configuration::Configuration;
|
use crate::infra::configuration::Configuration;
|
||||||
use actix_rt::net::TcpStream;
|
use actix_rt::net::TcpStream;
|
||||||
use actix_server::Server;
|
use actix_server::ServerBuilder;
|
||||||
use actix_service::pipeline_factory;
|
use actix_service::pipeline_factory;
|
||||||
use anyhow::Result;
|
use anyhow::{Context, Result};
|
||||||
use futures_util::future::ok;
|
use futures_util::future::ok;
|
||||||
use log::*;
|
use log::*;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
pub fn init(config: Configuration) -> Result<()> {
|
pub fn build_tcp_server(
|
||||||
debug!("TCP: init");
|
config: &Configuration,
|
||||||
actix::run(run_tcp_server(config))?;
|
server_builder: ServerBuilder,
|
||||||
|
) -> Result<ServerBuilder> {
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn run_tcp_server(config: Configuration) {
|
|
||||||
use std::sync::atomic::AtomicUsize;
|
use std::sync::atomic::AtomicUsize;
|
||||||
use std::sync::atomic::Ordering;
|
use std::sync::atomic::Ordering;
|
||||||
use tokio::io::AsyncReadExt;
|
use tokio::io::AsyncReadExt;
|
||||||
@ -22,8 +18,8 @@ async fn run_tcp_server(config: Configuration) {
|
|||||||
|
|
||||||
let count = Arc::new(AtomicUsize::new(0));
|
let count = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
Server::build()
|
Ok(server_builder
|
||||||
.bind("test-tcp", ("0.0.0.0", config.ldap_port), move || {
|
.bind("http", ("0.0.0.0", config.http_port), move || {
|
||||||
let count = Arc::clone(&count);
|
let count = Arc::clone(&count);
|
||||||
let num2 = Arc::clone(&count);
|
let num2 = Arc::clone(&count);
|
||||||
|
|
||||||
@ -67,9 +63,10 @@ async fn run_tcp_server(config: Configuration) {
|
|||||||
ok(size)
|
ok(size)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.unwrap()
|
.with_context(|| {
|
||||||
.workers(1)
|
format!(
|
||||||
.run()
|
"While bringing up the TCP server with port {}",
|
||||||
.await
|
config.http_port
|
||||||
.unwrap();
|
)
|
||||||
|
})?)
|
||||||
}
|
}
|
||||||
|
15
src/main.rs
15
src/main.rs
@ -1,8 +1,18 @@
|
|||||||
|
use crate::infra::configuration::Configuration;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use futures_util::TryFutureExt;
|
||||||
use log::*;
|
use log::*;
|
||||||
|
|
||||||
mod infra;
|
mod infra;
|
||||||
|
|
||||||
|
async fn run_server(config: Configuration) -> Result<()> {
|
||||||
|
let server_builder =
|
||||||
|
infra::ldap_server::build_ldap_server(&config, actix_server::Server::build())?;
|
||||||
|
let server_builder = infra::tcp_server::build_tcp_server(&config, server_builder)?;
|
||||||
|
server_builder.workers(1).run().await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
let cli_opts = infra::cli::init();
|
let cli_opts = infra::cli::init();
|
||||||
let config = infra::configuration::init(cli_opts.clone())?;
|
let config = infra::configuration::init(cli_opts.clone())?;
|
||||||
@ -13,8 +23,9 @@ fn main() -> Result<()> {
|
|||||||
debug!("CLI: {:#?}", cli_opts);
|
debug!("CLI: {:#?}", cli_opts);
|
||||||
debug!("Configuration: {:#?}", config);
|
debug!("Configuration: {:#?}", config);
|
||||||
|
|
||||||
// infra::tcp_server::init(config)?;
|
actix::run(
|
||||||
infra::ldap_server::init(config)?;
|
run_server(config).unwrap_or_else(|e| error!("Could not bring up the servers: {:?}", e)),
|
||||||
|
)?;
|
||||||
|
|
||||||
info!("End.");
|
info!("End.");
|
||||||
Ok(())
|
Ok(())
|
||||||
|
Loading…
Reference in New Issue
Block a user