/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2023 metamuffin */ #![feature(lazy_cell)] #![feature(int_roundings)] #![feature(let_chains)] use crate::routes::ui::{account::hash_password, admin::log::enable_logging}; use database::DataAcid; use jellybase::{ database::{ReadableTable, Ser, T_USER}, federation::Federation, CONF, }; use jellycommon::user::{PermissionSet, Theme, User}; use log::{error, info, warn}; use routes::build_rocket; use tokio::fs::create_dir_all; pub use jellybase::database; pub mod routes; #[rocket::main] async fn main() { enable_logging(); #[cfg(feature = "bypass-auth")] log::warn!("authentification bypass enabled"); create_dir_all(&CONF.cache_path).await.unwrap(); let database = DataAcid::open(&CONF.database_path).unwrap(); let federation = Federation::initialize(); if let Some(username) = &CONF.admin_username && let Some(password) = &CONF.admin_password { let txn = database.begin_write().unwrap(); let mut users = txn.open_table(T_USER).unwrap(); let admin = users.get(username.as_str()).unwrap().map(|x| x.value().0); users .insert( username.as_str(), Ser(User { admin: true, name: username.clone(), password: hash_password(&username, &password), ..admin.unwrap_or_else(|| User { name: Default::default(), display_name: "Admin".to_string(), password: Default::default(), admin: Default::default(), theme: Theme::Dark, permissions: PermissionSet::default(), }) }), ) .unwrap(); drop(users); txn.commit().unwrap(); } else { info!("admin account disabled") } let r = build_rocket(database, federation).launch().await; match r { Ok(_) => warn!("server shutdown"), Err(e) => error!("server exited: {e}"), } }