summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/main.rs b/src/main.rs
index b446402..0fe906a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -27,19 +27,27 @@ struct AppState {
async fn main() {
let database = Database::new_in_memory().unwrap();
+
+ // initialize tables
database.initialize().unwrap();
- // TODO: generically load environment variables, this is tedious
+ // initialize problems if none exist yet
+ if let Ok(problems) = database.fetch_problems() {
+ if problems.len() == 0 { database.initialize_problems().unwrap(); }
+ }
+
let Ok(secret) = env::var("JWT_SECRET") else {
eprintln!("missing environment variable JWT_SECRET");
return;
};
-
let Ok(register_code) = env::var("REGISTER_CODE") else {
eprintln!("missing environment variable REGISTER_CODE");
return;
};
-
+ let Ok(listen_address) = env::var("LISTEN_ADDRESS") else {
+ eprintln!("missing environment variable LISTEN_ADDRESS");
+ return;
+ };
let Ok(admin_email) = env::var("ADMIN_EMAIL") else {
eprintln!("missing environment variable ADMIN_EMAIL");
return;
@@ -52,11 +60,14 @@ async fn main() {
eprintln!("missing environment variable ADMIN_PASSWORD");
return;
};
-
- let Ok(()) = register_admin(&database, &admin_email, &admin_username, &admin_password) else {
- eprintln!("failed to register admin user");
- return;
- };
+
+ if let Ok(None) = database.fetch_user_by_email(&admin_email) {
+ // register admin if admin user does not exist yet
+ let Ok(()) = register_admin(&database, &admin_email, &admin_username, &admin_password) else {
+ eprintln!("failed to register admin user");
+ return;
+ };
+ }
let state = AppState {
secret: secret,
@@ -80,7 +91,7 @@ async fn main() {
.nest_service("/static", static_files)
.with_state(state);
- let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
+ let listener = tokio::net::TcpListener::bind(listen_address).await.unwrap();
axum::serve(listener, app).await.unwrap();
}