diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserActivityLogs.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserActivityLogs.java
index f8b8e259..4c4e5e85 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserActivityLogs.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserActivityLogs.java
@@ -173,10 +173,10 @@ public class UserActivityLogs implements TemplateComposer {
}
});
- final Consumer deleteActionActivation = this.pageService.getActionActiviationPublisher(
+ final Consumer deleteActionActivation = this.pageService.getActionActivationPublisher(
pageContext,
ActionDefinition.LOGS_USER_ACTIVITY_DELETE_ALL);
- final Consumer detailsActionActivation = this.pageService.getActionActiviationPublisher(
+ final Consumer detailsActionActivation = this.pageService.getActionActivationPublisher(
pageContext,
ActionDefinition.LOGS_USER_ACTIVITY_SHOW_DETAILS);
final Consumer contentChangeListener = contentSize -> {
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/AddSecurityKeyGrantPopup.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/AddSecurityKeyGrantPopup.java
index c5c77cb1..f4b2f6d0 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/AddSecurityKeyGrantPopup.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/AddSecurityKeyGrantPopup.java
@@ -14,6 +14,7 @@ import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.stream.Collectors;
+import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.swt.widgets.Composite;
import org.springframework.context.annotation.Lazy;
@@ -173,6 +174,7 @@ public class AddSecurityKeyGrantPopup {
.getBuilder(GetClientConnections.class)
.withQueryParam(API.PARAM_MODEL_ID_LIST, clientConnectionIds)
.call().getOrThrow());
+ list.sort((cc1, cc2) -> ObjectUtils.compare(cc1.userSessionId, cc2.userSessionId));
this.pageService.staticListTableBuilder(list, EntityType.CLIENT_CONNECTION)
.withPaging(10)
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/SecurityKeyGrantPopup.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/SecurityKeyGrantPopup.java
index a8976989..9b242791 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/SecurityKeyGrantPopup.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/SecurityKeyGrantPopup.java
@@ -63,7 +63,7 @@ public class SecurityKeyGrantPopup {
return action;
}
- private final class PopupComposer {
+ private static final class PopupComposer {
private final PageService pageService;
private final SecurityKey securityKey;
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/SEBClientEvents.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/SEBClientEvents.java
index d9a3d329..20be73f5 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/SEBClientEvents.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/SEBClientEvents.java
@@ -150,10 +150,10 @@ public class SEBClientEvents implements TemplateComposer {
final boolean writeGrant = this.pageService.getCurrentUser()
.hasInstitutionalPrivilege(PrivilegeType.WRITE, EntityType.CLIENT_EVENT);
- final Consumer deleteActionActivation = this.pageService.getActionActiviationPublisher(
+ final Consumer deleteActionActivation = this.pageService.getActionActivationPublisher(
pageContext,
ActionDefinition.LOGS_SEB_CLIENT_DELETE_ALL);
- final Consumer detailsActionActivation = this.pageService.getActionActiviationPublisher(
+ final Consumer detailsActionActivation = this.pageService.getActionActivationPublisher(
pageContext,
ActionDefinition.LOGS_SEB_CLIENT_SHOW_DETAILS);
final Consumer contentChangeListener = contentSize -> {
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/PageService.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/PageService.java
index 5923c2f3..319a0161 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/PageService.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/PageService.java
@@ -11,6 +11,7 @@ package ch.ethz.seb.sebserver.gui.service.page;
import java.util.Collection;
import java.util.List;
import java.util.Set;
+import java.util.UUID;
import java.util.function.BooleanSupplier;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -138,7 +139,7 @@ public interface PageService {
* @param noSelectionText LocTextKey for missing selection message
* @param testBeforeActivation a function to test before activation. This function shall throw an error if test
* fails.
- * My be null if no specific test is needed before activation
+ * May be null if no specific test is needed before activation
* @return page action execution function for switching the activity */
Function activationToggleActionFunction(
EntityTable table,
@@ -161,7 +162,7 @@ public interface PageService {
*
* @param entity the entity instance
* @return a message supplier to notify deactivation dependencies to the user */
- Supplier confirmDeactivation(final T entity);
+ Supplier confirmDeactivation(T entity);
/** Get a message supplier to notify deactivation dependencies to the user for given entity table selection
*
@@ -188,17 +189,17 @@ public interface PageService {
*
* @param pageContext the current PageContext
* @param actionDefinitions list of action definitions that activity should be toggled on table selection
- * @return the action activation publisher that can be used to control the activity of an certain action */
- default Consumer getActionActiviationPublisher(
+ * @return the action activation publisher that can be used to control the activity of a certain action */
+ default Consumer getActionActivationPublisher(
final PageContext pageContext,
final ActionDefinition... actionDefinitions) {
- return avtivate -> firePageEvent(
- new ActionActivationEvent(avtivate, actionDefinitions),
+ return activate -> firePageEvent(
+ new ActionActivationEvent(activate, actionDefinitions),
pageContext);
}
- /** Use this to get an table selection action publisher that processes the action
+ /** Use this to get a table selection action publisher that processes the action
* activation on table selection.
*
* @param pageContext the current PageContext
@@ -213,10 +214,10 @@ public interface PageService {
pageContext);
}
- /** Use this to get an table selection action publisher that processes the action
+ /** Use this to get a table selection action publisher that processes the action
* activation on table selection.
*
- * This additional has the ability to define a entity activity action that is toggles in
+ * This additional has the ability to define an entity activity action that is toggles in
* case of the selected entity
*
* @param toggle the base entity activity action definition
@@ -254,7 +255,7 @@ public interface PageService {
}
/** Publishes a given PageEvent to the current page tree
- * This goes through the page-tree and collects all listeners the are listen to
+ * This goes through the page-tree and collects all listeners they are listen to
* the specified page event type.
*
* @param event the concrete PageEvent instance */
@@ -277,23 +278,23 @@ public interface PageService {
/** Publishes a PageAction to the current page. This uses the firePageEvent form
* PageContext of the given PageAction and fires a ActionPublishEvent for the given PageAction
- *
+ *
* All ActionPublishEventListeners that are registered within the current page will
* receive the ActionPublishEvent sent by this.
*
* @param pageAction the PageAction to publish
* @param active indicates whether the action is active or not */
- void publishAction(final PageAction pageAction, boolean active);
+ void publishAction(PageAction pageAction, boolean active);
/** Publishes a PageAction to the current page. This uses the firePageEvent form
* PageContext of the given PageAction and fires a ActionPublishEvent for the given PageAction
- *
+ *
* All ActionPublishEventListeners that are registered within the current page will
* receive the ActionPublishEvent sent by this.
*
* @param pageAction the PageAction to publish
- * @param actionConsumer An consumer that gets the actions TreeItem after creation */
- void publishAction(final PageAction pageAction, Consumer actionConsumer);
+ * @param actionConsumer A consumer that gets the actions TreeItem after creation */
+ void publishAction(PageAction pageAction, Consumer actionConsumer);
/** Get a new FormBuilder for the given PageContext
* This FormBuilder uses the standard form grid which has 8 rows (2 title, 5 input and 1 right-space)
@@ -307,11 +308,11 @@ public interface PageService {
/** Get a new FormBuilder for the given PageContext and with number of rows.
*
* @param pageContext the PageContext on that the FormBuilder should work
- * @param rows the number of rows of the from
+ * @param rows the number of rows of the form
* @return a FormBuilder instance for the given PageContext and with number of rows */
FormBuilder formBuilder(PageContext pageContext, int rows);
- /** Get an new TableBuilder for specified page based RestCall.
+ /** Get a new TableBuilder for specified page based RestCall.
*
* @param apiCall the SEB Server API RestCall that feeds the table with data
* @param the type of the Entity of the table
@@ -320,7 +321,7 @@ public interface PageService {
return entityTableBuilder(this.getRestService().getRestCall(apiCall));
}
- /** Get an new TableBuilder for specified page based RestCall.
+ /** Get a new TableBuilder for specified page based RestCall.
*
* @param apiCall the SEB Server API RestCall that feeds the table with data
* @param the type of the Entity of the table
@@ -329,7 +330,7 @@ public interface PageService {
return entityTableBuilder(apiCall.getClass().getSimpleName(), apiCall);
}
- /** Get an new TableBuilder for specified page based RestCall.
+ /** Get a new TableBuilder for specified page based RestCall.
*
* @param name The name of the table to build
* @param apiCall the SEB Server API RestCall that feeds the table with data
@@ -339,7 +340,15 @@ public interface PageService {
String name,
RestCall> apiCall);
- TableBuilder staticListTableBuilder(final List staticList, EntityType entityType);
+ default TableBuilder staticListTableBuilder(
+ final List staticList,
+ final EntityType entityType) {
+ return staticListTableBuilder(UUID.randomUUID().toString(), staticList, entityType);
+ }
+ TableBuilder staticListTableBuilder(
+ String name,
+ List staticList,
+ EntityType entityType);
TableBuilder remoteListTableBuilder(
RestCall> apiCall,
@@ -353,7 +362,7 @@ public interface PageService {
return new PageActionBuilder(this, pageContext);
}
- /** This triggers a logout on the current authorization context to logout the current user
+ /** This triggers a logout on the current authorization context to log out the current user
* and forward to the login page with showing a successful logout message to the user. */
boolean logout(PageContext pageContext);
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/PageServiceImpl.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/PageServiceImpl.java
index 8c1cf0c1..dbf68193 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/PageServiceImpl.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/PageServiceImpl.java
@@ -370,14 +370,11 @@ public class PageServiceImpl implements PageService {
@Override
public TableBuilder staticListTableBuilder(
+ final String name,
final List staticList,
final EntityType entityType) {
- return new TableBuilder<>(
- (entityType != null)
- ? entityType.name()
- : "",
- this, staticList, entityType);
+ return new TableBuilder<>(name,this, staticList, entityType);
}
@Override
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/table/StaticListPageSupplier.java b/src/main/java/ch/ethz/seb/sebserver/gui/table/StaticListPageSupplier.java
index 94b1b7fd..931e60ea 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/table/StaticListPageSupplier.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/table/StaticListPageSupplier.java
@@ -117,6 +117,11 @@ public class StaticListPageSupplier implements PageSupplier {
if (to >= this.list.size()) {
to = this.list.size();
}
+ if (from >= to) {
+ from = 0;
+ to = Math.min(this.pageSize, this.list.size());
+ this.pageNumber = 1;
+ }
final List subList = this.list.subList(from, to);
return new Page<>(numOfPages, this.pageNumber, this.pageSize, this.column, subList);
diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/ClientConnectionDAO.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/ClientConnectionDAO.java
index 3aaa232d..9aa80f67 100644
--- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/ClientConnectionDAO.java
+++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/ClientConnectionDAO.java
@@ -35,7 +35,7 @@ public interface ClientConnectionDAO extends
/** Get a list of all connection tokens of all connections (no matter what state)
* of an exam.
- *
+ *
* Caches the resulting collection of tokens with the given examId as key
* unless the result has no error.
*
@@ -77,7 +77,7 @@ public interface ClientConnectionDAO extends
*
* @param connectionTokens The set of connection tokens to filter
* @return Result refer to all inactive connection tokens from the given set */
- Result> getInactiveConnctionTokens(Set connectionTokens);
+ Result> getInactiveConnectionTokens(Set connectionTokens);
/** Get a collection of all client connections records that needs a proctoring room update
* and that are in the status ACTIVE.
@@ -151,7 +151,7 @@ public interface ClientConnectionDAO extends
@CacheEvict(
cacheNames = ExamSessionCacheService.CACHE_NAME_ACTIVE_CLIENT_CONNECTION,
key = "#connectionToken")
- Result markScreenProcotringApplied(Long connectionId, String connectionToken);
+ Result markScreenProctoringApplied(Long connectionId, String connectionToken);
/** Get a ClientConnection by connection token.
*
@@ -159,10 +159,10 @@ public interface ClientConnectionDAO extends
* @return Result refer to the ClientConnection for the specified connection token or to an error if happened */
Result byConnectionToken(String connectionToken);
- /** Use this to check whether a single ClientConnection is up to date or needs a refresh.
+ /** Use this to check whether a single ClientConnection is up-to-date or needs a refresh.
*
* @param clientConnection the actual ClientConnection (from the internal cache)
- * @return Result refer to true if the given ClientConnection is up to date */
+ * @return Result refer to true if the given ClientConnection is up-to-date */
Result isUpToDate(ClientConnection clientConnection);
Result> getClientConnectionsOutOfSyc(Long examId, Set timestamps);
@@ -183,7 +183,7 @@ public interface ClientConnectionDAO extends
* @return Result refer to filtered Set of connection tokens or to an error when happened */
Result> filterForInstructionStatus(Long examId, Set connectionToken);
- /** Used to get the VDI paired connection if it already exsits.
+ /** Used to get the VDI paired connection if it already exists.
*
* @param clientName the VDI connection identifier sent by the SEB client on connect
* @return Result refer to the relevant VDI pair connection if exists or to an error if not */
@@ -200,27 +200,27 @@ public interface ClientConnectionDAO extends
*
* @param examId the exam identifier
* @return Result refer to a collection of client connection records or to an error when happened */
- Result> getsecurityKeyConnectionRecords(Long examId);
+ Result> getSecurityKeyConnectionRecords(Long examId);
/** Get all client connection records that don't have a security access grant yet
* and for specific exam.
*
* @param examId The exam identifier
- * @return Result refer to client connection records to the an error when happened */
+ * @return Result refer to client connection records to an error when happened */
Result> getAllActiveNotGranted(Long examId);
/** Count all known and matching ASK hashes for a given exam.
*
* @param examId The exam identifier
* @param signatureHash The signature hash the count
- * @return Result refer to the signature hash count or to an result when happened */
+ * @return Result refer to the signature hash count or to result when happened */
Result countSignatureHashes(Long examId, String signatureHash);
/** Get all client connection records that don't have a SEB client version check yet
* and for specific exam.
*
* @param examId The exam identifier
- * @return Result refer to client connection records to the an error when happened */
+ * @return Result refer to client connection records to the error when happened */
Result> getAllActiveNoSEBVersionCheck(Long examId);
/** Get all client connection identifiers for an exam.
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 d1c3f135..32cdc4fa 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
@@ -273,7 +273,7 @@ public class ClientConnectionDAOImpl implements ClientConnectionDAO {
@Override
@Transactional(readOnly = true)
- public Result> getInactiveConnctionTokens(final Set connectionTokens) {
+ public Result> getInactiveConnectionTokens(final Set connectionTokens) {
return Result.tryCatch(() -> {
if (connectionTokens == null || connectionTokens.isEmpty()) {
return Collections.emptyList();
@@ -597,7 +597,7 @@ public class ClientConnectionDAOImpl implements ClientConnectionDAO {
}
@Override
- public Result markScreenProcotringApplied(final Long connectionId, final String connectionToken) {
+ public Result markScreenProctoringApplied(final Long connectionId, final String connectionToken) {
return Result.tryCatch(() -> {
UpdateDSL.updateWithMapper(
this.clientConnectionRecordMapper::update,
@@ -843,15 +843,15 @@ public class ClientConnectionDAOImpl implements ClientConnectionDAO {
@Override
@Transactional(readOnly = true)
- public Result> getsecurityKeyConnectionRecords(final Long examId) {
+ public Result> getSecurityKeyConnectionRecords(final Long examId) {
return Result.tryCatch(() -> this.clientConnectionRecordMapper
.selectByExample()
.where(
ClientConnectionRecordDynamicSqlSupport.examId,
SqlBuilder.isEqualTo(examId))
- .and(
- ClientConnectionRecordDynamicSqlSupport.status,
- SqlBuilder.isIn(ClientConnection.SECURE_STATES))
+// .and(
+// ClientConnectionRecordDynamicSqlSupport.status,
+// SqlBuilder.isIn(ClientConnection.SECURE_STATES))
.build()
.execute());
}
diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/institution/SecurityKeyService.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/institution/SecurityKeyService.java
index 514e7a62..5e2f4304 100644
--- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/institution/SecurityKeyService.java
+++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/institution/SecurityKeyService.java
@@ -60,7 +60,7 @@ public interface SecurityKeyService {
* @return Result refer to the newly created security key entry or to an error when happened */
Result grantAppSignatureKey(Long institutionId, Long examId, Long connectionId, String tag);
- /** Get the hashed App Signature Key value from a encrypted App Signature Key sent by a SEB client.
+ /** Get the hashed App Signature Key value from an encrypted App Signature Key sent by a SEB client.
* The App Signature Key hash is used for security checks. The plain App Signature Key will never be used nor stored
*
* @param appSignatureKey The encrypted App Signature Key sent by a SEB client
@@ -72,8 +72,8 @@ public interface SecurityKeyService {
CharSequence salt);
/** Use this to update an App Signature Key grant for a particular SEB connection. This will
- * apply the security check again and mark the connection regarding to the security check.
- *
+ * apply the security check again and mark the connection regarding the security check.
+ *
* This is used by the internal monitoring update task
*
* @param record The ClientConnectionRecord of the specific SEB client connection */
diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/institution/impl/SecurityKeyServiceImpl.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/institution/impl/SecurityKeyServiceImpl.java
index f1c2889f..fd13b33e 100644
--- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/institution/impl/SecurityKeyServiceImpl.java
+++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/institution/impl/SecurityKeyServiceImpl.java
@@ -85,7 +85,7 @@ public class SecurityKeyServiceImpl implements SecurityKeyService {
return Result.tryCatch(() -> {
return this.clientConnectionDAO
- .getsecurityKeyConnectionRecords(examId)
+ .getSecurityKeyConnectionRecords(examId)
.getOrThrow()
.stream()
.reduce(
@@ -94,6 +94,7 @@ public class SecurityKeyServiceImpl implements SecurityKeyService {
Utils::> mergeMap)
.entrySet()
.stream()
+ .filter(m -> m.getValue() != null && !m.getValue().isEmpty())
.map(m -> new AppSignatureKeyInfo(institutionId, examId, m.getKey(), m.getValue()))
.collect(Collectors.toList());
});
@@ -179,7 +180,7 @@ public class SecurityKeyServiceImpl implements SecurityKeyService {
return Cryptor
.decryptASK(appSignatureKey, connectionToken, salt)
- .map(signature -> createSignatureHash(signature));
+ .map(this::createSignatureHash);
}
@@ -218,7 +219,7 @@ public class SecurityKeyServiceImpl implements SecurityKeyService {
final String grantedKeyHash = String.valueOf(key);
this.securityKeyRegistryDAO.delete(keyId).getOrThrow();
- this.clientConnectionDAO.getsecurityKeyConnectionRecords(key.examId)
+ this.clientConnectionDAO.getSecurityKeyConnectionRecords(key.examId)
.getOrThrow()
.stream()
.filter(rec -> ConnectionStatus.ACTIVE.name().equals(rec.getStatus()))
@@ -271,18 +272,14 @@ public class SecurityKeyServiceImpl implements SecurityKeyService {
.filter(key -> Utils.isEqualsWithEmptyCheck(String.valueOf(key.key), hashedSignatureKey))
.collect(Collectors.toList());
- if (matches == null || matches.isEmpty()) {
+ if (matches.isEmpty()) {
return numericalCheck(examId, hashedSignatureKey);
} else {
return new SecurityCheckResult(
matches.stream()
- .filter(key -> key.examId != null)
- .findFirst()
- .isPresent(),
+ .anyMatch(key -> key.examId != null),
matches.stream()
- .filter(key -> key.examId == null)
- .findFirst()
- .isPresent(),
+ .anyMatch(key -> key.examId == null),
false);
}
});
@@ -350,8 +347,7 @@ public class SecurityKeyServiceImpl implements SecurityKeyService {
try {
final MessageDigest hasher = MessageDigest.getInstance(Constants.SHA_256);
hasher.update(Utils.toByteArray(signature));
- final String signatureHash = Hex.toHexString(hasher.digest());
- return signatureHash;
+ return Hex.toHexString(hasher.digest());
} catch (final Exception e) {
throw new RuntimeException(e);
}
diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/SEBClientInstructionServiceImpl.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/SEBClientInstructionServiceImpl.java
index 480d1bd0..42eaff19 100644
--- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/SEBClientInstructionServiceImpl.java
+++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/SEBClientInstructionServiceImpl.java
@@ -306,7 +306,7 @@ public class SEBClientInstructionServiceImpl implements SEBClientInstructionServ
synchronized (this.instructions) {
final Result> result = this.clientConnectionDAO
- .getInactiveConnctionTokens(this.instructions.keySet());
+ .getInactiveConnectionTokens(this.instructions.keySet());
if (result.hasValue()) {
result.get().stream().forEach(token -> this.instructions.remove(token));
diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/ScreenProctoringServiceImpl.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/ScreenProctoringServiceImpl.java
index 6adc8a9e..4f92a3f9 100644
--- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/ScreenProctoringServiceImpl.java
+++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/proctoring/ScreenProctoringServiceImpl.java
@@ -317,7 +317,7 @@ public class ScreenProctoringServiceImpl implements ScreenProctoringService {
registerJoinInstruction(ccRecord, spsSessionToken, group, runningExam);
this.clientConnectionDAO
- .markScreenProcotringApplied(ccRecord.getId(), ccRecord.getConnectionToken())
+ .markScreenProctoringApplied(ccRecord.getId(), ccRecord.getConnectionToken())
.getOrThrow();
} catch (final Exception e) {
diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ClientConnectionController.java b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ClientConnectionController.java
index 3a2e4274..6d0d1a04 100644
--- a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ClientConnectionController.java
+++ b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ClientConnectionController.java
@@ -9,7 +9,6 @@
package ch.ethz.seb.sebserver.webservice.weblayer.api;
import java.util.*;
-import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -30,7 +29,6 @@ import ch.ethz.seb.sebserver.gbl.Constants;
import ch.ethz.seb.sebserver.gbl.api.API;
import ch.ethz.seb.sebserver.gbl.api.API.BulkActionType;
import ch.ethz.seb.sebserver.gbl.api.EntityType;
-import ch.ethz.seb.sebserver.gbl.model.Domain;
import ch.ethz.seb.sebserver.gbl.model.EntityDependency;
import ch.ethz.seb.sebserver.gbl.model.Page;
import ch.ethz.seb.sebserver.gbl.model.PageSortOrder;
@@ -58,8 +56,6 @@ public class ClientConnectionController extends ReadonlyEntityController EXT_FILTER = new HashSet<>(Arrays.asList(ClientConnection.FILTER_ATTR_INFO));
-
protected ClientConnectionController(
final AuthorizationService authorization,
final BulkActionService bulkActionService,