Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -71,27 +71,6 @@ private Endpoints() {
public static final String PURGE = "/purge";
}

public static class ApiEndpointsNames {

private ApiEndpointsNames() {
}

// Files API
public static final String GET_FILES = "getFiles";
public static final String UPLOAD_FILE = "uploadFile";
public static final String START_UPLOAD_FROM_URL = "startUploadFromUrl";
public static final String GET_UPLOAD_FROM_URL_JOB = "getUploadFromUrlJob";

// Operations API
public static final String GET_OPERATIONS = "getOperations";
public static final String START_OPERATION = "startOperation";
public static final String GET_OPERATION = "getOperation";
public static final String GET_OPERATION_ACTIONS = "getOperationActions";
public static final String GET_OPERATION_LOGS = "getOperationLogs";
public static final String GET_OPERATION_LOG_CONTENT = "getOperationLogContent";
public static final String EXECUTE_OPERATION_ACTION = "executeOperationAction";
}

public static final Set<String> NAMES_OF_SERVICE_PARAMETERS = Set.of(
VARIABLE_NAME_SERVICE_ID, Variables.USER.getName(),
Variables.USER_GUID.getName(), Variables.SPACE_NAME.getName(), Variables.SPACE_GUID.getName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public final class Messages {
public static final String MISSING_PROPERTIES_FOR_CREATING_THE_SPECIFIC_PROVIDER = "Missing properties for creating the specific provider!";
public static final String DEPLOY_FROM_URL_WRONG_CREDENTIALS_FOR_JOB_WITH_ID = "Credentials to {0} are wrong. Make sure that they are correct. Job id: {1}";
public static final String JOB_NOT_UPDATED_FOR_0_SECONDS = "Job not updated for {0} seconds";

public static final String FAILED_TO_CREATE_BLOB_STORE_CONTEXT = "Failed to create BlobStoreContext";

// Audit log messages
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
package org.cloudfoundry.multiapps.controller.web.api.impl;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.text.MessageFormat;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Base64;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;

import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.servlet.http.HttpServletRequest;
import org.cloudfoundry.multiapps.common.SLException;
import org.cloudfoundry.multiapps.controller.api.FilesApiService;
import org.cloudfoundry.multiapps.controller.api.model.AsyncUploadResult;
Expand All @@ -26,7 +36,6 @@
import org.cloudfoundry.multiapps.controller.process.util.PriorityFuture;
import org.cloudfoundry.multiapps.controller.web.Constants;
import org.cloudfoundry.multiapps.controller.web.Messages;
import org.cloudfoundry.multiapps.controller.web.monitoring.ApiUsageLogger;
import org.cloudfoundry.multiapps.controller.web.upload.AsyncUploadJobOrchestrator;
import org.cloudfoundry.multiapps.controller.web.upload.exception.RejectedAsyncUploadJobException;
import org.cloudfoundry.multiapps.controller.web.util.SecurityContextUtil;
Expand All @@ -39,17 +48,6 @@
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.text.MessageFormat;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Base64;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;

@Named
public class FilesApiServiceImpl implements FilesApiService {

Expand All @@ -76,15 +74,10 @@ public class FilesApiServiceImpl implements FilesApiService {
@Inject
private AsyncUploadJobOrchestrator asyncUploadJobOrchestrator;
@Inject
private ApiUsageLogger apiUsageLogger;
@Inject
private ExecutorService fileStorageThreadPool;
@Inject
private HttpServletRequest httpServletRequest;

@Override
public ResponseEntity<List<FileMetadata>> getFiles(String spaceGuid, String namespace) {
apiUsageLogger.logFilesReadCall(spaceGuid, namespace, Constants.ApiEndpointsNames.GET_FILES, httpServletRequest);
try {
filesApiServiceAuditLog.logGetFiles(SecurityContextUtil.getUsername(), spaceGuid, namespace);
List<FileEntry> entries = fileService.listFiles(spaceGuid, namespace);
Expand All @@ -100,7 +93,6 @@ public ResponseEntity<List<FileMetadata>> getFiles(String spaceGuid, String name

@Override
public ResponseEntity<FileMetadata> uploadFile(MultipartHttpServletRequest request, String spaceGuid, String namespace) {
apiUsageLogger.logFilesMutatingCall(spaceGuid, namespace, Constants.ApiEndpointsNames.UPLOAD_FILE, request);
LOGGER.trace(Messages.RECEIVED_UPLOAD_REQUEST, ServletUtil.decodeUri(request));
var multipartFile = getFileFromRequest(request);
try (InputStream in = new BufferedInputStream(multipartFile.getInputStream(), INPUT_STREAM_BUFFER_SIZE)) {
Expand All @@ -121,13 +113,11 @@ public ResponseEntity<FileMetadata> uploadFile(MultipartHttpServletRequest reque

@Override
public ResponseEntity<Void> startUploadFromUrl(String spaceGuid, String namespace, FileUrl fileUrl) {
apiUsageLogger.logFilesMutatingCall(spaceGuid, namespace, Constants.ApiEndpointsNames.START_UPLOAD_FROM_URL, httpServletRequest);
String decodedUrl = new String(Base64.getUrlDecoder()
.decode(fileUrl.getFileUrl()));
String urlWithoutUserInfo = UriUtil.stripUserInfo(decodedUrl);
LOGGER.trace(Messages.RECEIVED_UPLOAD_FROM_URL_REQUEST, urlWithoutUserInfo);
filesApiServiceAuditLog.logStartUploadFromUrl(SecurityContextUtil.getUsername(), spaceGuid, decodedUrl);

var existingJob = getExistingJob(spaceGuid, namespace, urlWithoutUserInfo);
if (existingJob == null) {
return triggerUploadFromUrl(spaceGuid, namespace, urlWithoutUserInfo, decodedUrl, fileUrl.getUserCredentials());
Expand All @@ -154,7 +144,6 @@ private String getLocationHeader(String spaceGuid, String jobId) {

@Override
public ResponseEntity<AsyncUploadResult> getUploadFromUrlJob(String spaceGuid, String namespace, String jobId) {
apiUsageLogger.logFilesReadCall(spaceGuid, namespace, Constants.ApiEndpointsNames.GET_UPLOAD_FROM_URL_JOB, httpServletRequest);
filesApiServiceAuditLog.logGetUploadFromUrlJob(SecurityContextUtil.getUsername(), spaceGuid, namespace, jobId);
AsyncUploadJobEntry job = getJob(jobId, spaceGuid, namespace);
if (job == null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
package org.cloudfoundry.multiapps.controller.web.api.impl;

import java.text.MessageFormat;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;

import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.persistence.NoResultException;
Expand All @@ -24,6 +38,7 @@
import org.cloudfoundry.multiapps.controller.core.cf.CloudControllerClientFactory;
import org.cloudfoundry.multiapps.controller.core.security.token.TokenService;
import org.cloudfoundry.multiapps.controller.core.util.UserInfo;
import org.cloudfoundry.multiapps.controller.persistence.Constants;
import org.cloudfoundry.multiapps.controller.persistence.OrderDirection;
import org.cloudfoundry.multiapps.controller.persistence.model.ProgressMessage;
import org.cloudfoundry.multiapps.controller.persistence.model.ProgressMessage.ProgressMessageType;
Expand All @@ -39,9 +54,7 @@
import org.cloudfoundry.multiapps.controller.process.metadata.ProcessTypeToOperationMetadataMapper;
import org.cloudfoundry.multiapps.controller.process.util.OperationsHelper;
import org.cloudfoundry.multiapps.controller.process.variables.Variables;
import org.cloudfoundry.multiapps.controller.web.Constants;
import org.cloudfoundry.multiapps.controller.web.Messages;
import org.cloudfoundry.multiapps.controller.web.monitoring.ApiUsageLogger;
import org.cloudfoundry.multiapps.controller.web.util.SecurityContextUtil;
import org.flowable.engine.runtime.ProcessInstance;
import org.slf4j.Logger;
Expand All @@ -50,21 +63,6 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.server.ResponseStatusException;

import java.text.MessageFormat;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;

import static org.cloudfoundry.multiapps.controller.persistence.Constants.VARIABLE_NAME_SERVICE_ID;
import static org.cloudfoundry.multiapps.controller.web.Constants.NAMES_OF_SERVICE_PARAMETERS;

@Named
Expand All @@ -91,14 +89,9 @@ public class OperationsApiServiceImpl implements OperationsApiService {
private ProcessActionRegistry processActionRegistry;
@Inject
private OperationsApiServiceAuditLog operationsApiServiceAuditLog;
@Inject
private ApiUsageLogger apiUsageLogger;
@Inject
private HttpServletRequest httpServletRequest;

@Override
public ResponseEntity<List<Operation>> getOperations(String spaceGuid, String mtaId, List<String> stateStrings, Integer last) {
apiUsageLogger.logOperationsReadCall(spaceGuid, Constants.ApiEndpointsNames.GET_OPERATIONS, null, httpServletRequest);
operationsApiServiceAuditLog.logGetOperations(SecurityContextUtil.getUsername(), spaceGuid, mtaId);
List<Operation.State> states = getStates(stateStrings);
List<Operation> operations = filterByQueryParameters(last, states, spaceGuid, mtaId);
Expand All @@ -108,8 +101,6 @@ public ResponseEntity<List<Operation>> getOperations(String spaceGuid, String mt

@Override
public ResponseEntity<Void> executeOperationAction(String spaceGuid, String operationId, String actionId) {
apiUsageLogger.logOperationsMutatingCall(spaceGuid, Constants.ApiEndpointsNames.EXECUTE_OPERATION_ACTION, operationId,
httpServletRequest);
operationsApiServiceAuditLog.logExecuteOperationAction(SecurityContextUtil.getUsername(), spaceGuid, operationId, actionId);
Operation operation = getOperationByOperationGuidAndSpaceGuid(operationId, spaceGuid);
List<String> availableOperations = getAvailableActions(operation);
Expand All @@ -128,8 +119,6 @@ public ResponseEntity<Void> executeOperationAction(String spaceGuid, String oper
@Override
public ResponseEntity<List<Log>> getOperationLogs(String spaceGuid, String operationId) {
try {
apiUsageLogger.logOperationsReadCall(spaceGuid, Constants.ApiEndpointsNames.GET_OPERATION_LOGS, operationId,
httpServletRequest);
operationsApiServiceAuditLog.logGetOperationLogs(SecurityContextUtil.getUsername(), spaceGuid, operationId);
getOperationByOperationGuidAndSpaceGuid(operationId, spaceGuid);
List<String> logIds = logsService.getLogNames(spaceGuid, operationId);
Expand All @@ -149,8 +138,6 @@ public ResponseEntity<List<Log>> getOperationLogs(String spaceGuid, String opera
@Override
public ResponseEntity<String> getOperationLogContent(String spaceGuid, String operationId, String logId) {
try {
apiUsageLogger.logOperationsReadCall(spaceGuid, Constants.ApiEndpointsNames.GET_OPERATION_LOG_CONTENT, operationId,
httpServletRequest);
operationsApiServiceAuditLog.logGetOperationLogContent(SecurityContextUtil.getUsername(), spaceGuid, operationId, logId);
String content = logsService.getOperationLog(spaceGuid, operationId, logId);

Expand All @@ -163,7 +150,6 @@ public ResponseEntity<String> getOperationLogContent(String spaceGuid, String op

@Override
public ResponseEntity<Operation> startOperation(String spaceGuid, Operation operation, HttpServletRequest httpServletRequest) {
apiUsageLogger.logOperationsMutatingCall(spaceGuid, Constants.ApiEndpointsNames.START_OPERATION, null, httpServletRequest);
operationsApiServiceAuditLog.logStartOperation(SecurityContextUtil.getUsername(), spaceGuid, operation);
UserInfo authenticatedUser = getAuthenticatedUser();
String processDefinitionKey = operationsHelper.getProcessDefinitionKey(operation);
Expand All @@ -181,7 +167,6 @@ public ResponseEntity<Operation> startOperation(String spaceGuid, Operation oper

@Override
public ResponseEntity<Operation> getOperation(String spaceGuid, String operationId, String embed) {
apiUsageLogger.logOperationsReadCall(spaceGuid, Constants.ApiEndpointsNames.GET_OPERATION, operationId, httpServletRequest);
operationsApiServiceAuditLog.logGetOperation(SecurityContextUtil.getUsername(), spaceGuid, operationId, embed);
Operation operation = getOperationByOperationGuidAndSpaceGuid(operationId, spaceGuid);
if (!operation.getSpaceId()
Expand Down Expand Up @@ -228,7 +213,6 @@ private List<Operation> filterByQueryParameters(Integer lastRequestedOperationsC

@Override
public ResponseEntity<List<String>> getOperationActions(String spaceGuid, String operationId) {
apiUsageLogger.logOperationsReadCall(spaceGuid, Constants.ApiEndpointsNames.GET_OPERATION_ACTIONS, operationId, httpServletRequest);
operationsApiServiceAuditLog.logGetOperationActions(spaceGuid, SecurityContextUtil.getUsername(), operationId);
Operation operation = getOperationByOperationGuidAndSpaceGuid(operationId, spaceGuid);
return ResponseEntity.ok()
Expand Down Expand Up @@ -273,7 +257,7 @@ private Operation addServiceParameters(Operation operation, String spaceGuid, St

String processDefinitionKey = operationsHelper.getProcessDefinitionKey(operation);

parameters.put(VARIABLE_NAME_SERVICE_ID, processDefinitionKey);
parameters.put(Constants.VARIABLE_NAME_SERVICE_ID, processDefinitionKey);
parameters.put(Variables.USER.getName(), user);
parameters.put(Variables.USER_GUID.getName(), userGuid);
parameters.put(Variables.SPACE_NAME.getName(), space.getName());
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import org.cloudfoundry.multiapps.controller.persistence.services.AsyncUploadJobService;
import org.cloudfoundry.multiapps.controller.persistence.services.FileService;
import org.cloudfoundry.multiapps.controller.persistence.services.FileStorageException;
import org.cloudfoundry.multiapps.controller.web.monitoring.ApiUsageLogger;
import org.cloudfoundry.multiapps.controller.web.upload.AsyncUploadJobOrchestrator;
import org.cloudfoundry.multiapps.controller.web.upload.exception.RejectedAsyncUploadJobException;
import org.junit.jupiter.api.AfterEach;
Expand Down Expand Up @@ -77,8 +76,6 @@ class FilesApiServiceImplTest {
private final FilesApiServiceImpl testedClass = new FilesApiServiceImpl();
@Mock
private FilesApiServiceAuditLog filesApiServiceAuditLog;
@Mock
private ApiUsageLogger apiUsageLogger;
@Mock(name = "fileStorageThreadPool")
private ExecutorService fileStorageThreadPool;
@Mock
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
import org.cloudfoundry.multiapps.controller.process.metadata.ProcessTypeToOperationMetadataMapper;
import org.cloudfoundry.multiapps.controller.process.util.OperationsHelper;
import org.cloudfoundry.multiapps.controller.process.variables.Variables;
import org.cloudfoundry.multiapps.controller.web.monitoring.ApiUsageLogger;
import org.flowable.engine.runtime.ProcessInstance;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -86,8 +85,6 @@ class OperationsApiServiceImplTest {
private ProcessAction processAction;
@Mock
private OperationsApiServiceAuditLog operationsApiServiceAuditLog;
@Mock
private ApiUsageLogger apiUsageLogger;

@InjectMocks
private OperationsApiServiceImpl operationsApiService = new OperationsApiServiceImpl();
Expand Down
Loading