From 48c621490d0a2cd9ba5d315ebb4a95d1c502e291 Mon Sep 17 00:00:00 2001 From: anhefti Date: Tue, 3 Oct 2023 07:59:17 +0200 Subject: [PATCH 01/17] prepare for 1.5.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9c987aba..c087e4d5 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ jar - 1.5.2 + 1.5.3-SNAPSHOT ${sebserver-version} ${sebserver-version} UTF-8 From 775f98d968c9e044289f000f01e48eb604da8ba7 Mon Sep 17 00:00:00 2001 From: anhefti Date: Mon, 30 Oct 2023 13:15:29 +0100 Subject: [PATCH 02/17] SEBSERV-474 fix --- .../dao/impl/ClientConnectionDAOImpl.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ClientConnectionDAOImpl.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ClientConnectionDAOImpl.java index ba0abd37..a5ced324 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ClientConnectionDAOImpl.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ClientConnectionDAOImpl.java @@ -436,9 +436,14 @@ public class ClientConnectionDAOImpl implements ClientConnectionDAO { @Transactional public Result saveSecurityCheckStatus(final Long connectionId, final Boolean checkStatus) { return Result.tryCatch(() -> { + + // NOTE: we use nanoseconds here to get a better precision to better avoid + // same value of real concurrent calls on distributed systems + final long nanosecondsNow = System.nanoTime(); this.clientConnectionRecordMapper.updateByPrimaryKeySelective(new ClientConnectionRecord( connectionId, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, nanosecondsNow, null, null, null, null, + null, Utils.toByte(checkStatus), null, null)); return checkStatus; @@ -450,9 +455,13 @@ public class ClientConnectionDAOImpl implements ClientConnectionDAO { @Transactional public Result saveSEBClientVersionCheckStatus(final Long connectionId, final Boolean checkStatus) { return Result.tryCatch(() -> { + // NOTE: we use nanoseconds here to get a better precision to better avoid + // same value of real concurrent calls on distributed systems + final long nanosecondsNow = System.nanoTime(); this.clientConnectionRecordMapper.updateByPrimaryKeySelective(new ClientConnectionRecord( connectionId, - null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, nanosecondsNow, null, null, null, null, + null, null, null, Utils.toByte(checkStatus))); return checkStatus; }) From c257c559ce2ab358b1b1c8114d2b3af66e6e60bd Mon Sep 17 00:00:00 2001 From: anhefti Date: Tue, 31 Oct 2023 09:45:12 +0100 Subject: [PATCH 03/17] prepare for next patch release --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c087e4d5..e4179de8 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ jar - 1.5.3-SNAPSHOT + 1.5.3 ${sebserver-version} ${sebserver-version} UTF-8 From fce4b45f602db8cef777c55a88b0d3262a5ed996 Mon Sep 17 00:00:00 2001 From: anhefti Date: Tue, 31 Oct 2023 10:15:40 +0100 Subject: [PATCH 04/17] prepare for next patch version 1.5.4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e4179de8..df81785a 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ jar - 1.5.3 + 1.5.4-SNAPSHOT ${sebserver-version} ${sebserver-version} UTF-8 From 7a3ccdbb348231bc56258dba846871c2ce2b3d59 Mon Sep 17 00:00:00 2001 From: anhefti Date: Mon, 20 Nov 2023 11:22:04 +0100 Subject: [PATCH 05/17] SEBSERV-492 added user settings --- pom.xml | 2 +- .../session/impl/proctoring/ZoomRoomRequestResponse.java | 9 +++++++++ .../java/ch/ethz/seb/sebserver/gbl/util/UtilsTest.java | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 9c987aba..d4c892eb 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ jar - 1.5.2 + 1.5.3-uzh ${sebserver-version} ${sebserver-version} UTF-8 diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/ZoomRoomRequestResponse.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/ZoomRoomRequestResponse.java index dad81fd3..df4a2271 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/ZoomRoomRequestResponse.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/ZoomRoomRequestResponse.java @@ -163,6 +163,8 @@ public interface ZoomRoomRequestResponse { static class InMeetingSettings { + @JsonProperty final boolean virtual_background = false; + @JsonProperty final VirtualBackgroundSettings virtual_background_settings = new VirtualBackgroundSettings(); @JsonProperty final boolean auto_saving_chat; @JsonProperty final int allow_users_save_chats; @JsonProperty final int allow_participants_chat_with; @@ -178,6 +180,13 @@ public interface ZoomRoomRequestResponse { } } + @JsonIgnoreProperties(ignoreUnknown = true) + static class VirtualBackgroundSettings { + @JsonProperty final boolean enable = false; + @JsonProperty final boolean allow_upload_custom = false; + @JsonProperty final boolean allow_videos = false; + } + static class FeaturesSettings { @JsonProperty final String concurrent_meeting; public FeaturesSettings(final String concurrent_meeting) { diff --git a/src/test/java/ch/ethz/seb/sebserver/gbl/util/UtilsTest.java b/src/test/java/ch/ethz/seb/sebserver/gbl/util/UtilsTest.java index a5e00fd7..481f5ad3 100644 --- a/src/test/java/ch/ethz/seb/sebserver/gbl/util/UtilsTest.java +++ b/src/test/java/ch/ethz/seb/sebserver/gbl/util/UtilsTest.java @@ -122,8 +122,8 @@ public class UtilsTest { try { assertEquals("RGB {255, 255, 255}", Utils.toRGB(rgbString3).toString()); fail("NumberFormatException expected here"); - } catch (final NumberFormatException e) { - assertEquals("For input string: \"wr\"", e.getMessage()); + } catch (final NumberFormatException ignored) { + } assertEquals("RGB {170, 187, 204}", Utils.toRGB(rgbString4).toString()); assertEquals("RGB {170, 187, 204}", Utils.toRGB(rgbString5).toString()); From 77198d41c6b32576ad9d34b6ea9b9933f296dacd Mon Sep 17 00:00:00 2001 From: anhefti Date: Wed, 29 Nov 2023 19:38:57 +0100 Subject: [PATCH 06/17] SEBSERV-494 fixed --- .../servicelayer/dao/impl/ExamRecordDAO.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ExamRecordDAO.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ExamRecordDAO.java index c53ea2f0..8379f7d1 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ExamRecordDAO.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ExamRecordDAO.java @@ -8,6 +8,7 @@ package ch.ethz.seb.sebserver.webservice.servicelayer.dao.impl; +import static ch.ethz.seb.sebserver.webservice.datalayer.batis.mapper.ExamRecordDynamicSqlSupport.*; import static org.mybatis.dynamic.sql.SqlBuilder.*; import java.util.ArrayList; @@ -25,6 +26,7 @@ import org.mybatis.dynamic.sql.SqlBuilder; import org.mybatis.dynamic.sql.SqlCriterion; import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.update.UpdateDSL; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Lazy; @@ -88,7 +90,7 @@ public class ExamRecordDAO { return Result.tryCatch(() -> { return this.examRecordMapper.selectIdsByExample() .where( - ExamRecordDynamicSqlSupport.externalId, + externalId, isEqualToWhenPresent(externalQuizId)) .build() .execute() @@ -126,7 +128,7 @@ public class ExamRecordDAO { return Result.tryCatch(() -> { return this.examRecordMapper.selectByExample() .where( - ExamRecordDynamicSqlSupport.externalId, + externalId, isEqualToWhenPresent(quizId)) .and( ExamRecordDynamicSqlSupport.active, @@ -314,20 +316,17 @@ public class ExamRecordDAO { throw new IllegalStateException("Exam is currently locked: " + examId); } - final ExamRecord examRecord = new ExamRecord( - examId, - null, null, - quizData.id, - null, null, null, null, null, null, null, null, - updateId, - null, null, - Utils.getMillisecondsNow(), - quizData.getName(), - quizData.getStartTime(), - quizData.getEndTime(), - BooleanUtils.toIntegerObject(true)); + UpdateDSL.updateWithMapper(examRecordMapper::update, examRecord) + .set(externalId).equalTo(quizData.id) + .set(lastupdate).equalTo(updateId) + .set(lastModified).equalTo(Utils.getMillisecondsNow()) + .set(quizName).equalTo(quizData.getName()) + .set(quizStartTime).equalTo(quizData.getStartTime()) + .set(quizEndTime).equalTo(quizData.getEndTime()) + .where(id, isEqualTo(oldRecord::getId)) + .build() + .execute(); - this.examRecordMapper.updateByPrimaryKeySelective(examRecord); return this.examRecordMapper.selectByPrimaryKey(examId); }) .onError(TransactionHandler::rollback); @@ -409,7 +408,7 @@ public class ExamRecordDAO { // fist check if it is not already existing final List records = this.examRecordMapper.selectByExample() .where(ExamRecordDynamicSqlSupport.lmsSetupId, isEqualTo(exam.lmsSetupId)) - .and(ExamRecordDynamicSqlSupport.externalId, isEqualTo(exam.externalId)) + .and(externalId, isEqualTo(exam.externalId)) .build() .execute(); From 8f70527612800a376fc72297a8f10a5c786827fe Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 09:57:48 +0100 Subject: [PATCH 07/17] SEBSERV-502 deprecation note --- docs/exam_proctoring.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/exam_proctoring.rst b/docs/exam_proctoring.rst index e80833cf..14dd1764 100644 --- a/docs/exam_proctoring.rst +++ b/docs/exam_proctoring.rst @@ -3,6 +3,11 @@ Optional Live Proctoring ======================== +.. attention:: Deprecation + The SEB Server live proctoring integration with Zoom and Jitsi Meet will be deprecated within the next upcoming version of SEB Server 1.6. + + This means live proctoring is still available for dedicated SEB versions, but not actively maintained and supported any more. + Live proctoring is a new and yet experimental feature of SEB and SEB Server. The feature is fully optional and not enabled by default. The main goal of the live proctoring feature is to support the integration of an external meeting service like Jitsi Meet or Zoom for example, within a SEB and SEB Server setup for an exam. From c25758ca0fe36078bdf7195457c2c489a850ffe1 Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 10:05:40 +0100 Subject: [PATCH 08/17] SEBSERV-502 deprecation note --- .readthedocs.yaml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..124910a9 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,35 @@ +# Read the Docs configuration file for Sphinx projects +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.12" + # You can also specify other tool versions: + # nodejs: "20" + # rust: "1.70" + # golang: "1.20" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: docs/conf.py + # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs + # builder: "dirhtml" + # Fail on all warnings to avoid broken references + # fail_on_warning: true + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +# python: +# install: +# - requirements: docs/requirements.txt \ No newline at end of file From 964b6c7e56f48cd4386da860247d19609ff10f8d Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 10:15:33 +0100 Subject: [PATCH 09/17] SEBSERV-502 deprecation note --- docs/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/conf.py b/docs/conf.py index 8fba51fa..f860e47e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -44,6 +44,7 @@ extensions = [ 'sphinx.ext.imgmath', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', + 'sphinx_rtd_theme' ] # Add any paths that contain templates here, relative to this directory. From f2d661e7dff06e68c46f906ed8473380789db7cf Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 10:18:45 +0100 Subject: [PATCH 10/17] SEBSERV-502 deprecation note --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index f860e47e..d5fa0e2c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -44,7 +44,7 @@ extensions = [ 'sphinx.ext.imgmath', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', - 'sphinx_rtd_theme' + 'sphinx-rtd-theme' ] # Add any paths that contain templates here, relative to this directory. From 4d3466332a5313ef64ec33e43c7d339082545739 Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 10:19:50 +0100 Subject: [PATCH 11/17] SEBSERV-502 deprecation note --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index d5fa0e2c..75e04526 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -44,7 +44,7 @@ extensions = [ 'sphinx.ext.imgmath', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', - 'sphinx-rtd-theme' + 'sphinx.rtd.theme' ] # Add any paths that contain templates here, relative to this directory. From 43f6a888899455f46ac6f29b7ae28cf7f9fa8792 Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 10:21:44 +0100 Subject: [PATCH 12/17] SEBSERV-502 deprecation note --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 75e04526..f860e47e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -44,7 +44,7 @@ extensions = [ 'sphinx.ext.imgmath', 'sphinx.ext.viewcode', 'sphinx.ext.githubpages', - 'sphinx.rtd.theme' + 'sphinx_rtd_theme' ] # Add any paths that contain templates here, relative to this directory. From a600f7e4699a7d3f4128dea5f6c43c5666bf318e Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 10:25:59 +0100 Subject: [PATCH 13/17] SEBSERV-502 deprecation note --- docs/conf.py | 3 +-- docs/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index f860e47e..70f190b8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -43,8 +43,7 @@ extensions = [ 'sphinx.ext.todo', 'sphinx.ext.imgmath', 'sphinx.ext.viewcode', - 'sphinx.ext.githubpages', - 'sphinx_rtd_theme' + 'sphinx.ext.githubpages' ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/requirements.txt b/docs/requirements.txt index eb2a5188..53d44466 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,5 +1,5 @@ docutils<0.18 sphinx==5.3.0 -sphinx_rtd_theme==1.1.1 +sphinx_rtd_theme==2.0.0 readthedocs-sphinx-search==0.1.1 urllib3==1.26.13 \ No newline at end of file From 6d30ffff3fe6e763e81d494baf015c137ab4086e Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 12:12:07 +0100 Subject: [PATCH 14/17] SEBSERV-502 deprecation note --- .readthedocs.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 124910a9..60516d2d 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -30,6 +30,6 @@ sphinx: # Optional but recommended, declare the Python requirements required # to build your documentation # See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html -# python: -# install: -# - requirements: docs/requirements.txt \ No newline at end of file +python: + install: + - requirements: docs/requirements.txt \ No newline at end of file From ca322a987131ccb510e7fc8726fca93524422d88 Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 12:15:55 +0100 Subject: [PATCH 15/17] SEBSERV-502 deprecation note --- docs/exam_proctoring.rst | 1 + docs/monitoring.rst | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/docs/exam_proctoring.rst b/docs/exam_proctoring.rst index 14dd1764..fe808761 100644 --- a/docs/exam_proctoring.rst +++ b/docs/exam_proctoring.rst @@ -4,6 +4,7 @@ Optional Live Proctoring ======================== .. attention:: Deprecation + The SEB Server live proctoring integration with Zoom and Jitsi Meet will be deprecated within the next upcoming version of SEB Server 1.6. This means live proctoring is still available for dedicated SEB versions, but not actively maintained and supported any more. diff --git a/docs/monitoring.rst b/docs/monitoring.rst index 554bbbbb..b37553c1 100644 --- a/docs/monitoring.rst +++ b/docs/monitoring.rst @@ -108,6 +108,12 @@ In the detail view you are also able to use the instructions "Quit SEB Client" a Optional Live Proctoring ------------------------ +.. attention:: Deprecation + + The SEB Server live proctoring integration with Zoom and Jitsi Meet will be deprecated within the next upcoming version of SEB Server 1.6. + + This means live proctoring is still available for dedicated SEB versions, but not actively maintained and supported any more. + Live proctoring is a new and yet experimental feature of SEB and SEB Server. The feature is fully optional and not enabled by default. This section is about the live proctoring on monitoring a running exam and using the optional live proctoring within. To configure the optional live proctoring for a specific exam please have a look at `Optional Live Proctoring `_ From 8df88e5c5d699f84dcfe5ac401a4a6de3bc46194 Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 12:18:19 +0100 Subject: [PATCH 16/17] SEBSERV-502 deprecation note --- docs/exam_proctoring.rst | 5 +++-- docs/monitoring.rst | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/exam_proctoring.rst b/docs/exam_proctoring.rst index fe808761..94babf4f 100644 --- a/docs/exam_proctoring.rst +++ b/docs/exam_proctoring.rst @@ -3,10 +3,11 @@ Optional Live Proctoring ======================== -.. attention:: Deprecation +.. attention:: + + Deprecation The SEB Server live proctoring integration with Zoom and Jitsi Meet will be deprecated within the next upcoming version of SEB Server 1.6. - This means live proctoring is still available for dedicated SEB versions, but not actively maintained and supported any more. Live proctoring is a new and yet experimental feature of SEB and SEB Server. The feature is fully optional and not enabled by default. diff --git a/docs/monitoring.rst b/docs/monitoring.rst index b37553c1..94acb387 100644 --- a/docs/monitoring.rst +++ b/docs/monitoring.rst @@ -108,10 +108,11 @@ In the detail view you are also able to use the instructions "Quit SEB Client" a Optional Live Proctoring ------------------------ -.. attention:: Deprecation +.. attention:: + + Deprecation The SEB Server live proctoring integration with Zoom and Jitsi Meet will be deprecated within the next upcoming version of SEB Server 1.6. - This means live proctoring is still available for dedicated SEB versions, but not actively maintained and supported any more. Live proctoring is a new and yet experimental feature of SEB and SEB Server. The feature is fully optional and not enabled by default. From ef3c915e218b9af317e8dd4081279629d0c79bd3 Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 25 Jan 2024 12:19:48 +0100 Subject: [PATCH 17/17] SEBSERV-502 deprecation note --- docs/exam_proctoring.rst | 1 + docs/monitoring.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/exam_proctoring.rst b/docs/exam_proctoring.rst index 94babf4f..cd82a020 100644 --- a/docs/exam_proctoring.rst +++ b/docs/exam_proctoring.rst @@ -8,6 +8,7 @@ Optional Live Proctoring Deprecation The SEB Server live proctoring integration with Zoom and Jitsi Meet will be deprecated within the next upcoming version of SEB Server 1.6. + This means live proctoring is still available for dedicated SEB versions, but not actively maintained and supported any more. Live proctoring is a new and yet experimental feature of SEB and SEB Server. The feature is fully optional and not enabled by default. diff --git a/docs/monitoring.rst b/docs/monitoring.rst index 94acb387..1e868646 100644 --- a/docs/monitoring.rst +++ b/docs/monitoring.rst @@ -113,6 +113,7 @@ Optional Live Proctoring Deprecation The SEB Server live proctoring integration with Zoom and Jitsi Meet will be deprecated within the next upcoming version of SEB Server 1.6. + This means live proctoring is still available for dedicated SEB versions, but not actively maintained and supported any more. Live proctoring is a new and yet experimental feature of SEB and SEB Server. The feature is fully optional and not enabled by default.