Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion app/src/main/resources/swagger/api-docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -2660,7 +2660,7 @@
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/UserResource"
"$ref" : "#/components/schemas/GetUserResource"
}
}
}
Expand Down Expand Up @@ -3394,6 +3394,33 @@
}
}
},
"GetUserResource" : {
"title" : "GetUserResource",
"type" : "object",
"properties" : {
"email" : {
"description" : "User's institutional email",
"$ref" : "#/components/schemas/CertifiedFieldResourceOfstring"
},
"familyName" : {
"description" : "User's surname",
"$ref" : "#/components/schemas/CertifiedFieldResourceOfstring"
},
"fiscalCode" : {
"type" : "string",
"description" : "User's fiscal code"
},
"id" : {
"type" : "string",
"description" : "User's unique identifier",
"format" : "uuid"
},
"name" : {
"description" : "User's name",
"$ref" : "#/components/schemas/CertifiedFieldResourceOfstring"
}
}
},
"IdentityTokenResource" : {
"title" : "IdentityTokenResource",
"required" : [ "token" ],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import it.pagopa.selfcare.dashboard.web.model.mapper.UserMapper;
import it.pagopa.selfcare.dashboard.web.model.mapper.UserMapperV2;
import it.pagopa.selfcare.dashboard.web.model.product.ProductUserResource;
import it.pagopa.selfcare.dashboard.web.model.user.GetUserResource;
import it.pagopa.selfcare.dashboard.web.model.user.UserResource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -95,7 +96,7 @@
@ResponseStatus(HttpStatus.OK)
@ApiOperation(value = "", notes = "${swagger.dashboard.user.api.getUserByInternalId}", nickname = "v2GetUserByIdUsingGET")
@PreAuthorize("hasPermission(new it.pagopa.selfcare.dashboard.web.security.FilterAuthorityDomain(#institutionId, null, null), 'Selc:ManageProductUsers')")
public UserResource getUserById(@ApiParam("${swagger.dashboard.user.model.id}")
public GetUserResource getUserById(@ApiParam("${swagger.dashboard.user.model.id}")
@PathVariable("id") String userId,
@ApiParam("${swagger.dashboard.institutions.model.id}")
@RequestParam(value = "institutionId")
Expand All @@ -103,12 +104,12 @@
@ApiParam("${swagger.dashboard.user.model.fields}")
@RequestParam(value = "fields", required = false)
List<String> fields) {
log.trace("getUserById start");

Check failure

Code scanning / CodeQL

Log Injection High

This log entry depends on a
user-provided value
.
log.debug("getUserById id = {}", userId);
User user = userService.getUserById(userId, institutionId, fields);
log.debug(LogUtils.CONFIDENTIAL_MARKER, "getUserById = {}", user);
log.trace("getUserById end");
return userMapperV2.toUserResource(user);
return userMapperV2.toGetUserResource(user);
}

@PostMapping(value = "/search", produces = MediaType.APPLICATION_JSON_VALUE)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package it.pagopa.selfcare.dashboard.web.model.mapper;

import it.pagopa.selfcare.dashboard.connector.exception.InvalidRequestException;
import it.pagopa.selfcare.dashboard.connector.model.user.*;
import it.pagopa.selfcare.dashboard.web.model.UpdateUserDto;
import it.pagopa.selfcare.dashboard.web.model.user.CertifiedFieldResource;
import it.pagopa.selfcare.dashboard.web.model.user.GetUserResource;
import it.pagopa.selfcare.dashboard.web.model.user.UserResource;
import it.pagopa.selfcare.onboarding.common.PartyRole;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -24,6 +24,11 @@ public interface UserMapperV2 {
@Mapping(target = "email", expression = "java(toCertifiedFieldResource(model.getEmail()))")
UserResource toUserResource(User model);

@Mapping(target = "name", expression = "java(toCertifiedFieldResource(model.getName()))")
@Mapping(target = "familyName", expression = "java(toCertifiedFieldResource(model.getFamilyName()))")
@Mapping(target = "email", expression = "java(toCertifiedFieldResource(model.getEmail()))")
GetUserResource toGetUserResource(User model);

UpdateUserRequestDto fromUpdateUser(UpdateUserDto userDto);

@Named("toCertifiedFieldResource")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package it.pagopa.selfcare.dashboard.web.model.user;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.UUID;

@Data
public class GetUserResource {

@ApiModelProperty(value = "${swagger.dashboard.user.model.id}")
private UUID id;

@ApiModelProperty(value = "${swagger.dashboard.user.model.name}")
private CertifiedFieldResource<String> name;

@ApiModelProperty(value = "${swagger.dashboard.user.model.surname}")
private CertifiedFieldResource<String> familyName;

@ApiModelProperty(value = "${swagger.dashboard.user.model.institutionalEmail}")
private CertifiedFieldResource<String> email;

@ApiModelProperty(value = "${swagger.dashboard.user.model.fiscalCode}")
private String fiscalCode;

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import it.pagopa.selfcare.dashboard.web.model.SearchUserDto;
import it.pagopa.selfcare.dashboard.web.model.UpdateUserDto;
import it.pagopa.selfcare.dashboard.web.model.mapper.UserMapperV2Impl;
import it.pagopa.selfcare.dashboard.web.model.user.GetUserResource;
import it.pagopa.selfcare.dashboard.web.model.user.UserResource;
import it.pagopa.selfcare.onboarding.common.PartyRole;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -136,8 +137,8 @@ void getUserById() throws Exception {
byte[] userStream = Files.readAllBytes(Paths.get(FILE_JSON_PATH + "User.json"));
User user = objectMapper.readValue(userStream, new TypeReference<>() {
});
byte[] userInfoStream = Files.readAllBytes(Paths.get(FILE_JSON_PATH + "UserResource.json"));
UserResource userResource = objectMapper.readValue(userInfoStream, new TypeReference<>() {
byte[] userInfoStream = Files.readAllBytes(Paths.get(FILE_JSON_PATH + "GetUserResource.json"));
GetUserResource userResource = objectMapper.readValue(userInfoStream, new TypeReference<>() {
});
when(userServiceMock.getUserById(userId, institutionId, fields)).thenReturn(user);

Expand Down
16 changes: 16 additions & 0 deletions web/src/test/resources/json/GetUserResource.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"id": "c8b70220-dbe2-4e33-925e-92b96f8b65e6",
"name": {
"certified": true,
"value": "name"
},
"familyName": {
"certified": true,
"value": "familyName"
},
"email": {
"certified": true,
"value": "[email protected]"
},
"fiscalCode": "fiscalCode"
}
Loading