diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f2fbf9..51a66fd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -111,7 +111,7 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Build native artifact working-directory: api - run: ./gradlew --dependency-verification=strict quarkusBuild -Dquarkus.native.enabled=true + run: ./gradlew --dependency-verification=strict quarkusBuild -Dquarkus.native.enabled=true -Dquarkus.package.jar.enabled=false - name: Verify native executable working-directory: api run: | diff --git a/Makefile b/Makefile index 0457936..8ef89e5 100644 --- a/Makefile +++ b/Makefile @@ -93,6 +93,8 @@ demo-deps: # Run the e2e suite (Aussie + demo + Cassandra + Redis in Testcontainers). # Requires Docker. Standalone from :check; this is intentionally opt-in because # container boot is slow. See docs/platform/e2e-tests.md. +e2e e2e-soak: demo-deps + e2e: cd api && ./gradlew e2eTest diff --git a/api/gradle/verification-metadata.xml b/api/gradle/verification-metadata.xml index 2f41a44..daf4afb 100644 --- a/api/gradle/verification-metadata.xml +++ b/api/gradle/verification-metadata.xml @@ -178,6 +178,11 @@ + + + + + @@ -326,6 +331,11 @@ + + + + + @@ -342,6 +352,11 @@ + + + + + @@ -566,6 +581,11 @@ + + + + + @@ -5274,6 +5294,14 @@ + + + + + + + + diff --git a/api/src/main/java/aussie/core/service/auth/ApiKeyService.java b/api/src/main/java/aussie/core/service/auth/ApiKeyService.java index 1cd9f44..ea4e7a1 100644 --- a/api/src/main/java/aussie/core/service/auth/ApiKeyService.java +++ b/api/src/main/java/aussie/core/service/auth/ApiKeyService.java @@ -37,7 +37,7 @@ public class ApiKeyService implements ApiKeyManagement { public static final String API_KEY_PREFIX = "aussie_v1_"; private static final int KEY_LENGTH_BYTES = 32; private static final int KEY_ID_LENGTH = 8; - private static final SecureRandom SECURE_RANDOM = new SecureRandom(); + private final SecureRandom secureRandom = new SecureRandom(); private final ApiKeyRepository repository; private final ApiKeyConfig config; @@ -175,7 +175,7 @@ public Uni createWithKey( */ private String generateSecureKey() { byte[] bytes = new byte[KEY_LENGTH_BYTES]; - SECURE_RANDOM.nextBytes(bytes); + secureRandom.nextBytes(bytes); return API_KEY_PREFIX + Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); } @@ -209,7 +209,7 @@ public static boolean isLegacyKey(String credential) { */ private String generateKeyId() { byte[] bytes = new byte[KEY_ID_LENGTH / 2]; - SECURE_RANDOM.nextBytes(bytes); + secureRandom.nextBytes(bytes); return HexFormat.of().formatHex(bytes); } diff --git a/api/src/main/java/aussie/core/service/auth/PkceService.java b/api/src/main/java/aussie/core/service/auth/PkceService.java index 1157349..a4f235d 100644 --- a/api/src/main/java/aussie/core/service/auth/PkceService.java +++ b/api/src/main/java/aussie/core/service/auth/PkceService.java @@ -37,7 +37,7 @@ public class PkceService { private static final Pattern CODE_CHALLENGE_PATTERN = Pattern.compile("[A-Za-z0-9_-]{43}"); private static final Pattern CODE_VERIFIER_PATTERN = Pattern.compile("[A-Za-z0-9._~-]{43,128}"); private static final Pattern STATE_PATTERN = Pattern.compile("[A-Za-z0-9_-]{43}"); - private static final SecureRandom SECURE_RANDOM = new SecureRandom(); + private final SecureRandom secureRandom = new SecureRandom(); private final PkceChallengeRepository repository; private final PkceConfig config; @@ -95,7 +95,7 @@ public boolean isValidState(String state) { */ public String generateCodeVerifier() { byte[] randomBytes = new byte[VERIFIER_LENGTH]; - SECURE_RANDOM.nextBytes(randomBytes); + secureRandom.nextBytes(randomBytes); return Base64.getUrlEncoder().withoutPadding().encodeToString(randomBytes); } @@ -174,7 +174,7 @@ public Uni> consumeTransaction(String sta */ public String generateState() { final var bytes = new byte[STATE_LENGTH]; - SECURE_RANDOM.nextBytes(bytes); + secureRandom.nextBytes(bytes); return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); } diff --git a/api/src/main/java/aussie/core/service/session/SessionIdGenerator.java b/api/src/main/java/aussie/core/service/session/SessionIdGenerator.java index 12ed5a0..76f54d1 100644 --- a/api/src/main/java/aussie/core/service/session/SessionIdGenerator.java +++ b/api/src/main/java/aussie/core/service/session/SessionIdGenerator.java @@ -16,7 +16,7 @@ public class SessionIdGenerator { private static final int SESSION_ID_BYTES = 32; // 256 bits - private static final SecureRandom SECURE_RANDOM = new SecureRandom(); + private final SecureRandom secureRandom = new SecureRandom(); private static final Base64.Encoder ENCODER = Base64.getUrlEncoder().withoutPadding(); /** @@ -26,7 +26,7 @@ public class SessionIdGenerator { */ public String generate() { byte[] bytes = new byte[SESSION_ID_BYTES]; - SECURE_RANDOM.nextBytes(bytes); + secureRandom.nextBytes(bytes); return ENCODER.encodeToString(bytes); } }