cloudflare-ddns-ipv6 0.2.5

a cmd line tool to update your cloudflare AAAA record
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));
    }
}