use log::{debug, error, info}; use std::env; use surf::Url; #[async_std::main] async fn main() -> Result<(), std::io::Error> { // TODO json logging in the future? let logger_env = env_logger::Env::new().filter_or("RUST_LOG", "info"); env_logger::init_from_env(logger_env); info!("Starting the kittybox server..."); let redis_uri: String; match env::var("REDIS_URI") { Ok(val) => { debug!("Redis connection: {}", val); redis_uri = val } Err(_) => { error!("REDIS_URI is not set, cannot find a database"); std::process::exit(1); } }; let token_endpoint: Url; match env::var("TOKEN_ENDPOINT") { Ok(val) => { debug!("Token endpoint: {}", val); match Url::parse(&val) { Ok(val) => token_endpoint = val, _ => { error!("Token endpoint URL cannot be parsed, aborting."); std::process::exit(1) } } } Err(_) => { error!("TOKEN_ENDPOINT is not set, will not be able to authorize users!"); std::process::exit(1) } } let authorization_endpoint: Url; match env::var("AUTHORIZATION_ENDPOINT") { Ok(val) => { debug!("Auth endpoint: {}", val); match Url::parse(&val) { Ok(val) => authorization_endpoint = val, _ => { error!("Authorization endpoint URL cannot be parsed, aborting."); std::process::exit(1) } } } Err(_) => { error!("AUTHORIZATION_ENDPOINT is not set, will not be able to confirm token and ID requests using IndieAuth!"); std::process::exit(1) } } let media_endpoint: Option = env::var("MEDIA_ENDPOINT").ok(); let internal_token: Option = env::var("KITTYBOX_INTERNAL_TOKEN").ok(); let host = env::var("SERVE_AT") .ok() .unwrap_or_else(|| "0.0.0.0:8080".to_string()); let app = kittybox::get_app_with_redis( token_endpoint, authorization_endpoint, redis_uri, media_endpoint, internal_token ) .await; app.listen(host).await }