63 lines
1.8 KiB
Rust
63 lines
1.8 KiB
Rust
use crate::manager::Service;
|
|
use std::env;
|
|
use std::process::Command;
|
|
use std::collections::HashMap;
|
|
use dotenv::dotenv;
|
|
|
|
pub struct Zitadel {
|
|
env_vars: HashMap<String, String>,
|
|
process: Option<std::process::Child>,
|
|
}
|
|
|
|
impl Zitadel {
|
|
pub fn new() -> Self {
|
|
dotenv().ok();
|
|
let env_vars = vec![
|
|
"ZITADEL_DEFAULTINSTANCE_INSTANCENAME",
|
|
"ZITADEL_DEFAULTINSTANCE_ORG_NAME",
|
|
"ZITADEL_DATABASE_POSTGRES_HOST",
|
|
"ZITADEL_DATABASE_POSTGRES_PORT",
|
|
"ZITADEL_DATABASE_POSTGRES_DATABASE",
|
|
"ZITADEL_DATABASE_POSTGRES_USER_USERNAME",
|
|
"ZITADEL_DATABASE_POSTGRES_USER_PASSWORD",
|
|
"ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE",
|
|
"ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE",
|
|
"ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME",
|
|
"ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD",
|
|
"ZITADEL_EXTERNALSECURE",
|
|
"ZITADEL_MASTERKEY",
|
|
]
|
|
.into_iter()
|
|
.filter_map(|key| env::var(key).ok().map(|value| (key.to_string(), value)))
|
|
.collect();
|
|
|
|
Zitadel {
|
|
env_vars,
|
|
process: None,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Service for Zitadel {
|
|
fn start(&mut self) -> Result<(), String> {
|
|
if self.process.is_some() {
|
|
return Err("Zitadel is already running.".to_string());
|
|
}
|
|
|
|
let mut command = Command::new("/opt/gbo/bin/zitadel");
|
|
for (key, value) in &self.env_vars {
|
|
command.env(key, value);
|
|
}
|
|
|
|
self.process = Some(command.spawn().map_err(|e| e.to_string())?);
|
|
Ok(())
|
|
}
|
|
|
|
fn stop(&mut self) -> Result<(), String> {
|
|
if let Some(mut child) = self.process.take() {
|
|
child.kill().map_err(|e| e.to_string())?;
|
|
child.wait().map_err(|e| e.to_string())?;
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|