From 19d52b9a55a6d5a67f27cbcc6cbe9c6c15865d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 14 Dec 2023 12:05:59 +0100 Subject: refactor: split registry into multiple modules (#21572) Co-authored-by: David Sherret Co-authored-by: Luca Casonato --- cli/tools/registry/auth.rs | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 cli/tools/registry/auth.rs (limited to 'cli/tools/registry/auth.rs') diff --git a/cli/tools/registry/auth.rs b/cli/tools/registry/auth.rs new file mode 100644 index 000000000..df0f849db --- /dev/null +++ b/cli/tools/registry/auth.rs @@ -0,0 +1,51 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +use std::io::IsTerminal; + +use deno_core::anyhow; +use deno_core::anyhow::bail; +use deno_core::error::AnyError; + +pub enum AuthMethod { + Interactive, + Token(String), + Oidc(OidcConfig), +} + +pub struct OidcConfig { + pub url: String, + pub token: String, +} + +fn get_gh_oidc_env_vars() -> Option> { + if std::env::var("GITHUB_ACTIONS").unwrap_or_default() == "true" { + let url = std::env::var("ACTIONS_ID_TOKEN_REQUEST_URL"); + let token = std::env::var("ACTIONS_ID_TOKEN_REQUEST_TOKEN"); + match (url, token) { + (Ok(url), Ok(token)) => Some(Ok((url, token))), + (Err(_), Err(_)) => Some(Err(anyhow::anyhow!( + "No means to authenticate. Pass a token to `--token`, or enable tokenless publishing from GitHub Actions using OIDC. Learn more at https://deno.co/ghoidc" + ))), + _ => None, + } + } else { + None + } +} + +pub fn get_auth_method( + maybe_token: Option, +) -> Result { + if let Some(token) = maybe_token { + return Ok(AuthMethod::Token(token)); + } + + match get_gh_oidc_env_vars() { + Some(Ok((url, token))) => Ok(AuthMethod::Oidc(OidcConfig { url, token })), + Some(Err(err)) => Err(err), + None if std::io::stdin().is_terminal() => Ok(AuthMethod::Interactive), + None => { + bail!("No means to authenticate. Pass a token to `--token`.") + } + } +} -- cgit v1.2.3