+1
-1
Cargo.lock
+1
-1
Cargo.lock
+1
-1
slingshot/Cargo.toml
+1
-1
slingshot/Cargo.toml
···
10
10
atrium-oauth = "0.1.3"
11
11
clap = { version = "4.5.41", features = ["derive"] }
12
12
ctrlc = "3.4.7"
13
-
env_logger = "0.11.8"
14
13
foyer = { version = "0.18.0", features = ["serde"] }
15
14
hickory-resolver = "0.25.2"
16
15
jetstream = { path = "../jetstream", features = ["metrics"] }
···
27
26
time = { version = "0.3.41", features = ["serde"] }
28
27
tokio = { version = "1.47.0", features = ["full"] }
29
28
tokio-util = "0.7.15"
29
+
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
30
30
url = "2.5.4"
+1
-1
slingshot/src/main.rs
+1
-1
slingshot/src/main.rs
+24
-13
slingshot/src/server.rs
+24
-13
slingshot/src/server.rs
···
5
5
use tokio_util::sync::CancellationToken;
6
6
7
7
use poem::{
8
-
Endpoint, Route, Server,
8
+
Endpoint, EndpointExt, Route, Server,
9
9
endpoint::make_sync,
10
+
http::Method,
10
11
listener::{
11
12
Listener, TcpListener,
12
13
acme::{AutoCert, LETS_ENCRYPT_PRODUCTION},
13
14
},
15
+
middleware::{Cors, Tracing},
14
16
};
15
17
use poem_openapi::{
16
18
ApiResponse, Object, OpenApi, OpenApiService, param::Query, payload::Json, types::Example,
···
242
244
.server("http://localhost:3000")
243
245
.url_prefix("/xrpc");
244
246
245
-
let app = Route::new()
247
+
let mut app = Route::new()
246
248
.nest("/", api_service.scalar())
247
249
.nest("/openapi.json", api_service.spec_endpoint())
248
250
.nest("/xrpc/", api_service);
···
252
254
.install_default()
253
255
.expect("alskfjalksdjf");
254
256
255
-
let app = app.at("/.well-known/did.json", get_did_doc(&host));
257
+
app = app
258
+
.at("/.well-known/did.json", get_did_doc(&host));
256
259
257
260
let auto_cert = AutoCert::builder()
258
261
.directory_url(LETS_ENCRYPT_PRODUCTION)
···
260
263
.build()
261
264
.map_err(ServerError::AcmeBuildError)?;
262
265
263
-
Server::new(TcpListener::bind("0.0.0.0:443").acme(auto_cert))
264
-
.name("slingshot")
265
-
.run(app)
266
-
.await
267
-
.map_err(ServerError::ServerExited)
266
+
run(TcpListener::bind("0.0.0.0:443").acme(auto_cert), app).await
268
267
} else {
269
-
Server::new(TcpListener::bind("127.0.0.1:3000"))
270
-
.name("slingshot")
271
-
.run(app)
272
-
.await
273
-
.map_err(ServerError::ServerExited)
268
+
run(TcpListener::bind("127.0.0.1:3000"), app).await
274
269
}
275
270
}
271
+
272
+
async fn run<L>(listener: L, app: Route) -> Result<(), ServerError>
273
+
where
274
+
L: Listener + 'static
275
+
{
276
+
let app = app
277
+
.with(Cors::new()
278
+
.allow_method(Method::GET)
279
+
.allow_credentials(false))
280
+
.with(Tracing);
281
+
Server::new(listener)
282
+
.name("slingshot")
283
+
.run(app)
284
+
.await
285
+
.map_err(ServerError::ServerExited)
286
+
}