View Javadoc
1   package de.dlr.shepard.common.filters;
2   
3   import de.dlr.shepard.common.configuration.feature.toggles.MigrationModeToggle;
4   import de.dlr.shepard.common.exceptions.ApiError;
5   import jakarta.annotation.Priority;
6   import jakarta.enterprise.context.RequestScoped;
7   import jakarta.ws.rs.container.ContainerRequestContext;
8   import jakarta.ws.rs.container.ContainerRequestFilter;
9   import jakarta.ws.rs.core.Response;
10  import jakarta.ws.rs.core.Response.Status;
11  import jakarta.ws.rs.ext.Provider;
12  import java.io.IOException;
13  
14  @Provider
15  @RequestScoped
16  @Priority(999)
17  public class MigrationModeFilter implements ContainerRequestFilter {
18  
19    @Override
20    public void filter(ContainerRequestContext requestContext) throws IOException {
21      if (!MigrationModeToggle.isActive()) return;
22      if (PublicEndpointRegistry.isRequestPathPublic(requestContext)) return;
23      if (requestContext.getUriInfo().getPath().startsWith("/temp")) return;
24  
25      requestContext.abortWith(
26        Response.status(Status.SERVICE_UNAVAILABLE)
27          .entity(
28            new ApiError(
29              Status.SERVICE_UNAVAILABLE.getStatusCode(),
30              "ServiceUnavailableException",
31              "The application is in migration mode right now. " +
32              "You can retrieve the current migration status at <backend-url>/shepard/api/temp/migrations/state"
33            )
34          )
35          .build()
36      );
37    }
38  }