SEBSERV-262: Implemented default settings for Zoom user.

This commit is contained in:
Damian Büchel 2022-01-19 12:01:12 +01:00
parent 95c3f31cb9
commit 8c6ffee2a9
2 changed files with 53 additions and 0 deletions

View file

@ -75,6 +75,7 @@ import ch.ethz.seb.sebserver.webservice.servicelayer.dao.RemoteProctoringRoomDAO
import ch.ethz.seb.sebserver.webservice.servicelayer.session.ExamProctoringService;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.ExamSessionService;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.SEBClientInstructionService;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.impl.proctoring.ZoomRoomRequestResponse.ApplyUserSettingsRequest;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.impl.proctoring.ZoomRoomRequestResponse.CreateMeetingRequest;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.impl.proctoring.ZoomRoomRequestResponse.CreateUserRequest;
import ch.ethz.seb.sebserver.webservice.servicelayer.session.impl.proctoring.ZoomRoomRequestResponse.MeetingResponse;
@ -553,6 +554,11 @@ public class ZoomProctoringService implements ExamProctoringService {
createUser.getBody(),
UserResponse.class);
this.zoomRestTemplate.applyUserSettings(
proctoringSettings.serverURL,
credentials,
userResponse.id);
// Then create new meeting with the ad-hoc user/host
final CharSequence meetingPwd = UUID.randomUUID().toString().subSequence(0, 9);
final ResponseEntity<String> createMeeting = this.zoomRestTemplate.createMeeting(
@ -779,6 +785,7 @@ public class ZoomProctoringService implements ExamProctoringService {
private static final int LIZENSED_USER = 2;
private static final String API_TEST_ENDPOINT = "v2/users";
private static final String API_CREATE_USER_ENDPOINT = "v2/users";
private static final String API_APPLY_USER_SETTINGS_ENDPOINT = "v2/users/{userId}/settings";
private static final String API_DELETE_USER_ENDPOINT = "v2/users/{userid}?action=delete";
private static final String API_USER_CUST_CREATE = "custCreate";
private static final String API_ZOOM_ROOM_USER = "SEBProctoringRoomUser";
@ -856,6 +863,32 @@ public class ZoomProctoringService implements ExamProctoringService {
}
}
public ResponseEntity<String> applyUserSettings(
final String zoomServerUrl,
final ClientCredentials credentials,
final String userId) {
try {
final String url = UriComponentsBuilder
.fromUriString(zoomServerUrl)
.path(API_APPLY_USER_SETTINGS_ENDPOINT)
.buildAndExpand(userId)
.normalize()
.toUriString();
final String host = new URL(zoomServerUrl).getHost();
final ApplyUserSettingsRequest applySettingsRequest = new ApplyUserSettingsRequest();
final String body = this.zoomProctoringService.jsonMapper.writeValueAsString(applySettingsRequest);
final HttpHeaders headers = getHeaders(credentials);
headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
return exchange(url, HttpMethod.PATCH, body, headers);
} catch (final Exception e) {
log.error("Failed to apply user settings for Zoom user: {}", userId, e);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
public ResponseEntity<String> createMeeting(
final String zoomServerUrl,
final ClientCredentials credentials,

View file

@ -87,6 +87,26 @@ public interface ZoomRoomRequestResponse {
}
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class ApplyUserSettingsRequest {
@JsonProperty final InMeetingSettings in_meeting;
public ApplyUserSettingsRequest() {
this.in_meeting = new InMeetingSettings(true, 1);
}
public ApplyUserSettingsRequest(final InMeetingSettings in_meeting) {
this.in_meeting = in_meeting;
}
static class InMeetingSettings {
@JsonProperty final boolean auto_saving_chat;
@JsonProperty final int allow_users_save_chats;
public InMeetingSettings(boolean auto_saving_chat, int allow_users_save_chats) {
this.auto_saving_chat = auto_saving_chat;
this.allow_users_save_chats = allow_users_save_chats;
}
}
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class UserResponse {
final String id;