1#[macro_use]
2extern crate slog_scope;
3
4use actix_web::{
5 Error, HttpRequest, HttpResponse,
6 http::header::{HeaderValue, USER_AGENT},
7 web,
8};
9
10use autoconnect_settings::AppState;
11
12mod error;
13mod handler;
14mod ping;
15mod session;
16#[cfg(test)]
17mod test;
18
19pub async fn ws_handler(
21 req: HttpRequest,
22 body: web::Payload,
23 app_state: web::Data<AppState>,
24) -> Result<HttpResponse, Error> {
25 debug!("🔌 Got connection");
26 let (response, session, msg_stream) = actix_ws::handle(&req, body)?;
27 let ua = req
28 .headers()
29 .get(USER_AGENT)
30 .unwrap_or(&HeaderValue::from_static(""))
31 .to_str()
32 .unwrap_or_default()
33 .to_owned();
34 handler::spawn_webpush_ws(session, msg_stream, app_state.into_inner(), ua);
35 Ok(response)
36}