Untitled

 avatar
unknown
plain_text
6 months ago
1.8 kB
4
Indexable
class MongoConfig(
    @Value("\${spring.data.mongodb.host:localhost}")
    private val host: String,
    @Value("\${spring.data.mongodb.username:}")
    private val userName: String,
    @Value("\${spring.data.mongodb.password:}")
    private val password: String,
    @Value("\${spring.data.mongodb.database:}")
    private val database: String
) : AbstractMongoClientConfiguration() {

    private val log = logger()

    override fun getDatabaseName(): String {
        return database
    }

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

    @Bean
    @Primary
    @Profile(Profiles.DEV, Profiles.STG, Profiles.PRD)
    fun mongoClientSettingsWithSSL(): MongoClientSettings {
        if (Profiles.isActiveProfile("local")) {
            return MongoClientSettings.builder()
                .build()
        }

        log.info("set ssl for database connection")
        return MongoClientSettings.builder()
            .applyToSslSettings { builder: SslSettings.Builder ->
                builder.enabled(
                    true
                )
            }
            .applyConnectionString(
                ConnectionString(
                    "mongodb://$userName:${encodeUrl(password)}@$host/" +
                        "?tls=true&tlsCAFsile=global-bundle.pem&replicaSet=rs0&" +
                        "readPreference=secondaryPreferred"
                )
            )
            .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
    }
}
Editor is loading...
Leave a Comment