use std::{thread, time::Duration};
use log::{info, warn, error};
use crate::config::Config;
mod api;
mod config;
mod ip;
fn update(config: &Config) -> Result<(), String> {
let ip = ip::get_ipv6()?;
let api_key = &config.bearer_key;
let zone = &config.zone;
let domain = &config.domain;
let domain_alter = &config.domain_alter;
info!("START: create/update domain start");
let record = api::ensure_record(api_key, &zone, &domain, &ip)?;
warn!("SUCCESS: create/update record success, record: {record:?}");
if let Some(domain_alter) = domain_alter{
info!("START: create/update alter domain start");
let record_alter = api::ensure_record(api_key, &zone, &domain_alter, &ip)?;
warn!("SUCCESS: create/update alter record success, record: {record_alter:?}");
}
Ok(())
}
fn main() -> Result<(), String> {
simple_logger::init_with_level(log::Level::Info).unwrap();
let config = config::Config::from_env()?;
warn!("DAEMON START: {config:?}");
loop {
info!("WAKE");
match update(&config) {
Err(e) => {
error!("FAIL: fail to update dns record: {e}")
}
_ => (),
}
info!("SLEEP: 60 seconds");
thread::sleep(Duration::from_secs(60));
}
}