From e488036f91a34a77db4e124301619bbf5e1b076b Mon Sep 17 00:00:00 2001 From: Mike Friesen Date: Thu, 4 Jul 2024 16:18:57 -0500 Subject: [PATCH] Added GET /group/{groupName} --- .../CognitoIdentityProviderService.java | 14 +++++++++ docs/openapi/openapi-iam.yaml | 31 +++++++++++++++++++ docs/openapi/openapi-jwt.yaml | 31 +++++++++++++++++++ docs/openapi/openapi-key.yaml | 31 +++++++++++++++++++ .../resources/cloudformation/openapi-iam.yaml | 31 +++++++++++++++++++ .../resources/cloudformation/openapi-jwt.yaml | 31 +++++++++++++++++++ .../resources/cloudformation/openapi-key.yaml | 31 +++++++++++++++++++ .../api/handler/GroupRequestHandler.java | 18 +++++++++++ 8 files changed, 218 insertions(+) diff --git a/aws-cognito-identityprovider/src/main/java/com/formkiq/aws/cognito/CognitoIdentityProviderService.java b/aws-cognito-identityprovider/src/main/java/com/formkiq/aws/cognito/CognitoIdentityProviderService.java index 15b874586..dd4003144 100644 --- a/aws-cognito-identityprovider/src/main/java/com/formkiq/aws/cognito/CognitoIdentityProviderService.java +++ b/aws-cognito-identityprovider/src/main/java/com/formkiq/aws/cognito/CognitoIdentityProviderService.java @@ -57,6 +57,8 @@ import software.amazon.awssdk.services.cognitoidentityprovider.model.CreateGroupRequest; import software.amazon.awssdk.services.cognitoidentityprovider.model.CreateGroupResponse; import software.amazon.awssdk.services.cognitoidentityprovider.model.DeleteGroupRequest; +import software.amazon.awssdk.services.cognitoidentityprovider.model.GetGroupRequest; +import software.amazon.awssdk.services.cognitoidentityprovider.model.GetGroupResponse; import software.amazon.awssdk.services.cognitoidentityprovider.model.GetUserRequest; import software.amazon.awssdk.services.cognitoidentityprovider.model.GetUserResponse; import software.amazon.awssdk.services.cognitoidentityprovider.model.ListGroupsRequest; @@ -205,6 +207,18 @@ public GetUserResponse getUser(final AuthenticationResultType token) { return this.cognitoProvider.getUser(req); } + /** + * Get Group. + * + * @param groupName {@link String}. + * @return {@link GetGroupResponse} + */ + public GetGroupResponse getGroup(final String groupName) { + GetGroupRequest req = GetGroupRequest.builder().userPoolId(this.userPoolId).groupName(groupName + ).build(); + return this.cognitoProvider.getGroup(req); + } + /** * Get User. * diff --git a/docs/openapi/openapi-iam.yaml b/docs/openapi/openapi-iam.yaml index 676b28164..401ff7382 100644 --- a/docs/openapi/openapi-iam.yaml +++ b/docs/openapi/openapi-iam.yaml @@ -4260,6 +4260,32 @@ x-amazon-apigateway-integration: $ref: '#/components/x-amazon-apigateway-integrations/lambdaApi200' /groups/{groupName}: + get: + operationId: GetGroup + description: Returns a user group + summary: Get a user group + parameters: + - $ref: '#/components/parameters/groupNamePath' + tags: + - User Management + responses: + "200": + description: 200 OK + headers: + Access-Control-Allow-Origin: + $ref: '#/components/headers/AccessControlAllowOrigin' + Access-Control-Allow-Methods: + $ref: '#/components/headers/AccessControlAllowMethods' + Access-Control-Allow-Headers: + $ref: '#/components/headers/AccessControlAllowHeaders' + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupResponse' + security: + - ApiAuthorization: [] + x-amazon-apigateway-integration: + $ref: '#/components/x-amazon-apigateway-integrations/lambdaApi200' delete: operationId: DeleteGroup summary: Delete Group @@ -9620,6 +9646,11 @@ description: List of groups items: $ref: '#/components/schemas/Group' + GetGroupResponse: + type: object + properties: + group: + $ref: '#/components/schemas/Group' GetUserResponse: type: object properties: diff --git a/docs/openapi/openapi-jwt.yaml b/docs/openapi/openapi-jwt.yaml index 56cca2cb6..31a86d426 100644 --- a/docs/openapi/openapi-jwt.yaml +++ b/docs/openapi/openapi-jwt.yaml @@ -4260,6 +4260,32 @@ x-amazon-apigateway-integration: $ref: '#/components/x-amazon-apigateway-integrations/lambdaApi200' /groups/{groupName}: + get: + operationId: GetGroup + description: Returns a user group + summary: Get a user group + parameters: + - $ref: '#/components/parameters/groupNamePath' + tags: + - User Management + responses: + "200": + description: 200 OK + headers: + Access-Control-Allow-Origin: + $ref: '#/components/headers/AccessControlAllowOrigin' + Access-Control-Allow-Methods: + $ref: '#/components/headers/AccessControlAllowMethods' + Access-Control-Allow-Headers: + $ref: '#/components/headers/AccessControlAllowHeaders' + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupResponse' + security: + - ApiAuthorization: [] + x-amazon-apigateway-integration: + $ref: '#/components/x-amazon-apigateway-integrations/lambdaApi200' delete: operationId: DeleteGroup summary: Delete Group @@ -9620,6 +9646,11 @@ description: List of groups items: $ref: '#/components/schemas/Group' + GetGroupResponse: + type: object + properties: + group: + $ref: '#/components/schemas/Group' GetUserResponse: type: object properties: diff --git a/docs/openapi/openapi-key.yaml b/docs/openapi/openapi-key.yaml index 583b335bd..d88c6ff7d 100644 --- a/docs/openapi/openapi-key.yaml +++ b/docs/openapi/openapi-key.yaml @@ -4260,6 +4260,32 @@ x-amazon-apigateway-integration: $ref: '#/components/x-amazon-apigateway-integrations/lambdaApi200' /groups/{groupName}: + get: + operationId: GetGroup + description: Returns a user group + summary: Get a user group + parameters: + - $ref: '#/components/parameters/groupNamePath' + tags: + - User Management + responses: + "200": + description: 200 OK + headers: + Access-Control-Allow-Origin: + $ref: '#/components/headers/AccessControlAllowOrigin' + Access-Control-Allow-Methods: + $ref: '#/components/headers/AccessControlAllowMethods' + Access-Control-Allow-Headers: + $ref: '#/components/headers/AccessControlAllowHeaders' + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupResponse' + security: + - ApiAuthorization: [] + x-amazon-apigateway-integration: + $ref: '#/components/x-amazon-apigateway-integrations/lambdaApi200' delete: operationId: DeleteGroup summary: Delete Group @@ -9620,6 +9646,11 @@ description: List of groups items: $ref: '#/components/schemas/Group' + GetGroupResponse: + type: object + properties: + group: + $ref: '#/components/schemas/Group' GetUserResponse: type: object properties: diff --git a/lambda-api-graalvm/src/main/resources/cloudformation/openapi-iam.yaml b/lambda-api-graalvm/src/main/resources/cloudformation/openapi-iam.yaml index b41807c5e..1f5aa5dc5 100644 --- a/lambda-api-graalvm/src/main/resources/cloudformation/openapi-iam.yaml +++ b/lambda-api-graalvm/src/main/resources/cloudformation/openapi-iam.yaml @@ -4288,6 +4288,32 @@ Resources: x-amazon-apigateway-integration: $ref: "#/components/x-amazon-apigateway-integrations/lambdaApi200" /groups/{groupName}: + get: + operationId: GetGroup + description: Returns a user group + summary: Get a user group + parameters: + - $ref: '#/components/parameters/groupNamePath' + tags: + - User Management + responses: + '200': + description: "200 OK" + headers: + Access-Control-Allow-Origin: + $ref: '#/components/headers/AccessControlAllowOrigin' + Access-Control-Allow-Methods: + $ref: '#/components/headers/AccessControlAllowMethods' + Access-Control-Allow-Headers: + $ref: '#/components/headers/AccessControlAllowHeaders' + content: + application/json: + schema: + "$ref": "#/components/schemas/GetGroupResponse" + security: + - ApiAuthorization: [] + x-amazon-apigateway-integration: + $ref: "#/components/x-amazon-apigateway-integrations/lambdaApi200" delete: operationId: DeleteGroup summary: Delete Group @@ -9706,6 +9732,11 @@ Resources: description: "List of groups" items: $ref: "#/components/schemas/Group" + GetGroupResponse: + type: object + properties: + group: + $ref: "#/components/schemas/Group" GetUserResponse: type: object properties: diff --git a/lambda-api-graalvm/src/main/resources/cloudformation/openapi-jwt.yaml b/lambda-api-graalvm/src/main/resources/cloudformation/openapi-jwt.yaml index 4968dd9f4..69cc3e294 100644 --- a/lambda-api-graalvm/src/main/resources/cloudformation/openapi-jwt.yaml +++ b/lambda-api-graalvm/src/main/resources/cloudformation/openapi-jwt.yaml @@ -4288,6 +4288,32 @@ Resources: x-amazon-apigateway-integration: $ref: "#/components/x-amazon-apigateway-integrations/lambdaApi200" /groups/{groupName}: + get: + operationId: GetGroup + description: Returns a user group + summary: Get a user group + parameters: + - $ref: '#/components/parameters/groupNamePath' + tags: + - User Management + responses: + '200': + description: "200 OK" + headers: + Access-Control-Allow-Origin: + $ref: '#/components/headers/AccessControlAllowOrigin' + Access-Control-Allow-Methods: + $ref: '#/components/headers/AccessControlAllowMethods' + Access-Control-Allow-Headers: + $ref: '#/components/headers/AccessControlAllowHeaders' + content: + application/json: + schema: + "$ref": "#/components/schemas/GetGroupResponse" + security: + - ApiAuthorization: [] + x-amazon-apigateway-integration: + $ref: "#/components/x-amazon-apigateway-integrations/lambdaApi200" delete: operationId: DeleteGroup summary: Delete Group @@ -9706,6 +9732,11 @@ Resources: description: "List of groups" items: $ref: "#/components/schemas/Group" + GetGroupResponse: + type: object + properties: + group: + $ref: "#/components/schemas/Group" GetUserResponse: type: object properties: diff --git a/lambda-api-graalvm/src/main/resources/cloudformation/openapi-key.yaml b/lambda-api-graalvm/src/main/resources/cloudformation/openapi-key.yaml index f0bdbecb7..43f845402 100644 --- a/lambda-api-graalvm/src/main/resources/cloudformation/openapi-key.yaml +++ b/lambda-api-graalvm/src/main/resources/cloudformation/openapi-key.yaml @@ -4288,6 +4288,32 @@ Resources: x-amazon-apigateway-integration: $ref: "#/components/x-amazon-apigateway-integrations/lambdaApi200" /groups/{groupName}: + get: + operationId: GetGroup + description: Returns a user group + summary: Get a user group + parameters: + - $ref: '#/components/parameters/groupNamePath' + tags: + - User Management + responses: + '200': + description: "200 OK" + headers: + Access-Control-Allow-Origin: + $ref: '#/components/headers/AccessControlAllowOrigin' + Access-Control-Allow-Methods: + $ref: '#/components/headers/AccessControlAllowMethods' + Access-Control-Allow-Headers: + $ref: '#/components/headers/AccessControlAllowHeaders' + content: + application/json: + schema: + "$ref": "#/components/schemas/GetGroupResponse" + security: + - ApiAuthorization: [] + x-amazon-apigateway-integration: + $ref: "#/components/x-amazon-apigateway-integrations/lambdaApi200" delete: operationId: DeleteGroup summary: Delete Group @@ -9706,6 +9732,11 @@ Resources: description: "List of groups" items: $ref: "#/components/schemas/Group" + GetGroupResponse: + type: object + properties: + group: + $ref: "#/components/schemas/Group" GetUserResponse: type: object properties: diff --git a/lambda-api/src/main/java/com/formkiq/stacks/api/handler/GroupRequestHandler.java b/lambda-api/src/main/java/com/formkiq/stacks/api/handler/GroupRequestHandler.java index bdc3a6f9f..5d1d19f5e 100644 --- a/lambda-api/src/main/java/com/formkiq/stacks/api/handler/GroupRequestHandler.java +++ b/lambda-api/src/main/java/com/formkiq/stacks/api/handler/GroupRequestHandler.java @@ -33,6 +33,8 @@ import com.formkiq.aws.services.lambda.ApiPermission; import com.formkiq.aws.services.lambda.ApiRequestHandlerResponse; import com.formkiq.module.lambdaservices.AwsServiceCache; +import com.formkiq.stacks.api.transformers.GroupsResponseToMap; +import software.amazon.awssdk.services.cognitoidentityprovider.model.GetGroupResponse; import java.util.Map; import java.util.Optional; @@ -45,6 +47,22 @@ public class GroupRequestHandler implements ApiGatewayRequestHandler, ApiGateway /** {@link GroupRequestHandler} URL. */ public static final String URL = "/groups/{groupName}"; + @Override + public ApiRequestHandlerResponse get(final LambdaLogger logger, + final ApiGatewayRequestEvent event, final ApiAuthorization authorization, + final AwsServiceCache awsservice) throws Exception { + + CognitoIdentityProviderService service = + awsservice.getExtension(CognitoIdentityProviderService.class); + + String groupName = event.getPathParameters().get("groupName"); + GetGroupResponse response = service.getGroup(groupName); + + Map group = new GroupsResponseToMap().apply(response.group()); + ApiMapResponse resp = new ApiMapResponse(Map.of("group", group)); + return new ApiRequestHandlerResponse(SC_OK, resp); + } + @Override public Optional isAuthorized(final AwsServiceCache awsServiceCache, final String method, final ApiGatewayRequestEvent event, final ApiAuthorization authorization) {