mirror of
https://github.com/nitnelave/lldap.git
synced 2023-04-12 14:25:13 +00:00
Replace the echo server with an HTTP server
This commit is contained in:
parent
d771293a43
commit
f8f642183e
11
Cargo.toml
11
Cargo.toml
@ -5,11 +5,12 @@ name = "lldap"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix = "0.11.0-beta.3"
|
actix = "0.11.1"
|
||||||
actix-rt = "2.1.0"
|
actix-http = "3.0.0-beta.6"
|
||||||
actix-server = "2.0.0-beta.3"
|
actix-rt = "2.2"
|
||||||
actix-service = "2.0.0-beta.4"
|
actix-server = "2.0.0-beta.5"
|
||||||
actix-web = "4.0.0-beta.3"
|
actix-service = "2.0.0"
|
||||||
|
actix-web = "4.0.0-beta.6"
|
||||||
anyhow = "*"
|
anyhow = "*"
|
||||||
clap = "3.0.0-beta.2"
|
clap = "3.0.0-beta.2"
|
||||||
chrono = "*"
|
chrono = "*"
|
||||||
|
@ -3,9 +3,8 @@ use crate::infra::configuration::Configuration;
|
|||||||
use crate::infra::ldap_handler::LdapHandler;
|
use crate::infra::ldap_handler::LdapHandler;
|
||||||
use actix_rt::net::TcpStream;
|
use actix_rt::net::TcpStream;
|
||||||
use actix_server::ServerBuilder;
|
use actix_server::ServerBuilder;
|
||||||
use actix_service::{fn_service, pipeline_factory};
|
use actix_service::{fn_service, ServiceFactoryExt};
|
||||||
use anyhow::bail;
|
use anyhow::{bail, Result};
|
||||||
use anyhow::Result;
|
|
||||||
use futures_util::future::ok;
|
use futures_util::future::ok;
|
||||||
use ldap3_server::simple::*;
|
use ldap3_server::simple::*;
|
||||||
use ldap3_server::LdapCodec;
|
use ldap3_server::LdapCodec;
|
||||||
@ -68,7 +67,7 @@ where
|
|||||||
let backend_handler = backend_handler.clone();
|
let backend_handler = backend_handler.clone();
|
||||||
let ldap_base_dn = ldap_base_dn.clone();
|
let ldap_base_dn = ldap_base_dn.clone();
|
||||||
let ldap_user_dn = ldap_user_dn.clone();
|
let ldap_user_dn = ldap_user_dn.clone();
|
||||||
pipeline_factory(fn_service(move |mut stream: TcpStream| {
|
fn_service(move |mut stream: TcpStream| {
|
||||||
let backend_handler = backend_handler.clone();
|
let backend_handler = backend_handler.clone();
|
||||||
let ldap_base_dn = ldap_base_dn.clone();
|
let ldap_base_dn = ldap_base_dn.clone();
|
||||||
let ldap_user_dn = ldap_user_dn.clone();
|
let ldap_user_dn = ldap_user_dn.clone();
|
||||||
@ -88,7 +87,7 @@ where
|
|||||||
|
|
||||||
Ok(stream)
|
Ok(stream)
|
||||||
}
|
}
|
||||||
}))
|
})
|
||||||
.map_err(|err: anyhow::Error| error!("Service Error: {:?}", err))
|
.map_err(|err: anyhow::Error| error!("Service Error: {:?}", err))
|
||||||
// catch
|
// catch
|
||||||
.and_then(move |_| {
|
.and_then(move |_| {
|
||||||
|
@ -1,72 +1,25 @@
|
|||||||
use crate::domain::handler::*;
|
use crate::domain::handler::*;
|
||||||
use crate::infra::configuration::Configuration;
|
use crate::infra::configuration::Configuration;
|
||||||
use actix_rt::net::TcpStream;
|
use actix_http::HttpServiceBuilder;
|
||||||
use actix_server::ServerBuilder;
|
use actix_server::ServerBuilder;
|
||||||
use actix_service::pipeline_factory;
|
use actix_service::map_config;
|
||||||
|
use actix_web::dev::AppConfig;
|
||||||
|
use actix_web::App;
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use futures_util::future::ok;
|
|
||||||
use log::*;
|
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
pub fn build_tcp_server<Backend>(
|
pub fn build_tcp_server<Backend>(
|
||||||
config: &Configuration,
|
config: &Configuration,
|
||||||
backend_handler: Backend,
|
_backend_handler: Backend,
|
||||||
server_builder: ServerBuilder,
|
server_builder: ServerBuilder,
|
||||||
) -> Result<ServerBuilder>
|
) -> Result<ServerBuilder>
|
||||||
where
|
where
|
||||||
Backend: BackendHandler + 'static,
|
Backend: BackendHandler + 'static,
|
||||||
{
|
{
|
||||||
use std::sync::atomic::AtomicUsize;
|
|
||||||
use std::sync::atomic::Ordering;
|
|
||||||
use tokio::io::AsyncReadExt;
|
|
||||||
use tokio::io::AsyncWriteExt;
|
|
||||||
|
|
||||||
let count = Arc::new(AtomicUsize::new(0));
|
|
||||||
|
|
||||||
server_builder
|
server_builder
|
||||||
.bind("http", ("0.0.0.0", config.http_port), move || {
|
.bind("http", ("0.0.0.0", config.http_port), move || {
|
||||||
let count = Arc::clone(&count);
|
HttpServiceBuilder::new()
|
||||||
let num2 = Arc::clone(&count);
|
.finish(map_config(App::new(), |_| AppConfig::default()))
|
||||||
|
.tcp()
|
||||||
pipeline_factory(move |mut stream: TcpStream| {
|
|
||||||
let count = Arc::clone(&count);
|
|
||||||
async move {
|
|
||||||
let num = count.fetch_add(1, Ordering::SeqCst);
|
|
||||||
let num = num + 1;
|
|
||||||
|
|
||||||
let mut size: usize = 0;
|
|
||||||
let mut buf = Vec::with_capacity(4096);
|
|
||||||
|
|
||||||
loop {
|
|
||||||
match stream.read_buf(&mut buf).await {
|
|
||||||
// end of stream; bail from loop
|
|
||||||
Ok(0) => break,
|
|
||||||
|
|
||||||
// more bytes to process
|
|
||||||
Ok(bytes_read) => {
|
|
||||||
info!("[{}] read {} bytes", num, bytes_read);
|
|
||||||
stream.write_all(&buf[size..]).await.unwrap();
|
|
||||||
size += bytes_read;
|
|
||||||
}
|
|
||||||
|
|
||||||
// stream error; bail from loop with error
|
|
||||||
Err(err) => {
|
|
||||||
error!("Stream Error: {:?}", err);
|
|
||||||
return Err(());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// send data down service pipeline
|
|
||||||
Ok((buf, size))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.map_err(|err| error!("Service Error: {:?}", err))
|
|
||||||
.and_then(move |(_, size)| {
|
|
||||||
let num = num2.load(Ordering::SeqCst);
|
|
||||||
info!("[{}] total bytes read: {}", num, size);
|
|
||||||
ok(size)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
.with_context(|| {
|
.with_context(|| {
|
||||||
format!(
|
format!(
|
||||||
|
Loading…
Reference in New Issue
Block a user