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;
}
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;
}
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;
}
Aggregations