diff --git a/indexer-service-azure/src/main/java/org/opendes/indexer/azure/util/RequestInfoImpl.java b/indexer-service-azure/src/main/java/org/opendes/indexer/azure/util/RequestInfoImpl.java index a1210a82345698a0ac231913a467adab195ed8fe..d064710ee49359f9512942a2ba3a2564ca5a7944 100644 --- a/indexer-service-azure/src/main/java/org/opendes/indexer/azure/util/RequestInfoImpl.java +++ b/indexer-service-azure/src/main/java/org/opendes/indexer/azure/util/RequestInfoImpl.java @@ -7,7 +7,7 @@ import org.opendes.client.multitenancy.TenantInfo; import org.opendes.core.model.DeploymentEnvironment; import org.opendes.core.util.AppException; import org.opendes.core.util.Config; -import org.opendes.core.util.HeadersInfo; +import org.opendes.core.util.IHeadersInfo; import org.opendes.indexer.util.IRequestInfo; import org.springframework.beans.factory.annotation.Autowired; @@ -18,7 +18,7 @@ import static org.opendes.client.api.DpsHeaders.AUTHORIZATION; public class RequestInfoImpl implements IRequestInfo { @Autowired - private HeadersInfo headersInfo; + private IHeadersInfo headersInfo; @Autowired private ServiceAccountJwtClientImpl serviceAccountJwtClient; diff --git a/indexer-service-root/src/main/java/org/opendes/indexer/api/RecordIndexerApi.java b/indexer-service-root/src/main/java/org/opendes/indexer/api/RecordIndexerApi.java index 74e0ab7c3dd7be9544d10e54adfe727ba033af3e..7bad1217534c99f9db8a1fc1bf4158e2979791ba 100644 --- a/indexer-service-root/src/main/java/org/opendes/indexer/api/RecordIndexerApi.java +++ b/indexer-service-root/src/main/java/org/opendes/indexer/api/RecordIndexerApi.java @@ -18,6 +18,7 @@ import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import io.swagger.annotations.ApiOperation; +import lombok.extern.java.Log; import org.opendes.core.model.RecordChangedMessages; import org.opendes.indexer.SwaggerDoc; import org.opendes.indexer.util.JobStatus; @@ -36,6 +37,7 @@ import javax.validation.constraints.NotNull; import java.lang.reflect.Type; import java.util.List; +@Log @RestController @RequestMapping("/_dps/task-handlers") public class RecordIndexerApi { @@ -51,11 +53,20 @@ public class RecordIndexerApi { @PostMapping(path = "/index-worker", consumes = "application/json") @ApiOperation(hidden = true, value = "", notes = "") public ResponseEntity<JobStatus> indexWorker ( - @Valid @RequestBody @NotNull(message = SwaggerDoc.REQUEST_VALIDATION_NOT_NULL_BODY) - @RequestParam RecordChangedMessages recordChangedMessages) throws Exception { + @NotNull(message = SwaggerDoc.REQUEST_VALIDATION_NOT_NULL_BODY) + @Valid @RequestBody RecordChangedMessages recordChangedMessages) throws Exception { + + if (recordChangedMessages == null) { + log.info("record change messages is null"); + } + log.info("RCM DATA: " + recordChangedMessages.getData()); Type listType = new TypeToken<List<RecordInfo>>() {}.getType(); List<RecordInfo> recordInfos = new Gson().fromJson(recordChangedMessages.getData(), listType); + if (recordInfos == null) { + log.info("RECORD INFO IS NULL"); + } + recordInfos.forEach(r -> log.info(r.toString())); return new ResponseEntity(indexerService.processRecordChangedMessages(recordChangedMessages, recordInfos),HttpStatus.OK); } diff --git a/indexer-service-root/src/main/java/org/opendes/indexer/logging/AuditLogger.java b/indexer-service-root/src/main/java/org/opendes/indexer/logging/AuditLogger.java index 75862688d3e6a602ea134b80218e64670c7fb2be..cc10d4b06c0a6d008b4c805f83754907e5259f9e 100644 --- a/indexer-service-root/src/main/java/org/opendes/indexer/logging/AuditLogger.java +++ b/indexer-service-root/src/main/java/org/opendes/indexer/logging/AuditLogger.java @@ -16,7 +16,6 @@ package org.opendes.indexer.logging; import org.opendes.client.logging.payload.AuditPayload; import org.opendes.core.logging.JaxRsDpsLog; -import org.opendes.core.util.HeadersInfo; import org.opendes.core.util.IHeadersInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/indexer-service-root/src/main/java/org/opendes/indexer/logging/ServiceLogId.java b/indexer-service-root/src/main/java/org/opendes/indexer/logging/ServiceLogId.java index 0aec9c42267c165a8cdbaf49524d6337daa2fcac..e1bdfe92d4634f1675382ee0fce3c6da99bec121 100644 --- a/indexer-service-root/src/main/java/org/opendes/indexer/logging/ServiceLogId.java +++ b/indexer-service-root/src/main/java/org/opendes/indexer/logging/ServiceLogId.java @@ -15,8 +15,9 @@ package org.opendes.indexer.logging; import org.opendes.core.logging.LogId; +import org.springframework.stereotype.Component; - +@Component public class ServiceLogId implements LogId { @Override public String getRequestLog() { diff --git a/indexer-service-root/src/main/java/org/opendes/indexer/middleware/IndexerFilter.java b/indexer-service-root/src/main/java/org/opendes/indexer/middleware/IndexerFilter.java index 103120d942d1fdd2d17d508d2182f3c61caff23b..a268cf382c938b199d34d6c0aab78803aaaf03e7 100644 --- a/indexer-service-root/src/main/java/org/opendes/indexer/middleware/IndexerFilter.java +++ b/indexer-service-root/src/main/java/org/opendes/indexer/middleware/IndexerFilter.java @@ -42,103 +42,103 @@ import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; -@Component -public class IndexerFilter implements Filter { +//@Component +public class IndexerFilter { - private static final String DISABLE_AUTH_PROPERTY = "com.slb.indexer.disableAuth"; - private static final String PATH_SWAGGER = "/swagger.json"; - private static final String PATH_TASK_HANDLERS = "task-handlers"; - private static final String PATH_CRON_HANDLERS = "cron-handlers"; - - @Context - private ResourceInfo resourceInfo; - @Autowired - private AuthorizationService authorizationService; - @Autowired - private JaxRsDpsLog log; - @Autowired - private IRequestInfo requestInfoProvider; - - @Lazy - @Autowired - private DpsHeaders dpsHeaders; - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { - boolean disableAuth = Boolean.getBoolean(DISABLE_AUTH_PROPERTY); - if (disableAuth) { - return; - } - - HttpServletRequest httpRequest = (HttpServletRequest) request; - String uri = httpRequest.getRequestURI().toLowerCase(); - - if (uri.contains(PATH_SWAGGER)) { - filterChain.doFilter(request, response); - return; - } - - if (httpRequest.getMethod().equals(HttpMethods.GET) && uri.contains(PATH_SWAGGER)) - return; - - if (httpRequest.getMethod().equals(HttpMethods.POST) && uri.contains(PATH_SWAGGER)) { - checkWorkerApiAccess(requestInfoProvider); - return; - } - - if (httpRequest.getMethod().equals(HttpMethods.GET) &&uri.contains(PATH_SWAGGER)) { - checkCronApiAccess(requestInfoProvider); - return; - } - - Method method = this.resourceInfo.getResourceMethod(); - PermitAll permitAll = method.getAnnotation(PermitAll.class); - if (permitAll != null) { - return; - } - - DpsHeaders headers = this.dpsHeaders; - - String[] requiredRoles = getRequiredRoles(method); - - checkApiAccess(requiredRoles, headers); - } - - private void checkApiAccess(String[] requiredRoles, DpsHeaders requestHeaders) { - validateAccountId(requestHeaders); - AuthorizationResponse authorizationResponse = authorizationService.authorizeAny(requestHeaders, requiredRoles); - requestHeaders.put(DpsHeaders.USER_EMAIL, authorizationResponse.getUser()); - } - - private List<String> validateAccountId(DpsHeaders requestHeaders) { - String accountHeader = requestHeaders.getPartitionIdWithFallbackToAccountId(); - String debuggingInfo = String.format("%s:%s", DpsHeaders.DATA_PARTITION_ID, accountHeader); - - if (Strings.isNullOrEmpty(accountHeader)) { - throw new AppException(HttpStatus.SC_BAD_REQUEST, "Bad request", "invalid or empty data partition", debuggingInfo); - } - - List<String> dataPartitions = Arrays.asList(accountHeader.trim().split("\\s*,\\s*")); - if (dataPartitions.isEmpty() || dataPartitions.size() > 1) { - throw new AppException(HttpStatus.SC_BAD_REQUEST, "Bad request", "invalid or empty data partition", debuggingInfo); - } - return dataPartitions; - } - - private void checkWorkerApiAccess(IRequestInfo requestInfo) { - if (requestInfo.isTaskQueueRequest()) return; - throw AppException.createForbidden("invalid user agent, AppEngine Task Queue only"); - } - - private void checkCronApiAccess(IRequestInfo requestInfo) { - if (requestInfo.isCronRequest()) return; - throw AppException.createForbidden("invalid user agent, AppEngine Cron only"); - } - - private String[] getRequiredRoles(Method method) { - RolesAllowed rolesAllowed = method.getAnnotation(RolesAllowed.class); - return rolesAllowed.value(); - } +// private static final String DISABLE_AUTH_PROPERTY = "com.slb.indexer.disableAuth"; +// private static final String PATH_SWAGGER = "/swagger.json"; +// private static final String PATH_TASK_HANDLERS = "task-handlers"; +// private static final String PATH_CRON_HANDLERS = "cron-handlers"; +// +// @Context +// private ResourceInfo resourceInfo; +// @Autowired +// private AuthorizationService authorizationService; +// @Autowired +// private JaxRsDpsLog log; +// @Autowired +// private IRequestInfo requestInfoProvider; +// +// @Lazy +// @Autowired +// private DpsHeaders dpsHeaders; +// +// @Override +// public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { +// boolean disableAuth = Boolean.getBoolean(DISABLE_AUTH_PROPERTY); +// if (disableAuth) { +// return; +// } +// +// HttpServletRequest httpRequest = (HttpServletRequest) request; +// String uri = httpRequest.getRequestURI().toLowerCase(); +// +// if (uri.contains(PATH_SWAGGER)) { +// filterChain.doFilter(request, response); +// return; +// } +// +// if (httpRequest.getMethod().equals(HttpMethods.GET) && uri.contains(PATH_SWAGGER)) +// return; +// +// if (httpRequest.getMethod().equals(HttpMethods.POST) && uri.contains(PATH_SWAGGER)) { +// checkWorkerApiAccess(requestInfoProvider); +// return; +// } +// +// if (httpRequest.getMethod().equals(HttpMethods.GET) &&uri.contains(PATH_SWAGGER)) { +// checkCronApiAccess(requestInfoProvider); +// return; +// } +// +// Method method = this.resourceInfo.getResourceMethod(); +// PermitAll permitAll = method.getAnnotation(PermitAll.class); +// if (permitAll != null) { +// return; +// } +// +// DpsHeaders headers = this.dpsHeaders; +// +// String[] requiredRoles = getRequiredRoles(method); +// +// checkApiAccess(requiredRoles, headers); +// } +// +// private void checkApiAccess(String[] requiredRoles, DpsHeaders requestHeaders) { +// validateAccountId(requestHeaders); +// AuthorizationResponse authorizationResponse = authorizationService.authorizeAny(requestHeaders, requiredRoles); +// requestHeaders.put(DpsHeaders.USER_EMAIL, authorizationResponse.getUser()); +// } +// +// private List<String> validateAccountId(DpsHeaders requestHeaders) { +// String accountHeader = requestHeaders.getPartitionIdWithFallbackToAccountId(); +// String debuggingInfo = String.format("%s:%s", DpsHeaders.DATA_PARTITION_ID, accountHeader); +// +// if (Strings.isNullOrEmpty(accountHeader)) { +// throw new AppException(HttpStatus.SC_BAD_REQUEST, "Bad request", "invalid or empty data partition", debuggingInfo); +// } +// +// List<String> dataPartitions = Arrays.asList(accountHeader.trim().split("\\s*,\\s*")); +// if (dataPartitions.isEmpty() || dataPartitions.size() > 1) { +// throw new AppException(HttpStatus.SC_BAD_REQUEST, "Bad request", "invalid or empty data partition", debuggingInfo); +// } +// return dataPartitions; +// } +// +// private void checkWorkerApiAccess(IRequestInfo requestInfo) { +// if (requestInfo.isTaskQueueRequest()) return; +// throw AppException.createForbidden("invalid user agent, AppEngine Task Queue only"); +// } +// +// private void checkCronApiAccess(IRequestInfo requestInfo) { +// if (requestInfo.isCronRequest()) return; +// throw AppException.createForbidden("invalid user agent, AppEngine Cron only"); +// } +// +// private String[] getRequiredRoles(Method method) { +// RolesAllowed rolesAllowed = method.getAnnotation(RolesAllowed.class); +// return rolesAllowed.value(); +// } } \ No newline at end of file diff --git a/indexer-service-root/src/main/java/org/opendes/indexer/model/RecordStatus.java b/indexer-service-root/src/main/java/org/opendes/indexer/model/RecordStatus.java index 7cdb4f453d633bf611883182c245fe2facc28f58..9aad292ee1d1985c7563750279c6fad583ad7e5e 100644 --- a/indexer-service-root/src/main/java/org/opendes/indexer/model/RecordStatus.java +++ b/indexer-service-root/src/main/java/org/opendes/indexer/model/RecordStatus.java @@ -18,15 +18,10 @@ import lombok.Builder; import lombok.Data; import lombok.ToString; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; - @Data @Builder -@Component -@Lazy public class RecordStatus { private String id; diff --git a/indexer-service-root/src/main/java/org/opendes/indexer/service/IndexerServiceImpl.java b/indexer-service-root/src/main/java/org/opendes/indexer/service/IndexerServiceImpl.java index 226a15ad8506c5c129de618035927c097637905e..f39c1143c43253fd58742c1dd4b0e819ea311fbb 100644 --- a/indexer-service-root/src/main/java/org/opendes/indexer/service/IndexerServiceImpl.java +++ b/indexer-service-root/src/main/java/org/opendes/indexer/service/IndexerServiceImpl.java @@ -92,11 +92,12 @@ public class IndexerServiceImpl implements IndexerService { private ElasticIndexNameResolver elasticIndexNameResolver; @Autowired private IAttributeParsingService attributeParsingServiceImpl; - @Autowired - private IRequestInfo requestInfo; +// @Autowired +// private IRequestInfo requestInfo; @Autowired private JobStatus jobStatus; + @Autowired private DpsHeaders headers; @Override @@ -109,7 +110,7 @@ public class IndexerServiceImpl implements IndexerService { List<String> retryRecordIds = new LinkedList<>(); // get auth header - this.headers = this.requestInfo.getHeaders(); +// this.headers = this.requestInfo.getHeaders(); // initialize status for all messages. this.jobStatus.initialize(recordInfos); diff --git a/indexer-service-root/src/main/java/org/opendes/indexer/service/StorageServiceImpl.java b/indexer-service-root/src/main/java/org/opendes/indexer/service/StorageServiceImpl.java index 3ebe24074802162896ac1959e8632b179ae49933..84c73c70f68aa8ac2f9f43095aae41e96a93e2bd 100644 --- a/indexer-service-root/src/main/java/org/opendes/indexer/service/StorageServiceImpl.java +++ b/indexer-service-root/src/main/java/org/opendes/indexer/service/StorageServiceImpl.java @@ -32,6 +32,7 @@ import org.opendes.indexer.util.IRequestInfo; import org.opendes.indexer.util.JobStatus; import org.springframework.beans.factory.annotation.Autowired; import org.apache.http.HttpStatus; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.UnsupportedEncodingException; diff --git a/indexer-service-root/src/main/java/org/opendes/indexer/util/JobStatus.java b/indexer-service-root/src/main/java/org/opendes/indexer/util/JobStatus.java index 542cf6d474fa0e63c4f4bd0fd46d97ebe5ec6a97..623afe85fbbe40170efbee5759133549fdfb543d 100644 --- a/indexer-service-root/src/main/java/org/opendes/indexer/util/JobStatus.java +++ b/indexer-service-root/src/main/java/org/opendes/indexer/util/JobStatus.java @@ -15,6 +15,7 @@ package org.opendes.indexer.util; import com.google.common.base.Strings; +import lombok.extern.java.Log; import org.opendes.core.logging.JaxRsDpsLog; import org.opendes.indexer.model.*; import lombok.Data; @@ -27,17 +28,19 @@ import java.util.stream.Collectors; @Component @Data +@Log public class JobStatus { @Autowired - private JaxRsDpsLog log; + private JaxRsDpsLog jaxRsDpsLog; - private List<RecordStatus> statusesList; + private List<RecordStatus> statusesList = new ArrayList<>(); - private List<String> debugInfos; + private List<String> debugInfos = new ArrayList<>(); public void initialize(List<RecordInfo> recordInfos) { + log.info(">>>>>>>> IN JOB STATUS INITIALIZE <<<<<<<<<"); if (recordInfos == null || recordInfos.isEmpty()) return; List<RecordStatus> statuses = recordInfos.stream().map(msg -> RecordStatus.builder() @@ -49,6 +52,7 @@ public class JobStatus { .build()).collect(Collectors.toList()); this.statusesList.addAll(statuses); + this.statusesList.forEach(s -> log.info("STATUS LIST: " + s.toString())); } public void addOrUpdateRecordStatus(Collection<String> ids, IndexingStatus status, int statusCode, String message, String debugInfo) { @@ -127,6 +131,6 @@ public class JobStatus { }); // dump all debug-info - this.log.warning(this.debugInfos); + this.jaxRsDpsLog.warning(this.debugInfos); } } diff --git a/indexer-service-root/src/test/java/org/opendes/indexer/logging/AuditLoggerTest.java b/indexer-service-root/src/test/java/org/opendes/indexer/logging/AuditLoggerTest.java index 09064e70c24de90e42a65ab2082690e73049ba53..25db574382fc796b31c454faa6bd2c79fa2003c7 100644 --- a/indexer-service-root/src/test/java/org/opendes/indexer/logging/AuditLoggerTest.java +++ b/indexer-service-root/src/test/java/org/opendes/indexer/logging/AuditLoggerTest.java @@ -23,7 +23,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.opendes.client.logging.payload.AuditPayload; import org.opendes.core.logging.JaxRsDpsLog; -import org.opendes.core.util.HeadersInfo; +import org.opendes.core.util.IHeadersInfo; import org.springframework.test.context.junit4.SpringRunner; import java.util.Map; @@ -38,7 +38,7 @@ public class AuditLoggerTest { @Mock private JaxRsDpsLog logger; @Mock - private HeadersInfo headers; + private IHeadersInfo headers; @InjectMocks private AuditLogger sut; diff --git a/indexer-service-root/src/test/java/org/opendes/indexer/service/IndexCopyServiceImplTest.java b/indexer-service-root/src/test/java/org/opendes/indexer/service/IndexCopyServiceImplTest.java index 1af6fcfbe3fc53f9c92eb767552dd6cc5e7c4c91..c772714f6148dcbbddc33f50a8c517e1aeda672c 100644 --- a/indexer-service-root/src/test/java/org/opendes/indexer/service/IndexCopyServiceImplTest.java +++ b/indexer-service-root/src/test/java/org/opendes/indexer/service/IndexCopyServiceImplTest.java @@ -36,7 +36,7 @@ import org.opendes.core.service.ElasticSettingService; import org.opendes.core.service.IndicesService; import org.opendes.core.util.AppException; import org.opendes.core.util.ElasticClientHandler; -import org.opendes.core.util.HeadersInfo; +import org.opendes.core.util.IHeadersInfo; import org.opendes.indexer.logging.AuditLogger; import org.opendes.indexer.util.IRequestInfo; import org.powermock.core.classloader.annotations.PrepareForTest; @@ -67,7 +67,7 @@ public class IndexCopyServiceImplTest { @Mock private IRequestInfo requestInfo; @Mock - private HeadersInfo headersInfo; + private IHeadersInfo headersInfo; @Mock private RestClient restClient; @Mock diff --git a/indexer-service-root/src/test/java/org/opendes/indexer/service/TenantInfoServiceTest.java b/indexer-service-root/src/test/java/org/opendes/indexer/service/TenantInfoServiceTest.java index e632477fc29a1abb4064ac105daf871785ac74e0..6f0c9142f793df39b64b8b28c24aafeb7149fa95 100644 --- a/indexer-service-root/src/test/java/org/opendes/indexer/service/TenantInfoServiceTest.java +++ b/indexer-service-root/src/test/java/org/opendes/indexer/service/TenantInfoServiceTest.java @@ -24,7 +24,7 @@ import org.opendes.client.api.DpsHeaders; import org.opendes.client.multitenancy.ITenantFactory; import org.opendes.client.multitenancy.TenantInfo; import org.opendes.core.util.AppException; -import org.opendes.core.util.HeadersInfo; +import org.opendes.core.util.IHeadersInfo; import org.springframework.http.HttpHeaders; import org.springframework.test.context.junit4.SpringRunner; @@ -40,8 +40,8 @@ public class TenantInfoServiceTest { @Mock private ITenantFactory tenantFactory; - @InjectMocks - private HeadersInfo headersInfo; + @Mock + private IHeadersInfo headersInfo; @InjectMocks private TenantInfoServiceImpl sut;