| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- use actix_web::{cookie::{Key, SameSite}, web, App, HttpServer};
- use actix_session::{storage::RedisSessionStore, SessionMiddleware};
- use config::Config;
- use ldap::{pool::LdapConfig, LdapWrapper};
- use std::env;
- mod handler;
- #[actix_web::main]
- async fn main() -> std::io::Result<()> {
- let settings_path = env::var("BIMNG_SETTINGS_PATH")
- .expect("BIMNG_SETTINGS_PATH env var must be set");
- let settings = Config::builder()
- .add_source(config::File::with_name(settings_path.as_str()))
- .build()
- .unwrap();
- let bind_addr: String = settings.get("bimng.bindaddr").unwrap();
- let bind_port: u16 = settings.get("bimng.bindport").unwrap();
- let redis_addr: String = settings.get("bimng.redisaddr").unwrap();
- let redis_store = match RedisSessionStore::new(redis_addr).await {
- Ok(redis_store) => {
- redis_store
- }
- Err(_) => {
- println!("Failed to connect to redis session store");
- std::process::exit(1);
- }
- };
- let signing_key = Key::generate();
- let ldap_config = LdapConfig {
- hostname: settings.get("ldap.hostname").unwrap(),
- port: settings.get("ldap.port").unwrap(),
- basedn: settings.get("ldap.basedn").unwrap(),
- groupsdn: settings.get("ldap.groupsdn").unwrap(),
- binddn: settings.get("ldap.binddn").unwrap(),
- bindpw: settings.get("ldap.bindpw").unwrap(),
- starttls: settings.get("ldap.starttls").unwrap(),
- };
- let ldap_wrapper = LdapWrapper::new(ldap_config);
- HttpServer::new(move || {
- App::new()
- .wrap(
- SessionMiddleware::builder(redis_store.clone(), signing_key.clone())
- .cookie_same_site(SameSite::Strict)
- .build()
- )
- .app_data(web::Data::new(ldap_wrapper.clone()))
- .route("/", web::get().to(handler::index))
- .route("/auth", web::post().to(handler::auth))
- .route("/home", web::get().to(handler::home))
- .route("/signout", web::get().to(handler::signout))
- .route("/changepassword", web::get().to(handler::form_password))
- .route("/changepassword", web::post().to(handler::change_password))
- .route("/ssh", web::get().to(handler::form_ssh))
- .route("/addsshkey", web::post().to(handler::add_ssh_key))
- .route("/delsshkey", web::post().to(handler::del_ssh_key))
- })
- .bind((bind_addr, bind_port))?
- .run()
- .await
- }
|