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