package com.sequenceiq.cloudbreak.service; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.springframework.stereotype.Service; import com.google.common.io.BaseEncoding; import com.sequenceiq.cloudbreak.client.SaltClientConfig; import com.sequenceiq.cloudbreak.core.CloudbreakSecuritySetupException; import com.sequenceiq.cloudbreak.domain.InstanceMetaData; import com.sequenceiq.cloudbreak.domain.SecurityConfig; import com.sequenceiq.cloudbreak.domain.Stack; import com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig; @Service public class GatewayConfigService { @Inject private TlsSecurityService tlsSecurityService; public List<GatewayConfig> getAllGatewayConfigs(Stack stack) throws CloudbreakSecuritySetupException { List<GatewayConfig> result = new ArrayList<>(); for (InstanceMetaData instanceMetaData : stack.getGatewayInstanceMetadata()) { result.add(getGatewayConfig(stack, instanceMetaData, stack.getCluster().getGateway().getEnableGateway())); } return result; } public GatewayConfig getPrimaryGatewayConfig(Stack stack) throws CloudbreakSecuritySetupException { InstanceMetaData gatewayInstance = stack.getPrimaryGatewayInstance(); return getGatewayConfig(stack, gatewayInstance, stack.getCluster().getGateway().getEnableGateway()); } public GatewayConfig getGatewayConfig(Stack stack, InstanceMetaData gatewayInstance, Boolean knoxGatewayEnabled) throws CloudbreakSecuritySetupException { return tlsSecurityService.buildGatewayConfig(stack.getId(), gatewayInstance, stack.getGatewayPort(), getSaltClientConfig(stack), knoxGatewayEnabled); } public String getPrimaryGatewayIp(Stack stack) { InstanceMetaData gatewayInstance = stack.getPrimaryGatewayInstance(); return getGatewayIp(stack, gatewayInstance); } public String getGatewayIp(Stack stack, InstanceMetaData gatewayInstance) { String gatewayIP = gatewayInstance.getPublicIpWrapper(); if (stack.getSecurityConfig().usePrivateIpToTls()) { gatewayIP = gatewayInstance.getPrivateIp(); } return gatewayIP; } private SaltClientConfig getSaltClientConfig(Stack stack) { SecurityConfig securityConfig = stack.getSecurityConfig(); return new SaltClientConfig(securityConfig.getSaltPassword(), securityConfig.getSaltBootPassword(), new String(BaseEncoding.base64().decode(securityConfig.getCloudbreakSshPrivateKey()))); } }