1
0
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:
2021-01-28 22:03:14 +06:00
parent 15066c9d63
commit fbe91a6321
23 changed files with 222 additions and 185 deletions

View File

@@ -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
)

View File

@@ -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
)

View File

@@ -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()

View File

@@ -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
)

View File

@@ -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)
}

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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)
}

View File

@@ -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())
}
}

View File

@@ -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>
}

View File

@@ -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?
}

View File

@@ -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?
}

View File

@@ -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?
}

View File

@@ -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()
)