Search in sources :

Example 1 with SecretProxy

use of com.sequenceiq.cloudbreak.service.secret.domain.SecretProxy in project cloudbreak by hortonworks.

the class RecursiveSecretAspectService method proceedSave.

public Object proceedSave(ProceedingJoinPoint proceedingJoinPoint) {
    Queue<Object> entities = convertFirstArgToQueue(proceedingJoinPoint);
    Object entity;
    while ((entity = entities.poll()) != null) {
        try {
            for (Field field : entity.getClass().getDeclaredFields()) {
                if (field.isAnnotationPresent(SecretValue.class)) {
                    LOGGER.info("Found SecretValue annotation on {} in entity of type {}", field, entity.getClass());
                    field.setAccessible(true);
                    Object fieldValue = field.get(entity);
                    if (fieldValue instanceof Secret) {
                        Secret value = (Secret) field.get(entity);
                        if (value != null && value.getRaw() != null && value.getSecret() == null) {
                            String path = String.format("%s/%s/%s-%s", entity.getClass().getSimpleName().toLowerCase(), field.getName().toLowerCase(), UUID.randomUUID().toString(), Long.toHexString(System.currentTimeMillis()));
                            String secret = secretService.put(path, value.getRaw());
                            LOGGER.info("Field: '{}' is saved at path: {}", field.getName(), path);
                            field.set(entity, new SecretProxy(secretService, secret));
                        }
                    } else {
                        entities.add(fieldValue);
                    }
                }
            }
        } catch (IllegalArgumentException e) {
            LOGGER.error("Given entity isn't instance of TenantAwareResource. Secret is not saved!", e);
            throw new SecretOperationException(e);
        } catch (Exception e) {
            LOGGER.warn("Looks like something went wrong with Secret store. Secret is not saved!", e);
            throw new SecretOperationException(e);
        }
    }
    Object proceed;
    try {
        proceed = proceedingJoinPoint.proceed();
    } catch (RuntimeException re) {
        LOGGER.warn("Failed to invoke repository save", re);
        throw re;
    } catch (Throwable throwable) {
        LOGGER.error("Failed to invoke repository save", throwable);
        throw new SecretOperationException(throwable);
    }
    return proceed;
}
Also used : Secret(com.sequenceiq.cloudbreak.service.secret.domain.Secret) Field(java.lang.reflect.Field) SecretOperationException(com.sequenceiq.cloudbreak.service.secret.SecretOperationException) SecretProxy(com.sequenceiq.cloudbreak.service.secret.domain.SecretProxy) SecretOperationException(com.sequenceiq.cloudbreak.service.secret.SecretOperationException)

Example 2 with SecretProxy

use of com.sequenceiq.cloudbreak.service.secret.domain.SecretProxy in project cloudbreak by hortonworks.

the class SecretAspects method proceedSave.

private Object proceedSave(ProceedingJoinPoint proceedingJoinPoint) {
    Collection<Object> entities = convertFirstArgToCollection(proceedingJoinPoint);
    for (Object entity : entities) {
        String tenant = null;
        try {
            for (Field field : entity.getClass().getDeclaredFields()) {
                if (field.isAnnotationPresent(SecretValue.class)) {
                    LOGGER.debug("Found SecretValue annotation on {}", field);
                    field.setAccessible(true);
                    Secret value = (Secret) field.get(entity);
                    if (value != null && value.getRaw() != null && value.getSecret() == null) {
                        tenant = Optional.ofNullable(tenant).orElseGet(() -> findTenant(entity));
                        String path = String.format("%s/%s/%s/%s-%s", tenant, entity.getClass().getSimpleName().toLowerCase(), field.getName().toLowerCase(), UUID.randomUUID().toString(), Long.toHexString(clock.getCurrentTimeMillis()));
                        String secret = secretService.put(path, value.getRaw());
                        LOGGER.debug("Field: '{}' is saved at path: {}", field.getName(), path);
                        field.set(entity, new SecretProxy(secretService, secret));
                    }
                }
            }
        } catch (IllegalArgumentException e) {
            LOGGER.error("Given entity isn't instance of TenantAwareResource or AccountIdAwareResource. Secret is not saved!", e);
            throw new CloudbreakServiceException(e);
        } catch (Exception e) {
            LOGGER.warn("Looks like something went wrong with Secret store. Secret is not saved!", e);
            throw new CloudbreakServiceException(e);
        }
    }
    Object proceed;
    try {
        proceed = proceedingJoinPoint.proceed();
    } catch (RuntimeException re) {
        LOGGER.warn("Failed to invoke repository save", re);
        throw re;
    } catch (Throwable throwable) {
        LOGGER.error("Failed to invoke repository save", throwable);
        throw new CloudbreakServiceException(throwable);
    }
    return proceed;
}
Also used : Secret(com.sequenceiq.cloudbreak.service.secret.domain.Secret) Field(java.lang.reflect.Field) CloudbreakServiceException(com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException) SecretProxy(com.sequenceiq.cloudbreak.service.secret.domain.SecretProxy) CloudbreakServiceException(com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException)

Example 3 with SecretProxy

use of com.sequenceiq.cloudbreak.service.secret.domain.SecretProxy in project cloudbreak by hortonworks.

the class SecretAspectService method proceedSave.

public Object proceedSave(ProceedingJoinPoint proceedingJoinPoint) {
    Collection<Object> entities = convertFirstArgToCollection(proceedingJoinPoint);
    for (Object entity : entities) {
        try {
            for (Field field : entity.getClass().getDeclaredFields()) {
                if (field.isAnnotationPresent(SecretValue.class)) {
                    LOGGER.debug("Found SecretValue annotation on {}", field);
                    field.setAccessible(true);
                    Secret value = (Secret) field.get(entity);
                    if (value != null && value.getRaw() != null && value.getSecret() == null) {
                        String accountId = findAccountId(entity);
                        String path = String.format("%s/%s/%s/%s-%s", accountId, entity.getClass().getSimpleName().toLowerCase(), field.getName().toLowerCase(), UUID.randomUUID(), Long.toHexString(System.currentTimeMillis()));
                        String secret = secretService.put(path, value.getRaw());
                        LOGGER.debug("Field: '{}' is saved at path: {}", field.getName(), path);
                        field.set(entity, new SecretProxy(secretService, secret));
                    }
                }
            }
        } catch (IllegalArgumentException e) {
            LOGGER.error("Given entity isn't instance of {}. Secret is not updated!", AccountIdAwareResource.class.getSimpleName(), e);
            throw new SecretOperationException(e.getMessage());
        } catch (Exception e) {
            LOGGER.warn("Looks like something went wrong with Secret store. Secret is not updated!", e);
            throw new SecretOperationException(e.getMessage());
        }
    }
    Object proceed;
    try {
        proceed = proceedingJoinPoint.proceed();
    } catch (RuntimeException re) {
        LOGGER.warn("Failed to invoke repository save", re);
        throw re;
    } catch (Throwable throwable) {
        LOGGER.error("Failed to invoke repository save", throwable);
        throw new SecretOperationException(throwable);
    }
    return proceed;
}
Also used : Secret(com.sequenceiq.cloudbreak.service.secret.domain.Secret) Field(java.lang.reflect.Field) SecretOperationException(com.sequenceiq.cloudbreak.service.secret.SecretOperationException) SecretProxy(com.sequenceiq.cloudbreak.service.secret.domain.SecretProxy) SecretOperationException(com.sequenceiq.cloudbreak.service.secret.SecretOperationException)

Aggregations

Secret (com.sequenceiq.cloudbreak.service.secret.domain.Secret)3 SecretProxy (com.sequenceiq.cloudbreak.service.secret.domain.SecretProxy)3 Field (java.lang.reflect.Field)3 SecretOperationException (com.sequenceiq.cloudbreak.service.secret.SecretOperationException)2 CloudbreakServiceException (com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException)1