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, $config: expr) => {
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(), "error".to_owned()
29            ))
30            .configure($config)
31    };
32}
33
34/// The publicly exposed app config
35pub fn config(cfg: &mut web::ServiceConfig) {
36    cfg
37        // Websocket Handler
38        .route("/", web::get().to(routes::ws_route))
39        .service(web::scope("").configure(dockerflow::config));
40}
41
42/// The internal router app config
43pub fn config_router(cfg: &mut web::ServiceConfig) {
44    cfg.service(web::resource("/push/{uaid}").route(web::put().to(routes::push_route)))
45        .service(web::resource("/notif/{uaid}").route(web::put().to(routes::check_storage_route)))
46        .service(web::scope("").configure(dockerflow::config));
47}