mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-12-23 06:35:42 +00:00
complete preview tools for passport
This commit is contained in:
@@ -1,14 +0,0 @@
|
||||
package dev.inmo.tgbotapi.types.passport.credentials
|
||||
|
||||
import dev.inmo.tgbotapi.types.dataHashField
|
||||
import dev.inmo.tgbotapi.types.secretField
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class DataCredentials(
|
||||
@SerialName(dataHashField)
|
||||
val dataHash: String,
|
||||
@SerialName(secretField)
|
||||
val secret: String
|
||||
)
|
||||
@@ -9,7 +9,7 @@ import kotlinx.serialization.Serializable
|
||||
@Serializable
|
||||
data class DecryptedCredentials(
|
||||
@SerialName(secureDataField)
|
||||
val secureData: List<SecureData>,
|
||||
val secureData: SecureData,
|
||||
@SerialName(nonceField)
|
||||
val nonce: String
|
||||
)
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package dev.inmo.tgbotapi.types.passport.credentials
|
||||
|
||||
import dev.inmo.micro_utils.crypto.SourceBytes
|
||||
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
sealed class EndDataCredentials {
|
||||
@Serializable(Base64BytesToFromStringSerializer::class)
|
||||
abstract val hash: SourceBytes
|
||||
@Serializable(Base64BytesToFromStringSerializer::class)
|
||||
abstract val secret: SourceBytes
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class DataCredentials(
|
||||
@SerialName(dataHashField)
|
||||
@Serializable(Base64BytesToFromStringSerializer::class)
|
||||
override val hash: SourceBytes,
|
||||
@SerialName(secretField)
|
||||
@Serializable(Base64BytesToFromStringSerializer::class)
|
||||
override val secret: SourceBytes
|
||||
) : EndDataCredentials()
|
||||
|
||||
@Serializable
|
||||
data class FileCredentials(
|
||||
@SerialName(fileHashField)
|
||||
@Serializable(Base64BytesToFromStringSerializer::class)
|
||||
override val hash: SourceBytes,
|
||||
@SerialName(secretField)
|
||||
@Serializable(Base64BytesToFromStringSerializer::class)
|
||||
override val secret: SourceBytes
|
||||
) : EndDataCredentials()
|
||||
@@ -1,13 +0,0 @@
|
||||
package dev.inmo.tgbotapi.types.passport.credentials
|
||||
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class FileCredentials(
|
||||
@SerialName(fileHashField)
|
||||
val fileHash: String,
|
||||
@SerialName(secretField)
|
||||
val secret: String
|
||||
)
|
||||
@@ -2,6 +2,7 @@ package dev.inmo.tgbotapi.types.passport.decrypted
|
||||
|
||||
import dev.inmo.tgbotapi.types.dataField
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.DataCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.EndDataCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithData
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -10,4 +11,6 @@ import kotlinx.serialization.Serializable
|
||||
data class AddressSecureValue(
|
||||
@SerialName(dataField)
|
||||
override val data: DataCredentials
|
||||
) : SecureValueWithData
|
||||
) : SecureValueWithData {
|
||||
override val credentials: List<EndDataCredentials> = listOf(data)
|
||||
}
|
||||
@@ -1,39 +1,41 @@
|
||||
package dev.inmo.tgbotapi.types.passport.decrypted
|
||||
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.DataCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.FileCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.*
|
||||
import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.*
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
sealed class IdentityWithReverseSideSecureValue : SecureValueIdentity, SecureValueWithData, SecureValueWithTranslations, SecureValueWithReverseSide
|
||||
sealed class IdentityWithReverseSideSecureValue : SecureValueIdentity, SecureValueWithData, SecureValueWithTranslations, SecureValueWithReverseSide {
|
||||
override val credentials: List<EndDataCredentials>
|
||||
get() = listOfNotNull(data, frontSide, reverseSide, selfie) + translation
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class DriverLicenseSecureValue(
|
||||
@SerialName(dataField)
|
||||
override val data: DataCredentials,
|
||||
override val data: DataCredentials? = null,
|
||||
@SerialName(frontSideField)
|
||||
override val frontSide: FileCredentials,
|
||||
override val frontSide: FileCredentials? = null,
|
||||
@SerialName(reverseSideField)
|
||||
override val reverseSide: FileCredentials,
|
||||
override val reverseSide: FileCredentials? = null,
|
||||
@SerialName(selfieField)
|
||||
override val selfie: FileCredentials,
|
||||
override val selfie: FileCredentials? = null,
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>
|
||||
override val translation: List<FileCredentials> = emptyList()
|
||||
) : IdentityWithReverseSideSecureValue()
|
||||
|
||||
@Serializable
|
||||
data class IdentityCardSecureValue(
|
||||
@SerialName(dataField)
|
||||
override val data: DataCredentials,
|
||||
override val data: DataCredentials? = null,
|
||||
@SerialName(frontSideField)
|
||||
override val frontSide: FileCredentials,
|
||||
override val frontSide: FileCredentials? = null,
|
||||
@SerialName(reverseSideField)
|
||||
override val reverseSide: FileCredentials,
|
||||
override val reverseSide: FileCredentials? = null,
|
||||
@SerialName(selfieField)
|
||||
override val selfie: FileCredentials,
|
||||
override val selfie: FileCredentials? = null,
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>
|
||||
override val translation: List<FileCredentials> = emptyList()
|
||||
) : IdentityWithReverseSideSecureValue()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.passport.decrypted
|
||||
|
||||
import dev.inmo.tgbotapi.types.filesField
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.EndDataCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.FileCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithFiles
|
||||
import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithTranslations
|
||||
@@ -9,44 +10,47 @@ import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
sealed class OtherDocumentsSecureValue : SecureValueWithTranslations, SecureValueWithFiles
|
||||
sealed class OtherDocumentsSecureValue : SecureValueWithTranslations, SecureValueWithFiles {
|
||||
override val credentials: List<EndDataCredentials>
|
||||
get() = translation + files
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class UtilityBillSecureValue(
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>,
|
||||
override val translation: List<FileCredentials> = emptyList(),
|
||||
@SerialName(filesField)
|
||||
override val files: List<FileCredentials>
|
||||
override val files: List<FileCredentials> = emptyList()
|
||||
) : OtherDocumentsSecureValue()
|
||||
|
||||
@Serializable
|
||||
data class BankStatementSecureValue(
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>,
|
||||
override val translation: List<FileCredentials> = emptyList(),
|
||||
@SerialName(filesField)
|
||||
override val files: List<FileCredentials>
|
||||
override val files: List<FileCredentials> = emptyList()
|
||||
) : OtherDocumentsSecureValue()
|
||||
|
||||
@Serializable
|
||||
data class RentalAgreementSecureValue(
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>,
|
||||
override val translation: List<FileCredentials> = emptyList(),
|
||||
@SerialName(filesField)
|
||||
override val files: List<FileCredentials>
|
||||
override val files: List<FileCredentials> = emptyList()
|
||||
) : OtherDocumentsSecureValue()
|
||||
|
||||
@Serializable
|
||||
data class PassportRegistrationSecureValue(
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>,
|
||||
override val translation: List<FileCredentials> = emptyList(),
|
||||
@SerialName(filesField)
|
||||
override val files: List<FileCredentials>
|
||||
override val files: List<FileCredentials> = emptyList()
|
||||
) : OtherDocumentsSecureValue()
|
||||
|
||||
@Serializable
|
||||
data class TemporalRegistrationSecureValue(
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>,
|
||||
override val translation: List<FileCredentials> = emptyList(),
|
||||
@SerialName(filesField)
|
||||
override val files: List<FileCredentials>
|
||||
override val files: List<FileCredentials> = emptyList()
|
||||
) : OtherDocumentsSecureValue()
|
||||
|
||||
@@ -1,36 +1,38 @@
|
||||
package dev.inmo.tgbotapi.types.passport.decrypted
|
||||
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.DataCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.FileCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.*
|
||||
import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.*
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
sealed class PassportSecureValue : SecureValueIdentity, SecureValueWithData, SecureValueWithTranslations
|
||||
sealed class PassportSecureValue : SecureValueIdentity, SecureValueWithData, SecureValueWithTranslations {
|
||||
override val credentials: List<EndDataCredentials>
|
||||
get() = listOfNotNull(data, frontSide, selfie) + translation
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class CommonPassportSecureValue(
|
||||
@SerialName(dataField)
|
||||
override val data: DataCredentials,
|
||||
override val data: DataCredentials? = null,
|
||||
@SerialName(frontSideField)
|
||||
override val frontSide: FileCredentials,
|
||||
override val frontSide: FileCredentials? = null,
|
||||
@SerialName(selfieField)
|
||||
override val selfie: FileCredentials,
|
||||
override val selfie: FileCredentials? = null,
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>
|
||||
override val translation: List<FileCredentials> = emptyList()
|
||||
) : PassportSecureValue()
|
||||
|
||||
@Serializable
|
||||
data class InternalPassportSecureValue(
|
||||
@SerialName(dataField)
|
||||
override val data: DataCredentials,
|
||||
override val data: DataCredentials? = null,
|
||||
@SerialName(frontSideField)
|
||||
override val frontSide: FileCredentials,
|
||||
override val frontSide: FileCredentials? = null,
|
||||
@SerialName(selfieField)
|
||||
override val selfie: FileCredentials,
|
||||
override val selfie: FileCredentials? = null,
|
||||
@SerialName(translationField)
|
||||
override val translation: List<FileCredentials>
|
||||
override val translation: List<FileCredentials> = emptyList()
|
||||
) : PassportSecureValue()
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package dev.inmo.tgbotapi.types.passport.decrypted
|
||||
|
||||
import dev.inmo.tgbotapi.types.dataField
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.DataCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.EndDataCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.decrypted.abstracts.SecureValueWithData
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -10,4 +11,6 @@ import kotlinx.serialization.Serializable
|
||||
data class PersonalDetailsSecureValue(
|
||||
@SerialName(dataField)
|
||||
override val data: DataCredentials
|
||||
) : SecureValueWithData
|
||||
) : SecureValueWithData {
|
||||
override val credentials: List<EndDataCredentials> = listOf(data)
|
||||
}
|
||||
@@ -9,7 +9,7 @@ data class SecureData(
|
||||
@SerialName(personalDetailsField)
|
||||
val personalDetails: PersonalDetailsSecureValue? = null,
|
||||
@SerialName(passportField)
|
||||
val passport: PassportSecureValue? = null,
|
||||
val passport: CommonPassportSecureValue? = null,
|
||||
@SerialName(internalPassportField)
|
||||
val internalPassport: InternalPassportSecureValue? = null,
|
||||
@SerialName(driverLicenseField)
|
||||
@@ -26,4 +26,17 @@ data class SecureData(
|
||||
val passportRegistration: PassportRegistrationSecureValue? = null,
|
||||
@SerialName(temporaryRegistrationField)
|
||||
val temporaryRegistration: TemporalRegistrationSecureValue? = null,
|
||||
)
|
||||
) {
|
||||
val allCredentials by lazy {
|
||||
(personalDetails ?.credentials ?: emptyList()) +
|
||||
(passport ?.credentials ?: emptyList()) +
|
||||
(internalPassport ?.credentials ?: emptyList()) +
|
||||
(driverLicense ?.credentials ?: emptyList()) +
|
||||
(identityCard ?.credentials ?: emptyList()) +
|
||||
(utilityBill ?.credentials ?: emptyList()) +
|
||||
(bankStatement ?.credentials ?: emptyList()) +
|
||||
(rentalAgreement ?.credentials ?: emptyList()) +
|
||||
(passportRegistration ?.credentials ?: emptyList()) +
|
||||
(temporaryRegistration ?.credentials ?: emptyList())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.passport.decrypted.abstracts
|
||||
|
||||
interface SecureValue
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.EndDataCredentials
|
||||
|
||||
interface SecureValue {
|
||||
val credentials: List<EndDataCredentials>
|
||||
}
|
||||
|
||||
@@ -3,6 +3,6 @@ package dev.inmo.tgbotapi.types.passport.decrypted.abstracts
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.FileCredentials
|
||||
|
||||
interface SecureValueIdentity : SecureValue {
|
||||
val frontSide: FileCredentials
|
||||
val selfie: FileCredentials
|
||||
val frontSide: FileCredentials?
|
||||
val selfie: FileCredentials?
|
||||
}
|
||||
@@ -3,5 +3,5 @@ package dev.inmo.tgbotapi.types.passport.decrypted.abstracts
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.DataCredentials
|
||||
|
||||
interface SecureValueWithData : SecureValue {
|
||||
val data: DataCredentials
|
||||
val data: DataCredentials?
|
||||
}
|
||||
@@ -3,5 +3,5 @@ package dev.inmo.tgbotapi.types.passport.decrypted.abstracts
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.FileCredentials
|
||||
|
||||
interface SecureValueWithReverseSide : SecureValue {
|
||||
val reverseSide: FileCredentials
|
||||
val reverseSide: FileCredentials?
|
||||
}
|
||||
@@ -1,32 +1,15 @@
|
||||
package dev.inmo.tgbotapi.utils.passport
|
||||
|
||||
import dev.inmo.micro_utils.crypto.SourceBytes
|
||||
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.credentials.EncryptedCredentials
|
||||
import dev.inmo.tgbotapi.types.passport.credentials.EncryptedData
|
||||
import dev.inmo.tgbotapi.types.passport.encrypted.PassportFile
|
||||
import dev.inmo.tgbotapi.utils.nonstrictJsonFormat
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
|
||||
interface Decryptor {
|
||||
fun ByteArray.decrypt(): ByteArray
|
||||
fun decrypt(data: EncryptedData): SourceBytes
|
||||
}
|
||||
|
||||
suspend fun Decryptor.decrypt(
|
||||
file: PassportFile,
|
||||
bot: TelegramBot
|
||||
): ByteArray {
|
||||
return bot.execute(
|
||||
DownloadFile(
|
||||
bot.execute(
|
||||
GetFile(file.fileId)
|
||||
).filePath
|
||||
)
|
||||
).decrypt()
|
||||
}
|
||||
fun Decryptor.decryptData(
|
||||
data: EncryptedCredentials
|
||||
) = nonstrictJsonFormat.decodeFromString(
|
||||
JsonObject.serializer(),
|
||||
data.data.decrypt().decodeToString()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user