Skip to content

Commit 49a5d7d

Browse files
committed
Resolving changes from main branch
2 parents f27d4ae + faa32a2 commit 49a5d7d

12 files changed

Lines changed: 121 additions & 10 deletions

File tree

.github/workflows/build-and-test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ jobs:
1717
java-version: 17
1818

1919
- name: Set up Gradle
20-
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2
20+
uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
2121

2222
- name: Test and Assemble with Gradle
2323
run: ./gradlew assemble check --continue --console=plain
2424

25-
- uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
25+
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
2626
with:
2727
flags: unittests
2828

29-
- uses: actions/upload-artifact@v6
29+
- uses: actions/upload-artifact@v7
3030
with:
3131
name: Reports
3232
path: |

.github/workflows/gradle-wrapper-validation.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ jobs:
77
runs-on: ubuntu-latest
88
steps:
99
- uses: actions/checkout@v6
10-
- uses: gradle/actions/wrapper-validation@v5.0.2
10+
- uses: gradle/actions/wrapper-validation@v6.1.0

.github/workflows/rl-scanner.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
java-version: ${{ inputs.java-version }}
4242

4343
- name: Set up Gradle
44-
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2
44+
uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
4545

4646
- name: Test and Assemble with Gradle
4747
run: ./gradlew assemble check --continue --console=plain

auth0-api-java/build.gradle

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ java {
2626

2727
dependencies {
2828
// Core dependencies
29-
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
29+
implementation 'com.fasterxml.jackson.core:jackson-databind:2.21.2'
3030
implementation 'org.apache.httpcomponents:httpclient:4.5.14'
3131

3232
// JWT validation dependencies
@@ -44,6 +44,12 @@ repositories {
4444
mavenCentral()
4545
}
4646

47+
processResources {
48+
filesMatching('auth0-client-info.properties') {
49+
expand(version: project.version)
50+
}
51+
}
52+
4753
test {
4854
useJUnit()
4955
testLogging {
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.auth0.telemetry;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.nio.charset.StandardCharsets;
6+
import java.util.Properties;
7+
8+
/**
9+
* Provides the Base64-encoded Auth0-Client telemetry header value.
10+
*
11+
* The payload is a JSON object: {"name":"springboot-api","version":"x.y.z","java":"17"}
12+
*/
13+
public final class TelemetryProvider {
14+
15+
private static final String PROPERTIES_FILE = "auth0-client-info.properties";
16+
private static final String UNKNOWN = "unknown";
17+
18+
private static volatile String cachedHeaderValue;
19+
20+
private TelemetryProvider() {
21+
}
22+
23+
/**
24+
* Returns the Base64url-encoded telemetry header value.
25+
*
26+
* @return the Auth0-Client header value, or null if it cannot be built
27+
*/
28+
public static String getHeaderValue() {
29+
if (cachedHeaderValue != null) {
30+
return cachedHeaderValue;
31+
}
32+
synchronized (TelemetryProvider.class) {
33+
if (cachedHeaderValue != null) {
34+
return cachedHeaderValue;
35+
}
36+
cachedHeaderValue = buildHeaderValue();
37+
return cachedHeaderValue;
38+
}
39+
}
40+
41+
private static String buildHeaderValue() {
42+
String name = UNKNOWN;
43+
String version = UNKNOWN;
44+
45+
try (InputStream is = TelemetryProvider.class.getClassLoader()
46+
.getResourceAsStream(PROPERTIES_FILE)) {
47+
if (is != null) {
48+
Properties props = new Properties();
49+
props.load(is);
50+
name = props.getProperty("name", UNKNOWN);
51+
version = props.getProperty("version", UNKNOWN);
52+
}
53+
} catch (IOException ignored) {
54+
// Fall through with defaults
55+
}
56+
57+
String javaVersion = System.getProperty("java.version", UNKNOWN);
58+
59+
String json = "{\"name\":\"" + name + "\",\"version\":\"" + version + "\",\"java\":\"" + javaVersion + "\"}";
60+
61+
return java.util.Base64.getUrlEncoder().withoutPadding()
62+
.encodeToString(json.getBytes(StandardCharsets.UTF_8));
63+
}
64+
}

auth0-api-java/src/main/java/com/auth0/validators/JWTValidator.java

Whitespace-only changes.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version=${version}
2+
name=springboot-api
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.auth0.telemetry;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import org.junit.Test;
5+
6+
import java.nio.charset.StandardCharsets;
7+
import java.util.Base64;
8+
import java.util.Map;
9+
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
12+
public class TelemetryProviderTest {
13+
14+
@Test
15+
@SuppressWarnings("unchecked")
16+
public void getHeaderValue_returnsValidBase64Json() throws Exception {
17+
String headerValue = TelemetryProvider.getHeaderValue();
18+
assertThat(headerValue).isNotNull().isNotEmpty();
19+
20+
byte[] decoded = Base64.getUrlDecoder().decode(headerValue);
21+
String json = new String(decoded, StandardCharsets.UTF_8);
22+
23+
ObjectMapper mapper = new ObjectMapper();
24+
Map<String, String> payload = mapper.readValue(json, Map.class);
25+
26+
assertThat(payload).containsKey("name");
27+
assertThat(payload).containsKey("version");
28+
assertThat(payload).containsKey("java");
29+
assertThat(payload.get("name")).isEqualTo("springboot-api");
30+
assertThat(payload.get("java")).isEqualTo(System.getProperty("java.version"));
31+
}
32+
33+
@Test
34+
public void getHeaderValue_isCached() {
35+
String first = TelemetryProvider.getHeaderValue();
36+
String second = TelemetryProvider.getHeaderValue();
37+
assertThat(first).isSameAs(second);
38+
}
39+
}

auth0-springboot-api-playground/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
id 'java'
3-
id 'org.springframework.boot' version '3.3.0'
3+
id 'org.springframework.boot' version '3.5.13'
44
id 'io.spring.dependency-management' version '1.1.7'
55
}
66

auth0-springboot-api/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
id 'java-library'
3-
id 'org.springframework.boot' version '3.2.0'
3+
id 'org.springframework.boot' version '3.5.13'
44
id 'io.spring.dependency-management' version '1.1.7'
55
id "com.diffplug.spotless" version "6.25.0"
66
}

0 commit comments

Comments
 (0)