mirror of
				https://github.com/InsanusMokrassar/TelegramBotAPI-bot_template.git
				synced 2025-11-03 21:50:02 +00:00 
			
		
		
		
	Compare commits
	
		
			60 Commits
		
	
	
		
			faa77ef5ac
			...
			renovate/m
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					33c780900a | ||
| 56c327cd97 | |||
| 
						 | 
					a767563a9a | ||
| c997084d86 | |||
| cef55f412a | |||
| 
						 | 
					0e4c009c09 | ||
| 
						 | 
					6d997e4fe0 | ||
| c91fff9a97 | |||
| 
						 | 
					13b52ba699 | ||
| 36763aac7c | |||
| 
						 | 
					84e5dce2f4 | ||
| 235dbabe21 | |||
| 1fa3d1d289 | |||
| 4b2c9863e1 | |||
| a35790afb0 | |||
| 
						 | 
					413f732c43 | ||
| fefc185605 | |||
| b3d54ac79a | |||
| 
						 | 
					15b0d8fff7 | ||
| 
						 | 
					9266bc68dd | ||
| a596620ea5 | |||
| 
						 | 
					3824cf2a8b | ||
| 6e4f31ad22 | |||
| 
						 | 
					f176a18308 | ||
| 1a0fd756e6 | |||
| 
						 | 
					3ae0c9e21e | ||
| e24941d1b9 | |||
| 26d8d123f8 | |||
| 
						 | 
					0f633ef7e9 | ||
| 
						 | 
					ce441d36c1 | ||
| c2d44b87db | |||
| 
						 | 
					3843bafb33 | ||
| e07c673ba0 | |||
| a4c50d6f54 | |||
| 83fe9adaf0 | |||
| 82fbd7a471 | |||
| c4f214758d | |||
| 22562426e7 | |||
| ee1bb997ab | |||
| 3c452d2417 | |||
| d08b371e26 | |||
| f8b5a6c139 | |||
| fc921b530e | |||
| 550ae4da60 | |||
| 8306b79953 | |||
| 9d08354e65 | |||
| d16dca314a | |||
| e648090336 | |||
| 8354866654 | |||
| b0a11c3bd6 | |||
| 50442ddcb8 | |||
| 2f981eb68b | |||
| c26832f7a9 | |||
| 819c2fdb0d | |||
| ebab694ac3 | |||
| d82b62a069 | |||
| 098fed3b81 | |||
| bc3662da25 | |||
| 2da218c805 | |||
| c5638743af | 
							
								
								
									
										4
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							@@ -8,9 +8,9 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v2
 | 
					      - uses: actions/checkout@v2
 | 
				
			||||||
      - name: Set up JDK 11
 | 
					      - name: Set up JDK 17
 | 
				
			||||||
        uses: actions/setup-java@v1
 | 
					        uses: actions/setup-java@v1
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          java-version: 11
 | 
					          java-version: 17
 | 
				
			||||||
      - name: Build with Gradle
 | 
					      - name: Build with Gradle
 | 
				
			||||||
        run: ./gradlew build
 | 
					        run: ./gradlew build
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,5 @@
 | 
				
			|||||||
.idea
 | 
					.idea
 | 
				
			||||||
 | 
					.kotlin
 | 
				
			||||||
out/*
 | 
					out/*
 | 
				
			||||||
*.iml
 | 
					*.iml
 | 
				
			||||||
target
 | 
					target
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										50
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								README.md
									
									
									
									
									
								
							@@ -22,11 +22,59 @@ there is [Makefile](Makefile) and you may use something like `make buildAndStart
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
It is important to replace `"TOKEN"` in [Dockerfile](Dockerfile) or remove and add some config as a volume.
 | 
					It is important to replace `"TOKEN"` in [Dockerfile](Dockerfile) or remove and add some config as a volume.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					But you may set up several things for your bot. You should start with adding client object:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```json
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "token": "your bot token",
 | 
				
			||||||
 | 
					  "client": {
 | 
				
			||||||
 | 
					    "connectionTimeoutMillis": 10000,
 | 
				
			||||||
 | 
					    "requestTimeoutMillis": 10000,
 | 
				
			||||||
 | 
					    "responseTimeoutMillis": 10000,
 | 
				
			||||||
 | 
					    "proxy": {
 | 
				
			||||||
 | 
					      "hostname": "127.0.0.1",
 | 
				
			||||||
 | 
					      "port": 1080,
 | 
				
			||||||
 | 
					      "type": "socks",
 | 
				
			||||||
 | 
					      "username": "username",
 | 
				
			||||||
 | 
					      "password": "password"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__Required__ fields:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `token`
 | 
				
			||||||
 | 
					* `client/proxy/hostname` (if you pass `client` and `proxy` fields) - hostname of proxy server
 | 
				
			||||||
 | 
					* `client/proxy/password` - password for authentication on proxy server, required if `client/proxy/type` is `socks` and `client/proxy/username` passed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__Optional__ fields:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `client` - object with client configs
 | 
				
			||||||
 | 
					* `client/connectionTimeoutMillis` - timeout for connection to the server
 | 
				
			||||||
 | 
					* `client/requestTimeoutMillis` - timeout for request complete (when request taken on server)
 | 
				
			||||||
 | 
					* `client/responseTimeoutMillis` - timeout for getting a response after request taken on server
 | 
				
			||||||
 | 
					* `client/proxy` - proxy settings
 | 
				
			||||||
 | 
					* `client/proxy/port` - port of proxy server
 | 
				
			||||||
 | 
					* `client/proxy/type` - type of proxy server (can be `socks` or `http`)
 | 
				
			||||||
 | 
					* `client/proxy/username` - username for authentication on proxy server
 | 
				
			||||||
 | 
					* `client/proxy/password` - password for authentication on proxy server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Basically, your config looks like an object with token:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```json
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "token": "your bot token"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## What next?
 | 
					## What next?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There are several ways to continue:
 | 
					There are several ways to continue:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* [Tutorials](https://bookstack.inmo.dev/books/telegrambotapi)
 | 
					* [Tutorials](https://docs.inmo.dev/tgbotapi/index.html)
 | 
				
			||||||
* [Github readme](https://github.com/InsanusMokrassar/TelegramBotAPI)
 | 
					* [Github readme](https://github.com/InsanusMokrassar/TelegramBotAPI)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In other words, this template (and [TelegramBotAPI library](https://github.com/InsanusMokrassar/TelegramBotAPI)) does
 | 
					In other words, this template (and [TelegramBotAPI library](https://github.com/InsanusMokrassar/TelegramBotAPI)) does
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@ dependencies {
 | 
				
			|||||||
    implementation libs.kotlin
 | 
					    implementation libs.kotlin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    implementation libs.tgbotapi
 | 
					    implementation libs.tgbotapi
 | 
				
			||||||
 | 
					    implementation libs.ktor.client.okhttp
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
application {
 | 
					application {
 | 
				
			||||||
@@ -31,6 +32,6 @@ application {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
java {
 | 
					java {
 | 
				
			||||||
    sourceCompatibility = JavaVersion.VERSION_11
 | 
					    sourceCompatibility = JavaVersion.VERSION_17
 | 
				
			||||||
    targetCompatibility = JavaVersion.VERSION_11
 | 
					    targetCompatibility = JavaVersion.VERSION_17
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,15 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "token": "your bot token"
 | 
					  "token": "your bot token",
 | 
				
			||||||
 | 
					  "client": {
 | 
				
			||||||
 | 
					    "connectionTimeoutMillis": 10000,
 | 
				
			||||||
 | 
					    "requestTimeoutMillis": 10000,
 | 
				
			||||||
 | 
					    "responseTimeoutMillis": 10000,
 | 
				
			||||||
 | 
					    "proxy": {
 | 
				
			||||||
 | 
					      "hostname": "127.0.0.1",
 | 
				
			||||||
 | 
					      "port": 1080,
 | 
				
			||||||
 | 
					      "type": "socks",
 | 
				
			||||||
 | 
					      "username": "username",
 | 
				
			||||||
 | 
					      "password": "password"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,16 @@
 | 
				
			|||||||
[versions]
 | 
					[versions]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
kotlin = "1.7.22"
 | 
					kotlin = "2.1.20"
 | 
				
			||||||
tgbotapi = "4.2.2"
 | 
					tgbotapi = "30.0.0"
 | 
				
			||||||
 | 
					ktor = "3.1.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[libraries]
 | 
					[libraries]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
 | 
					kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
 | 
				
			||||||
tgbotapi = { module = "dev.inmo:tgbotapi", version.ref = "tgbotapi" }
 | 
					tgbotapi = { module = "dev.inmo:tgbotapi", version.ref = "tgbotapi" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Libs for classpath
 | 
					# Libs for classpath
 | 
				
			||||||
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
 | 
					kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
 | 
				
			||||||
kotlin-serialization-plugin = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" }
 | 
					kotlin-serialization-plugin = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
distributionBase=GRADLE_USER_HOME
 | 
					distributionBase=GRADLE_USER_HOME
 | 
				
			||||||
distributionPath=wrapper/dists
 | 
					distributionPath=wrapper/dists
 | 
				
			||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.0-bin.zip
 | 
					distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
 | 
				
			||||||
zipStoreBase=GRADLE_USER_HOME
 | 
					zipStoreBase=GRADLE_USER_HOME
 | 
				
			||||||
zipStorePath=wrapper/dists
 | 
					zipStorePath=wrapper/dists
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								renovate.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								renovate.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
 | 
				
			||||||
 | 
					  "extends": [
 | 
				
			||||||
 | 
					    "config:recommended"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,3 +1 @@
 | 
				
			|||||||
rootProject.name = 'telegram_bot'
 | 
					rootProject.name = 'telegram_bot'
 | 
				
			||||||
 | 
					 | 
				
			||||||
enableFeaturePreview("VERSION_CATALOGS")
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,11 @@
 | 
				
			|||||||
 | 
					import config.Config
 | 
				
			||||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
 | 
					import dev.inmo.tgbotapi.bot.ktor.telegramBot
 | 
				
			||||||
import dev.inmo.tgbotapi.extensions.api.bot.getMe
 | 
					import dev.inmo.tgbotapi.extensions.api.bot.getMe
 | 
				
			||||||
import dev.inmo.tgbotapi.extensions.api.send.reply
 | 
					import dev.inmo.tgbotapi.extensions.api.send.reply
 | 
				
			||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviourWithLongPolling
 | 
					import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviourWithLongPolling
 | 
				
			||||||
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
 | 
					import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
 | 
				
			||||||
 | 
					import io.ktor.client.*
 | 
				
			||||||
 | 
					import io.ktor.client.engine.okhttp.*
 | 
				
			||||||
import java.io.File
 | 
					import java.io.File
 | 
				
			||||||
import kotlinx.coroutines.*
 | 
					import kotlinx.coroutines.*
 | 
				
			||||||
import kotlinx.serialization.json.Json
 | 
					import kotlinx.serialization.json.Json
 | 
				
			||||||
@@ -16,7 +19,14 @@ suspend fun main(args: Array<String>) {
 | 
				
			|||||||
    // decode config
 | 
					    // decode config
 | 
				
			||||||
    val config: Config = json.decodeFromString(Config.serializer(), File(args.first()).readText())
 | 
					    val config: Config = json.decodeFromString(Config.serializer(), File(args.first()).readText())
 | 
				
			||||||
    // that is your bot
 | 
					    // that is your bot
 | 
				
			||||||
    val bot = telegramBot(config.token)
 | 
					    val bot = telegramBot(config.token) {
 | 
				
			||||||
 | 
					        client = HttpClient(OkHttp) {
 | 
				
			||||||
 | 
					            config.client ?.apply {
 | 
				
			||||||
 | 
					                // setting up telegram bot client
 | 
				
			||||||
 | 
					                setupConfig()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // that is kotlin coroutine scope which will be used in requests and parallel works under the hood
 | 
					    // that is kotlin coroutine scope which will be used in requests and parallel works under the hood
 | 
				
			||||||
    val scope = CoroutineScope(Dispatchers.Default)
 | 
					    val scope = CoroutineScope(Dispatchers.Default)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
import kotlinx.serialization.Serializable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@Serializable
 | 
					 | 
				
			||||||
data class Config(
 | 
					 | 
				
			||||||
    val token: String
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
							
								
								
									
										9
									
								
								src/main/kotlin/config/Config.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/main/kotlin/config/Config.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					package config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import kotlinx.serialization.Serializable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Serializable
 | 
				
			||||||
 | 
					data class Config(
 | 
				
			||||||
 | 
					    val token: String,
 | 
				
			||||||
 | 
					    val client: HttpClientConfig? = null
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										90
									
								
								src/main/kotlin/config/HttpClientConfig.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								src/main/kotlin/config/HttpClientConfig.kt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					package config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import dev.inmo.tgbotapi.types.MilliSeconds
 | 
				
			||||||
 | 
					import io.ktor.client.HttpClientConfig
 | 
				
			||||||
 | 
					import io.ktor.client.engine.okhttp.*
 | 
				
			||||||
 | 
					import io.ktor.client.plugins.*
 | 
				
			||||||
 | 
					import io.ktor.client.request.*
 | 
				
			||||||
 | 
					import io.ktor.http.*
 | 
				
			||||||
 | 
					import kotlinx.serialization.Serializable
 | 
				
			||||||
 | 
					import java.net.*
 | 
				
			||||||
 | 
					import java.util.*
 | 
				
			||||||
 | 
					import java.util.concurrent.TimeUnit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Serializable
 | 
				
			||||||
 | 
					data class HttpClientConfig(
 | 
				
			||||||
 | 
					    val connectionTimeoutMillis: MilliSeconds? = null,
 | 
				
			||||||
 | 
					    val requestTimeoutMillis: MilliSeconds? = null,
 | 
				
			||||||
 | 
					    val responseTimeoutMillis: MilliSeconds? = null,
 | 
				
			||||||
 | 
					    val proxy: ProxyConfig? = null
 | 
				
			||||||
 | 
					) {
 | 
				
			||||||
 | 
					    @Serializable
 | 
				
			||||||
 | 
					    data class ProxyConfig(
 | 
				
			||||||
 | 
					        val hostname: String,
 | 
				
			||||||
 | 
					        val type: ProxyType = ProxyType.socks,
 | 
				
			||||||
 | 
					        val port: Int = type.defaultPort,
 | 
				
			||||||
 | 
					        val username: String? = null,
 | 
				
			||||||
 | 
					        val password: String? = null
 | 
				
			||||||
 | 
					    ) {
 | 
				
			||||||
 | 
					        @Serializable
 | 
				
			||||||
 | 
					        enum class ProxyType(val defaultPort: Int, val proxyType: Proxy.Type) {
 | 
				
			||||||
 | 
					            socks(1080, Proxy.Type.SOCKS),
 | 
				
			||||||
 | 
					            http(3128, Proxy.Type.HTTP),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        val socketAddress
 | 
				
			||||||
 | 
					            get() = InetSocketAddress(hostname, port)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fun HttpClientConfig<OkHttpConfig>.setupConfig() {
 | 
				
			||||||
 | 
					        // setting up telegram bot client
 | 
				
			||||||
 | 
					        engine {
 | 
				
			||||||
 | 
					            // Start setup bot client engine configuration
 | 
				
			||||||
 | 
					            config {
 | 
				
			||||||
 | 
					                // setting up connection timeout millis
 | 
				
			||||||
 | 
					                connectionTimeoutMillis ?.let { connectTimeout(it, TimeUnit.MILLISECONDS) }
 | 
				
			||||||
 | 
					                // setting up write timeout millis
 | 
				
			||||||
 | 
					                requestTimeoutMillis ?.let { writeTimeout(it, TimeUnit.MILLISECONDS) }
 | 
				
			||||||
 | 
					                // setting up read timeout millis
 | 
				
			||||||
 | 
					                responseTimeoutMillis ?.let { readTimeout(it, TimeUnit.MILLISECONDS) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Start setup bot client engine proxy
 | 
				
			||||||
 | 
					                this@HttpClientConfig.proxy ?.let { proxyConfig ->
 | 
				
			||||||
 | 
					                    proxy(
 | 
				
			||||||
 | 
					                        Proxy(
 | 
				
			||||||
 | 
					                            proxyConfig.type.proxyType,
 | 
				
			||||||
 | 
					                            proxyConfig.socketAddress
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    proxyConfig.username ?.let { username ->
 | 
				
			||||||
 | 
					                        when (proxyConfig.type) {
 | 
				
			||||||
 | 
					                            config.HttpClientConfig.ProxyConfig.ProxyType.socks -> {
 | 
				
			||||||
 | 
					                                val passwordAuthentication = PasswordAuthentication(
 | 
				
			||||||
 | 
					                                    username,
 | 
				
			||||||
 | 
					                                    proxyConfig.password ?.toCharArray() ?: error("For Socks proxy you should use both username and password or do not use authentication at all")
 | 
				
			||||||
 | 
					                                )
 | 
				
			||||||
 | 
					                                Authenticator.setDefault(object : Authenticator() {
 | 
				
			||||||
 | 
					                                    override fun getPasswordAuthentication(): PasswordAuthentication? {
 | 
				
			||||||
 | 
					                                        return if (requestingHost.lowercase() == proxyConfig.hostname.lowercase()) {
 | 
				
			||||||
 | 
					                                            passwordAuthentication
 | 
				
			||||||
 | 
					                                        } else {
 | 
				
			||||||
 | 
					                                            null
 | 
				
			||||||
 | 
					                                        }
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                })
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            config.HttpClientConfig.ProxyConfig.ProxyType.http -> {
 | 
				
			||||||
 | 
					                                val passwordSuffix = proxyConfig.password ?.let { ":$it" }
 | 
				
			||||||
 | 
					                                val credentials = Base64.getEncoder().encodeToString("${username}${passwordSuffix}".toByteArray())
 | 
				
			||||||
 | 
					                                this@setupConfig.defaultRequest {
 | 
				
			||||||
 | 
					                                    header(HttpHeaders.ProxyAuthorization, "Basic $credentials")
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user