From 5e90c053e23c7d767dcb0cd80b04a1963e29bbf4 Mon Sep 17 00:00:00 2001 From: Thisara-Welmilla Date: Thu, 7 Nov 2024 20:13:00 +0530 Subject: [PATCH] Update APIs to support custom authentication management. --- .../authenticators/v1/AuthenticatorsApi.java | 76 +++++- .../v1/AuthenticatorsApiService.java | 8 + .../v1/impl/AuthenticatorsApiServiceImpl.java | 23 ++ .../src/main/resources/authenticators.yaml | 233 +++++++++++++++++- 4 files changed, 338 insertions(+), 2 deletions(-) diff --git a/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/gen/java/org/wso2/carbon/identity/api/server/authenticators/v1/AuthenticatorsApi.java b/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/gen/java/org/wso2/carbon/identity/api/server/authenticators/v1/AuthenticatorsApi.java index 1d7fd0142f..d808ff7491 100644 --- a/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/gen/java/org/wso2/carbon/identity/api/server/authenticators/v1/AuthenticatorsApi.java +++ b/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/gen/java/org/wso2/carbon/identity/api/server/authenticators/v1/AuthenticatorsApi.java @@ -25,6 +25,8 @@ import org.wso2.carbon.identity.api.server.authenticators.v1.model.Authenticator; import org.wso2.carbon.identity.api.server.authenticators.v1.model.ConnectedApps; import org.wso2.carbon.identity.api.server.authenticators.v1.model.Error; +import org.wso2.carbon.identity.api.server.authenticators.v1.model.UserDefinedLocalAuthenticatorCreation; +import org.wso2.carbon.identity.api.server.authenticators.v1.model.UserDefinedLocalAuthenticatorUpdate; import org.wso2.carbon.identity.api.server.authenticators.v1.AuthenticatorsApiService; import javax.validation.Valid; @@ -91,6 +93,54 @@ public Response authenticatorsMetaTagsGet() { return delegate.authenticatorsMetaTagsGet(); } + @Valid + @POST + @Path("/custom") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Create a new user defined local authenticator. ", notes = "This API provides the capability to create a new user defined local authenticator.
Permission required:
* /permission/admin/manage/custom_authenticator/create
Scope required:
* internal_custom_authenticator_create
", response = Authenticator.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "User defined local authenticators", }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Successful response", response = Authenticator.class), + @ApiResponse(code = 400, message = "Bad Request", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden", response = Void.class), + @ApiResponse(code = 409, message = "Conflict", response = Error.class), + @ApiResponse(code = 500, message = "Server Error", response = Error.class) + }) + public Response createUserDefinedLocalAuthenticator(@ApiParam(value = "This represents the user defined local authenticator to be created." ,required=true) @Valid UserDefinedLocalAuthenticatorCreation userDefinedLocalAuthenticatorCreation) { + + return delegate.createUserDefinedLocalAuthenticator(userDefinedLocalAuthenticatorCreation ); + } + + @Valid + @DELETE + @Path("/custom/{authenticator-id}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Delete a user defined local authenticator. ", notes = "This API provides the capability to delete a user defined local authenticators.
Permission required:
* /permission/admin/manage/custom_authenticator/delete
Scope required:
* internal_custom_authenticator_delete
", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "User defined local authenticators", }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Successful response", response = Void.class), + @ApiResponse(code = 400, message = "Bad Request", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden", response = Void.class), + @ApiResponse(code = 409, message = "Conflict", response = Error.class), + @ApiResponse(code = 500, message = "Server Error", response = Error.class) + }) + public Response deleteUserDefinedLocalAuthenticator(@ApiParam(value = "ID of an authenticator",required=true) @PathParam("authenticator-id") String authenticatorId) { + + return delegate.deleteUserDefinedLocalAuthenticator(authenticatorId ); + } + @Valid @GET @Path("/{authenticator-id}/connected-apps") @@ -101,7 +151,7 @@ public Response authenticatorsMetaTagsGet() { @Authorization(value = "OAuth2", scopes = { }) - }, tags={ "Connected apps of local authenticators" }) + }, tags={ "Connected apps of local authenticators", }) @ApiResponses(value = { @ApiResponse(code = 200, message = "Successful Response", response = ConnectedApps.class), @ApiResponse(code = 400, message = "Bad Request", response = Error.class), @@ -115,4 +165,28 @@ public Response getConnectedAppsOfLocalAuthenticator(@ApiParam(value = "ID of an return delegate.getConnectedAppsOfLocalAuthenticator(authenticatorId, limit, offset ); } + @Valid + @PATCH + @Path("/custom/{authenticator-id}") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Update a user defined local authenticator. ", notes = "This API provides the capability to update a user defined local authenticator configurations.
Permission required:
* /permission/admin/manage/custom_authenticator/update
Scope required:
* internal_custom_authenticator_update
", response = Authenticator.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "User defined local authenticators" }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Successful response", response = Authenticator.class), + @ApiResponse(code = 400, message = "Bad Request", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden", response = Void.class), + @ApiResponse(code = 409, message = "Conflict", response = Error.class), + @ApiResponse(code = 500, message = "Server Error", response = Error.class) + }) + public Response updateUserDefinedLocalAuthenticator(@ApiParam(value = "ID of an authenticator",required=true) @PathParam("authenticator-id") String authenticatorId, @ApiParam(value = "This represents the user defined local authenticator to be created." ,required=true) @Valid UserDefinedLocalAuthenticatorUpdate userDefinedLocalAuthenticatorUpdate) { + + return delegate.updateUserDefinedLocalAuthenticator(authenticatorId, userDefinedLocalAuthenticatorUpdate ); + } + } diff --git a/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/gen/java/org/wso2/carbon/identity/api/server/authenticators/v1/AuthenticatorsApiService.java b/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/gen/java/org/wso2/carbon/identity/api/server/authenticators/v1/AuthenticatorsApiService.java index 9eba016ca1..d895ade1be 100644 --- a/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/gen/java/org/wso2/carbon/identity/api/server/authenticators/v1/AuthenticatorsApiService.java +++ b/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/gen/java/org/wso2/carbon/identity/api/server/authenticators/v1/AuthenticatorsApiService.java @@ -25,6 +25,8 @@ import org.wso2.carbon.identity.api.server.authenticators.v1.model.Authenticator; import org.wso2.carbon.identity.api.server.authenticators.v1.model.ConnectedApps; import org.wso2.carbon.identity.api.server.authenticators.v1.model.Error; +import org.wso2.carbon.identity.api.server.authenticators.v1.model.UserDefinedLocalAuthenticatorCreation; +import org.wso2.carbon.identity.api.server.authenticators.v1.model.UserDefinedLocalAuthenticatorUpdate; import javax.ws.rs.core.Response; @@ -34,5 +36,11 @@ public interface AuthenticatorsApiService { public Response authenticatorsMetaTagsGet(); + public Response createUserDefinedLocalAuthenticator(UserDefinedLocalAuthenticatorCreation userDefinedLocalAuthenticatorCreation); + + public Response deleteUserDefinedLocalAuthenticator(String authenticatorId); + public Response getConnectedAppsOfLocalAuthenticator(String authenticatorId, Integer limit, Integer offset); + + public Response updateUserDefinedLocalAuthenticator(String authenticatorId, UserDefinedLocalAuthenticatorUpdate userDefinedLocalAuthenticatorUpdate); } diff --git a/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/main/java/org/wso2/carbon/identity/api/server/authenticators/v1/impl/AuthenticatorsApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/main/java/org/wso2/carbon/identity/api/server/authenticators/v1/impl/AuthenticatorsApiServiceImpl.java index 1a1b6f6dd4..bc5a8d10f6 100644 --- a/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/main/java/org/wso2/carbon/identity/api/server/authenticators/v1/impl/AuthenticatorsApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/main/java/org/wso2/carbon/identity/api/server/authenticators/v1/impl/AuthenticatorsApiServiceImpl.java @@ -19,6 +19,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.wso2.carbon.identity.api.server.authenticators.v1.AuthenticatorsApiService; import org.wso2.carbon.identity.api.server.authenticators.v1.core.ServerAuthenticatorManagementService; +import org.wso2.carbon.identity.api.server.authenticators.v1.model.UserDefinedLocalAuthenticatorCreation; +import org.wso2.carbon.identity.api.server.authenticators.v1.model.UserDefinedLocalAuthenticatorUpdate; import javax.ws.rs.core.Response; @@ -42,10 +44,31 @@ public Response authenticatorsMetaTagsGet() { return Response.ok().entity(authenticatorManagementService.getTags()).build(); } + @Override + public Response createUserDefinedLocalAuthenticator(UserDefinedLocalAuthenticatorCreation userDefinedLocalAuthenticatorCreation) { + + // do some magic! + return Response.ok().entity("magic!").build(); + } + + @Override + public Response deleteUserDefinedLocalAuthenticator(String authenticatorId) { + + // do some magic! + return Response.ok().entity("magic!").build(); + } + @Override public Response getConnectedAppsOfLocalAuthenticator(String authenticatorId, Integer limit, Integer offset) { return Response.ok().entity(authenticatorManagementService .getConnectedAppsOfLocalAuthenticator(authenticatorId, limit, offset)).build(); } + + @Override + public Response updateUserDefinedLocalAuthenticator(String authenticatorId, UserDefinedLocalAuthenticatorUpdate userDefinedLocalAuthenticatorUpdate) { + + // do some magic! + return Response.ok().entity("magic!").build(); + } } diff --git a/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/main/resources/authenticators.yaml b/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/main/resources/authenticators.yaml index c91bc6ab54..a358bbfac2 100644 --- a/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/main/resources/authenticators.yaml +++ b/components/org.wso2.carbon.identity.api.server.authenticators/org.wso2.carbon.identity.api.server.authenticators.v1/src/main/resources/authenticators.yaml @@ -118,7 +118,155 @@ paths: $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/ServerError' - + /authenticators/custom: + post: + tags: + - User defined local authenticators + summary: | + Create a new user defined local authenticator. + description: | + This API provides the capability to create a new user defined local authenticator.
+ Permission required:
+ * /permission/admin/manage/custom_authenticator/create
+ Scope required:
+ * internal_custom_authenticator_create
+ operationId: createUserDefinedLocalAuthenticator + responses: + '201': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticator' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserDefinedLocalAuthenticatorCreation' + description: This represents the user defined local authenticator to be created. + required: true + /authenticators/custom/{authenticator-id}: + patch: + tags: + - User defined local authenticators + summary: | + Update a user defined local authenticator. + description: | + This API provides the capability to update a user defined local authenticator configurations.
+ Permission required:
+ * /permission/admin/manage/custom_authenticator/update
+ Scope required:
+ * internal_custom_authenticator_update
+ operationId: updateUserDefinedLocalAuthenticator + parameters: + - name: authenticator-id + in: path + description: ID of an authenticator + required: true + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticator' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserDefinedLocalAuthenticatorUpdate' + description: This represents the user defined local authenticator to be created. + required: true + delete: + tags: + - User defined local authenticators + summary: | + Delete a user defined local authenticator. + description: | + This API provides the capability to delete a user defined local authenticators.
+ Permission required:
+ * /permission/admin/manage/custom_authenticator/delete
+ Scope required:
+ * internal_custom_authenticator_delete
+ operationId: deleteUserDefinedLocalAuthenticator + parameters: + - name: authenticator-id + in: path + description: ID of an authenticator + required: true + schema: + type: string + responses: + '204': + description: Successful response + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '401': + description: Unauthorized + '403': + description: Forbidden + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + '500': + description: Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' components: parameters: filterQueryParam: @@ -226,6 +374,89 @@ components: self: type: string example: /t/carbon.super/api/server/v1/configs/authenticators/eDUwOUNlcnRpZmljYXRlQXV0aGVudGljYXRvcg + UserDefinedLocalAuthenticatorCreation: + description: This represents the configuration for creating the user defined local authenticator. + type: object + properties: + name: + type: string + example: CustomAuthenticator + displayName: + type: string + example: Custom auth + isEnabled: + type: boolean + example: true + authenticationType: + type: string + enum: + - IDENTIFICATION + - VERIFICATION + image: + type: string + example: https://custom-authenticator-logo-url + description: + type: string + example: The user defined custom local authenticator. + endpoint: + $ref: '#/components/schemas/Endpoint' + required: + - name + - displayName + - isEnabled + - endpoint + UserDefinedLocalAuthenticatorUpdate: + description: TThis represents the configuration for updating user defined local authenticator. + type: object + properties: + displayName: + type: string + example: Custom auth + isEnabled: + type: boolean + example: true + image: + type: string + example: https://custom-authenticator-logo-url + description: + type: string + example: The user defined custom local authenticator. + endpoint: + $ref: '#/components/schemas/Endpoint' + required: + - name + - displayName + - isEnabled + - endpoint + Endpoint: + type: object + properties: + uri: + type: string + example: https://abc.com/token + pattern: '^https?://.+' + authentication: + $ref: '#/components/schemas/AuthenticationType' + AuthenticationType: + type: object + required: + - type + - properties + properties: + type: + type: string + enum: + - NONE + - BEARER + - API_KEY + - BASIC + example: BASIC + properties: + type: object + additionalProperties: true + example: + username: "auth_username" + password: "auth_password" ConnectedApps: type: object properties: