prefetch-npm-deps: add support for NIX_NPM_TOKENS env var

This commit is contained in:
Lily Foster 2023-09-11 16:49:36 -04:00
parent 785ed11d0a
commit e271266179
No known key found for this signature in database
GPG key ID: 49340081E484C893

View file

@ -3,6 +3,7 @@ use isahc::{
config::{CaCertificate, Configurable, RedirectPolicy, SslOption},
Body, Request, RequestExt,
};
use serde_json::{Map, Value};
use std::{env, path::Path};
use url::Url;
@ -22,6 +23,18 @@ pub fn get_url(url: &Url) -> Result<Body, isahc::Error> {
}
}
// Respect NIX_NPM_TOKENS environment variable, which should be a JSON mapping in the shape of:
// `{ "registry.example.com": "example-registry-bearer-token", ... }`
if let Some(host) = url.host_str() {
if let Ok(npm_tokens) = env::var("NIX_NPM_TOKENS") {
if let Ok(tokens) = serde_json::from_str::<Map<String, Value>>(&npm_tokens) {
if let Some(token) = tokens.get(host).and_then(|val| val.as_str()) {
request = request.header("Authorization", format!("Bearer {token}"));
}
}
}
}
Ok(request.body(())?.send()?.into_body())
}