diff --git a/src/main/java/ch/ethz/seb/sebserver/gbl/model/session/ClientInstruction.java b/src/main/java/ch/ethz/seb/sebserver/gbl/model/session/ClientInstruction.java index 3c5aa2b1..b75f02bc 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gbl/model/session/ClientInstruction.java +++ b/src/main/java/ch/ethz/seb/sebserver/gbl/model/session/ClientInstruction.java @@ -64,7 +64,7 @@ public final class ClientInstruction { public static final String JITSI_RECEIVE_AUDIO = "jitsiMeetReceiveAudio"; public static final String JITSI_RECEIVE_VIDEO = "jitsiMeetReceiveVideo"; public static final String JITSI_ALLOW_CHAT = "jitsiMeetFeatureFlagChat"; - + public static final String JITSI_PIN_USER_ID = "jitsiMeetPinUser"; public static final String ZOOM_RECEIVE_AUDIO = "zoomReceiveAudio"; public static final String ZOOM_RECEIVE_VIDEO = "zoomReceiveVideo"; public static final String ZOOM_ALLOW_CHAT = "zoomFeatureFlagChat"; diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/JitsiProctoringService.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/JitsiProctoringService.java index e26a23ac..f29560ce 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/JitsiProctoringService.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/JitsiProctoringService.java @@ -22,6 +22,7 @@ import java.util.stream.Collectors; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -206,11 +207,25 @@ public class JitsiProctoringService implements ExamProctoringService { @Override public Map getInstructionAttributes(final Map attributes) { - return attributes.entrySet().stream() + final Map result = attributes + .entrySet() + .stream() .map(entry -> new Tuple<>( SEB_API_NAME_INSTRUCTION_NAME_MAPPING.getOrDefault(entry.getKey(), entry.getKey()), entry.getValue())) .collect(Collectors.toMap(Tuple::get_1, Tuple::get_2)); + + if (BooleanUtils.isTrue(Boolean.valueOf(attributes.get(API.EXAM_PROCTORING_ATTR_RECEIVE_VIDEO)))) { + final String username = this.authorizationService + .getUserService() + .getCurrentUser() + .getUsername(); + attributes.put( + ClientInstruction.SEB_INSTRUCTION_ATTRIBUTES.SEB_RECONFIGURE_SETTINGS.JITSI_PIN_USER_ID, + username); + } + + return result; } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ExamProctoringController.java b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ExamProctoringController.java index 95744458..5498a550 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ExamProctoringController.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ExamProctoringController.java @@ -47,18 +47,18 @@ public class ExamProctoringController { private final ExamProctoringRoomService examProcotringRoomService; private final ExamAdminService examAdminService; - private final AuthorizationService authorization; + private final AuthorizationService authorizationService; private final ExamSessionService examSessionService; public ExamProctoringController( final ExamProctoringRoomService examProcotringRoomService, final ExamAdminService examAdminService, - final AuthorizationService authorization, + final AuthorizationService authorizationService, final ExamSessionService examSessionService) { this.examProcotringRoomService = examProcotringRoomService; this.examAdminService = examAdminService; - this.authorization = authorization; + this.authorizationService = authorizationService; this.examSessionService = examSessionService; } @@ -69,7 +69,7 @@ public class ExamProctoringController { * See also UserService.addUsersInstitutionDefaultPropertySupport */ @InitBinder public void initBinder(final WebDataBinder binder) { - this.authorization + this.authorizationService .getUserService() .addUsersInstitutionDefaultPropertySupport(binder); } @@ -110,7 +110,7 @@ public class ExamProctoringController { checkAccess(institutionId, examId); return this.examSessionService.getRunningExam(examId) - .flatMap(this.authorization::checkRead) + .flatMap(this.authorizationService::checkRead) .flatMap(exam -> this.examAdminService.getExamProctoringService(exam.id)) .flatMap(service -> service.getProctorRoomConnection( this.examAdminService.getProctoringServiceSettings(examId).getOrThrow(), @@ -290,19 +290,19 @@ public class ExamProctoringController { } private void checkExamReadAccess(final Long institutionId) { - this.authorization.check( + this.authorizationService.check( PrivilegeType.READ, EntityType.EXAM, institutionId); } private void checkAccess(final Long institutionId, final Long examId) { - this.authorization.check( + this.authorizationService.check( PrivilegeType.READ, EntityType.EXAM, institutionId); - this.authorization.checkRead(this.examSessionService + this.authorizationService.checkRead(this.examSessionService .getExamDAO() .byPK(examId) .getOrThrow());