aboutsummaryrefslogtreecommitdiff
path: root/base/src/lib.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-08-06 12:52:42 +0200
committermetamuffin <metamuffin@disroot.org>2023-08-06 12:52:42 +0200
commit8551bf2e34d9543fa41a83fae785ed81d6a6c10f (patch)
treeaaa79d1572b253c35576685945280438fe68f4d4 /base/src/lib.rs
parentcd366dfdfad18b38c4e542e6db61ced3929d42f9 (diff)
downloadjellything-8551bf2e34d9543fa41a83fae785ed81d6a6c10f.tar
jellything-8551bf2e34d9543fa41a83fae785ed81d6a6c10f.tar.bz2
jellything-8551bf2e34d9543fa41a83fae785ed81d6a6c10f.tar.zst
move shared server code to own crate
Diffstat (limited to 'base/src/lib.rs')
-rw-r--r--base/src/lib.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/base/src/lib.rs b/base/src/lib.rs
new file mode 100644
index 0000000..62f93e7
--- /dev/null
+++ b/base/src/lib.rs
@@ -0,0 +1,42 @@
+/*
+ This file is part of jellything (https://codeberg.org/metamuffin/jellything)
+ which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
+ Copyright (C) 2023 metamuffin <metamuffin.org>
+*/
+#![feature(lazy_cell)]
+use base64::Engine;
+use jellycommon::config::GlobalConfig;
+use std::{fs::File, path::PathBuf, str::FromStr, sync::LazyLock};
+
+pub static CONF: LazyLock<GlobalConfig> = LazyLock::new(|| {
+ serde_json::from_reader(
+ File::open(
+ std::env::args()
+ .nth(1)
+ .expect("First argument must specify the config.json to use."),
+ )
+ .unwrap(),
+ )
+ .unwrap()
+});
+
+pub fn cache_file(seed: &[&str]) -> (PathBuf, Option<File>) {
+ use sha2::Digest;
+ let mut d = sha2::Sha512::new();
+ for s in seed {
+ d.update(s.as_bytes());
+ d.update(b"\0");
+ }
+ let d = d.finalize();
+ let fname = base64::engine::general_purpose::URL_SAFE.encode(d);
+ let fname = &fname[..22]; // about 128 bits
+ let fullpath = CONF.cache_path.join(fname);
+ let cachepath = PathBuf::from_str(fname).unwrap();
+
+ let f = if !fullpath.exists() {
+ Some(File::create(&fullpath).unwrap())
+ } else {
+ None
+ };
+ (cachepath, f)
+}