Untitled

 avatar
unknown
plain_text
5 months ago
1.9 kB
7
Indexable
@Configuration
class MongoConfig(
    @Value("\${spring.data.mongodb.host:localhost}")
    private val host: String,
    @Value("\${spring.data.mongodb.database:}")
    private val database: String,
    @Value("\${spring.data.mongodb.port:}")
    private val port: Int,
    @Value("\${spring.data.mongodb.username:}")
    private val userName: String,
    @Value("\${spring.data.mongodb.password:}")
    private val password: String
) {

    private val log = logger()

    @Autowired
    private lateinit var env: Environment

    @Bean
    fun mongoClientSettings() = MongoClientSettings.builder().build()

    @Bean
    @Primary
    @Profile(Profiles.DEV, Profiles.STG, Profiles.PRD)
    fun mongoClientSettingsWithSSL(): MongoClientSettings {
        log.info("set ssl for database connection")

        return MongoClientSettings.builder()
            .credential(
                MongoCredential.createCredential(
                    userName,
                    database,
                    encodeUrl(password).toCharArray()
                )
            )
            .retryWrites(false)
            .applyToSslSettings { builder: SslSettings.Builder -> builder.enabled(true) }
            .applyToClusterSettings { builder ->
                builder.hosts(listOf(ServerAddress(host, port)))
            }
            .build()
    }

    private fun encodeUrl(statement: String): String {
        var password = statement
        password = password.trim { it <= ' ' }
        if (password.contains("@") || password.contains(":")) {
            return URLEncoder.encode(password, StandardCharsets.ISO_8859_1)
        }
        return password
    }

    @Bean
    fun mongoPropertiesCustomizer(properties: MongoProperties):
        MongoPropertiesClientSettingsBuilderCustomizer {
        return MongoPropertiesClientSettingsBuilderCustomizer(properties, env)
    }
}
Editor is loading...
Leave a Comment