package com.sequenceiq.cloudbreak.converter; import static com.sequenceiq.cloudbreak.cloud.model.Platform.platform; import java.util.Arrays; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.api.model.CredentialResponse; import com.sequenceiq.cloudbreak.domain.Credential; import com.sequenceiq.cloudbreak.service.stack.resource.definition.credential.CredentialDefinitionService; import com.sequenceiq.cloudbreak.service.topology.TopologyService; @Component public class CredentialToJsonConverter extends AbstractConversionServiceAwareConverter<Credential, CredentialResponse> { private static final List<String> FIELDS_TO_COVER = Arrays.asList("password", "secretKey", "serviceAccountPrivateKey"); private static final String PLACEHOLDER = "********"; @Inject private CredentialDefinitionService credentialDefinitionService; @Inject private TopologyService topologyService; @Override public CredentialResponse convert(Credential source) { CredentialResponse credentialJson = new CredentialResponse(); credentialJson.setId(source.getId()); credentialJson.setCloudPlatform(source.cloudPlatform()); credentialJson.setName(source.getName()); credentialJson.setPublicInAccount(source.isPublicInAccount()); if (source.getAttributes() != null) { Map<String, Object> parameters = credentialDefinitionService.revertProperties(platform(source.cloudPlatform()), source.getAttributes().getMap()); credentialJson.setParameters(parameters); } credentialJson.setDescription(source.getDescription() == null ? "" : source.getDescription()); credentialJson.setPublicKey(source.getPublicKey()); credentialJson.setLoginUserName(source.getLoginUserName()); if (source.getTopology() != null) { credentialJson.setTopologyId(source.getTopology().getId()); } coverSensitiveData(credentialJson); return credentialJson; } private void coverSensitiveData(CredentialResponse response) { for (String field : FIELDS_TO_COVER) { if (response.getParameters().get(field) != null) { response.getParameters().put(field, PLACEHOLDER); } } } }