fix: don't use XDG spec, because this is a system service

This commit is contained in:
Jan Christian Grünhage 2023-01-01 22:51:26 +01:00
parent f84046fd13
commit a2cf322135
Signed by: jcgruenhage
GPG key ID: EEC1170CE56FA2ED
4 changed files with 6 additions and 42 deletions

32
Cargo.lock generated
View file

@ -123,7 +123,6 @@ version = "0.4.0"
dependencies = [
"anyhow",
"cloudflare",
"directories-next",
"env_logger",
"log",
"reqwest",
@ -237,27 +236,6 @@ dependencies = [
"syn",
]
[[package]]
name = "directories-next"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc"
dependencies = [
"cfg-if",
"dirs-sys-next",
]
[[package]]
name = "dirs-sys-next"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
dependencies = [
"libc",
"redox_users",
"winapi",
]
[[package]]
name = "encoding_rs"
version = "0.8.31"
@ -837,16 +815,6 @@ dependencies = [
"bitflags",
]
[[package]]
name = "redox_users"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
dependencies = [
"getrandom",
"redox_syscall",
]
[[package]]
name = "regex"
version = "1.7.0"

View file

@ -18,7 +18,6 @@ serde = { version = "1.0.152", features = ["derive"] }
anyhow = "1.0.68"
env_logger = "0.10.0"
log = "0.4.17"
directories-next = "2.0.0"
tokio = { version = "1.23.0", features = ["time", "macros", "rt-multi-thread"] }
serde_yaml = "0.9.16"
cloudflare = "0.10.1"

View file

@ -16,9 +16,8 @@ cargo install cloudflare-ddns-service
## Usage
### Config
The services adheres to the XDG spec for locating the config file. In most
cases, that means the config file is located at
`~/.config/cloudflare-ddns-service/config.yaml`.
`cloudflare-ddns-service` expects to find a config file at
`/etc/cloudflare-ddns-service/config.yml`.
As you can see from the path, the configuration should be a yaml file. A sample
could look like this:

View file

@ -1,7 +1,6 @@
mod network;
use anyhow::{Context, Result};
use directories_next::ProjectDirs;
use network::{get_current_ipv4, get_current_ipv6, get_record, get_zone, update_record};
use serde::{Deserialize, Serialize};
use serde_yaml::{from_str, to_writer};
@ -44,16 +43,15 @@ struct Cache {
async fn main() -> Result<()> {
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
let dirs = ProjectDirs::from("re", "jcg", "cloudflare-ddns-service")
.context("Couldn't find project directories! Is $HOME set?")?;
let config_string = read_to_string(dirs.config_dir().join("config.yaml"))
let config_string = read_to_string("/etc/cloudflare-ddns-service/config.yaml")
.context("couldn't read config file!")?;
let config: Config = from_str(&config_string)?;
let cache_path = dirs.cache_dir().join("cache.yaml");
let cache_dir = PathBuf::from("/var/cache/cloudflare-ddns-service");
let cache_path = cache_dir.join("cache.yaml");
let mut cache = match read_to_string(&cache_path) {
Ok(cache) => from_str(&cache)?,
Err(_) => {
create_dir_all(dirs.cache_dir())?;
create_dir_all(cache_dir)?;
Cache::default()
}
};