Pull request #628: RED-4515
Merge in RED/persistence-service from RED-4515 to master * commit '71a5f56fd5975e11160719dc8ab315c6633634af': RED-4515: Added workaround to keep swagger running without tenant header for now RED-4515: Removed workarounds that set default tenant if no tenant is available
This commit is contained in:
commit
d3b0ce243c
@ -1,5 +1,10 @@
|
||||
package com.iqser.red.keycloak.commons;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
|
||||
import org.keycloak.representations.AccessToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
|
||||
@ -27,4 +32,25 @@ public class KeycloakSecurity {
|
||||
return auth.getName();
|
||||
}
|
||||
|
||||
|
||||
public Optional<String> getRealm(){
|
||||
return getToken(t -> {
|
||||
String issuer = t.getIssuer();
|
||||
String realm = issuer.substring(issuer.lastIndexOf('/') + 1);
|
||||
log.info(realm);
|
||||
return realm;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public <R> Optional<R> getToken(Function<AccessToken, R> function) {
|
||||
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (!(auth instanceof KeycloakAuthenticationToken)) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
KeycloakAuthenticationToken keycloakAuth = (KeycloakAuthenticationToken) auth;
|
||||
return Optional.ofNullable(function.apply(keycloakAuth.getAccount().getKeycloakSecurityContext().getToken()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.multitenancy;
|
||||
|
||||
import static com.iqser.red.service.persistence.management.v1.processor.multitenancy.TenantInterceptor.DEFAULT_TENANT;
|
||||
import static com.iqser.red.service.persistence.management.v1.processor.multitenancy.TenantInterceptor.TENANT_HEADER_NAME;
|
||||
|
||||
import org.springframework.amqp.rabbit.config.AbstractRabbitListenerContainerFactory;
|
||||
@ -38,8 +37,7 @@ public class MultiTenancyMessagingConfiguration {
|
||||
if (tenant != null) {
|
||||
TenantContext.setTenantId(tenant);
|
||||
} else {
|
||||
// TODO Remove if multitenancy is fully integrated.
|
||||
TenantContext.setTenantId(DEFAULT_TENANT);
|
||||
throw new RuntimeException("No Tenant is set queue message");
|
||||
}
|
||||
return m;
|
||||
});
|
||||
|
||||
@ -5,12 +5,12 @@ import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.context.request.WebRequest;
|
||||
import org.springframework.web.context.request.WebRequestInterceptor;
|
||||
|
||||
import com.iqser.red.keycloak.commons.KeycloakSecurity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
|
||||
|
||||
@Component
|
||||
public class TenantInterceptor implements WebRequestInterceptor {
|
||||
|
||||
public static final String DEFAULT_TENANT = "redaction";
|
||||
public static final String TENANT_HEADER_NAME = "X-TENANT-ID";
|
||||
|
||||
|
||||
@ -20,7 +20,14 @@ public class TenantInterceptor implements WebRequestInterceptor {
|
||||
if (request.getHeader(TENANT_HEADER_NAME) != null) {
|
||||
TenantContext.setTenantId(request.getHeader(TENANT_HEADER_NAME));
|
||||
} else {
|
||||
TenantContext.setTenantId(DEFAULT_TENANT);
|
||||
// Workaround to keep swagger working for now until header is sent somehow.
|
||||
var realm = KeycloakSecurity.getRealm();
|
||||
if (realm.isPresent()){
|
||||
TenantContext.setTenantId(realm.get());
|
||||
} else {
|
||||
// Can not throw exception here currently because otherwise we can not create tenant.
|
||||
TenantContext.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.UserService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;
|
||||
@ -42,6 +42,7 @@ public class DossierTesterAndProvider {
|
||||
|
||||
public Dossier provideTestDossier(DossierTemplateModel testTemplate, String dossierName) {
|
||||
|
||||
TenantContext.setTenantId("redaction");
|
||||
return provideTestDossier(testTemplate, dossierName, null);
|
||||
}
|
||||
|
||||
|
||||
@ -16,7 +16,6 @@ import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
|
||||
@ -92,7 +91,6 @@ public class FileTesterAndProvider {
|
||||
|
||||
public void markFileAsProcessed(String fileId) {
|
||||
|
||||
TenantContext.setTenantId("redaction");
|
||||
AnalyzeResult result = new AnalyzeResult();
|
||||
result.setFileId(fileId);
|
||||
result.setNumberOfPages(100);
|
||||
@ -105,7 +103,6 @@ public class FileTesterAndProvider {
|
||||
result.setAnalysisVersion(1);
|
||||
fileStatusService.setStatusSuccessful(fileId, result);
|
||||
fileStatusService.setStatusProcessed(fileId);
|
||||
TenantContext.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -12,8 +12,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.UserProvid
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditSearchRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.CategoryModel;
|
||||
@ -36,8 +34,6 @@ public class AuditTest extends AbstractPersistenceServerServiceTest {
|
||||
@Test
|
||||
public void testAudit() {
|
||||
|
||||
TenantContext.setTenantId("redaction");
|
||||
|
||||
var userId = userProvider.getUserId();
|
||||
|
||||
auditPersistenceService.audit(AuditRequest.builder().category("c1").message("test").userId(userId).objectId("1").details(Map.of("key", "value")).build());
|
||||
@ -54,9 +50,6 @@ public class AuditTest extends AbstractPersistenceServerServiceTest {
|
||||
result = auditClient.searchAuditLog(AuditSearchRequest.builder().build());
|
||||
assertThat(result.getTotalHits()).isGreaterThanOrEqualTo(3);
|
||||
assertThat(auditClient.getAuditCategories()).isNotEmpty();
|
||||
|
||||
TenantContext.clear();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -23,7 +23,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierStatusRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel;
|
||||
@ -216,7 +215,6 @@ public class DossierTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
@Test
|
||||
public void testArchiveDossier() {
|
||||
TenantContext.setTenantId("redaction");
|
||||
|
||||
var template = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||
|
||||
@ -321,7 +319,6 @@ public class DossierTest extends AbstractPersistenceServerServiceTest {
|
||||
// assertThat(dossierInformation.getNumberOfHardDeletedDossiers()).isEqualTo(0);
|
||||
// assertThat(dossierInformation.getNumberOfArchivedDossiers()).isEqualTo(1);
|
||||
|
||||
TenantContext.clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -84,13 +84,11 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest {
|
||||
.fileIds(List.of(file2.getId()))
|
||||
.build());
|
||||
|
||||
TenantContext.setTenantId("redaction");
|
||||
downloadMessageReceiver.receive(new DownloadJob(userProvider.getUserId(), downloads.getStorageId()));
|
||||
var reportInfoId = downloads.getStorageId().substring(0, downloads.getStorageId().length() - 3) + "/REPORT_INFO.json";
|
||||
storageService.storeJSONObject(TenantContext.getTenantId(), reportInfoId, new ArrayList<>());
|
||||
|
||||
downloadPreparationService.createDownload(RedactionResultMessage.builder().downloadId(downloads.getStorageId()).build());
|
||||
TenantContext.clear();
|
||||
|
||||
var statuses = downloadClient.getDownloadStatus();
|
||||
assertThat(statuses.getDownloadStatus()).isNotEmpty();
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.tests.performance;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@ -20,7 +22,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@Slf4j
|
||||
public class EntityPerformanceTest extends AbstractPersistenceServerServiceTest {
|
||||
@ -98,7 +99,6 @@ public class EntityPerformanceTest extends AbstractPersistenceServerServiceTest
|
||||
|
||||
@Test
|
||||
public void testWritePerformance() {
|
||||
TenantContext.setTenantId("redaction");
|
||||
|
||||
var tenKEntries = generateEntries(10_000);
|
||||
|
||||
@ -127,7 +127,6 @@ public class EntityPerformanceTest extends AbstractPersistenceServerServiceTest
|
||||
System.out.println("JPA Time: " + jpaTime + "ms for 10k entries");
|
||||
System.out.println("JDBC Time: " + jdbcTime + "ms for 10k entries");
|
||||
|
||||
TenantContext.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user