From 3b8363028d0cd281cf0b71b25c3ce6dff02b65f2 Mon Sep 17 00:00:00 2001 From: Cole Helbling Date: Tue, 27 Feb 2024 08:49:21 -0800 Subject: [PATCH] just hack in an unsafe way to turn a string into a cache name without validation --- Cargo.lock | 116 +++++++++++++++++++------------- magic-nix-cache/Cargo.toml | 8 +-- magic-nix-cache/src/flakehub.rs | 44 ++---------- 3 files changed, 79 insertions(+), 89 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d696057..cd5fbde 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", ] diff --git a/magic-nix-cache/Cargo.toml b/magic-nix-cache/Cargo.toml index aff0227..535d3a0 100644 --- a/magic-nix-cache/Cargo.toml +++ b/magic-nix-cache/Cargo.toml @@ -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" diff --git a/magic-nix-cache/src/flakehub.rs b/magic-nix-cache/src/flakehub.rs index 48d6f59..3f2801c 100644 --- a/magic-nix-cache/src/flakehub.rs +++ b/magic-nix-cache/src/flakehub.rs @@ -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?