From 5982a9e8646b0088421e627e4e4cae25173259f8 Mon Sep 17 00:00:00 2001 From: anhefti Date: Thu, 31 Aug 2023 14:46:13 +0200 Subject: [PATCH] SEBSERV-405 and SEBSERV-434 SEB Settings --- pom.xml | 697 +++++++++--------- .../impl/CellFieldBuilderAdapter.java | 24 +- .../examconfig/impl/SliderFieldBuilder.java | 15 +- .../examconfig/impl/TextFieldBuilder.java | 24 +- .../examconfig/impl/ViewGridBuilder.java | 7 + .../impl/rules/ProctoringViewRules.java | 15 +- .../config/application-dev-ws.properties | 2 +- .../resources/config/application.properties | 1 + .../config/initialProhibitedProcesses.xml | 436 +++++++++-- .../sql/base/V23__newSEBSettings_v1_6.sql | 33 +- src/main/resources/messages.properties | 51 +- .../sebserver/gbl/client/ProxyDataTest.java | 2 +- 12 files changed, 854 insertions(+), 453 deletions(-) diff --git a/pom.xml b/pom.xml index 902e45f6a..8c522671f 100644 --- a/pom.xml +++ b/pom.xml @@ -1,128 +1,126 @@ - - 4.0.0 + + 4.0.0 - ch.ethz.seb - seb-server - ${revision} - seb-server - web-service for SEB maintenance and monitoring active SEB sessions + ch.ethz.seb + seb-server + ${revision} + seb-server + web-service for SEB maintenance and monitoring active SEB sessions - - org.springframework.boot - spring-boot-starter-parent - 2.6.15 - + + org.springframework.boot + spring-boot-starter-parent + 2.6.15 + - jar + jar - - 1.6-SNAPSHOT - ${sebserver-version} - ${sebserver-version} - UTF-8 - UTF-8 - + + 1.6-SNAPSHOT + ${sebserver-version} + ${sebserver-version} + UTF-8 + UTF-8 + - - - - Java 17 - - true - - - 17 - - - ${project.artifactId}-${build-version} - - - org.apache.maven.plugins - maven-compiler-plugin - - ${java.version} - UTF-8 - - - - org.apache.maven.plugins - maven-surefire-plugin - - UTF-8 - - UTF-8 - - - - - - - - org.glassfish.jaxb - jaxb-runtime - 2.4.0-b180830.0438 - - - + + + Java 17 + + true + + + 17 + + + ${project.artifactId}-${build-version} + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + UTF-8 + + + + org.apache.maven.plugins + maven-surefire-plugin + + UTF-8 + + UTF-8 + + + + + + + + org.glassfish.jaxb + jaxb-runtime + 2.4.0-b180830.0438 + + + - - let_reporting - - 1.8 - - - + + let_reporting + + 1.8 + + + - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + - - org.apache.maven.plugins - maven-surefire-plugin - - UTF-8 - - + + org.apache.maven.plugins + maven-surefire-plugin + + UTF-8 + + - - org.apache.maven.plugins - maven-failsafe-plugin - + + org.apache.maven.plugins + maven-failsafe-plugin + - - org.apache.maven.plugins - maven-pmd-plugin - 3.10.0 - - false - false - ${java.version} - false - - pmd-rulesets.xml - - - - - - check - cpd-check - - - - - + + com.github.spotbugs + spotbugs-maven-plugin + 4.5.3.0 + + Max + false + Low + true + findbugs-excludes.xml + + + + + com.github.spotbugs + spotbugs + 4.6.0 + + + + + org.jacoco + jacoco-maven-plugin + 0.8.3 + + + prepare-agent + + prepare-agent + + + + report + prepare-package + + report + + + + ch/ethz/seb/sebserver/gui/**/* + ch/ethz/seb/sebserver/webservice/datalayer/batis/mapper/**/* + ch/ethz/seb/sebserver/webservice/datalayer/batis/model/**/* + + + + + + + + + + + + - com.github.spotbugs - spotbugs-maven-plugin - 4.5.3.0 - - Max - false - Low - true - findbugs-excludes.xml - - - - - com.github.spotbugs - spotbugs - 4.6.0 - - + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + - - org.jacoco - jacoco-maven-plugin - 0.8.3 - - - prepare-agent - - prepare-agent - - - - report - prepare-package - - report - + + org.apache.maven.plugins + maven-compiler-plugin - - ch/ethz/seb/sebserver/gui/**/* - ch/ethz/seb/sebserver/webservice/datalayer/batis/mapper/**/* - ch/ethz/seb/sebserver/webservice/datalayer/batis/model/**/* - + 17 + 17 - - - + - - - + - - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 10 - 10 - - - - - - - - - org.mariadb.jdbc - mariadb-java-client - + + + + org.mariadb.jdbc + mariadb-java-client + - - - org.mybatis - mybatis - 3.5.6 - - - org.mybatis.dynamic-sql - mybatis-dynamic-sql - 1.1.2 - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 1.3.2 - - - com.github.pagehelper - pagehelper-spring-boot-starter - 1.4.6 - + + + org.mybatis + mybatis + 3.5.6 + + + org.mybatis.dynamic-sql + mybatis-dynamic-sql + 1.1.2 + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 1.3.2 + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.4.6 + - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-cache - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-tomcat + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-cache + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + + + org.springframework.boot + spring-boot-starter-validation + - - - - org.springframework.security.oauth - spring-security-oauth2 - 2.3.6.RELEASE - - - org.springframework.security - spring-security-jwt - 1.0.9.RELEASE - - - org.springframework.boot - spring-boot-starter-validation - - - - - org.springdoc - springdoc-openapi-ui - 1.5.10 - + + org.springframework.security.oauth + spring-security-oauth2 + 2.3.6.RELEASE + + + org.springframework.security + spring-security-jwt + 1.0.9.RELEASE + - + + + org.springdoc + springdoc-openapi-ui + 1.5.10 + - - - org.flywaydb - flyway-core - 7.8.2 - + + + org.flywaydb + flyway-core + 7.8.2 + - - - org.ehcache - ehcache - - - javax.cache - cache-api - + + + org.ehcache + ehcache + + + javax.cache + cache-api + - - - org.apache.httpcomponents - httpclient - + + + org.apache.httpcomponents + httpclient + - - - org.eclipse.rap - org.eclipse.rap.rwt - 3.15.0 - - - org.eclipse.rap - org.eclipse.rap.fileupload - 3.7.0 - + + + org.eclipse.rap + org.eclipse.rap.rwt + 3.15.0 + + + org.eclipse.rap + org.eclipse.rap.fileupload + 3.7.0 + - - - joda-time - joda-time - 2.10.9 - - - com.fasterxml.jackson.datatype - jackson-datatype-joda - - - org.apache.commons - commons-lang3 - - - org.cryptonode.jncryptor - jncryptor - 1.2.0 - - - org.apache.commons - commons-text - 1.8 - - - com.github.vladimir-bukhtoyarov - bucket4j-core - 4.10.0 - + + + joda-time + joda-time + 2.10.9 + + + com.fasterxml.jackson.datatype + jackson-datatype-joda + + + org.apache.commons + commons-lang3 + + + org.cryptonode.jncryptor + jncryptor + 1.2.0 + + + org.apache.commons + commons-text + 1.8 + + + com.github.vladimir-bukhtoyarov + bucket4j-core + 4.10.0 + - - - junit - junit - test - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.security - spring-security-test - test - - - com.h2database - h2 - test - + + + junit + junit + test + + + org.junit.vintage + junit-vintage-engine + test + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-test + test + + + com.h2database + h2 + test + - + \ No newline at end of file diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/CellFieldBuilderAdapter.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/CellFieldBuilderAdapter.java index db7201587..522c82b39 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/CellFieldBuilderAdapter.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/CellFieldBuilderAdapter.java @@ -11,7 +11,9 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; @@ -163,12 +165,17 @@ class GroupCellFieldBuilderAdapter implements CellFieldBuilderAdapter { this.orientationsOfGroup = orientationsOfGroup; for (final Orientation o : this.orientationsOfGroup) { - final int xpos = o.xPosition - ((o.title == TitleOrientation.LEFT) ? 1 : 0); + final int xpos = o.xPosition + - ((o.title == TitleOrientation.LEFT || o.title == TitleOrientation.LEFT_SPAN) ? 1 : 0); this.x = Math.min(xpos, this.x); final int ypos = o.yPosition - ((o.title == TitleOrientation.TOP) ? 1 : 0); this.y = Math.min(ypos, this.y); this.width = Math.max(this.width, o.xpos() + o.width()); this.height = Math.max(this.height, o.ypos() + o.height()); + + if (o.groupId.equals("screenshot[proctoring|ScreenProctoring]")) { + this.x = o.xpos() - o.width(); + } } this.width = this.width - this.x; @@ -243,7 +250,7 @@ class ExpandBarCellFieldBuilderAdapter implements CellFieldBuilderAdapter { } this.width = this.width - this.x; - this.height = this.height - this.y + 2; + this.height = this.height - this.y + 10; } @Override @@ -279,7 +286,6 @@ public void createCell(final ViewGridBuilder builder) { this.width, labelKey); - expandItem.setHeight(this.height * HEIGHT_PER_FIELD); final Composite body = (Composite) expandItem.getControl(); final ViewGridBuilder expandBuilder = new ViewGridBuilder( body, @@ -287,10 +293,22 @@ public void createCell(final ViewGridBuilder builder) { this, builder.examConfigurationService); + final Set groups = new HashSet<>(); for (final Orientation orientation : value) { final ConfigurationAttribute attribute = builder.viewContext.getAttribute(orientation.attributeId); expandBuilder.add(attribute); + final String groupKey = ViewGridBuilder.getGroupKey(orientation.groupId); + if (groupKey != null) { + groups.add(groupKey); + } } + + int h = (value.size() + ((groups.size() > 0) ? groups.size() + 1 : 0)) * HEIGHT_PER_FIELD; + if (expandItemKey.equals("ScreenProctoring")) { + h = h + 50; + } + + expandItem.setHeight(h); expandBuilder.compose(); } } diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/SliderFieldBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/SliderFieldBuilder.java index 62096f310..a118f9cf6 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/SliderFieldBuilder.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/SliderFieldBuilder.java @@ -33,10 +33,6 @@ @GuiProfile public class SliderFieldBuilder implements InputFieldBuilder { - public SliderFieldBuilder() { - // TODO Auto-generated constructor stub - } - @Override public boolean builderFor( final ConfigurationAttribute attribute, @@ -63,16 +59,17 @@ public InputField createInputField( WidgetFactory.setTestId(slider, attributeNameKey); WidgetFactory.setARIALabel(slider, i18nSupport.getText(attributeNameKey)); + final int thumb = slider.getThumb(); try { final String[] split = StringUtils.split( attribute.getResources(), Constants.LIST_SEPARATOR); slider.setMinimum(Integer.parseInt(split[0])); - slider.setMaximum(Integer.parseInt(split[1])); + slider.setMaximum(Integer.parseInt(split[1]) + thumb); } catch (final NumberFormatException e) { - slider.setMinimum(0); - slider.setMaximum(100); + slider.setMinimum(1); + slider.setMaximum(100 + thumb); } final SliderInputField inputField = new SliderInputField( @@ -93,7 +90,9 @@ public InputField createInputField( }; slider.addListener(SWT.FocusOut, valueChangeEventListener); - slider.addListener(SWT.Traverse, valueChangeEventListener); + slider.addListener(SWT.Selection, event -> { + slider.setToolTipText(String.valueOf(slider.getSelection())); + }); } return inputField; } diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/TextFieldBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/TextFieldBuilder.java index c91d8d84e..04960109f 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/TextFieldBuilder.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/TextFieldBuilder.java @@ -154,18 +154,26 @@ protected void setValueToControl(final String value) { @Override public void enable(final boolean group) { - this.control.setData(RWT.CUSTOM_VARIANT, null); - this.control.setEditable(true); + if (group) { + this.control.getParent().getParent().setEnabled(true); + } else { + this.control.setData(RWT.CUSTOM_VARIANT, null); + this.control.setEditable(true); + } } @Override public void disable(final boolean group) { - this.control.setData(RWT.CUSTOM_VARIANT, CustomVariant.CONFIG_INPUT_READONLY.key); - this.control.setEditable(false); - final GridData gridData = (GridData) this.control.getLayoutData(); - gridData.heightHint = (this.attribute.type == AttributeType.TEXT_AREA) - ? WidgetFactory.TEXT_AREA_INPUT_MIN_HEIGHT - : WidgetFactory.TEXT_INPUT_MIN_HEIGHT; + if (group) { + this.control.getParent().getParent().setEnabled(false); + } else { + this.control.setData(RWT.CUSTOM_VARIANT, CustomVariant.CONFIG_INPUT_READONLY.key); + this.control.setEditable(false); + final GridData gridData = (GridData) this.control.getLayoutData(); + gridData.heightHint = (this.attribute.type == AttributeType.TEXT_AREA) + ? WidgetFactory.TEXT_AREA_INPUT_MIN_HEIGHT + : WidgetFactory.TEXT_INPUT_MIN_HEIGHT; + } } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ViewGridBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ViewGridBuilder.java index 1988179d0..dd56b6bfc 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ViewGridBuilder.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ViewGridBuilder.java @@ -89,6 +89,8 @@ public class ViewGridBuilder { this.registeredExpandables = null; } + private ExpandBarCellFieldBuilderAdapter expandBarBuilderAdapter = null; + ViewGridBuilder( final Composite parent, final ViewContext viewContext, @@ -100,6 +102,7 @@ public class ViewGridBuilder { this.viewContext = viewContext; this.isGroupBuilder = false; this.isExpandBarBuilder = true; + this.expandBarBuilderAdapter = expandBarBuilderAdapter; this.xOffset = expandBarBuilderAdapter.x; this.yOffset = expandBarBuilderAdapter.y; this.grid = new CellFieldBuilderAdapter[expandBarBuilderAdapter.height - 1][expandBarBuilderAdapter.width]; @@ -241,6 +244,10 @@ ViewGridBuilder add(final ConfigurationAttribute attribute) { final GroupCellFieldBuilderAdapter groupBuilder = new GroupCellFieldBuilderAdapter(this.viewContext.getOrientationsOfGroup(attribute)); + if (this.expandBarBuilderAdapter != null) { + groupBuilder.width = this.expandBarBuilderAdapter.width; + } + final int xpos = groupBuilder.x - this.xOffset; final int ypos = groupBuilder.y - this.yOffset; diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/rules/ProctoringViewRules.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/rules/ProctoringViewRules.java index f6f3792f4..32f15e122 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/rules/ProctoringViewRules.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/rules/ProctoringViewRules.java @@ -37,11 +37,16 @@ public class ProctoringViewRules implements ValueChangeRule { public static final String ZOOM_GROUP_FEATURES = "zoomFeatureFlagChat"; public static final String ZOOM_GROUP_CONTROLS = "zoomAudioMuted"; + public static final String KEY_ENABLE_SPS = "enableScreenProctoring"; + public static final String SPS_GROUP_SCREENSHOT = "screenProctoringScreenshotMinInterval"; + public static final String SPS_GROUP_METADATA = "screenProctoringMetadataURLEnabled"; + @Override public boolean observesAttribute(final ConfigurationAttribute attribute) { return KEY_ENABLE_AI.equals(attribute.name) || KEY_ENABLE_JITSI.equals(attribute.name) || - KEY_ENABLE_ZOOM.equals(attribute.name); + KEY_ENABLE_ZOOM.equals(attribute.name) || + KEY_ENABLE_SPS.equals(attribute.name); } @Override @@ -78,6 +83,14 @@ public void applyRule( context.disableGroup(AI_GROUP_FACE_NUMBER); context.disableGroup(AI_GROUP_FACE_ANGLE); } + } else if (KEY_ENABLE_SPS.equals(attribute.name)) { + if (BooleanUtils.toBoolean(value.value)) { + context.enableGroup(SPS_GROUP_SCREENSHOT); + context.enableGroup(SPS_GROUP_METADATA); + } else { + context.disableGroup(SPS_GROUP_SCREENSHOT); + context.disableGroup(SPS_GROUP_METADATA); + } } } diff --git a/src/main/resources/config/application-dev-ws.properties b/src/main/resources/config/application-dev-ws.properties index b49bad3b5..d2a040b4c 100644 --- a/src/main/resources/config/application-dev-ws.properties +++ b/src/main/resources/config/application-dev-ws.properties @@ -25,7 +25,7 @@ sebserver.webservice.clean-db-on-startup=false # webservice configuration sebserver.init.adminaccount.gen-on-init=false -sebserver.webservice.distributed=true +sebserver.webservice.distributed=false #sebserver.webservice.master.delay.threshold=10000 sebserver.webservice.http.external.scheme=http sebserver.webservice.http.external.servername=localhost diff --git a/src/main/resources/config/application.properties b/src/main/resources/config/application.properties index bb56358d4..c1878eead 100644 --- a/src/main/resources/config/application.properties +++ b/src/main/resources/config/application.properties @@ -1,3 +1,4 @@ +spring.config.use-legacy-processing=true spring.application.name=SEB Server spring.profiles.active=ws,gui,dev sebserver.version=@sebserver-version@ diff --git a/src/main/resources/config/initialProhibitedProcesses.xml b/src/main/resources/config/initialProhibitedProcesses.xml index 03f182b11..ca3dfa4be 100644 --- a/src/main/resources/config/initialProhibitedProcesses.xml +++ b/src/main/resources/config/initialProhibitedProcesses.xml @@ -14,9 +14,9 @@ os 1 executable - Riot + remoting_host.exe originalName - Riot + remoting_host.exe description identifier @@ -36,9 +36,9 @@ os 1 executable - seamonkey + CiscoWebExStart.exe originalName - seamonkey + CiscoWebExStart.exe description identifier @@ -58,9 +58,9 @@ os 1 executable - Discord + CiscoCollabHost.exe originalName - Discord + CiscoCollabHost.exe description identifier @@ -80,9 +80,9 @@ os 1 executable - Slack + AA_v3.exe originalName - Slack + AA_v3.exe description identifier @@ -102,9 +102,9 @@ os 1 executable - Teams + ptoneclk.exe originalName - Teams + ptoneclk.exe description identifier @@ -124,9 +124,9 @@ os 1 executable - CamRecorder + webexmta.exe originalName - CamRecorder + webexmta.exe description identifier @@ -146,9 +146,9 @@ os 1 executable - join.me + Teams.exe originalName - join.me + Teams.exe description identifier @@ -168,9 +168,9 @@ os 1 executable - RPCSuite + join.me.sentinel.exe originalName - RPCSuite + join.me.sentinel.exe description identifier @@ -190,9 +190,9 @@ os 1 executable - RPCService + join.me.exe originalName - RPCService + join.me.exe description identifier @@ -212,9 +212,9 @@ os 1 executable - RemotePCDesktop + g2mstart.exe originalName - RemotePCDesktop + g2mstart.exe description identifier @@ -234,9 +234,9 @@ os 1 executable - beamyourscreen-host + g2mlauncher.exe originalName - beamyourscreen-host + g2mlauncher.exe description identifier @@ -256,9 +256,9 @@ os 1 executable - AeroAdmin + Telegram.exe originalName - AeroAdmin + Telegram.exe description identifier @@ -278,9 +278,9 @@ os 1 executable - Mikogo-host + Zoom.exe originalName - Mikogo-host + Zoom.exe description identifier @@ -300,9 +300,9 @@ os 1 executable - chromoting + Element.exe originalName - chromoting + Element.exe description identifier @@ -322,9 +322,9 @@ os 1 executable - vncserverui + slack.exe originalName - vncserverui + slack.exe description identifier @@ -344,9 +344,9 @@ os 1 executable - vncviewer + CamtasiaUtl.exe originalName - vncviewer + CamtasiaUtl.exe description identifier @@ -366,9 +366,9 @@ os 1 executable - vncserver + CamRecorder.exe originalName - vncserver + CamRecorder.exe description identifier @@ -388,9 +388,9 @@ os 1 executable - TeamViewer + CamPlay.exe originalName - TeamViewer + CamPlay.exe description identifier @@ -410,9 +410,339 @@ os 1 executable - GotoMeetingWinStore + Camtasia_Studio.exe originalName - GotoMeetingWinStore + Camtasia_Studio.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + CamtasiaStudio.exe + originalName + CamtasiaStudio.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + Camtasia.exe + originalName + Camtasia.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + Discord.exe + originalName + Discord.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + RPCSuite.exe + originalName + RPCSuite.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + RPCService.exe + originalName + RPCService.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + RemotePCDesktop.exe + originalName + RemotePCDesktop.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + beamyourscreen-host.exe + originalName + beamyourscreen-host.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + AeroAdmin.exe + originalName + AeroAdmin.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + Mikogo-host.exe + originalName + Mikogo-host.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + chromoting.exe + originalName + chromoting.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + vncserverui.exe + originalName + vncserverui.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + vncviewer.exe + originalName + vncviewer.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + vncserver.exe + originalName + vncserver.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + TeamViewer.exe + originalName + TeamViewer.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + GotoMeetingWinStore.exe + originalName + GotoMeetingWinStore.exe description identifier @@ -454,9 +784,31 @@ os 1 executable - SkypeHost + SkypeHost.exe + originalName + SkypeHost.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + SkypeApp.exe originalName - SkypeHost + SkypeApp.exe description identifier @@ -476,9 +828,9 @@ os 1 executable - Skype + Skype.exe originalName - Skype + Skype.exe description identifier diff --git a/src/main/resources/config/sql/base/V23__newSEBSettings_v1_6.sql b/src/main/resources/config/sql/base/V23__newSEBSettings_v1_6.sql index 526216e64..c21a03f33 100644 --- a/src/main/resources/config/sql/base/V23__newSEBSettings_v1_6.sql +++ b/src/main/resources/config/sql/base/V23__newSEBSettings_v1_6.sql @@ -3,16 +3,31 @@ -- ----------------------------------------------------------------- INSERT IGNORE INTO configuration_attribute VALUES - (1200, 'signature', 'TEXTBOX', null, null, null, null, null), + (1200, 'signature', 'TEXT_FIELD', null, null, null, null, null), (1201, 'clipboardPolicy', 'RADIO_SELECTION', null, '0,1,2', null, null, '2'), + (1202, 'browserShowFileSystemElementPath', 'CHECKBOX', null, null, null, null, 'true'), (1300, 'enableScreenProctoring', 'CHECKBOX', null, null, null, null, 'false'), - (1301, 'screenProctoringScreenshotMinInterval', 'NUMBER_INPUT ', null, null, null, null, '1000'), - (1302, 'screenProctoringScreenshotMaxInterval', 'NUMBER_INPUT ', null, null, null, null, '5000'), - (1303, 'screenProctoringImageFormat', 'SINGLE_SELECTION ', null, '0,1', null, null, '0'), - (1304, 'screenProctoringImageBitsPerPixel', 'SINGLE_SELECTION ', null, '0,1,2,3,4,5,6', null, null, '2'), - (1305, 'screenProctoringImageQuantization', 'SINGLE_SELECTION ', null, '0,1,2,3', null, null, '0'), - (1306, 'screenProctoringImageDownscale', 'SINGLE_SELECTION ', null, '0,1,2,3,4,5,6,7,8,9,10', null, null, '0'), - (1320, 'screenProctoringMetadataURLEnabled', 'CHECKBOX ', null, null, null, null, 'true'), - (1321, 'screenProctoringMetadataWindowTitleEnabled', 'CHECKBOX ', null, null, null, null, 'true') + (1301, 'screenProctoringScreenshotMinInterval', 'INTEGER', null, null, null, null, '1000'), + (1302, 'screenProctoringScreenshotMaxInterval', 'INTEGER', null, null, null, null, '5000'), + (1303, 'screenProctoringImageFormat', 'SINGLE_SELECTION', null, '0', null, null, '0'), + (1305, 'screenProctoringImageQuantization', 'SINGLE_SELECTION', null, '0,1,2,3,4,5', null, null, '2'), + (1306, 'screenProctoringImageDownscale', 'SINGLE_SELECTION', null, '0,1,2,3,4,5,6,7,8,9,10', null, null, '0'), + (1320, 'screenProctoringMetadataURLEnabled', 'CHECKBOX', null, null, null, null, 'true'), + (1321, 'screenProctoringMetadataWindowTitleEnabled', 'CHECKBOX', null, null, null, null, 'true') +; + +SET @proct_view_id = (SELECT id FROM view WHERE name='proctoring' AND template_id=0 LIMIT 1); + +INSERT IGNORE INTO orientation (config_attribute_id, template_id, view_id, group_id, x_position, y_position, width, height, title) VALUES + (1300, 0, @proct_view_id, '[proctoring|ScreenProctoring]', 6, 1, 6, 1, 'NONE'), + (1301, 0, @proct_view_id, 'screenshot[proctoring|ScreenProctoring]', 9, 2, 3, 1, 'LEFT_SPAN'), + (1302, 0, @proct_view_id, 'screenshot[proctoring|ScreenProctoring]', 9, 3, 3, 1, 'LEFT_SPAN'), + (1303, 0, @proct_view_id, 'screenshot[proctoring|ScreenProctoring]', 9, 4, 3, 1, 'LEFT_SPAN'), + (1305, 0, @proct_view_id, 'screenshot[proctoring|ScreenProctoring]', 9, 5, 3, 1, 'LEFT_SPAN'), + (1306, 0, @proct_view_id, 'screenshot[proctoring|ScreenProctoring]', 9, 6, 3, 1, 'LEFT_SPAN'), + + + (1320, 0, @proct_view_id, 'metadata[proctoring|ScreenProctoring]', 6, 8, 6, 1, 'NONE'), + (1321, 0, @proct_view_id, 'metadata[proctoring|ScreenProctoring]', 6, 9, 6, 1, 'NONE') ; \ No newline at end of file diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 6c7eec889..2d54966d7 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -1870,6 +1870,7 @@ sebserver.examconfig.props.label.clipboardPolicy.1=Block sebserver.examconfig.props.label.clipboardPolicy.1.tooltip=Completely blocks the usage of the system clipboard by continuously cleaning the content and blocking the
keyboard shortcuts for cut, copy and paste. sebserver.examconfig.props.label.clipboardPolicy.2=SEB Only sebserver.examconfig.props.label.clipboardPolicy.2.tooltip=Continuously cleaning the content of the system clipboard and enables an isolated clipboard only working within the browser application of SEB. +sebserver.examconfig.props.label.browserShowFileSystemElementPath=Show path of file system elements (Win) sebserver.examconfig.props.label.enableScreenProctoring=Enable Screen Proctoring sebserver.examconfig.props.label.enableScreenProctoring.tooltip=Enables the screen proctoring for SEB. Note the this cannot be used together with other proctoring features. sebserver.examconfig.props.label.screenProctoringScreenshotMinInterval=Minimal Screenshot Interval (ms) @@ -1878,40 +1879,36 @@ sebserver.examconfig.props.label.screenProctoringScreenshotMaxInterval=Maximal S sebserver.examconfig.props.label.screenProctoringScreenshotMaxInterval.tooltip=Defines the maximum interval between two screen shots in milliseconds.
This is used if no user-interactions happened since last screen shot. In this case this shall defined the
maximal interval time between two screen shots if no triggering (user-interaction) happens sebserver.examconfig.props.label.screenProctoringImageFormat=Image Format sebserver.examconfig.props.label.screenProctoringImageFormat.0=PNG -sebserver.examconfig.props.label.screenProctoringImageFormat.1=WEBP -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel=Bits per Pixel -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel.tooltip=The number of bits for one pixel -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel.0=1 -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel.1=2 -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel.2=4 -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel.3=8 -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel.4=16 -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel.5=32 -sebserver.examconfig.props.label.screenProctoringImageBitsPerPixel.6=64 sebserver.examconfig.props.label.screenProctoringImageQuantization=Image Color Quantization -sebserver.examconfig.props.label.screenProctoringImageQuantization.tooltip=Indicating to use grayscale or color quantization. This also depends on setting of "Bits per Pixel" -sebserver.examconfig.props.label.screenProctoringImageQuantization.0=TBD ALG1 -sebserver.examconfig.props.label.screenProctoringImageQuantization.1=TBD ALG2 -sebserver.examconfig.props.label.screenProctoringImageQuantization.2=TBD ALG3 -sebserver.examconfig.props.label.screenProctoringImageQuantization.3=TBD ALG4 +sebserver.examconfig.props.label.screenProctoringImageQuantization.tooltip=Indicating to use black/white, grayscale or color quantization. +sebserver.examconfig.props.label.screenProctoringImageQuantization.0=Black and White +sebserver.examconfig.props.label.screenProctoringImageQuantization.1=Grayscale 2 Bpp +sebserver.examconfig.props.label.screenProctoringImageQuantization.2=Grayscale 4 Bpp +sebserver.examconfig.props.label.screenProctoringImageQuantization.3=Grayscale 8 Bpp +sebserver.examconfig.props.label.screenProctoringImageQuantization.4=Color 16 Bpp +sebserver.examconfig.props.label.screenProctoringImageQuantization.5=Color 24 Bpp sebserver.examconfig.props.label.screenProctoringImageDownscale=Image Downscale -sebserver.examconfig.props.label.screenProctoringImageDownscale.tooltip=Image downscale factor -sebserver.examconfig.props.label.screenProctoringImageDownscale.0=1 -sebserver.examconfig.props.label.screenProctoringImageDownscale.1=1.5 -sebserver.examconfig.props.label.screenProctoringImageDownscale.2=2 -sebserver.examconfig.props.label.screenProctoringImageDownscale.3=2.5 -sebserver.examconfig.props.label.screenProctoringImageDownscale.4=3 -sebserver.examconfig.props.label.screenProctoringImageDownscale.5=3.5 -sebserver.examconfig.props.label.screenProctoringImageDownscale.6=4 -sebserver.examconfig.props.label.screenProctoringImageDownscale.7=4.5 -sebserver.examconfig.props.label.screenProctoringImageDownscale.8=5 -sebserver.examconfig.props.label.screenProctoringImageDownscale.9=5.5 -sebserver.examconfig.props.label.screenProctoringImageDownscale.10=6 +sebserver.examconfig.props.label.screenProctoringImageDownscale.tooltip=Image downscale factor from 1 to 2 +sebserver.examconfig.props.label.screenProctoringImageDownscale.0=1.0 +sebserver.examconfig.props.label.screenProctoringImageDownscale.1=1.1 +sebserver.examconfig.props.label.screenProctoringImageDownscale.2=1.2 +sebserver.examconfig.props.label.screenProctoringImageDownscale.3=1.3 +sebserver.examconfig.props.label.screenProctoringImageDownscale.4=1.4 +sebserver.examconfig.props.label.screenProctoringImageDownscale.5=1.5 +sebserver.examconfig.props.label.screenProctoringImageDownscale.6=1.6 +sebserver.examconfig.props.label.screenProctoringImageDownscale.7=1.7 +sebserver.examconfig.props.label.screenProctoringImageDownscale.8=1.8 +sebserver.examconfig.props.label.screenProctoringImageDownscale.9=1.9 +sebserver.examconfig.props.label.screenProctoringImageDownscale.10=2.0 sebserver.examconfig.props.label.screenProctoringMetadataURLEnabled=Enable URL Recording sebserver.examconfig.props.label.screenProctoringMetadataURLEnabled.tooltip=Enable the recording of browser URL input during a screen proctoring session sebserver.examconfig.props.label.screenProctoringMetadataWindowTitleEnabled=Enable Window Title Recording sebserver.examconfig.props.label.screenProctoringMetadataWindowTitleEnabled.tooltip=Enable the recording of the title of the active window during a screen proctoring session +sebserver.examconfig.props.group.ScreenProctoring=SEB Screen Proctoring Settings +sebserver.examconfig.props.group.screenshot=Screenshot Settings +sebserver.examconfig.props.group.metadata=Metadata Recording + ################################ # SEB Exam Configuration Template ################################ diff --git a/src/test/java/ch/ethz/seb/sebserver/gbl/client/ProxyDataTest.java b/src/test/java/ch/ethz/seb/sebserver/gbl/client/ProxyDataTest.java index f164e2283..54d7019b5 100644 --- a/src/test/java/ch/ethz/seb/sebserver/gbl/client/ProxyDataTest.java +++ b/src/test/java/ch/ethz/seb/sebserver/gbl/client/ProxyDataTest.java @@ -10,7 +10,7 @@ import static org.junit.Assert.assertEquals; -import org.junit.jupiter.api.Test; +import org.junit.Test; public class ProxyDataTest {