diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..8bae9d91b16146f523285f2580ba8c8a8c87fc0e --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.bescheid; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import de.ozgcloud.apilib.common.command.OzgCloudCommandService; +import de.ozgcloud.apilib.common.command.grpc.CommandMapper; +import de.ozgcloud.apilib.common.command.grpc.GrpcOzgCloudCommandService; +import de.ozgcloud.bescheid.common.callcontext.BescheidManagerCallContextProvider; +import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@Configuration +public class BescheidManagerConfiguration { + + @GrpcClient("ozgcloud-command-manager") + private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub; + + @Bean("bescheid_OzgCloudCommandService") + OzgCloudCommandService grpcOzgCloudCommandService(CommandMapper commandMapper, BescheidManagerCallContextProvider contextProvider) { + return new GrpcOzgCloudCommandService(commandServiceStub, commandMapper, contextProvider, + GrpcOzgCloudCommandService.DEFAULT_COMMAND_REQUEST_THRESHOLD_MILLIS); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java index 7a3e82b746121e49326e8d24d2484f41693c912a..a35cfba56298f590a86a02eeb4cddfae30945aaa 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java @@ -35,6 +35,8 @@ import java.util.stream.Collectors; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; @@ -45,11 +47,9 @@ import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Service -@RequiredArgsConstructor @Log4j2 public class AttachedItemService { @@ -61,9 +61,13 @@ public class AttachedItemService { private static final Predicate<String> notExpectedSendByValue = sendBy -> !ArrayUtils.contains(Bescheid.SendBy.values(), sendBy); - private final OzgCloudCommandService commandService; - private final VorgangAttachedItemRemoteService remoteService; - private final CommandMapper commandMapper; + @Autowired + @Qualifier("bescheid_OzgCloudCommandService") + private OzgCloudCommandService commandService; + @Autowired + private VorgangAttachedItemRemoteService remoteService; + @Autowired + private CommandMapper commandMapper; public Optional<AttachedItem> findBescheidItem(String vorgangId) { return remoteService.findBescheidDraft(vorgangId); @@ -179,7 +183,7 @@ public class AttachedItemService { void validateBescheidStatus(AttachedItem bescheid) { var bescheidStatus = MapUtils.getString(bescheid.getItem(), Bescheid.FIELD_STATUS); if (Bescheid.Status.DRAFT.not(bescheidStatus)) { - throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'" .formatted(bescheid.getId(), bescheidStatus)); + throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'".formatted(bescheid.getId(), bescheidStatus)); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java index 05f2b049540dcefe2b95ce22898e038b6ea9e646..40cbdaffe962730c81d9c95239babda672aac989 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java @@ -23,15 +23,17 @@ */ package de.ozgcloud.bescheid.common.callcontext; +import java.util.Optional; + import org.springframework.stereotype.Component; import de.ozgcloud.apilib.common.callcontext.CallContext; import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider; import de.ozgcloud.apilib.user.OzgCloudUserId; -import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import lombok.RequiredArgsConstructor; -@Component("bescheid_BescheidManagerCallContextProvider") +@Component @RequiredArgsConstructor public class BescheidManagerCallContextProvider implements OzgCloudCallContextProvider { @@ -39,14 +41,12 @@ public class BescheidManagerCallContextProvider implements OzgCloudCallContextPr @Override public CallContext provideContext() { - return CallContext.builder() - .userId(getUserId()) - .clientName(currentUserService.getUser().getClientName()) - .build(); + var callContextBuilder = CallContext.builder().clientName(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); + getUserId().ifPresent(callContextBuilder::userId); + return callContextBuilder.build(); } - OzgCloudUserId getUserId() { - return currentUserService.getUser().getUserId().map(OzgCloudUserId::from) - .orElseThrow(() -> new TechnicalException("No user id found in current user profile")); + Optional<OzgCloudUserId> getUserId() { + return currentUserService.getUser().getUserId().map(OzgCloudUserId::from); } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java index 49dbcf4a62be1cd1de9be68c57eb857b86559163..12268d4e0a14d3a4605f60f2b849033b00b91171 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java @@ -8,6 +8,8 @@ import java.util.Optional; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; @@ -19,12 +21,10 @@ import de.ozgcloud.common.errorhandling.TechnicalException; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; -import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Service @Log4j2 -@RequiredArgsConstructor public class NachrichtService { public static final String SEND_POSTFACH_NACHRICHT_ORDER = "SEND_POSTFACH_NACHRICHT"; @@ -35,10 +35,15 @@ public class NachrichtService { static final String FIELD_MAIL_BODY = "mailBody"; static final String FIELD_ATTACHMENTS = "attachments"; - private final NachrichtRemoteService remoteService; - private final Configuration freemarkerCfg; - private final OzgCloudCommandService commandService; - private final CommandMapper commandMapper; + @Autowired + private NachrichtRemoteService remoteService; + @Autowired + private Configuration freemarkerCfg; + @Autowired + @Qualifier("bescheid_OzgCloudCommandService") + private OzgCloudCommandService commandService; + @Autowired + private CommandMapper commandMapper; static final String SUBJECT = "Ihr Antrag"; diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java index 8afc3d2ba7b37ed2b79a2574c946473bcf9ae7e6..09b366285262b009acc54f131611760025ef1c5d 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java @@ -1,22 +1,26 @@ package de.ozgcloud.bescheid.vorgang; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import lombok.NonNull; -import lombok.RequiredArgsConstructor; @Service("bescheid_VorgangService") -@RequiredArgsConstructor public class VorgangService { static final String VORGANG_BESCHEIDEN = "VORGANG_BESCHEIDEN"; - private final VorgangRemoteService remoteService; - private final OzgCloudCommandService commandService; - private final CommandMapper commandMapper; + @Autowired + private VorgangRemoteService remoteService; + @Autowired + @Qualifier("bescheid_OzgCloudCommandService") + private OzgCloudCommandService commandService; + @Autowired + private CommandMapper commandMapper; public Vorgang getById(@NonNull VorgangId id) { return remoteService.getById(id); diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java index 905af6829977ceeeff99a5b6830f9f8c9a59bb71..54d398b8c5d55ce78f57da999f09df3326d23d99 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java @@ -31,6 +31,8 @@ import java.util.Optional; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.common.command.OzgCloudCommand; @@ -42,10 +44,8 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; @Service -@RequiredArgsConstructor public class DocumentService { public static final String DOCUMENT_ITEM_NAME = "Document"; @@ -56,10 +56,15 @@ public class DocumentService { public static final String FIELD_DOCUMENT_FILE = "documentFile"; public static final String FIELD_NACHRICHT_TEXT = "nachrichtText"; - private final AttachedItemService attachedItemService; - private final OzgCloudCommandService commandService; - private final CommandMapper commandMapper; - private final DocumentMapper documentMapper; + @Autowired + private AttachedItemService attachedItemService; + @Autowired + @Qualifier("bescheid_OzgCloudCommandService") + private OzgCloudCommandService commandService; + @Autowired + private CommandMapper commandMapper; + @Autowired + private DocumentMapper documentMapper; public String createBescheidDocument(Command command) { return createBescheidDocument(command, buildItemMap(command)); diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java index cfcf4559761f622b57483a05d63f96f2a9b92cb4..ec9d3dee4685bb202d88fe617c8235ad2270b717 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java @@ -28,7 +28,6 @@ import static org.mockito.Mockito.*; import java.util.Optional; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -37,7 +36,7 @@ import org.mockito.Mock; import org.mockito.Spy; import de.ozgcloud.apilib.user.OzgCloudUserId; -import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; class BescheidManagerCallContextProviderTest { @@ -52,20 +51,12 @@ class BescheidManagerCallContextProviderTest { @Mock private OzgCloudUserId userId; - @BeforeEach - void init() { - when(currentUserService.getUser()).thenReturn(contextUser); - } - @Nested class TestProvideContext { - private static final String CLIENT_NAME = "clientName"; - @BeforeEach void init() { - doReturn(userId).when(provider).getUserId(); - when(contextUser.getClientName()).thenReturn(CLIENT_NAME); + doReturn(Optional.of(userId)).when(provider).getUserId(); } @Test @@ -86,7 +77,7 @@ class BescheidManagerCallContextProviderTest { void shouldSetClientName() { var result = provider.provideContext(); - assertThat(result.getClientName()).isEqualTo(CLIENT_NAME); + assertThat(result.getClientName()).isEqualTo(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME); } } @@ -95,18 +86,19 @@ class BescheidManagerCallContextProviderTest { private static final String USER_ID = "userId"; + @BeforeEach + void init() { + when(currentUserService.getUser()).thenReturn(contextUser); + } + @Test void shouldReturnUserId() { when(contextUser.getUserId()).thenReturn(Optional.of(USER_ID)); var result = provider.getUserId(); - assertThat(result).hasToString(USER_ID); + assertThat(result).isPresent().get().hasToString(USER_ID); } - @Test - void shouldThrowExceptionWhenUserIdMissing() { - Assertions.assertThrows(TechnicalException.class, provider::getUserId); - } } } \ No newline at end of file diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java new file mode 100644 index 0000000000000000000000000000000000000000..ecdab688eae1bfd7127f1bf5f220bcf0dc05676a --- /dev/null +++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.callcontext; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import org.springframework.security.test.context.support.WithSecurityContext; + +@Retention(RetentionPolicy.RUNTIME) +@WithSecurityContext(factory = WithMockCustomUserSecurityContextFactory.class) +public @interface WithMockCustomUser { + + String userId() default "default-user-id-0"; + + String clientName() default CallContextTestFactory.CLIENT; + + String username() default UserTestFactory.NAME; + + boolean organisationEinheitenIdCheckNecessary() default false; +} diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f88a2454a4d4902772a759c7e54f620ca0d32ac2 --- /dev/null +++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang.callcontext; + +import java.util.Optional; + +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.test.context.support.WithSecurityContextFactory; + +public class WithMockCustomUserSecurityContextFactory implements WithSecurityContextFactory<WithMockCustomUser> { + + @Override + public SecurityContext createSecurityContext(WithMockCustomUser annotation) { + SecurityContext context = SecurityContextHolder.getContext(); + context.setAuthentication(CallContextAuthenticationToken.authenticate(createUser(annotation))); + return context; + } + + CallContextUser createUser(WithMockCustomUser mockCustomUser) { + var builder = CallContextUser.builder() + .userId(Optional.ofNullable(mockCustomUser.userId())) + .userName(Optional.ofNullable(mockCustomUser.username())) + .clientName(mockCustomUser.clientName()) + .organisationEinheitenIdCheckNecessary(mockCustomUser.organisationEinheitenIdCheckNecessary()); + + return builder.build(); + } +} diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index 157251c1a1f3de988bc1466ff78316d304ff583c..c8f90d5eada01439f5c476210b2d754fa203f527 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -53,9 +53,9 @@ <zufi-manager-interface.version>1.0.0-SNAPSHOT</zufi-manager-interface.version> <user-manager-interface.version>2.1.0</user-manager-interface.version> - <bescheid-manager.version>1.11.0</bescheid-manager.version> + <bescheid-manager.version>1.12.0-SNAPSHOT</bescheid-manager.version> <processor-manager.version>0.4.0</processor-manager.version> - <ozgcloud-starter.version>0.7.0</ozgcloud-starter.version> + <ozgcloud-starter.version>0.9.0-SNAPSHOT</ozgcloud-starter.version> <nachrichten-manager.version>2.7.0</nachrichten-manager.version> <notification-manager.version>2.7.0</notification-manager.version> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..62811097900c5e6daee5d06831962184579d63b8 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.vorgang; + +import java.util.Optional; + +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import de.ozgcloud.apilib.common.callcontext.CallContext; +import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider; +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.vorgang.callcontext.CurrentUserService; +import de.ozgcloud.vorgang.callcontext.VorgangManagerClientCallContextAttachingInterceptor; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +@Primary +public class VorgangManagerCallContextProvider implements OzgCloudCallContextProvider { + + private final CurrentUserService currentUserService; + + @Override + public CallContext provideContext() { + var callContextBuilder = CallContext.builder().clientName(VorgangManagerClientCallContextAttachingInterceptor.VORGANG_MANAGER_CLIENT_NAME); + getUserId().ifPresent(callContextBuilder::userId); + return callContextBuilder.build(); + } + + Optional<OzgCloudUserId> getUserId() { + return currentUserService.getUser().getUserId().map(OzgCloudUserId::from); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java index 5de6cb8db43331157cd66b2f84a1f00b859ddba1..2688640366bfcfc09504f2db123a0dfba3fa12dc 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java @@ -28,6 +28,7 @@ import de.ozgcloud.processor.vorgang.Vorgang; import de.ozgcloud.processor.vorgang.VorgangId; import de.ozgcloud.processor.vorgang.VorgangService; import de.ozgcloud.vorgang.VorgangManagerServerApplication; +import de.ozgcloud.vorgang.callcontext.WithMockCustomUser; import de.ozgcloud.vorgang.command.CommandService; import de.ozgcloud.vorgang.command.CreateCommandRequest; import de.ozgcloud.vorgang.command.PersistedCommand; @@ -42,6 +43,7 @@ import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; "ozgcloud.command-manager.address=static://127.0.0.1:9091" }, classes = { VorgangManagerServerApplication.class }) @ActiveProfiles({ "local", "itcase" }) +@WithMockCustomUser class ProcessorITCase { @Autowired