222 lines
12 KiB
Rust
222 lines
12 KiB
Rust
extern crate config;
|
|
#[macro_use]
|
|
extern crate diesel;
|
|
extern crate log;
|
|
#[macro_use]
|
|
extern crate rocket;
|
|
extern crate serde;
|
|
extern crate serde_json;
|
|
#[macro_use]
|
|
extern crate serde_derive;
|
|
extern crate argon2;
|
|
extern crate chrono;
|
|
extern crate iban;
|
|
extern crate base64;
|
|
|
|
use crate::helper::handlebars_in_list_helper::in_list_block_helper;
|
|
use crate::helper::mail_queue::queue::MailQueue;
|
|
use crate::helper::mail_templates::MailTemplates;
|
|
use crate::helper::session_cookies::model::SessionCookieStorage;
|
|
use helper::settings::Settings;
|
|
use std::io::Write;
|
|
use std::process::Command;
|
|
use std::sync::Arc;
|
|
use std::{thread, time};
|
|
use rocket_dyn_templates::Template;
|
|
use rocket::fs::FileServer;
|
|
use rocket_dyn_templates::handlebars::Handlebars;
|
|
|
|
pub mod database;
|
|
pub mod helper;
|
|
pub mod modules;
|
|
pub mod permissions;
|
|
pub mod schema;
|
|
|
|
#[launch]
|
|
fn rocket() -> _ {
|
|
env_logger::init(); //Initializes logger. Set environment variable RUST_LOG=debug|info|warn|error to set loglevel
|
|
|
|
let settings = match Settings::new() {
|
|
Ok(settings) => settings,
|
|
Err(e) => {
|
|
error!("Failed to read config: {}", e);
|
|
std::process::exit(1);
|
|
}
|
|
};
|
|
|
|
let version = Command::new("sh")
|
|
.args(&["-c", "git describe --tags --long"])
|
|
.output();
|
|
|
|
match version {
|
|
Ok(v) => {
|
|
match std::fs::File::create("resources/templates/versiontag.hbs") {
|
|
Ok(mut file) => match file.write_all(&v.stdout) {
|
|
Ok(_) => {}
|
|
Err(e) => {
|
|
warn!("Couldn't write version tag to file: {}", e);
|
|
}
|
|
},
|
|
Err(e) => {
|
|
warn!("Couldn't write version tag to file: {}", e);
|
|
}
|
|
};
|
|
}
|
|
Err(e) => {
|
|
warn!("Couldn't obtain version tag: {}", e);
|
|
}
|
|
}
|
|
|
|
// Initialize storage for session cookies
|
|
let cookie_storage = SessionCookieStorage::new();
|
|
|
|
// Initialize mail queue for second thread handling outgoing mails
|
|
// We are using Arc to access mail queue in all threads
|
|
let mail_queue = Arc::new(MailQueue::load_or_create_new());
|
|
let c_lock = Arc::clone(&mail_queue);
|
|
|
|
thread::spawn(move || {
|
|
loop {
|
|
match c_lock.process_next() {
|
|
Ok(_) => {}
|
|
Err(e) => error!("MailQueue poisoned: {}", e),
|
|
}
|
|
thread::sleep(time::Duration::from_millis(500)) // Only check for new mails ever 500 ms
|
|
}
|
|
});
|
|
|
|
let mut mail_templates = MailTemplates {
|
|
registry: Handlebars::new(),
|
|
};
|
|
match mail_templates.registry.register_template_file("password-reset-de", "resources/mail_templates/password-reset-de.hbs")
|
|
{
|
|
Ok(_) => {}
|
|
Err(e) => {
|
|
error!("Couldn't register mail templates: {}", e);
|
|
std::process::exit(1);
|
|
}
|
|
}
|
|
|
|
rocket::build()
|
|
.manage(settings)
|
|
.manage(cookie_storage)
|
|
.manage(mail_queue)
|
|
.manage(mail_templates)
|
|
.mount(
|
|
"/",
|
|
routes![
|
|
modules::dashboard::view::dashboard,
|
|
modules::welcome::view::welcome_get::welcome_get,
|
|
modules::welcome::view::welcome_post::welcome_post,
|
|
modules::welcome::view::welcome_post::password_reset_post,
|
|
modules::welcome::view::welcome_post::password_change_post,
|
|
modules::welcome::view::welcome_post::password_change_get,
|
|
modules::welcome::view::login_select_get::login_select_get,
|
|
modules::welcome::view::logout::logout_get,
|
|
modules::member_management::view::selection_get::member_management_selection,
|
|
modules::member_management::view::profile_get::member_management_core_data_get,
|
|
modules::member_management::view::profile_post::member_management_core_data_post,
|
|
modules::member_management::view::groups_get::member_management_groups_get,
|
|
modules::api::member_management::view::member_qualifications::api_member_remove_qualification,
|
|
modules::api::member_management::view::member_qualifications::api_member_get_qualifications_for_category,
|
|
modules::api::member_management::view::member_qualifications::api_member_add_qualification,
|
|
modules::api::member_management::view::member_driving_permissions::api_member_add_driving_license,
|
|
modules::api::member_management::view::member_driving_permissions::api_member_add_driving_permission,
|
|
modules::api::member_management::view::member_driving_permissions::api_member_remove_driving_license,
|
|
modules::api::members::get_member::api_members_get,
|
|
modules::api::members::get_member::api_members_search_name,
|
|
modules::api::members::delete_member::api_members_delete,
|
|
modules::api::members::member_communication::api_communication_targets_update,
|
|
modules::api::members::member_communication::api_communication_types_get,
|
|
modules::api::members::member_communication::api_communication_targets_create,
|
|
modules::api::members::member_communication::api_communication_targets_delete,
|
|
modules::api::members::member_qualification::api_member_qualifications_read,
|
|
modules::api::groups::create::create_group,
|
|
modules::api::groups::delete::delete_groups,
|
|
modules::api::groups::read::get_groups,
|
|
modules::api::groups::read::read_group_detailed,
|
|
modules::api::groups::read::read_group_simple,
|
|
modules::api::groups::update::put_member_in_group,
|
|
modules::api::groups::delete::delete_member_from_group,
|
|
modules::api::groups::update::update_group,
|
|
modules::api::units::read::read_unit_list,
|
|
modules::api::units::update::put_member_in_unit,
|
|
modules::api::units::delete::delete_member_from_unit,
|
|
modules::api::users::create::create_user,
|
|
modules::api::users::delete::delete_user,
|
|
modules::api::users::update::update_user,
|
|
modules::api::communicator::create::create_email,
|
|
modules::member_management::view::personal_profile::member_management_personal_profile_get,
|
|
modules::member_management::view::personal_profile::member_management_personal_profile_post,
|
|
modules::member_management::view::create_member::member_management_add_member,
|
|
modules::member_management::view::create_member::member_management_add_member_post,
|
|
modules::communicator::send_email::communicator_email_get,
|
|
modules::resource_management::vehicles::vehicle_list::vehicle_list,
|
|
modules::api::resources::vehicles::read::read_vehicle_categories,
|
|
modules::api::resources::vehicles::read::read_vehicle_list,
|
|
modules::api::resources::vehicles::create::create_vehicle,
|
|
modules::api::resources::vehicles::update::update_vehicle,
|
|
modules::api::resources::vehicles::delete::delete_vehicles,
|
|
modules::api::appointments::read::read_appointment_types,
|
|
modules::api::appointments::create::create_appointment,
|
|
modules::api::appointments::read::read_appointments_for_entity,
|
|
modules::api::appointments::delete::delete_appointment,
|
|
modules::api::info::caller::check_caller_has_permission,
|
|
modules::event_management::eventlist::eventlist,
|
|
modules::event_management::organisers::organisers,
|
|
modules::event_management::add_event::add_event,
|
|
modules::api::event_organisers::read::read_organisers,
|
|
modules::api::event_organisers::create::create_organiser,
|
|
modules::api::event_organisers::delete::delete_organisers,
|
|
modules::api::event_organisers::update::update_organiser,
|
|
modules::api::event_organisers::read::read_organiser,
|
|
modules::api::events::read::read_events,
|
|
modules::api::events::read::read_event,
|
|
modules::api::events::types::read::read_event_types,
|
|
modules::api::events::types::read::read_event_type,
|
|
modules::api::events::create::create_event,
|
|
modules::api::events::update::update_event,
|
|
modules::api::events::delete::delete_event,
|
|
modules::event_management::event_unit_positions::event_unit_positions,
|
|
modules::event_management::event_unit_templates::event_unit_templates,
|
|
modules::api::members::licenses::read::read_license_categories,
|
|
modules::api::members::member_qualification::read_qualifications,
|
|
modules::api::events::event_units::position::create::create_event_unit_position,
|
|
modules::api::events::event_units::position::read::read_event_unit_position,
|
|
modules::api::events::event_units::position::delete::delete_event_unit_positions,
|
|
modules::api::events::event_units::position::update::update_event_unit_position,
|
|
modules::api::events::event_units::templates::create::create_event_unit_template,
|
|
modules::api::events::event_units::templates::update::put_position_in_template,
|
|
modules::api::events::event_units::templates::read::read_event_unit_templates,
|
|
modules::api::events::event_units::templates::delete::delete_templates,
|
|
modules::api::events::event_units::templates::delete::delete_positions_from_template,
|
|
modules::api::events::event_units::templates::read::read_event_unit_template_positions,
|
|
modules::api::events::event_units::templates::update::update_template,
|
|
modules::event_management::edit_event::edit_event,
|
|
modules::api::events::instances::create::create_instance,
|
|
modules::api::events::instances::read::read_instances,
|
|
modules::api::events::event_units::position::create::create_event_unit_vehicle_position,
|
|
modules::api::events::event_units::templates::read::read_event_unit_template_vehicle_positions,
|
|
modules::api::events::event_units::position::delete::delete_event_unit_vehicle_positions,
|
|
modules::api::events::instances::read::read_positions_for_instance,
|
|
modules::api::events::instances::update::remove_entity_from_position,
|
|
modules::api::events::instances::update::put_entity_in_position,
|
|
modules::api::events::instances::read::read_vehicle_positions_for_instance,
|
|
modules::api::resources::vehicles::read::read_vehicle,
|
|
modules::api::events::instances::delete::delete_instance,
|
|
modules::api::events::event_units::position::read::get_check_position_requirements,
|
|
modules::api::events::read::read_future_event_for_member,
|
|
modules::api::users::read::matrix_check_credentials,
|
|
modules::api::users::read::http_basic_auth,
|
|
modules::api::users::read::http_basic_auth2,
|
|
modules::admin_settings::permissions::settings_permissions,
|
|
],
|
|
)
|
|
.mount("/css", FileServer::from("resources/css"))
|
|
.mount("/js", FileServer::from("resources/js"))//TODO: Replace popper and bootstrap with local files
|
|
.mount("/img", FileServer::from("resources/images"))
|
|
.mount("/templates", FileServer::from("resources/ajax_templates"))
|
|
.attach(Template::custom(|engine|{
|
|
engine.handlebars.register_helper("if_in_list", Box::new(in_list_block_helper));
|
|
}))
|
|
} |