summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2025-12-08 20:08:21 -0500
committerMica White <botahamec@outlook.com>2025-12-08 20:08:21 -0500
commit608ce1d9910cd68ce825838ea313e02c598f908e (patch)
tree0bd4ad26f86e5c873f97308983112b0ffe593df3 /src/main.rs
parent93fd2e82e8fdc5ee62739053385f8ccffc660f02 (diff)
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs216
1 files changed, 108 insertions, 108 deletions
diff --git a/src/main.rs b/src/main.rs
index e946161..e403798 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,108 +1,108 @@
-use std::time::Duration;
-
-use actix_web::http::header::{self, HeaderValue};
-use actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers, Logger, NormalizePath};
-use actix_web::web::Data;
-use actix_web::{dev, App, HttpServer};
-
-use bpaf::Bpaf;
-use exun::*;
-
-mod api;
-mod models;
-mod resources;
-mod scopes;
-mod services;
-
-use resources::*;
-use services::*;
-use sqlx::MySqlPool;
-
-fn error_content_language<B>(
- mut res: dev::ServiceResponse,
-) -> actix_web::Result<ErrorHandlerResponse<B>> {
- res.response_mut()
- .headers_mut()
- .insert(header::CONTENT_LANGUAGE, HeaderValue::from_static("en"));
-
- Ok(ErrorHandlerResponse::Response(res.map_into_right_body()))
-}
-
-async fn delete_expired_tokens(db: MySqlPool) {
- let db = db.clone();
- let mut interval = actix_rt::time::interval(Duration::from_secs(60 * 20));
- loop {
- interval.tick().await;
- if let Err(e) = db::delete_expired_auth_codes(&db).await {
- log::error!("{}", e);
- }
- if let Err(e) = db::delete_expired_access_tokens(&db).await {
- log::error!("{}", e);
- }
- if let Err(e) = db::delete_expired_refresh_tokens(&db).await {
- log::error!("{}", e);
- }
- }
-}
-
-#[derive(Debug, Clone, Bpaf)]
-#[bpaf(options, version)]
-struct Opts {
- /// The environment that the server is running in. Must be one of: local,
- /// dev, staging, prod.
- #[bpaf(
- env("LOCKDAGGER_ENVIRONMENT"),
- fallback(config::Environment::Local),
- display_fallback
- )]
- env: config::Environment,
-}
-
-#[actix_web::main]
-async fn main() -> Result<(), RawUnexpected> {
- // load the environment file, but only in debug mode
- #[cfg(debug_assertions)]
- dotenv::dotenv()?;
-
- let args = opts().run();
- config::set_environment(args.env);
-
- // initialize the database
- let db_url = secrets::database_url()?;
- let sql_pool = db::initialize(&db_url).await?;
-
- let tera = templates::initialize()?;
-
- let translations = languages::initialize()?;
-
- actix_rt::spawn(delete_expired_tokens(sql_pool.clone()));
-
- // start the server
- HttpServer::new(move || {
- App::new()
- // middleware
- .wrap(ErrorHandlers::new().default_handler(error_content_language))
- .wrap(NormalizePath::trim())
- .wrap(Logger::new("\"%r\" %s %Dms"))
- // app shared state
- .app_data(Data::new(sql_pool.clone()))
- .app_data(Data::new(tera.clone()))
- .app_data(Data::new(translations.clone()))
- // frontend services
- .service(style::get_css)
- .service(scripts::get_js)
- .service(languages::languages())
- // api services
- .service(api::liveops())
- .service(api::users())
- .service(api::clients())
- .service(api::oauth())
- .service(api::ops())
- })
- .shutdown_timeout(1)
- .bind(("127.0.0.1", 8080))?
- .run()
- .await?;
-
- Ok(())
-}
+use std::time::Duration;
+
+use actix_web::http::header::{self, HeaderValue};
+use actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers, Logger, NormalizePath};
+use actix_web::web::Data;
+use actix_web::{dev, App, HttpServer};
+
+use bpaf::Bpaf;
+use exun::*;
+
+mod api;
+mod models;
+mod resources;
+mod scopes;
+mod services;
+
+use resources::*;
+use services::*;
+use sqlx::MySqlPool;
+
+fn error_content_language<B>(
+ mut res: dev::ServiceResponse,
+) -> actix_web::Result<ErrorHandlerResponse<B>> {
+ res.response_mut()
+ .headers_mut()
+ .insert(header::CONTENT_LANGUAGE, HeaderValue::from_static("en"));
+
+ Ok(ErrorHandlerResponse::Response(res.map_into_right_body()))
+}
+
+async fn delete_expired_tokens(db: MySqlPool) {
+ let db = db.clone();
+ let mut interval = actix_rt::time::interval(Duration::from_secs(60 * 20));
+ loop {
+ interval.tick().await;
+ if let Err(e) = db::delete_expired_auth_codes(&db).await {
+ log::error!("{}", e);
+ }
+ if let Err(e) = db::delete_expired_access_tokens(&db).await {
+ log::error!("{}", e);
+ }
+ if let Err(e) = db::delete_expired_refresh_tokens(&db).await {
+ log::error!("{}", e);
+ }
+ }
+}
+
+#[derive(Debug, Clone, Bpaf)]
+#[bpaf(options, version)]
+struct Opts {
+ /// The environment that the server is running in. Must be one of: local,
+ /// dev, staging, prod.
+ #[bpaf(
+ env("LOCKDAGGER_ENVIRONMENT"),
+ fallback(config::Environment::Local),
+ display_fallback
+ )]
+ env: config::Environment,
+}
+
+#[actix_web::main]
+async fn main() -> Result<(), RawUnexpected> {
+ // load the environment file, but only in debug mode
+ #[cfg(debug_assertions)]
+ dotenv::dotenv()?;
+
+ let args = opts().run();
+ config::set_environment(args.env);
+
+ // initialize the database
+ let db_url = secrets::database_url()?;
+ let sql_pool = db::initialize(&db_url).await?;
+
+ let tera = templates::initialize()?;
+
+ let translations = languages::initialize()?;
+
+ actix_rt::spawn(delete_expired_tokens(sql_pool.clone()));
+
+ // start the server
+ HttpServer::new(move || {
+ App::new()
+ // middleware
+ .wrap(ErrorHandlers::new().default_handler(error_content_language))
+ .wrap(NormalizePath::trim())
+ .wrap(Logger::new("\"%r\" %s %Dms"))
+ // app shared state
+ .app_data(Data::new(sql_pool.clone()))
+ .app_data(Data::new(tera.clone()))
+ .app_data(Data::new(translations.clone()))
+ // frontend services
+ .service(style::get_css)
+ .service(scripts::get_js)
+ .service(languages::languages())
+ // api services
+ .service(api::liveops())
+ .service(api::users())
+ .service(api::clients())
+ .service(api::oauth())
+ .service(api::ops())
+ })
+ .shutdown_timeout(1)
+ .bind(("127.0.0.1", 8080))?
+ .run()
+ .await?;
+
+ Ok(())
+}