pooly 0.2.1

A protobuf to Postgres adapter + connection pooling middleware.
Documentation
extern crate actix_web;
extern crate deadpool_postgres;
extern crate rustls;
extern crate tokio_postgres;
extern crate tokio_postgres_rustls;

use actix_web::{App, HttpServer, middleware, web};
use actix_web::web::Data;
use config::Config;

use pooly::{AppContext, resources};
use pooly::middleware::auth::api_key::InitializationApiKeyAuthGuard;
use pooly::middleware::auth::jwt::AuthGuard;
use pooly::models::app::AppConfig;
use pooly::models::auth::api_key::InitializeApiKey;

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    let config = Config::builder()
        .add_source(config::File::with_name("config.toml"))
        .build()
        .unwrap();

    let config = config.try_deserialize::<AppConfig>().unwrap();

    let init_api_key: InitializeApiKey = (&config).into();

    let app_context = AppContext::new();

    let server = HttpServer::new(
        move || {
            App::new()
                .wrap(middleware::Logger::default())
                .app_data(Data::new(app_context.auth_service.clone()))
                .app_data(Data::new(app_context.initialization_service.clone()))
                .app_data(Data::new(app_context.query_service.clone()))
                .app_data(Data::new(app_context.connection_config_service.clone()))
                .app_data(Data::new(app_context.secrets_service.clone()))
                .app_data(Data::new(app_context.shares_service.clone()))
                .app_data(Data::new(app_context.literal_ids_service.clone()))
                .app_data(Data::new(app_context.pattern_ids_service.clone()))
                .service(
                    web::scope("/c")
                        .wrap(AuthGuard::client())
                        .service(resources::query::bulk)
                        .service(resources::query::query)
                )
                .service(
                    web::scope("/i")
                        .wrap(InitializationApiKeyAuthGuard::new(init_api_key.clone()))
                        .service(resources::secrets::actions::initialize)
                        .service(resources::secrets::shares::add_share)
                        .service(resources::secrets::shares::clear_shares)
                        .service(resources::secrets::actions::unseal)
                )
                .service(
                    web::scope("/a")
                        .wrap(AuthGuard::admin())
                        .service(resources::keys::create)
                        .service(resources::keys::get)
                        .service(resources::keys::update)
                        .service(resources::keys::delete)
                        .service(resources::connections::create)
                        .service(resources::connections::get)
                        .service(resources::connections::update)
                        .service(resources::connections::delete)
                        .service(resources::connections::access::literal_ids::create)
                        .service(resources::connections::access::literal_ids::get)
                        .service(resources::connections::access::literal_ids::update)
                        .service(resources::connections::access::literal_ids::delete)
                        .service(resources::connections::access::pattern_ids::create)
                        .service(resources::connections::access::pattern_ids::get)
                        .service(resources::connections::access::pattern_ids::update)
                        .service(resources::connections::access::pattern_ids::delete)
                )
        })
        .bind("127.0.0.1:8868")?
        .run();

    println!("Server running at http://{}/", "127.0.0.1:8868");

    server.await
}