1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-12-24 23:25:49 +00:00

global update of passport

This commit is contained in:
2021-01-28 16:03:30 +06:00
parent 1dc3ce2fb5
commit e0bf67d8f9
16 changed files with 95 additions and 87 deletions

View File

@@ -1,23 +1,23 @@
package dev.inmo.tgbotapi.types.passport
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
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
typealias EncryptedAndBase64EncodedData = String
typealias EncryptedByBotPublicKeyData = String
typealias EncryptedData = String
typealias EncryptedByBotPublicKeyData = SourceBytes
typealias EncryptedData = SourceBytes
@Serializable
data class EncryptedCredentials(
@SerialName(dataField)
@Serializable(Base64StringSerializer::class)
@Serializable(Base64BytesToFromStringSerializer::class)
val data: EncryptedData,
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
val hash: String,
@Serializable(Base64BytesToFromStringSerializer::class)
val hash: SourceBytes,
@SerialName(secretField)
@Serializable(Base64StringSerializer::class)
@Serializable(Base64BytesToFromStringSerializer::class)
val secret: EncryptedByBotPublicKeyData
)

View File

@@ -4,7 +4,7 @@ package dev.inmo.tgbotapi.types.passport
import dev.inmo.micro_utils.crypto.MD5
import dev.inmo.micro_utils.crypto.md5
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.*
import dev.inmo.tgbotapi.types.passport.encrypted_data.type
@@ -70,12 +70,12 @@ object PassportElementErrorSerializer : KSerializer<PassportElementError> {
@Serializable
sealed class PassportSingleElementError : PassportElementError() {
abstract val elementHash: String
abstract val elementHash: PassportElementHash
}
@Serializable
sealed class PassportMultipleElementsError : PassportElementError() {
abstract val elementsHashes: List<String>
abstract val elementsHashes: List<PassportElementHash>
}
@Serializable
@@ -91,8 +91,8 @@ data class PassportElementErrorDataField(
@SerialName(fieldNameField)
val fieldName: String,
@SerialName(dataHashField)
@Serializable(Base64StringSerializer::class)
override val elementHash: String,
@Serializable(Base64BytesToFromStringSerializer::class)
override val elementHash: PassportElementHash,
@SerialName(messageField)
override val message: String
) : PassportSingleElementError() {
@@ -112,8 +112,8 @@ data class PassportElementErrorFrontSide(
@SerialName(typeField)
override val type: String,
@SerialName(fileHashField)
@Serializable(Base64StringSerializer::class)
override val elementHash: String,
@Serializable(Base64BytesToFromStringSerializer::class)
override val elementHash: PassportElementHash,
@SerialName(messageField)
override val message: String
) : PassportElementFileError() {
@@ -121,7 +121,7 @@ data class PassportElementErrorFrontSide(
@Required
override val source: String = frontSideField
}
fun WithFrontSide.createFrontSideError(message: String, unencryptedFileHash: String) = PassportElementErrorFrontSide(
fun WithFrontSide.createFrontSideError(message: String, unencryptedFileHash: PassportElementHash) = PassportElementErrorFrontSide(
type,
unencryptedFileHash,
message
@@ -132,8 +132,8 @@ data class PassportElementErrorReverseSide(
@SerialName(typeField)
override val type: String,
@SerialName(fileHashField)
@Serializable(Base64StringSerializer::class)
override val elementHash: String,
@Serializable(Base64BytesToFromStringSerializer::class)
override val elementHash: PassportElementHash,
@SerialName(messageField)
override val message: String
) : PassportElementFileError() {
@@ -141,7 +141,7 @@ data class PassportElementErrorReverseSide(
@Required
override val source: String = reverseSideField
}
fun WithReverseSide.createReverseSideError(message: String, unencryptedFileHash: String) = PassportElementErrorReverseSide(
fun WithReverseSide.createReverseSideError(message: String, unencryptedFileHash: PassportElementHash) = PassportElementErrorReverseSide(
type,
unencryptedFileHash,
message
@@ -151,8 +151,8 @@ data class PassportElementErrorSelfie(
@SerialName(typeField)
override val type: String,
@SerialName(fileHashField)
@Serializable(Base64StringSerializer::class)
override val elementHash: String,
@Serializable(Base64BytesToFromStringSerializer::class)
override val elementHash: PassportElementHash,
@SerialName(messageField)
override val message: String
) : PassportElementFileError() {
@@ -160,7 +160,7 @@ data class PassportElementErrorSelfie(
@Required
override val source: String = selfieField
}
fun WithSelfie.createSelfieError(message: String, unencryptedFileHash: String) = PassportElementErrorSelfie(
fun WithSelfie.createSelfieError(message: String, unencryptedFileHash: PassportElementHash) = PassportElementErrorSelfie(
type,
unencryptedFileHash,
message
@@ -172,8 +172,8 @@ data class PassportElementErrorFile(
@SerialName(typeField)
override val type: String,
@SerialName(fileHashField)
@Serializable(Base64StringSerializer::class)
override val elementHash: String,
@Serializable(Base64BytesToFromStringSerializer::class)
override val elementHash: PassportElementHash,
@SerialName(messageField)
override val message: String
) : PassportElementFileError() {
@@ -181,7 +181,7 @@ data class PassportElementErrorFile(
@Required
override val source: String = fileField
}
fun FilesCollection.createFileError(message: String, unencryptedFileHash: String) = PassportElementErrorFile(
fun FilesCollection.createFileError(message: String, unencryptedFileHash: PassportElementHash) = PassportElementErrorFile(
type,
unencryptedFileHash,
message
@@ -192,7 +192,7 @@ data class PassportElementErrorFiles(
@SerialName(typeField)
override val type: String,
@SerialName(fileHashesField)
override val elementsHashes: List<@Serializable(Base64StringSerializer::class) String>,
override val elementsHashes: List<@Serializable(Base64BytesToFromStringSerializer::class) PassportElementHash>,
@SerialName(messageField)
override val message: String
) : PassportElementFilesError() {
@@ -200,7 +200,7 @@ data class PassportElementErrorFiles(
@Required
override val source: String = filesField
}
fun FilesCollection.createFilesError(message: String, unencryptedFileHashes: List<String>) = PassportElementErrorFiles(
fun FilesCollection.createFilesError(message: String, unencryptedFileHashes: List<PassportElementHash>) = PassportElementErrorFiles(
type,
unencryptedFileHashes,
message
@@ -212,8 +212,8 @@ data class PassportElementErrorTranslationFile(
@SerialName(typeField)
override val type: String,
@SerialName(fileHashField)
@Serializable(Base64StringSerializer::class)
override val elementHash: String,
@Serializable(Base64BytesToFromStringSerializer::class)
override val elementHash: PassportElementHash,
@SerialName(messageField)
override val message: String
) : PassportElementFileError() {
@@ -221,7 +221,7 @@ data class PassportElementErrorTranslationFile(
@Required
override val source: String = translationFileField
}
fun Translatable.createFileError(message: String, unencryptedFileHash: String) = PassportElementErrorTranslationFile(
fun Translatable.createFileError(message: String, unencryptedFileHash: PassportElementHash) = PassportElementErrorTranslationFile(
type,
unencryptedFileHash,
message
@@ -231,7 +231,7 @@ data class PassportElementErrorTranslationFiles(
@SerialName(typeField)
override val type: String,
@SerialName(fileHashesField)
override val elementsHashes: List<@Serializable(Base64StringSerializer::class) String>,
override val elementsHashes: List<@Serializable(Base64BytesToFromStringSerializer::class) PassportElementHash>,
@SerialName(messageField)
override val message: String
) : PassportElementFilesError() {
@@ -239,7 +239,7 @@ data class PassportElementErrorTranslationFiles(
@Required
override val source: String = translationFilesField
}
fun Translatable.createFilesError(message: String, unencryptedFileHashes: List<String>) = PassportElementErrorTranslationFiles(
fun Translatable.createFilesError(message: String, unencryptedFileHashes: List<PassportElementHash>) = PassportElementErrorTranslationFiles(
type,
unencryptedFileHashes,
message
@@ -250,8 +250,8 @@ data class PassportElementErrorUnspecified(
@SerialName(typeField)
override val type: String,
@SerialName(fileHashField)
@Serializable(Base64StringSerializer::class)
override val elementHash: String,
@Serializable(Base64BytesToFromStringSerializer::class)
override val elementHash: PassportElementHash,
@SerialName(messageField)
override val message: String
) : PassportElementFileError() {
@@ -259,7 +259,7 @@ data class PassportElementErrorUnspecified(
@Required
override val source: String = unspecifiedField
}
fun EncryptedPassportElement.createUnspecifiedError(message: String, elementHash: String) = PassportElementErrorUnspecified(
fun EncryptedPassportElement.createUnspecifiedError(message: String, elementHash: PassportElementHash) = PassportElementErrorUnspecified(
type,
elementHash,
message

View File

@@ -1,8 +1,9 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.emailField
import dev.inmo.tgbotapi.types.hashField
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.PassportElementHash
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithEmail
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -12,7 +13,7 @@ data class Email(
@SerialName(emailField)
override val email: String,
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : WithEmail {
}

View File

@@ -1,8 +1,9 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.dataField
import dev.inmo.tgbotapi.types.passport.EncryptedData
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.PassportElementHash
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithData
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -10,8 +11,8 @@ import kotlinx.serialization.Serializable
@Serializable
data class EncryptedAddress(
@SerialName(dataField)
@Serializable(Base64StringSerializer::class)
@Serializable(Base64BytesToFromStringSerializer::class)
override val data: EncryptedData,
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : WithData

View File

@@ -1,5 +1,6 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data
import dev.inmo.micro_utils.crypto.decodeBase64
import dev.inmo.micro_utils.serialization.encapsulator.Encapsulator
import dev.inmo.tgbotapi.types.hashField
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.EncryptedPassportElement
@@ -45,7 +46,7 @@ object EncryptedElementSerializer : KSerializer<EncryptedPassportElement> {
encryptedElementsClassesByTypes[type] ?.serializer ?.let { deserializer ->
nonstrictJsonFormat.decodeFromJsonElement(deserializer, json)
}
} ?: UnknownEncryptedPassportElement(json, json[hashField] ?.jsonPrimitive ?.content ?: "")
} ?: UnknownEncryptedPassportElement(json, json[hashField] ?.jsonPrimitive ?.content ?.decodeBase64() ?: byteArrayOf())
}
override fun serialize(encoder: Encoder, value: EncryptedPassportElement) {

View File

@@ -1,8 +1,9 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.dataField
import dev.inmo.tgbotapi.types.passport.EncryptedData
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.PassportElementHash
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithData
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -10,8 +11,8 @@ import kotlinx.serialization.Serializable
@Serializable
data class EncryptedPersonalDetails(
@SerialName(dataField)
@Serializable(Base64StringSerializer::class)
@Serializable(Base64BytesToFromStringSerializer::class)
override val data: EncryptedData,
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : WithData

View File

@@ -1,6 +1,6 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.passport.EncryptedData
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.*
@@ -13,7 +13,7 @@ sealed class Passport : WithData, WithFrontSide, WithSelfie, Translatable
@Serializable
data class CommonPassport(
@SerialName(dataField)
@Serializable(Base64StringSerializer::class)
@Serializable(Base64BytesToFromStringSerializer::class)
override val data: EncryptedData,
@SerialName(frontSideField)
override val frontSide: PassportFile? = null,
@@ -22,13 +22,13 @@ data class CommonPassport(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : Passport()
@Serializable
data class InternalPassport(
@SerialName(dataField)
@Serializable(Base64StringSerializer::class)
@Serializable(Base64BytesToFromStringSerializer::class)
override val data: EncryptedData,
@SerialName(frontSideField)
override val frontSide: PassportFile? = null,
@@ -37,6 +37,6 @@ data class InternalPassport(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : Passport()

View File

@@ -1,7 +1,8 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.hashField
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.PassportElementHash
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.WithPhoneNumber
import dev.inmo.tgbotapi.types.phoneNumberField
import kotlinx.serialization.SerialName
@@ -12,7 +13,7 @@ data class PhoneNumber(
@SerialName(phoneNumberField)
override val phoneNumber: String,
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : WithPhoneNumber {
}

View File

@@ -1,9 +1,8 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.FilesCollection
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.Translatable
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.*
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@@ -17,8 +16,8 @@ data class UtilityBill(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : TranslatableFilesCollection()
@Serializable
data class BankStatement(
@@ -27,8 +26,8 @@ data class BankStatement(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : TranslatableFilesCollection()
@Serializable
data class RentalAgreement(
@@ -37,8 +36,8 @@ data class RentalAgreement(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : TranslatableFilesCollection()
@Serializable
data class PassportRegistration(
@@ -47,8 +46,8 @@ data class PassportRegistration(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : TranslatableFilesCollection()
@Serializable
data class TemporaryRegistration(
@@ -57,7 +56,7 @@ data class TemporaryRegistration(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : TranslatableFilesCollection()

View File

@@ -1,6 +1,6 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.passport.EncryptedData
import dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts.*
@@ -13,7 +13,7 @@ sealed class TranslatableIDDocument : WithData, WithFrontSide, WithReverseSide,
@Serializable
data class DriverLicense(
@SerialName(dataField)
@Serializable(Base64StringSerializer::class)
@Serializable(Base64BytesToFromStringSerializer::class)
override val data: EncryptedData,
@SerialName(frontSideField)
override val frontSide: PassportFile? = null,
@@ -24,14 +24,14 @@ data class DriverLicense(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : TranslatableIDDocument()
@Serializable
data class IdentityCard(
@SerialName(dataField)
@Serializable(Base64StringSerializer::class)
@Serializable(Base64BytesToFromStringSerializer::class)
override val data: EncryptedData,
@SerialName(frontSideField)
override val frontSide: PassportFile? = null,
@@ -42,6 +42,6 @@ data class IdentityCard(
@SerialName(translationField)
override val translations: List<PassportFile> = emptyList(),
@SerialName(hashField)
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : TranslatableIDDocument()

View File

@@ -1,18 +1,21 @@
package dev.inmo.tgbotapi.types.passport.encrypted_data.abstracts
import dev.inmo.micro_utils.serialization.base64.Base64StringSerializer
import dev.inmo.micro_utils.crypto.SourceBytes
import dev.inmo.micro_utils.serialization.base64.Base64BytesToFromStringSerializer
import dev.inmo.tgbotapi.types.passport.encrypted_data.EncryptedElementSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonObject
typealias PassportElementHash = SourceBytes
@Serializable(EncryptedElementSerializer::class)
interface EncryptedPassportElement {
val hash: String
val hash: PassportElementHash
}
@Serializable(EncryptedElementSerializer::class)
data class UnknownEncryptedPassportElement(
val rawJson: JsonObject,
@Serializable(Base64StringSerializer::class)
override val hash: String
@Serializable(Base64BytesToFromStringSerializer::class)
override val hash: PassportElementHash
) : EncryptedPassportElement

View File

@@ -29,5 +29,5 @@ fun Decryptor.decryptData(
data: EncryptedCredentials
) = nonstrictJsonFormat.decodeFromString(
JsonObject.serializer(),
data.data.encodeToByteArray().decrypt().decodeToString()
data.data.decrypt().decodeToString()
)