MigrationModeFilter.java
package de.dlr.shepard.common.filters;
import de.dlr.shepard.common.configuration.feature.toggles.MigrationModeToggle;
import de.dlr.shepard.common.exceptions.ApiError;
import jakarta.annotation.Priority;
import jakarta.enterprise.context.RequestScoped;
import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.container.ContainerRequestFilter;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
import jakarta.ws.rs.ext.Provider;
import java.io.IOException;
@Provider
@RequestScoped
@Priority(999)
public class MigrationModeFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
if (!MigrationModeToggle.isActive()) return;
if (PublicEndpointRegistry.isRequestPathPublic(requestContext)) return;
if (requestContext.getUriInfo().getPath().startsWith("/temp")) return;
requestContext.abortWith(
Response.status(Status.SERVICE_UNAVAILABLE)
.entity(
new ApiError(
Status.SERVICE_UNAVAILABLE.getStatusCode(),
"ServiceUnavailableException",
"The application is in migration mode right now. " +
"You can retrieve the current migration status at <backend-url>/shepard/api/temp/migrations/state"
)
)
.build()
);
}
}