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 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();
return reduceFormUrlAttributes(attributes);
}
public static String toAppFormUrlEncodedBodyForSPService(final MultiValueMap<String, String> attributes) {
if (attributes == null) {
return StringUtils.EMPTY;
}
for (String key : attributes.keySet()) {
List<String> values = attributes.get(key);
if (values != null) {
for (int i = 0; i < values.size(); i++) {
values.set(i, encodeFormURL_UTF_8(values.get(i)));
}
}
}
return reduceFormUrlAttributes(attributes);
}
public static String toAppFormUrlEncodedBody(@NotNull final String name, final Collection<String> array) {
@ -925,4 +922,28 @@ public final class Utils {
.filter(Objects::nonNull)
.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_GROUP_ID, localGroup.uuid);
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_MACHINE_NAME, Utils.encodeFormURL_UTF_8(clientConnection.getClientMachineName()));
params.add(SPS_API.SESSION.ATTR_CLIENT_OS_NAME, Utils.encodeFormURL_UTF_8(clientConnection.getClientOsName()));
params.add(SPS_API.SESSION.ATTR_CLIENT_VERSION, Utils.encodeFormURL_UTF_8(clientConnection.getClientVersion()));
final String paramsFormEncoded = Utils.toAppFormUrlEncodedBody(params);
params.add(SPS_API.SESSION.ATTR_CLIENT_NAME, clientConnection.getExamUserSessionId());
params.add(SPS_API.SESSION.ATTR_CLIENT_MACHINE_NAME, clientConnection.getClientMachineName());
params.add(SPS_API.SESSION.ATTR_CLIENT_OS_NAME, clientConnection.getClientOsName());
params.add(SPS_API.SESSION.ATTR_CLIENT_VERSION, clientConnection.getClientVersion());
final String paramsFormEncoded = Utils.toAppFormUrlEncodedBodyForSPService(params);
final ResponseEntity<String> exchange = apiTemplate.exchange(uri, paramsFormEncoded);
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_DESCRIPTION, description);
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);
if (exchange.getStatusCode() != HttpStatus.OK) {
@ -886,7 +886,7 @@ class ScreenProctoringAPIBinding {
final String uuid = createExamUUID(exam);
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);
if (exchange.getStatusCode() != HttpStatus.OK) {
@ -996,7 +996,7 @@ class ScreenProctoringAPIBinding {
final MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add(SPS_API.SEB_ACCESS.ATTR_NAME, name);
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);
if (exchange.getStatusCode() != HttpStatus.OK) {