Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: expose method to manually obtain ADC from gcloud CLI well-known… #1188

Merged
merged 22 commits into from
May 5, 2023
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
1a4be5c
feat: expose method to manually obtain ADC from gcloud CLI well-known…
diegomarquezp Mar 29, 2023
8d89721
chore: expose well-known file instead of credentials
diegomarquezp Apr 25, 2023
6081796
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Apr 25, 2023
5afd206
chore: expose path to well-known creds file only
diegomarquezp Apr 25, 2023
e89e1e6
Merge branch 'default-credential-expose' of https://github.com/google…
diegomarquezp Apr 25, 2023
4a2dbbb
chore: better test name
diegomarquezp Apr 25, 2023
2b0ad5b
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Apr 25, 2023
c2999f3
Merge branch 'default-credential-expose' of https://github.com/google…
gcf-owl-bot[bot] Apr 25, 2023
4fa3672
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Apr 25, 2023
d893d6e
Merge branch 'default-credential-expose' of https://github.com/google…
gcf-owl-bot[bot] Apr 25, 2023
481aa83
chore: revert changes in favor of util class
diegomarquezp Apr 28, 2023
d9015b1
chore: move gcloud CLI path logic to new utils class
diegomarquezp Apr 28, 2023
75d7a06
chore: add GoogleAuthUtils test
diegomarquezp Apr 28, 2023
b69e0f0
Merge branch 'default-credential-expose' of https://github.com/google…
diegomarquezp Apr 28, 2023
12e797f
chore: use default instance of DCP
diegomarquezp May 1, 2023
d9cc6e7
chore: revert initial changes of utils class
diegomarquezp May 1, 2023
aca4544
chore: restore static modifier
diegomarquezp May 1, 2023
209d50a
chore: use test-friendly method signatures of auth utils
diegomarquezp May 1, 2023
0b6c953
chore: fix utils test to compute path assuming env not set
diegomarquezp May 1, 2023
04a0d87
chore: correct comments for the auth util class
diegomarquezp May 2, 2023
ad04101
chore: license header for utils test
diegomarquezp May 4, 2023
2f471d1
Merge branch 'main' into default-credential-expose
diegomarquezp May 4, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,10 @@ private final GoogleCredentials getDefaultCredentialsUnsynchronized(
return credentials;
}

private final File getWellKnownCredentialsFile() {
return GoogleAuthUtils.getWellKnownCredentialsFile(this);
}

private void warnAboutProblematicCredentials(GoogleCredentials credentials) {
if (credentials instanceof UserCredentials
&& ((UserCredentials) credentials).getClientId().equals(CLOUDSDK_CLIENT_ID)
Expand All @@ -235,21 +239,6 @@ private void warnAboutProblematicCredentials(GoogleCredentials credentials) {
}
}

private final File getWellKnownCredentialsFile() {
File cloudConfigPath;
String envPath = getEnv("CLOUDSDK_CONFIG");
if (envPath != null) {
cloudConfigPath = new File(envPath);
} else if (getOsName().indexOf("windows") >= 0) {
File appDataPath = new File(getEnv("APPDATA"));
cloudConfigPath = new File(appDataPath, CLOUDSDK_CONFIG_DIRECTORY);
} else {
File configPath = new File(getProperty("user.home", ""), ".config");
cloudConfigPath = new File(configPath, CLOUDSDK_CONFIG_DIRECTORY);
}
return new File(cloudConfigPath, WELL_KNOWN_CREDENTIALS_FILE);
}

private boolean runningOnAppEngine() {
Class<?> systemPropertyClass = null;
try {
Expand Down
81 changes: 81 additions & 0 deletions oauth2_http/java/com/google/auth/oauth2/GoogleAuthUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright 2023, Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
*
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package com.google.auth.oauth2;

import java.io.File;

/**
* This public class provides shared utilities for common OAuth2 utils or ADC. It also exposes
* convenience methods such as a getter for well-known Application Default Credentials file path
*/
public class GoogleAuthUtils {
diegomarquezp marked this conversation as resolved.
Show resolved Hide resolved

/**
* Gets the path to the well-known Application Default Credentials file location
*
* @return the path to the well-known Application Default Credentials file location
*/
public static final String getWellKnownCredentialsPath() {
return getWellKnownCredentialsFile(DefaultCredentialsProvider.DEFAULT).getAbsolutePath();
}

/**
* Testing version of getWellKnownCredentialsPath() that uses a custom provider
*
* @return the path to the well-known Application Default Credentials file location
*/
static final String getWellKnownCredentialsPath(DefaultCredentialsProvider provider) {
return getWellKnownCredentialsFile(provider).getAbsolutePath();
}

/**
* Platform-independent logic to obtain the well-known Application Default Credentials file
*
* @param provider the provider used to resolve env and system properties (exposed for testing
* purposes)
* @return the well-known Application Default Credentials file
*/
static final File getWellKnownCredentialsFile(DefaultCredentialsProvider provider) {
File cloudConfigPath;
String envPath = provider.getEnv("CLOUDSDK_CONFIG");
if (envPath != null) {
cloudConfigPath = new File(envPath);
} else if (provider.getOsName().indexOf("windows") >= 0) {
File appDataPath = new File(provider.getEnv("APPDATA"));
cloudConfigPath = new File(appDataPath, provider.CLOUDSDK_CONFIG_DIRECTORY);
} else {
File configPath = new File(provider.getProperty("user.home", ""), ".config");
cloudConfigPath = new File(configPath, provider.CLOUDSDK_CONFIG_DIRECTORY);
}
return new File(cloudConfigPath, provider.WELL_KNOWN_CREDENTIALS_FILE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -769,7 +769,7 @@ public LowLevelHttpResponse execute() throws IOException {
}
}

private static class TestDefaultCredentialsProvider extends DefaultCredentialsProvider {
static class TestDefaultCredentialsProvider extends DefaultCredentialsProvider {

private final Map<String, Class<?>> types = new HashMap<>();
private final Map<String, String> variables = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.google.auth.oauth2;
diegomarquezp marked this conversation as resolved.
Show resolved Hide resolved

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.io.File;
import org.junit.Test;

public class GoogleAuthUtilsTest {

@Test
public void getWellKnownCredentialsPath_correct() {
DefaultCredentialsProvider provider =
new DefaultCredentialsProviderTest.TestDefaultCredentialsProvider();
// since the TestDefaultCredentialsProvider properties and envs are not set,
// the base folder will be an empty string using.
File homeDir = new File("");
File configDir = new File(homeDir, ".config");
File cloudConfigDir = new File(configDir, provider.CLOUDSDK_CONFIG_DIRECTORY);
File wellKnownFile = new File(cloudConfigDir, provider.WELL_KNOWN_CREDENTIALS_FILE);

String obtainedPath = GoogleAuthUtils.getWellKnownCredentialsPath(provider);

assertNotNull(obtainedPath);
assertEquals(obtainedPath, wellKnownFile.getAbsolutePath());
}
}