diff --git a/jans-config-api/common/src/main/java/io/jans/configapi/util/ApiConstants.java b/jans-config-api/common/src/main/java/io/jans/configapi/util/ApiConstants.java index b77345fee8c..321eebc5b17 100644 --- a/jans-config-api/common/src/main/java/io/jans/configapi/util/ApiConstants.java +++ b/jans-config-api/common/src/main/java/io/jans/configapi/util/ApiConstants.java @@ -52,6 +52,7 @@ private ApiConstants() {} public static final String GRANT_TYPES = "/grant-types"; public static final String CACHE = "/cache"; public static final String PERSISTENCE = "/persistence"; + public static final String FEATURE_FLAGS = "/feature-flags"; public static final String DATABASE = "/database"; public static final String LDAP = "/ldap"; public static final String SQL = "/sql"; diff --git a/jans-config-api/docs/jans-config-api-swagger.yaml b/jans-config-api/docs/jans-config-api-swagger.yaml index 8c15cd3932c..2dda350932e 100644 --- a/jans-config-api/docs/jans-config-api-swagger.yaml +++ b/jans-config-api/docs/jans-config-api-swagger.yaml @@ -975,6 +975,29 @@ paths: security: - oauth2: - https://jans.io/oauth/jans-auth-server/config/properties.write + /api/v1/jans-auth-server/config/feature-flags: + get: + tags: + - Configuration – Properties + summary: Returns feature flags type configured for Jans authorization server. + description: Returns feature flags type configured for Jans authorization server. + operationId: get-feature-flag-type + responses: + "200": + description: Ok + content: + application/json: + schema: + type: array + items: + type: string + "401": + description: Unauthorized + "500": + description: InternalServerError + security: + - oauth2: + - https://jans.io/oauth/jans-auth-server/config/properties.readonly /api/v1/jans-auth-server/config/persistence: get: tags: @@ -7586,18 +7609,18 @@ components: $ref: '#/components/schemas/AttributeValidation' tooltip: type: string - userCanView: + userCanEdit: type: boolean adminCanView: type: boolean - userCanEdit: + userCanView: type: boolean adminCanEdit: type: boolean - adminCanAccess: - type: boolean userCanAccess: type: boolean + adminCanAccess: + type: boolean whitePagesCanView: type: boolean baseDn: @@ -8399,8 +8422,6 @@ components: type: boolean skipAuthenticationFilterOptionsMethod: type: boolean - fapi: - type: boolean allResponseTypesSupported: uniqueItems: true type: array @@ -8410,6 +8431,8 @@ components: - code - token - id_token + fapi: + type: boolean AuthenticationFilter: required: - baseDn diff --git a/jans-config-api/server/src/main/java/io/jans/configapi/rest/resource/auth/AuthConfigResource.java b/jans-config-api/server/src/main/java/io/jans/configapi/rest/resource/auth/AuthConfigResource.java index 0ee8a7187f2..89b47260073 100644 --- a/jans-config-api/server/src/main/java/io/jans/configapi/rest/resource/auth/AuthConfigResource.java +++ b/jans-config-api/server/src/main/java/io/jans/configapi/rest/resource/auth/AuthConfigResource.java @@ -10,6 +10,7 @@ import com.github.fge.jsonpatch.JsonPatchException; import io.jans.agama.model.EngineConfig; import io.jans.as.model.config.Conf; +import io.jans.as.model.common.FeatureFlagType; import io.jans.as.model.configuration.AppConfiguration; import io.jans.configapi.core.rest.ProtectedApi; import io.jans.configapi.service.auth.ConfigurationService; @@ -27,6 +28,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.*; +import java.util.EnumSet; import jakarta.inject.Inject; import jakarta.validation.constraints.NotNull; import jakarta.ws.rs.*; @@ -48,7 +50,7 @@ public class AuthConfigResource extends ConfigBaseResource { @Inject ConfigurationService configurationService; - + @Operation(summary = "Gets all Jans authorization server configuration properties.", description = "Gets all Jans authorization server configuration properties.", operationId = "get-properties", tags = { "Configuration – Properties" }, security = @SecurityRequirement(name = "oauth2", scopes = { ApiAccessConstants.JANS_AUTH_CONFIG_READ_ACCESS })) @@ -119,6 +121,27 @@ public Response getPersistenceDetails() { log.debug("AuthConfigResource::getPersistenceDetails() - persistenceConfiguration:{}", persistenceConfiguration); return Response.ok(persistenceConfiguration).build(); } + + + @Operation(summary = "Returns feature flags type configured for Jans authorization server.", description = "Returns feature flags type configured for Jans authorization server.", operationId = "get-feature-flag-type", tags = { + "Configuration – Properties" }, security = @SecurityRequirement(name = "oauth2", scopes = { + ApiAccessConstants.JANS_AUTH_CONFIG_READ_ACCESS })) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Ok", content = @Content(mediaType = MediaType.APPLICATION_JSON, array = @ArraySchema(schema = @Schema(implementation = String.class, type="enum")))), + @ApiResponse(responseCode = "401", description = "Unauthorized"), + @ApiResponse(responseCode = "500", description = "InternalServerError") }) + @GET + @ProtectedApi(scopes = { ApiAccessConstants.JANS_AUTH_CONFIG_READ_ACCESS }, groupScopes = { + ApiAccessConstants.JANS_AUTH_CONFIG_WRITE_ACCESS }, superScopes = { + ApiAccessConstants.SUPER_ADMIN_READ_ACCESS }) + @Path(ApiConstants.FEATURE_FLAGS) + public Response getFeatureFlagType() { + EnumSet set = EnumSet.allOf(FeatureFlagType.class); + set.remove(FeatureFlagType.UNKNOWN); + log.debug("set:{}", set); + return Response.ok(set).build(); + } + private void validateAgamaConfiguration(EngineConfig engineConfig) { log.debug("engineConfig:{}", engineConfig); @@ -132,4 +155,5 @@ private void validateAgamaConfiguration(EngineConfig engineConfig) { + engineConfig.getMaxItemsLoggedInCollections()); } } + }