From 6be552b8d34144ae2c65bc4438867e0f9bfa0e75 Mon Sep 17 00:00:00 2001 From: anhefti Date: Tue, 21 Nov 2023 15:08:57 +0100 Subject: [PATCH] SEBSERV-473 fixed list and sorting --- .../gui/content/admin/UserActivityLogs.java | 4 +- .../exam/AddSecurityKeyGrantPopup.java | 2 + .../content/exam/SecurityKeyGrantPopup.java | 2 +- .../content/monitoring/SEBClientEvents.java | 4 +- .../gui/service/page/PageService.java | 51 +++++++++++-------- .../service/page/impl/PageServiceImpl.java | 7 +-- .../gui/table/StaticListPageSupplier.java | 5 ++ .../servicelayer/dao/ClientConnectionDAO.java | 20 ++++---- .../dao/impl/ClientConnectionDAOImpl.java | 12 ++--- .../institution/SecurityKeyService.java | 6 +-- .../impl/SecurityKeyServiceImpl.java | 20 +++----- .../impl/SEBClientInstructionServiceImpl.java | 2 +- .../ScreenProctoringServiceImpl.java | 2 +- .../api/ClientConnectionController.java | 4 -- 14 files changed, 73 insertions(+), 68 deletions(-) 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,