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();
|
UnrecognizedPropertyException jacksonException = (UnrecognizedPropertyException) ex.getCause();
|
||||||
message = new EnumMessage(BackEndError.UnknownJsonProperty, jacksonException.getPropertyName());
|
message = new EnumMessage(BackEndError.UnknownJsonProperty, jacksonException.getPropertyName());
|
||||||
} catch (ClassCastException e) {
|
} catch (ClassCastException e) {
|
||||||
log.error(ExceptionUtils.getStackTrace(e));
|
log.error(ExceptionUtils.getStackTrace(ex));
|
||||||
message = new EnumMessage(BackEndError.FailedToReadHttpMessage);
|
message = new EnumMessage(BackEndError.FailedToReadHttpMessage);
|
||||||
}
|
}
|
||||||
errorResponse.setCode(message.getSubject().getId());
|
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;
|
package ru.spcex.clearing.platform.messaging.domain.cud.utilities;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonRawValue;
|
||||||
|
|
||||||
public class UserSettingsUpdateRequest {
|
public class UserSettingsUpdateRequest {
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
public Long userId;
|
public Long userId;
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
public String version;
|
public String version;
|
||||||
@JsonProperty
|
@JsonRawValue
|
||||||
public String json;
|
public String json;
|
||||||
|
|
||||||
public Long getUserId() {
|
public Long getUserId() {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue