All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.infusers.core.secrets.AppConfig Maven / Gradle / Ivy

There is a newer version: 2025.03.0001
Show newest version
package com.infusers.core.secrets;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException;

import com.google.gson.Gson;
import com.infusers.core.logger.ILogger;
import com.infusers.core.secrets.dto.DBSecrets;

@Configuration
public class AppConfig {
	
	@Value("${spring.secretsmanager.db.details}")
	String secretNameDB;

	@Value("${spring.aws.secretsmanager.region}")
	String region;
	
	@Value("${spring.datasource.url}")
	String url;
	
	@Value("${spring.datasource.username}")
	String userName;
	
	@Value("${spring.datasource.password}")
	String password;
	
	private ILogger log = new ILogger(AppConfig.class);

	@Autowired
	private SecretManager secretManager;

	public String getSecretValue(String region, String secretName) {
	    return secretManager.getSecret(region, secretName);
	}
	
	
    @Autowired
    private ConfigurableEnvironment configEnvironment;	
    
	/*@Bean
	public SecretsLoader secretsLoader() {
		return new SecretsLoader(secretManager, configEnvironment);
	}*/
	
	@Bean
	public DataSource dataSource() {
		
        log.warnWithSeparator("AppConfig.dataSource() isCloudEnvironment() = {}", this.secretManager.isCloudEnvironment());

	    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();		
		if(this.secretManager.isCloudEnvironment()) {
			new SecretsLoader(secretManager, configEnvironment);
			
			DBSecrets secrets = getDBSecrets();
			
			if(secrets!=null) {
				dataSourceBuilder
						.url("jdbc:" + secrets.getEngine() + "://" + secrets.getHost() + ":" + secrets.getPort() + "/"+secrets.getDbname())
						.username(secrets.getUsername()).password(secrets.getPassword()).build();			
			}
			else {
				log.errorWithSeparator("AppConfig.dataSource() --> It is cloud environment, but secrets are NOT available. Something is NOT right here, needs attention!!");	
			}
		}
		else {
			log.warnWithSeparator("AppConfig.dataSource() Not a cloud environment, falling back to Inmemory DB.");
			
			dataSourceBuilder
					.url(url)
					.username(userName).password(password).build();			
		}
		
	    try {
	        return dataSourceBuilder.build();
	    } 
	    catch (DataSourceLookupFailureException e) {
			log.errorWithSeparator("AppConfig.dataSource() --> Exception while creating DB connection. Something is NOT right here, needs attention!!"+e.getMessage());	
			
	        throw new RuntimeException("Failed to create DataSource", e);
	    }		
	}
	
	private DBSecrets getDBSecrets() {
		String secretsStr = secretManager.getSecret(region, secretNameDB);
		Gson gson = new Gson();
				
		return gson.fromJson(secretsStr, DBSecrets.class);
	}	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy