autoconnect_web/
lib.rs

1/// Handles most of the web interface aspects including
2/// handling dockerflow endpoints, `/push/' and `/notif' endpoints
3/// (used for inter-node routing)
4/// Also used for MegaphoneUpdater and BroadcastChangeTracker endpoints
5#[macro_use]
6extern crate slog_scope;
7
8pub mod dockerflow;
9pub mod error;
10pub mod routes;
11#[cfg(test)]
12mod test;
13
14use actix_web::web;
15
16#[macro_export]
17macro_rules! build_app {
18    ($app_state: expr_2021, $config: expr_2021) => {
19        actix_web::App::new()
20            .app_data(actix_web::web::Data::new($app_state.clone()))
21            .wrap(actix_web::middleware::ErrorHandlers::new().handler(
22                actix_http::StatusCode::NOT_FOUND,
23                autopush_common::errors::render_404,
24            ))
25            .wrap(autopush_common::middleware::sentry::SentryWrapper::<
26                $crate::error::ApiError,
27            >::new(
28                $app_state.metrics.clone(),
29                "error".to_owned(),
30                $app_state.settings.disable_sentry,
31            ))
32            .configure($config)
33    };
34}
35
36/// The publicly exposed app config
37pub fn config(cfg: &mut web::ServiceConfig) {
38    cfg
39        // Websocket Handler
40        .route("/", web::get().to(routes::ws_route))
41        .service(web::scope("").configure(dockerflow::config));
42}
43
44/// The internal router app config
45pub fn config_router(cfg: &mut web::ServiceConfig) {
46    cfg.service(web::resource("/push/{uaid}").route(web::put().to(routes::push_route)))
47        .service(web::resource("/notif/{uaid}").route(web::put().to(routes::check_storage_route)))
48        .service(web::scope("").configure(dockerflow::config));
49}