From 1dc3ce2fb5b57deba17db5d4c1706443561c70c7 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 25 Jan 2021 10:43:51 +0600 Subject: [PATCH] add passport in API --- CHANGELOG.md | 2 + .../utils/passport/DecryptionContext.kt | 3 +- .../api/passport/SetPassportDataErrors.kt | 45 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/passport/SetPassportDataErrors.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bbbc0ccb7..d791fd8359 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ * `onVisualMediaGroup` now is just an alternative to `onVisualGallery` * `command` and `onCommand` expectations has been added for commands `String` variant * New extensions `BehaviourContext#oneOf`, `BehaviourContext#parallel` and `Deferred#withAction` +* `API`: + * **PASSPORT** New extensions `TelegramBot#setPassportDataErrors` ## 0.31.0 diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/passport/DecryptionContext.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/passport/DecryptionContext.kt index 425970e31e..83914a9144 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/passport/DecryptionContext.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/passport/DecryptionContext.kt @@ -3,6 +3,7 @@ package dev.inmo.tgbotapi.utils.passport import dev.inmo.tgbotapi.bot.TelegramBot import dev.inmo.tgbotapi.requests.DownloadFile import dev.inmo.tgbotapi.requests.get.GetFile +import dev.inmo.tgbotapi.types.passport.EncryptedCredentials import dev.inmo.tgbotapi.types.passport.encrypted_data.PassportFile import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithData import dev.inmo.tgbotapi.utils.nonstrictJsonFormat @@ -25,7 +26,7 @@ suspend fun Decryptor.decrypt( ).decrypt() } fun Decryptor.decryptData( - data: WithData + data: EncryptedCredentials ) = nonstrictJsonFormat.decodeFromString( JsonObject.serializer(), data.data.encodeToByteArray().decrypt().decodeToString() diff --git a/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/passport/SetPassportDataErrors.kt b/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/passport/SetPassportDataErrors.kt new file mode 100644 index 0000000000..341f786dd8 --- /dev/null +++ b/tgbotapi.extensions.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/passport/SetPassportDataErrors.kt @@ -0,0 +1,45 @@ +package dev.inmo.tgbotapi.extensions.api.passport + +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.requests.SetPassportDataErrors +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.message.PassportMessage +import dev.inmo.tgbotapi.types.passport.PassportData +import dev.inmo.tgbotapi.types.passport.PassportElementError +import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.EncryptedPassportElement +import dev.inmo.tgbotapi.utils.passport.Decryptor + +suspend fun TelegramBot.setPassportDataErrors( + userId: UserId, + errors: List +) = execute(SetPassportDataErrors(userId, errors)) +suspend fun TelegramBot.setPassportDataErrors( + user: User, + errors: List +) = setPassportDataErrors(user.id, errors) + +suspend fun TelegramBot.setPassportDataErrors( + userId: UserId, + passportData: PassportData, + decryptor: Decryptor, + mapper: suspend Decryptor.(EncryptedPassportElement) -> PassportElementError +): Boolean = setPassportDataErrors( + userId, + passportData.data.map { decryptor.mapper(it) }.also { + if (it.isEmpty()) { + return@setPassportDataErrors false + } + } +) +suspend fun TelegramBot.setPassportDataErrors( + user: User, + passportData: PassportData, + decryptor: Decryptor, + mapper: suspend Decryptor.(EncryptedPassportElement) -> PassportElementError +) = setPassportDataErrors(user.id, passportData, decryptor, mapper) + +suspend fun TelegramBot.setPassportDataErrors( + passportMessage: PassportMessage, + decryptor: Decryptor, + mapper: suspend Decryptor.(EncryptedPassportElement) -> PassportElementError +) = setPassportDataErrors(passportMessage.user, passportMessage.passportData, decryptor, mapper)