just hack in an unsafe way to turn a string into a cache name without validation

This commit is contained in:
Cole Helbling 2024-02-27 08:49:21 -08:00
parent 34956e86bb
commit 3b8363028d
3 changed files with 79 additions and 89 deletions

116
Cargo.lock generated
View file

@ -111,7 +111,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -122,7 +122,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -133,8 +133,7 @@ checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
[[package]]
name = "attic"
version = "0.2.0"
source = "git+ssh://git@github.com/DeterminateSystems/attic-priv?branch=main#a16c0f4cf1abe471ac69731bf3cfe9a8d2eedd5e"
version = "0.1.0"
dependencies = [
"async-stream",
"base64",
@ -147,21 +146,23 @@ dependencies = [
"futures",
"hex",
"lazy_static",
"log",
"nix-base32",
"pkg-config",
"regex",
"serde",
"serde_with",
"serde_yaml",
"sha2",
"tempfile",
"tokio",
"url",
"wildmatch",
"xdg",
]
[[package]]
name = "attic-client"
version = "0.2.0"
source = "git+ssh://git@github.com/DeterminateSystems/attic-priv?branch=main#a16c0f4cf1abe471ac69731bf3cfe9a8d2eedd5e"
version = "0.1.0"
dependencies = [
"anyhow",
"async-channel",
@ -252,7 +253,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -365,7 +366,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -506,7 +507,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -523,7 +524,7 @@ checksum = "a26acccf6f445af85ea056362561a24ef56cdc15fcc685f03aec50b9c702cb6d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -556,7 +557,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -567,7 +568,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
dependencies = [
"darling_core",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -599,13 +600,14 @@ dependencies = [
[[package]]
name = "dialoguer"
version = "0.10.4"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87"
checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de"
dependencies = [
"console",
"shell-words",
"tempfile",
"thiserror",
"zeroize",
]
@ -627,7 +629,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -676,7 +678,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -790,7 +792,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -1485,7 +1487,7 @@ checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -1526,9 +1528,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "proc-macro2"
version = "1.0.63"
version = "1.0.78"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
dependencies = [
"unicode-ident",
]
@ -1541,9 +1543,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
[[package]]
name = "quote"
version = "1.0.28"
version = "1.0.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
dependencies = [
"proc-macro2",
]
@ -1857,22 +1859,22 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.193"
version = "1.0.197"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.193"
version = "1.0.197"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -1897,9 +1899,9 @@ dependencies = [
[[package]]
name = "serde_spanned"
version = "0.6.4"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
dependencies = [
"serde",
]
@ -1942,7 +1944,20 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
name = "serde_yaml"
version = "0.9.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1bf28c79a99f70ee1f1d83d10c875d2e70618417fda01ad1785e027579d9d38"
dependencies = [
"indexmap 2.1.0",
"itoa",
"ryu",
"serde",
"unsafe-libyaml",
]
[[package]]
@ -2046,9 +2061,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.32"
version = "2.0.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2"
checksum = "6ab617d94515e94ae53b8406c628598680aa0c9587474ecbe58188f7b345d66c"
dependencies = [
"proc-macro2",
"quote",
@ -2110,7 +2125,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -2193,7 +2208,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -2233,9 +2248,9 @@ dependencies = [
[[package]]
name = "toml"
version = "0.7.8"
version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290"
dependencies = [
"serde",
"serde_spanned",
@ -2254,9 +2269,9 @@ dependencies = [
[[package]]
name = "toml_edit"
version = "0.19.15"
version = "0.22.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
checksum = "2c1b5fd4128cc8d3e0cb74d4ed9a9cc7c7284becd4df68f5f940e1ad123606f6"
dependencies = [
"indexmap 2.1.0",
"serde",
@ -2331,7 +2346,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
]
[[package]]
@ -2469,6 +2484,12 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
[[package]]
name = "unsafe-libyaml"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b"
[[package]]
name = "untrusted"
version = "0.7.1"
@ -2490,7 +2511,6 @@ dependencies = [
"form_urlencoded",
"idna 0.5.0",
"percent-encoding",
"serde",
]
[[package]]
@ -2569,7 +2589,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
"wasm-bindgen-shared",
]
@ -2603,7 +2623,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.32",
"syn 2.0.51",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@ -2662,6 +2682,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
[[package]]
name = "wildmatch"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "495ec47bf3c1345005f40724f0269362c8556cbc43aed0526ed44cae1d35fceb"
[[package]]
name = "winapi"
version = "0.3.9"
@ -2917,9 +2943,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
[[package]]
name = "winnow"
version = "0.5.19"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
checksum = "7a4191c47f15cc3ec71fcb4913cb83d58def65dd3787610213c649283b5ce178"
dependencies = [
"memchr",
]

View file

@ -23,10 +23,10 @@ is_ci = "1.1.1"
sha2 = { version = "0.10.6", default-features = false }
reqwest = { version = "0.11.17", default-features = false, features = ["blocking", "rustls-tls-native-roots", "trust-dns"] }
netrc-rs = "0.1.2"
attic = { git = "ssh://git@github.com/DeterminateSystems/attic-priv", branch = "main" }
#attic = { path = "../../attic-priv/attic" }
attic-client = { git = "ssh://git@github.com/DeterminateSystems/attic-priv", branch = "main" }
#attic-client = { path = "../../attic-priv/client" }
# attic = { git = "https://github.com/zhaofengli/attic", rev = "e9918bc6be268da6fa97af6ced15193d8a0421c0" }
attic = { path = "/home/vin/workspace/vcs/attic/attic" }
# attic-client = { git = "https://github.com/zhaofengli/attic", rev = "e9918bc6be268da6fa97af6ced15193d8a0421c0" }
attic-client = { path = "/home/vin/workspace/vcs/attic/client" }
indicatif = "0.17"
anyhow = "1.0.71"
tempfile = "3.9"

View file

@ -1,20 +1,16 @@
use crate::error::{Error, Result};
use attic::cache::CacheName;
use attic::nix_store::{NixStore, StorePath};
use attic_client::api::ApiError;
use attic_client::config::ServerTokenConfig;
use attic_client::push::{PushSession, PushSessionConfig};
use attic_client::{
api::ApiClient,
config::ServerConfig,
push::{PushConfig, Pusher},
};
use axum::http::{HeaderMap, HeaderValue};
use reqwest::header::AUTHORIZATION;
use reqwest::Url;
use serde::Deserialize;
use std::env;
use std::path::Path;
use std::str::FromStr;
use std::sync::Arc;
use tokio::fs::File;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
@ -94,21 +90,6 @@ pub async fn init_cache(
.await?;
}
fn build_http_client(password: &str) -> reqwest::Client {
let mut headers = HeaderMap::new();
let auth_header = HeaderValue::from_str(&format!("Bearer {}", password)).unwrap();
headers.insert(AUTHORIZATION, auth_header);
reqwest::Client::builder()
.user_agent(USER_AGENT)
.default_headers(headers)
.build()
.expect("TODO")
}
let flakehub_client = build_http_client(flakehub_password);
// Get the cache UUID for this project.
let cache_name = {
let github_repo = env::var("GITHUB_REPOSITORY").map_err(|_| {
@ -149,35 +130,18 @@ pub async fn init_cache(
tracing::info!("Using cache {:?}", cache_name);
let cache = cache_name;
let cache = unsafe { CacheName::new_unchecked(cache_name) };
let api = ApiClient::from_server_config(ServerConfig {
endpoint: flakehub_cache_server.to_string(),
token: flakehub_netrc_entry
.password
.map(|token| ServerTokenConfig::Raw { token })
.map(|token| attic_client::config::ServerTokenConfig::Raw { token })
.as_ref()
.cloned(),
})?;
let cache_config = {
let cache = &cache;
let endpoint = flakehub_cache_server
.join("_api/v1/cache-config/")
.expect("TODO")
.join(cache)
.expect("TODO");
let res = flakehub_client.get(endpoint).send().await?;
if res.status().is_success() {
let cache_config = res.json().await?;
Ok(cache_config)
} else {
let api_error = ApiError::try_from_response(res).await?;
Err(api_error.into())
}
};
let cache_config = api.get_cache_config(&cache).await?;
let push_config = PushConfig {
num_workers: 5, // FIXME: use number of CPUs?