SEBSP-143 add utf8 encoding to body encoding function

This commit is contained in:
Nadim Ritter 2024-06-19 16:11:36 +02:00
parent ae37a8cf12
commit a8bcaa53e5
2 changed files with 50 additions and 29 deletions

View file

@ -648,27 +648,24 @@ public final class Utils {
return StringUtils.EMPTY; return StringUtils.EMPTY;
} }
return attributes return reduceFormUrlAttributes(attributes);
.entrySet() }
.stream()
.reduce( public static String toAppFormUrlEncodedBodyForSPService(final MultiValueMap<String, String> attributes) {
new StringBuilder(), if (attributes == null) {
(sb, entry) -> { return StringUtils.EMPTY;
final String name = entry.getKey(); }
final List<String> values = entry.getValue();
if (values == null) { for (String key : attributes.keySet()) {
return sb; List<String> values = attributes.get(key);
} if (values != null) {
if (!sb.isEmpty()) { for (int i = 0; i < values.size(); i++) {
sb.append(Constants.AMPERSAND); values.set(i, encodeFormURL_UTF_8(values.get(i)));
} }
if (values.size() == 1) { }
return sb.append(name).append(Constants.EQUALITY_SIGN).append(values.get(0)); }
}
return sb.append(toAppFormUrlEncodedBody(name, values)); return reduceFormUrlAttributes(attributes);
},
StringBuilder::append)
.toString();
} }
public static String toAppFormUrlEncodedBody(@NotNull final String name, final Collection<String> array) { public static String toAppFormUrlEncodedBody(@NotNull final String name, final Collection<String> array) {
@ -925,4 +922,28 @@ public final class Utils {
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
} }
private static String reduceFormUrlAttributes(final MultiValueMap<String, String> attributes){
return attributes
.entrySet()
.stream()
.reduce(
new StringBuilder(),
(sb, entry) -> {
final String name = entry.getKey();
final List<String> values = entry.getValue();
if (values == null) {
return sb;
}
if (!sb.isEmpty()) {
sb.append(Constants.AMPERSAND);
}
if (values.size() == 1) {
return sb.append(name).append(Constants.EQUALITY_SIGN).append(values.get(0));
}
return sb.append(toAppFormUrlEncodedBody(name, values));
},
StringBuilder::append)
.toString();
}
} }

View file

@ -680,11 +680,11 @@ class ScreenProctoringAPIBinding {
params.add(SPS_API.SESSION.ATTR_UUID, token); params.add(SPS_API.SESSION.ATTR_UUID, token);
params.add(SPS_API.SESSION.ATTR_GROUP_ID, localGroup.uuid); params.add(SPS_API.SESSION.ATTR_GROUP_ID, localGroup.uuid);
params.add(SPS_API.SESSION.ATTR_CLIENT_IP, clientConnection.getClientAddress()); params.add(SPS_API.SESSION.ATTR_CLIENT_IP, clientConnection.getClientAddress());
params.add(SPS_API.SESSION.ATTR_CLIENT_NAME, Utils.encodeFormURL_UTF_8(clientConnection.getExamUserSessionId())); params.add(SPS_API.SESSION.ATTR_CLIENT_NAME, clientConnection.getExamUserSessionId());
params.add(SPS_API.SESSION.ATTR_CLIENT_MACHINE_NAME, Utils.encodeFormURL_UTF_8(clientConnection.getClientMachineName())); params.add(SPS_API.SESSION.ATTR_CLIENT_MACHINE_NAME, clientConnection.getClientMachineName());
params.add(SPS_API.SESSION.ATTR_CLIENT_OS_NAME, Utils.encodeFormURL_UTF_8(clientConnection.getClientOsName())); params.add(SPS_API.SESSION.ATTR_CLIENT_OS_NAME, clientConnection.getClientOsName());
params.add(SPS_API.SESSION.ATTR_CLIENT_VERSION, Utils.encodeFormURL_UTF_8(clientConnection.getClientVersion())); params.add(SPS_API.SESSION.ATTR_CLIENT_VERSION, clientConnection.getClientVersion());
final String paramsFormEncoded = Utils.toAppFormUrlEncodedBody(params); final String paramsFormEncoded = Utils.toAppFormUrlEncodedBodyForSPService(params);
final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded); final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded);
if (exchange.getStatusCode() != HttpStatus.OK) { if (exchange.getStatusCode() != HttpStatus.OK) {
@ -851,7 +851,7 @@ class ScreenProctoringAPIBinding {
params.add(SPS_API.GROUP.ATTR_NAME, name); params.add(SPS_API.GROUP.ATTR_NAME, name);
params.add(SPS_API.GROUP.ATTR_DESCRIPTION, description); params.add(SPS_API.GROUP.ATTR_DESCRIPTION, description);
params.add(SPS_API.GROUP.ATTR_EXAM_ID, spsExamUUID); params.add(SPS_API.GROUP.ATTR_EXAM_ID, spsExamUUID);
final String paramsFormEncoded = Utils.toAppFormUrlEncodedBody(params); final String paramsFormEncoded = Utils.toAppFormUrlEncodedBodyForSPService(params);
final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded); final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded);
if (exchange.getStatusCode() != HttpStatus.OK) { if (exchange.getStatusCode() != HttpStatus.OK) {
@ -886,7 +886,7 @@ class ScreenProctoringAPIBinding {
final String uuid = createExamUUID(exam); final String uuid = createExamUUID(exam);
final MultiValueMap<String, String> params = createExamCreationParams(exam, uuid, userIds); final MultiValueMap<String, String> params = createExamCreationParams(exam, uuid, userIds);
final String paramsFormEncoded = Utils.toAppFormUrlEncodedBody(params); final String paramsFormEncoded = Utils.toAppFormUrlEncodedBodyForSPService(params);
final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded); final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded);
if (exchange.getStatusCode() != HttpStatus.OK) { if (exchange.getStatusCode() != HttpStatus.OK) {
@ -996,7 +996,7 @@ class ScreenProctoringAPIBinding {
final MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); final MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add(SPS_API.SEB_ACCESS.ATTR_NAME, name); params.add(SPS_API.SEB_ACCESS.ATTR_NAME, name);
params.add(SPS_API.SEB_ACCESS.ATTR_DESCRIPTION, description); params.add(SPS_API.SEB_ACCESS.ATTR_DESCRIPTION, description);
final String paramsFormEncoded = Utils.toAppFormUrlEncodedBody(params); final String paramsFormEncoded = Utils.toAppFormUrlEncodedBodyForSPService(params);
final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded); final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded);
if (exchange.getStatusCode() != HttpStatus.OK) { if (exchange.getStatusCode() != HttpStatus.OK) {