SEBSERV-566 fixed, update SPS session
This commit is contained in:
parent
e70a209217
commit
4cd498d29e
2 changed files with 71 additions and 10 deletions
|
@ -727,6 +727,45 @@ class ScreenProctoringAPIBinding {
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String updateSEBSession(
|
||||||
|
final Long groupId,
|
||||||
|
final ClientConnectionRecord clientConnection) {
|
||||||
|
|
||||||
|
final String token = clientConnection.getConnectionToken();
|
||||||
|
final ScreenProctoringServiceOAuthTemplate apiTemplate = this.getAPITemplate(clientConnection.getExamId());
|
||||||
|
|
||||||
|
final String uri = UriComponentsBuilder
|
||||||
|
.fromUriString(apiTemplate.spsAPIAccessData.getSpsServiceURL())
|
||||||
|
.path(SPS_API.SESSION_ENDPOINT)
|
||||||
|
.pathSegment(token)
|
||||||
|
.build()
|
||||||
|
.toUriString();
|
||||||
|
|
||||||
|
final Map<String, String> params = new HashMap<>();
|
||||||
|
params.put(SPS_API.SESSION.ATTR_UUID, token);
|
||||||
|
params.put(SPS_API.SESSION.ATTR_GROUP_ID, String.valueOf(groupId));
|
||||||
|
params.put(SPS_API.SESSION.ATTR_CLIENT_IP, clientConnection.getClientAddress());
|
||||||
|
params.put(SPS_API.SESSION.ATTR_CLIENT_NAME, clientConnection.getExamUserSessionId());
|
||||||
|
params.put(SPS_API.SESSION.ATTR_CLIENT_MACHINE_NAME, clientConnection.getClientMachineName());
|
||||||
|
params.put(SPS_API.SESSION.ATTR_CLIENT_OS_NAME, clientConnection.getClientOsName());
|
||||||
|
params.put(SPS_API.SESSION.ATTR_CLIENT_VERSION, clientConnection.getClientVersion());
|
||||||
|
|
||||||
|
ResponseEntity<String> exchange = null;
|
||||||
|
try {
|
||||||
|
final String jsonSession = jsonMapper.writeValueAsString(params);
|
||||||
|
exchange = apiTemplate.exchangePUT(uri, jsonSession);
|
||||||
|
} catch (final JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exchange.getStatusCode() != HttpStatus.OK) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"Failed to update SPS SEB session for SEB connection: " + token);
|
||||||
|
}
|
||||||
|
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void deleteExamOnScreenProctoring(final Exam exam) {
|
void deleteExamOnScreenProctoring(final Exam exam) {
|
||||||
try {
|
try {
|
||||||
|
@ -1369,6 +1408,15 @@ class ScreenProctoringAPIBinding {
|
||||||
return exchange(url, HttpMethod.POST, body, getHeaders());
|
return exchange(url, HttpMethod.POST, body, getHeaders());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ResponseEntity<String> exchangePUT(
|
||||||
|
final String url,
|
||||||
|
final String body) {
|
||||||
|
|
||||||
|
final HttpHeaders httpHeaders = getHeaders();
|
||||||
|
httpHeaders.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
|
||||||
|
return exchange(url, HttpMethod.PUT, body, httpHeaders);
|
||||||
|
}
|
||||||
|
|
||||||
HttpHeaders getHeadersJSONRequest() {
|
HttpHeaders getHeadersJSONRequest() {
|
||||||
final HttpHeaders httpHeaders = new HttpHeaders();
|
final HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
httpHeaders.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
|
httpHeaders.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
|
||||||
|
|
|
@ -387,19 +387,32 @@ public class ScreenProctoringServiceImpl implements ScreenProctoringService {
|
||||||
try {
|
try {
|
||||||
final Long examId = ccRecord.getExamId();
|
final Long examId = ccRecord.getExamId();
|
||||||
final Exam runningExam = this.examSessionCacheService.getRunningExam(examId);
|
final Exam runningExam = this.examSessionCacheService.getRunningExam(examId);
|
||||||
|
final Long existingGroupId = ccRecord.getScreenProctoringGroupId();
|
||||||
|
|
||||||
// apply SEB connection to screen proctoring group
|
if (existingGroupId == null) {
|
||||||
final ScreenProctoringGroup group = applySEBConnectionToGroup(
|
|
||||||
ccRecord,
|
|
||||||
runningExam);
|
|
||||||
placeReservedInGroup = group.id;
|
|
||||||
|
|
||||||
// create screen proctoring session for SEB connection on SPS service
|
// apply SEB connection to screen proctoring group
|
||||||
final String spsSessionToken = this.screenProctoringAPIBinding
|
final ScreenProctoringGroup group = applySEBConnectionToGroup(
|
||||||
.createSEBSession(examId, group, ccRecord);
|
ccRecord,
|
||||||
|
runningExam);
|
||||||
|
placeReservedInGroup = group.id;
|
||||||
|
|
||||||
// create instruction for SEB and add it to instruction queue for SEB connection
|
// create screen proctoring session for SEB connection on SPS service
|
||||||
registerJoinInstruction(ccRecord, spsSessionToken, group, runningExam);
|
final String spsSessionToken = this.screenProctoringAPIBinding
|
||||||
|
.createSEBSession(examId, group, ccRecord);
|
||||||
|
|
||||||
|
// create instruction for SEB and add it to instruction queue for SEB connection
|
||||||
|
registerJoinInstruction(ccRecord, spsSessionToken, group, runningExam);
|
||||||
|
} else {
|
||||||
|
// just update session on SPS site
|
||||||
|
this.screenProctoringGroupDAO
|
||||||
|
.getScreenProctoringGroup(existingGroupId)
|
||||||
|
.map(group -> this.screenProctoringAPIBinding.updateSEBSession(
|
||||||
|
group.id,
|
||||||
|
ccRecord))
|
||||||
|
.onError(error -> log.error("Failed to update SEB Session on SPS: {}", ccRecord, error));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
this.clientConnectionDAO
|
this.clientConnectionDAO
|
||||||
.markScreenProctoringApplied(ccRecord.getId(), ccRecord.getConnectionToken())
|
.markScreenProctoringApplied(ccRecord.getId(), ccRecord.getConnectionToken())
|
||||||
|
|
Loading…
Reference in a new issue