|
1 | 1 | // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2 | 2 |
|
| 3 | +use base64::prelude::BASE64_STANDARD; |
| 4 | +use base64::Engine; |
| 5 | +use deno_core::anyhow::bail; |
| 6 | +use deno_core::error::AnyError; |
3 | 7 | use deno_npm::npm_rc::RegistryConfig;
|
4 | 8 | use http::header;
|
5 | 9 |
|
6 | 10 | // TODO(bartlomieju): support more auth methods besides token and basic auth
|
7 | 11 | pub fn maybe_auth_header_for_npm_registry(
|
8 | 12 | registry_config: &RegistryConfig,
|
9 |
| -) -> Option<(header::HeaderName, header::HeaderValue)> { |
| 13 | +) -> Result<Option<(header::HeaderName, header::HeaderValue)>, AnyError> { |
10 | 14 | if let Some(token) = registry_config.auth_token.as_ref() {
|
11 |
| - return Some(( |
| 15 | + return Ok(Some(( |
12 | 16 | header::AUTHORIZATION,
|
13 | 17 | header::HeaderValue::from_str(&format!("Bearer {}", token)).unwrap(),
|
14 |
| - )); |
| 18 | + ))); |
15 | 19 | }
|
16 | 20 |
|
17 | 21 | if let Some(auth) = registry_config.auth.as_ref() {
|
18 |
| - return Some(( |
| 22 | + return Ok(Some(( |
19 | 23 | header::AUTHORIZATION,
|
20 | 24 | header::HeaderValue::from_str(&format!("Basic {}", auth)).unwrap(),
|
21 |
| - )); |
| 25 | + ))); |
22 | 26 | }
|
23 | 27 |
|
24 |
| - None |
| 28 | + let (username, password) = ( |
| 29 | + registry_config.username.as_ref(), |
| 30 | + registry_config.password.as_ref(), |
| 31 | + ); |
| 32 | + if (username.is_some() && password.is_none()) |
| 33 | + || (username.is_none() && password.is_some()) |
| 34 | + { |
| 35 | + bail!("Both the username and password must be provided for basic auth") |
| 36 | + } |
| 37 | + |
| 38 | + if username.is_some() && password.is_some() { |
| 39 | + return Ok(Some(( |
| 40 | + header::AUTHORIZATION, |
| 41 | + header::HeaderValue::from_str(&format!( |
| 42 | + "Basic {}", |
| 43 | + BASE64_STANDARD.encode(&format!( |
| 44 | + "{}:{}", |
| 45 | + username.unwrap(), |
| 46 | + password.unwrap() |
| 47 | + )) |
| 48 | + )) |
| 49 | + .unwrap(), |
| 50 | + ))); |
| 51 | + } |
| 52 | + |
| 53 | + Ok(None) |
25 | 54 | }
|
0 commit comments