This commit is contained in:
parent
fefd935e45
commit
7788fd6175
6 changed files with 154 additions and 40 deletions
|
|
@ -55,7 +55,7 @@ public class QueueExceptionHandler extends ResponseEntityExceptionHandler {
|
|||
UnrecognizedPropertyException jacksonException = (UnrecognizedPropertyException) ex.getCause();
|
||||
message = new EnumMessage(BackEndError.UnknownJsonProperty, jacksonException.getPropertyName());
|
||||
} catch (ClassCastException e) {
|
||||
log.error(ExceptionUtils.getStackTrace(e));
|
||||
log.error(ExceptionUtils.getStackTrace(ex));
|
||||
message = new EnumMessage(BackEndError.FailedToReadHttpMessage);
|
||||
}
|
||||
errorResponse.setCode(message.getSubject().getId());
|
||||
|
|
|
|||
|
|
@ -1,38 +0,0 @@
|
|||
package ru.spcex.clearing.backendapi.controller.queue.user;
|
||||
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiResponse;
|
||||
import io.swagger.annotations.ApiResponses;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import ru.clearing.classes.statics.data.user.UserSettings;
|
||||
import ru.spcex.clearing.backendapi.controller.response.entity.user.UserSettingsBackendGetAll;
|
||||
import ru.spcex.clearing.backendapi.service.IStateLoader;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/user-settings")
|
||||
public class UserSettingsSessionController {
|
||||
private final IStateLoader stateLoader;
|
||||
|
||||
@Autowired
|
||||
public UserSettingsSessionController(IStateLoader stateLoader) {
|
||||
this.stateLoader = stateLoader;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "get all user settings.")
|
||||
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = UserSettingsBackendGetAll.class)})
|
||||
@RequestMapping(method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public UserSettingsBackendGetAll getAll() {
|
||||
Collection<UserSettings> all = stateLoader.getAll(IMDGDistributedNames.Map_UserSettings, UserSettings.class);
|
||||
var response = new UserSettingsBackendGetAll();
|
||||
response.fromEntity(all);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package ru.spcex.clearing.backendapi.controller.queue.utilities;
|
||||
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import io.swagger.annotations.ApiResponse;
|
||||
import io.swagger.annotations.ApiResponses;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import ru.clearing.classes.statics.data.user.User;
|
||||
import ru.clearing.classes.statics.data.user.UserSettings;
|
||||
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
|
||||
import ru.spcex.clearing.backendapi.controller.request.cud.utilities.UserSettingsUpdateAction;
|
||||
import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse;
|
||||
import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse;
|
||||
import ru.spcex.clearing.backendapi.controller.response.entity.user.UserSettingsBackendGetAll;
|
||||
import ru.spcex.clearing.backendapi.security.KeycloakUtils;
|
||||
import ru.spcex.clearing.backendapi.service.IOperator;
|
||||
import ru.spcex.clearing.backendapi.service.IStateLoader;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
@Controller
|
||||
//todo ask Lesha Ushenin
|
||||
@RequestMapping("/utilities/user-settings")
|
||||
public class UserSettingsController extends AbstractQueueController {
|
||||
private final IStateLoader stateLoader;
|
||||
private final Imdg<User> userImdg;
|
||||
|
||||
@Autowired
|
||||
public UserSettingsController(IOperator operator, IStateLoader stateLoader, ImdgProvider imdgProvider) {
|
||||
super(operator);
|
||||
this.stateLoader = stateLoader;
|
||||
this.userImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_User, User.class);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "get all user settings.")
|
||||
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = UserSettingsBackendGetAll.class)})
|
||||
@RequestMapping(method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public UserSettingsBackendGetAll getAll() {
|
||||
Collection<UserSettings> all = stateLoader.getAll(IMDGDistributedNames.Map_UserSettings, UserSettings.class);
|
||||
var response = new UserSettingsBackendGetAll();
|
||||
response.fromEntity(all);
|
||||
return response;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "update user settings.")
|
||||
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
|
||||
@RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public CudResponse update(
|
||||
@ApiParam(value = "Новые значения полей объекта.", required = true)
|
||||
@RequestBody UserSettingsUpdateAction userSettingsUpdateAction) throws ExecutionException, InterruptedException {
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
String username = KeycloakUtils.getUserNameFromAuthentication(authentication);
|
||||
User user = userImdg.getSingleObjectByFieldValues(Map.of("identifier", username));
|
||||
if (user == null) {
|
||||
throw new IllegalStateException("cannot obtain userId from logged in user " + username);
|
||||
}
|
||||
userSettingsUpdateAction.setUserId(user.getId());
|
||||
return processRequest(Consts.USER_SETTINGS_UPDATE, userSettingsUpdateAction);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package ru.spcex.clearing.backendapi.controller.request.cud.utilities;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import ru.spcex.clearing.backendapi.domain.actions.IAction;
|
||||
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.UserSettingsUpdateRequest;
|
||||
|
||||
public class UserSettingsUpdateAction implements IAction<UserSettingsUpdateRequest> {
|
||||
@ApiModelProperty(hidden = true)
|
||||
@JsonProperty
|
||||
public Long userId;
|
||||
|
||||
@JsonProperty
|
||||
public String version;
|
||||
public String json;
|
||||
|
||||
@JsonProperty("json")
|
||||
public void unpackRawJson(JsonNode json) {
|
||||
this.json = json.toString();
|
||||
}
|
||||
|
||||
@ApiModelProperty(hidden = true)
|
||||
@Override
|
||||
public ActionType getActionType() {
|
||||
return ActionType.UPDATE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserSettingsUpdateRequest toRequest() {
|
||||
var req = new UserSettingsUpdateRequest();
|
||||
req.setVersion(version);
|
||||
req.setJson(json);
|
||||
req.setUserId(userId);
|
||||
return req;
|
||||
}
|
||||
|
||||
public Long getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(Long userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package ru.spcex.clearing.backendapi.security;
|
||||
|
||||
import org.keycloak.KeycloakPrincipal;
|
||||
import org.keycloak.adapters.spi.KeycloakAccount;
|
||||
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
|
||||
public class KeycloakUtils {
|
||||
/**
|
||||
* Достать username из Keycloak имплементации Authentication
|
||||
*/
|
||||
public static String getUserNameFromAuthentication(Authentication authentication) {
|
||||
KeycloakAuthenticationToken auth = (KeycloakAuthenticationToken) authentication;
|
||||
KeycloakAccount details = (KeycloakAccount) auth.getDetails();
|
||||
return ((KeycloakPrincipal) details.getPrincipal())
|
||||
.getKeycloakSecurityContext()
|
||||
.getToken()
|
||||
.getPreferredUsername();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +1,14 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.utilities;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonRawValue;
|
||||
|
||||
public class UserSettingsUpdateRequest {
|
||||
@JsonProperty
|
||||
public Long userId;
|
||||
@JsonProperty
|
||||
public String version;
|
||||
@JsonProperty
|
||||
@JsonRawValue
|
||||
public String json;
|
||||
|
||||
public Long getUserId() {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue