mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-25 11:38:45 +00:00
add private key config for webhook and opportunity to work with ssl directly in bot
This commit is contained in:
parent
336e76450f
commit
49fb020678
@ -0,0 +1,25 @@
|
|||||||
|
package com.github.insanusmokrassar.TelegramBotAPI.utils.extensions
|
||||||
|
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.Transient
|
||||||
|
import java.io.FileInputStream
|
||||||
|
import java.security.KeyStore
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class WebhookPrivateKeyConfig(
|
||||||
|
@SerialName("keyStore")
|
||||||
|
private val keyStorePath: String,
|
||||||
|
private val keyStorePassword: String,
|
||||||
|
val aliasName: String,
|
||||||
|
private val aliasPassword: String
|
||||||
|
) {
|
||||||
|
@Transient
|
||||||
|
val keyStore = KeyStore.getInstance("JKS").apply {
|
||||||
|
load(FileInputStream(keyStorePath), keyStorePassword())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun keyStorePassword(): CharArray = keyStorePassword.toCharArray()
|
||||||
|
|
||||||
|
fun aliasPassword(): CharArray = aliasPassword.toCharArray()
|
||||||
|
}
|
@ -17,9 +17,13 @@ import io.ktor.server.netty.Netty
|
|||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.Channel
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
import java.io.FileInputStream
|
||||||
|
import java.security.KeyStore
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reverse proxy webhook.
|
* Reverse proxy webhook.
|
||||||
*
|
*
|
||||||
@ -33,6 +37,7 @@ suspend fun RequestsExecutor.setWebhook(
|
|||||||
url: String,
|
url: String,
|
||||||
port: Int,
|
port: Int,
|
||||||
certificate: InputFile? = null,
|
certificate: InputFile? = null,
|
||||||
|
privateKeyConfig: WebhookPrivateKeyConfig? = null,
|
||||||
scope: CoroutineScope = CoroutineScope(Executors.newFixedThreadPool(4).asCoroutineDispatcher()),
|
scope: CoroutineScope = CoroutineScope(Executors.newFixedThreadPool(4).asCoroutineDispatcher()),
|
||||||
allowedUpdates: List<String>? = null,
|
allowedUpdates: List<String>? = null,
|
||||||
maxAllowedConnections: Int? = null,
|
maxAllowedConnections: Int? = null,
|
||||||
@ -62,6 +67,7 @@ suspend fun RequestsExecutor.setWebhook(
|
|||||||
scope = scope
|
scope = scope
|
||||||
)
|
)
|
||||||
val env = applicationEngineEnvironment {
|
val env = applicationEngineEnvironment {
|
||||||
|
|
||||||
module {
|
module {
|
||||||
fun Application.main() {
|
fun Application.main() {
|
||||||
routing {
|
routing {
|
||||||
@ -78,10 +84,21 @@ suspend fun RequestsExecutor.setWebhook(
|
|||||||
}
|
}
|
||||||
main()
|
main()
|
||||||
}
|
}
|
||||||
connector {
|
privateKeyConfig ?.let {
|
||||||
|
sslConnector(
|
||||||
|
privateKeyConfig.keyStore,
|
||||||
|
privateKeyConfig.aliasName,
|
||||||
|
privateKeyConfig::keyStorePassword,
|
||||||
|
privateKeyConfig::aliasPassword
|
||||||
|
) {
|
||||||
host = "0.0.0.0"
|
host = "0.0.0.0"
|
||||||
this.port = port
|
this.port = port
|
||||||
}
|
}
|
||||||
|
} ?: connector {
|
||||||
|
host = "localhost"
|
||||||
|
this.port = port
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
val engine = embeddedServer(engineFactory, env)
|
val engine = embeddedServer(engineFactory, env)
|
||||||
|
|
||||||
@ -120,6 +137,7 @@ suspend fun RequestsExecutor.setWebhook(
|
|||||||
port: Int,
|
port: Int,
|
||||||
filter: UpdatesFilter,
|
filter: UpdatesFilter,
|
||||||
certificate: InputFile? = null,
|
certificate: InputFile? = null,
|
||||||
|
privateKeyConfig: WebhookPrivateKeyConfig? = null,
|
||||||
scope: CoroutineScope = CoroutineScope(Executors.newFixedThreadPool(4).asCoroutineDispatcher()),
|
scope: CoroutineScope = CoroutineScope(Executors.newFixedThreadPool(4).asCoroutineDispatcher()),
|
||||||
maxAllowedConnections: Int? = null,
|
maxAllowedConnections: Int? = null,
|
||||||
engineFactory: ApplicationEngineFactory<*, *> = Netty
|
engineFactory: ApplicationEngineFactory<*, *> = Netty
|
||||||
@ -127,6 +145,7 @@ suspend fun RequestsExecutor.setWebhook(
|
|||||||
url,
|
url,
|
||||||
port,
|
port,
|
||||||
certificate,
|
certificate,
|
||||||
|
privateKeyConfig,
|
||||||
scope,
|
scope,
|
||||||
filter.allowedUpdates,
|
filter.allowedUpdates,
|
||||||
maxAllowedConnections,
|
maxAllowedConnections,
|
||||||
|
Loading…
Reference in New Issue
Block a user