Skip to content

Commit aaa581e

Browse files
start unix listener
1 parent 1ca6fc5 commit aaa581e

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

config.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ lists = [
88

99
# optional
1010
[api]
11-
port = 8080
12-
listen = "127.0.0.1"
11+
listener = "/home/lukas/test.tmp"
1312
# optional (default = false)
1413
show_doc = true # OpenAPI doc loads content from third party websites
1514
# optional

src/api.rs

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ use crate::{
33
CARGO_PKG_NAME, CARGO_PKG_VERSION
44
};
55
use log::info;
6-
use poem::{http::StatusCode, listener::TcpListener, Route, Server};
6+
use poem::{
7+
http::StatusCode,
8+
listener::{self, TcpListener, UnixListener},
9+
Route, Server
10+
};
711
use poem_openapi::{
812
auth::ApiKey,
913
param::Query,
@@ -14,15 +18,18 @@ use poem_openapi::{
1418
use serde::Deserialize;
1519
use std::{
1620
collections::HashMap,
21+
fs::FileType,
22+
os::{self, unix::fs::FileTypeExt},
23+
path::Path,
1724
sync::{atomic::Ordering, Arc}
1825
};
1926
use time::OffsetDateTime;
27+
use tokio::fs::remove_file;
2028

2129
#[derive(Debug, Deserialize, Object)]
2230
#[serde(deny_unknown_fields)]
2331
pub(crate) struct Config {
24-
port: u16,
25-
listen: String,
32+
listener: String,
2633
#[serde(default)]
2734
show_doc: bool,
2835
admin_key: Option<String>
@@ -196,7 +203,6 @@ pub(crate) async fn init(
196203
blocklist: Arc<BlockList>
197204
) -> anyhow::Result<()> {
198205
if let Some(config) = config {
199-
let address = format!("{}:{}", config.listen, config.port);
200206
let api_data = Api {
201207
blocklist,
202208
doc_enable: config.show_doc,
@@ -205,7 +211,7 @@ pub(crate) async fn init(
205211
};
206212
let api_service =
207213
OpenApiService::new(api_data, CARGO_PKG_NAME, CARGO_PKG_VERSION)
208-
.server(&address);
214+
.server(&config.listener);
209215
let doc = if config.show_doc {
210216
Some(api_service.redoc())
211217
} else {
@@ -217,8 +223,26 @@ pub(crate) async fn init(
217223
} else {
218224
server
219225
};
220-
info!("start api/web server at {address:?}");
221-
Server::new(TcpListener::bind(address)).run(server).await?;
226+
info!("start api/web server at {:?}", config.listener);
227+
if let Some(listener) = config.listener.strip_prefix("unix://") {
228+
// Old sockets get left behind, so cleanup
229+
let path = Path::new(listener);
230+
if path.exists() {
231+
// enusre that the file is really an unix socket and we do not delte something important
232+
let file = std::fs::File::open(path).unwrap();
233+
if file.metadata().unwrap().file_type().is_socket() {
234+
remove_file(&path).await.unwrap();
235+
}
236+
}
237+
Server::new(UnixListener::bind(listener))
238+
.run(server)
239+
.await?;
240+
//todo remove file
241+
} else {
242+
Server::new(TcpListener::bind(config.listener))
243+
.run(server)
244+
.await?;
245+
}
222246
}
223247
Ok(())
224248
}

0 commit comments

Comments
 (0)