Unverified Commit e2712661 authored by Lily Foster's avatar Lily Foster
Browse files

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

parent 785ed11d
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -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())
}