refactor: rename packages and files to use 'flash' prefix for consistency

This commit is contained in:
Relism
2026-04-26 12:34:49 +02:00
parent 9e19f439be
commit 8a52c4f143
279 changed files with 2774 additions and 752 deletions
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.util.Map;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
/**
* OAuth2 client authentication method for the token endpoint (RFC 6749 §2.3).
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import net.minidev.json.JSONValue;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import net.minidev.json.JSONValue;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import com.nimbusds.jose.JWSAlgorithm;
import com.nimbusds.jose.jwk.source.JWKSource;
@@ -12,7 +12,7 @@ import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.proc.ConfigurableJWTProcessor;
import com.nimbusds.jwt.proc.DefaultJWTClaimsVerifier;
import com.nimbusds.jwt.proc.DefaultJWTProcessor;
import dev.relism.exceptions.HttpException;
import dev.relism.flash.exceptions.HttpException;
import java.io.IOException;
import java.net.URL;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.util.LinkedHashSet;
import java.util.List;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
/**
* Full OIDC client configuration. Build via
@@ -1,12 +1,13 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import dev.relism.ext.openapi.OpenApiContributor;
import dev.relism.ext.openapi.OpenApiContributorRegistry;
import dev.relism.ext.openapi.OpenApiOperationContribution;
import dev.relism.ext.openapi.OpenApiResponseContribution;
import dev.relism.extension.FlashContext;
import dev.relism.extension.FlashExtension;
import dev.relism.extension.FlashRegistrar;
import dev.relism.flash.ext.openapi.OpenApiContributor;
import dev.relism.flash.ext.openapi.OpenApiContributorRegistry;
import dev.relism.flash.ext.openapi.OpenApiOperationContribution;
import dev.relism.flash.ext.openapi.OpenApiResponseContribution;
import dev.relism.flash.extension.FlashContext;
import dev.relism.flash.extension.FlashExtension;
import dev.relism.flash.extension.FlashRegistrar;
import dev.relism.flash.models.Request;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
@@ -245,11 +246,11 @@ public class OidcExtension implements FlashExtension {
}
}
private String absoluteRedirectUri(dev.relism.models.Request req) {
private String absoluteRedirectUri(Request req) {
return absoluteSelf(req, config.redirectUri());
}
private String absoluteSelf(dev.relism.models.Request req, String uri) {
private String absoluteSelf(Request req, String uri) {
if (!uri.startsWith("/")) return uri;
return config.selfScheme() + "://" + req.header("Host") + uri;
}
@@ -264,7 +265,7 @@ public class OidcExtension implements FlashExtension {
/**
* Loaded lazily so that {@code flash-ext-openapi} classes are only resolved at
* runtime when {@link dev.relism.ext.openapi.OpenApiContributorRegistry} is actually on the classpath.
* runtime when {@link OpenApiContributorRegistry} is actually on the classpath.
*/
private static final class OpenApiIntegration {
static void register(FlashContext ctx,
@@ -1,8 +1,10 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import dev.relism.exceptions.HttpException;
import dev.relism.models.Request;
import dev.relism.routing.Middleware;
import dev.relism.flash.exceptions.HttpException;
import dev.relism.flash.extension.FlashContext;
import dev.relism.flash.models.Response;
import dev.relism.flash.models.Request;
import dev.relism.flash.routing.Middleware;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@@ -14,7 +16,7 @@ import java.util.Map;
import java.util.Optional;
/**
* Request-level OIDC middleware. Exposed in the {@link dev.relism.extension.FlashContext}
* Request-level OIDC middleware. Exposed in the {@link FlashContext}
* for manual use on lambda routes; injected automatically for handlers annotated with
* {@link Authenticated}, {@link RolesAllowed} or {@link ScopesAllowed}.
*
@@ -192,7 +194,7 @@ public class OidcMiddleware {
* Returns claims on success, or {@code null} if a redirect was already written to
* {@code res}. Throws {@link HttpException} 401/403 for API clients.
*/
private Map<String, Object> resolve(Request req, dev.relism.models.Response res) {
private Map<String, Object> resolve(Request req, Response res) {
// 1. Bearer token
String bearerToken = extractBearerToken(req.header("Authorization"));
if (bearerToken != null) {
@@ -258,7 +260,7 @@ public class OidcMiddleware {
);
}
private void enforcePolicy(Map<String, Object> claims, OidcAuthPolicy policy, dev.relism.models.Response res) {
private void enforcePolicy(Map<String, Object> claims, OidcAuthPolicy policy, Response res) {
checkRoles(claims, policy.requiredRoles());
checkScopes(claims, policy.requiredScopes(), policy.scopeMatch(), res);
}
@@ -270,7 +272,7 @@ public class OidcMiddleware {
}
private void checkScopes(Map<String, Object> claims, String[] required, ScopesAllowed.Match match,
dev.relism.models.Response res) {
Response res) {
if (required.length == 0) return;
if (scopesAllowed(claims, required, match)) return;
res.header("WWW-Authenticate", insufficientScopeChallenge(required));
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
/**
* OIDC provider endpoints discovered from {@code {issuer}/.well-known/openid-configuration}.
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.time.Instant;
import java.util.Map;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.util.Optional;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.time.Instant;
import java.util.Optional;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
/** Parsed response from an OAuth2 token endpoint. Package-private — internal use only. */
record OidcTokenResponse(
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.util.List;
import java.util.Map;
@@ -1,8 +1,10 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import dev.relism.flash.exceptions.HttpException;
/**
* Thrown when OIDC token validation fails (signature, claims, nonce, expiry, etc.).
* Distinct from {@link dev.relism.exceptions.HttpException}: this signals a protocol-level
* Distinct from {@link HttpException}: this signals a protocol-level
* failure, not an HTTP response callers decide the appropriate status code.
*/
public final class OidcValidationException extends RuntimeException {
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import net.minidev.json.JSONValue;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import org.junit.jupiter.api.Test;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import org.junit.jupiter.api.Test;
@@ -1,6 +1,10 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import dev.relism.ext.openapi.OpenApiContributor;
import dev.relism.flash.ext.openapi.OpenApiContributorRegistry;
import dev.relism.flash.ext.openapi.OpenApiOperationContribution;
import dev.relism.flash.ext.openapi.OpenApiResponseContribution;
import dev.relism.flash.ext.openapi.OpenApiContributor;
import dev.relism.flash.extension.FlashContext;
import org.junit.jupiter.api.Test;
import java.lang.reflect.Constructor;
@@ -82,24 +86,24 @@ class OidcOpenApiInteropTest {
@Test
void securityContribution_presentForAuthenticatedHandler() throws Exception {
dev.relism.ext.openapi.OpenApiOperationContribution operation = contributor().operationFor(AuthOnly.class);
OpenApiOperationContribution operation = contributor().operationFor(AuthOnly.class);
List<Map<String, List<String>>> security = operation.security();
assertEquals(1, security.size());
assertTrue(security.getFirst().containsKey("issuer"));
}
private static OpenApiContributor contributor() throws Exception {
Class<?> clazz = Class.forName("dev.relism.ext.oidc.OidcExtension$OpenApiIntegration");
Class<?> clazz = Class.forName("dev.relism.flash.ext.oidc.OidcExtension$OpenApiIntegration");
Constructor<?> ctor = clazz.getDeclaredConstructor();
ctor.setAccessible(true);
Object instance = ctor.newInstance();
Method m = clazz.getDeclaredMethod("register", dev.relism.extension.FlashContext.class, OidcConfig.class, OidcProviderMetadata.class);
Method m = clazz.getDeclaredMethod("register", FlashContext.class, OidcConfig.class, OidcProviderMetadata.class);
m.setAccessible(true);
dev.relism.extension.FlashContext ctx = new dev.relism.extension.FlashContext();
dev.relism.ext.openapi.OpenApiContributorRegistry registry = new dev.relism.ext.openapi.OpenApiContributorRegistry();
ctx.provide(dev.relism.ext.openapi.OpenApiContributorRegistry.class, registry);
FlashContext ctx = new FlashContext();
OpenApiContributorRegistry registry = new OpenApiContributorRegistry();
ctx.provide(OpenApiContributorRegistry.class, registry);
OidcConfig config = OidcConfig.builder("https://issuer", "c", "s", "/cb").build();
OidcProviderMetadata meta = new OidcProviderMetadata("a", "t", "u", "j", "e");
@@ -109,9 +113,9 @@ class OidcOpenApiInteropTest {
}
private static Map<Integer, String> responses(Class<?> cls) throws Exception {
Map<Integer, dev.relism.ext.openapi.OpenApiResponseContribution> byCode = contributor().operationFor(cls).responses();
Map<Integer, OpenApiResponseContribution> byCode = contributor().operationFor(cls).responses();
java.util.LinkedHashMap<Integer, String> out = new java.util.LinkedHashMap<>();
for (Map.Entry<Integer, dev.relism.ext.openapi.OpenApiResponseContribution> e : byCode.entrySet()) {
for (Map.Entry<Integer, OpenApiResponseContribution> e : byCode.entrySet()) {
out.put(e.getKey(), e.getValue().description());
}
return out;
@@ -1,4 +1,4 @@
package dev.relism.ext.oidc;
package dev.relism.flash.ext.oidc;
import org.junit.jupiter.api.Test;