229 lines
12 KiB
Go
229 lines
12 KiB
Go
package echotron
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/url"
|
|
)
|
|
|
|
// PassportData contains information about Telegram Passport data shared with the bot by the user.
|
|
type PassportData struct {
|
|
Credentials EncryptedCredentials `json:"encrypted_credentials"`
|
|
Data []EncryptedPassportElement `json:"encrypted_passport_element"`
|
|
}
|
|
|
|
// PassportFile represents a file uploaded to Telegram Passport.
|
|
// Currently all Telegram Passport files are in JPEG format when decrypted and don't exceed 10MB.
|
|
type PassportFile struct {
|
|
FileID string `json:"file_id"`
|
|
FileUniqueID string `json:"file_unique_id"`
|
|
FileSize int64 `json:"file_size"`
|
|
FileDate int64 `json:"file_date"`
|
|
}
|
|
|
|
// EncryptedPassportElementType is a custom type for the various possible options used as Type in EncryptedPassportElement.
|
|
type EncryptedPassportElementType string
|
|
|
|
// These are all the possible options that can be used as Type in EncryptedPassportElement.
|
|
const (
|
|
TypePersonalDetails EncryptedPassportElementType = "personal_details"
|
|
TypePassport = "passport"
|
|
TypeDriverLicense = "driver_license"
|
|
TypeIdentityCard = "identity_card"
|
|
TypeInternalPassport = "internal_passport"
|
|
TypeAddress = "address"
|
|
TypeUtilityBill = "utility_bill"
|
|
TypeBankStatement = "bank_statement"
|
|
TypeRentalAgreement = "rental_agreement"
|
|
TypePassportRegistration = "passport_registration"
|
|
TypeTemporaryRegistration = "temporary_registration"
|
|
TypePhoneNumber = "phone_number"
|
|
TypeEmail = "email"
|
|
)
|
|
|
|
// EncryptedPassportElement contains information about documents or other Telegram Passport elements shared with the bot by the user.
|
|
type EncryptedPassportElement struct {
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
Data string `json:"data,omitempty"`
|
|
PhoneNumber string `json:"phone_number,omitempty"`
|
|
Email string `json:"email,omitempty"`
|
|
Files *[]PassportFile `json:"files,omitempty"`
|
|
FrontSide *PassportFile `json:"front_side,omitempty"`
|
|
ReverseSide *PassportFile `json:"reverse_side,omitempty"`
|
|
Selfie *PassportFile `json:"selfie,omitempty"`
|
|
Translation *[]PassportFile `json:"translation,omitempty"`
|
|
Hash string `json:"hash"`
|
|
}
|
|
|
|
// EncryptedCredentials contains data required for decrypting and authenticating EncryptedPassportElement.
|
|
// See the Telegram Passport Documentation for a complete description of the data decryption and authentication processes.
|
|
// https://core.telegram.org/passport#receiving-information
|
|
type EncryptedCredentials struct {
|
|
Data string `json:"data"`
|
|
Hash string `json:"hash"`
|
|
Secret string `json:"secret"`
|
|
}
|
|
|
|
// PassportElementErrorSource is a custom type for the various possible options used as Source in PassportElementSource.
|
|
type PassportElementErrorSource string
|
|
|
|
// These are all the possible options that can be used as Source in PassportElementSource.
|
|
const (
|
|
SourceData PassportElementErrorSource = "data"
|
|
SourceFrontSide = "front_side"
|
|
SourceReverseSide = "reverse_side"
|
|
SourceSelfie = "selfie"
|
|
SourceFile = "file"
|
|
SourceFiles = "files"
|
|
SourceTranslationFile = "translation_file"
|
|
SourceTranslationFiles = "translation_files"
|
|
SourceUnspecified = "unspecified"
|
|
)
|
|
|
|
// PassportElementError is an interface for the various PassportElementError types.
|
|
type PassportElementError interface {
|
|
ImplementsPassportElementError()
|
|
}
|
|
|
|
// PassportElementErrorDataField represents an issue in one of the data fields that was provided by the user.
|
|
// The error is considered resolved when the field's value changes.
|
|
// Source MUST BE SourceData.
|
|
// Type MUST BE one of TypePersonalDetails, TypePassport, TypeDriverLicense, TypeIdentityCard, TypeInternalPassport and TypeAddress.
|
|
type PassportElementErrorDataField struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
FieldName string `json:"field_name"`
|
|
DataHash string `json:"data_hash"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorDataField) ImplementsPassportElementError() {}
|
|
|
|
// PassportElementErrorFrontSide represents an issue with the front side of a document.
|
|
// The error is considered resolved when the file with the front side of the document changes.
|
|
// Source MUST BE SourceFrontSide.
|
|
// Type MUST BE one of TypeDriverLicense and TypeIdentityCard.
|
|
type PassportElementErrorFrontSide struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
FileHash string `json:"file_hash"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorFrontSide) ImplementsPassportElementError() {}
|
|
|
|
// PassportElementErrorReverseSide represents an issue with the reverse side of a document.
|
|
// The error is considered resolved when the file with the reverse side of the document changes.
|
|
// Source MUST BE SourceReverseSide.
|
|
// Type MUST BE one of TypeDriverLicense and TypeIdentityCard.
|
|
type PassportElementErrorReverseSide struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
FileHash string `json:"file_hash"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorReverseSide) ImplementsPassportElementError() {}
|
|
|
|
// PassportElementErrorSelfie represents an issue with the selfie with a document.
|
|
// The error is considered resolved when the file with the selfie changes.
|
|
// Source MUST BE SourceSelfie.
|
|
// Type MUST BE one of TypePassport, TypeDriverLicense, TypeIdentityCard and TypeIdentityPassport.
|
|
type PassportElementErrorSelfie struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
FileHash string `json:"file_hash"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorSelfie) ImplementsPassportElementError() {}
|
|
|
|
// PassportElementErrorFile represents an issue with the document scan.
|
|
// The error is considered resolved when the file with the document scan changes.
|
|
// Source MUST BE SourceFile.
|
|
// Type MUST BE one of TypePassport, TypeDriverLicense, TypeIdentityCard and TypeIdentityPassport.
|
|
type PassportElementErrorFile struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
FileHash string `json:"file_hash"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorFile) ImplementsPassportElementError() {}
|
|
|
|
// PassportElementErrorFiles represents an issue with a list of scans.
|
|
// The error is considered resolved when the list of files containing the scans changes.
|
|
// Source MUST BE SourceFiles.
|
|
// Type MUST BE one of TypeUtilityBill, TypeBankStatement, TypeRentalAgreement, TypePassportRegistration and TypeTemporaryRegistration.
|
|
type PassportElementErrorFiles struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
Message string `json:"message"`
|
|
FileHashes []string `json:"file_hashes"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorFiles) ImplementsPassportElementError() {}
|
|
|
|
// PassportElementErrorTranslationFile represents an issue with one of the files that constitute the translation of the document.
|
|
// The error is considered resolved when the file changes.
|
|
// Source MUST BE SourceTranslationFile.
|
|
// Type MUST BE one of TypePassport, TypeDriverLicense, TypeIdentityCard, TypeInternalPassport, TypeUtilityBill, TypeBankStatement,
|
|
// TypeRentalAgreement, TypePassportRegistration and TypeTemporaryRegistration.
|
|
type PassportElementErrorTranslationFile struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
FileHash string `json:"file_hash"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorTranslationFile) ImplementsPassportElementError() {}
|
|
|
|
// PassportElementErrorTranslationFiles represents an issue with the translated version of a document.
|
|
// The error is considered resolved when a file with the document translation changes.
|
|
// Source MUST BE SourceTranslationFiles.
|
|
// Type MUST BE one of TypePassport, TypeDriverLicense, TypeIdentityCard, TypeInternalPassport, TypeUtilityBill, TypeBankStatement,
|
|
// TypeRentalAgreement, TypePassportRegistration and TypeTemporaryRegistration.
|
|
type PassportElementErrorTranslationFiles struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
Message string `json:"message"`
|
|
FileHashes []string `json:"file_hashes"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorTranslationFiles) ImplementsPassportElementError() {}
|
|
|
|
// PassportElementErrorUnspecified represents an issue in an unspecified place.
|
|
// The error is considered resolved when new data is added.
|
|
type PassportElementErrorUnspecified struct {
|
|
Source PassportElementErrorSource `json:"source"`
|
|
Type EncryptedPassportElementType `json:"type"`
|
|
ElementHash string `json:"element_hash"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// ImplementsPassportElementError us a dummy method which exists to implement the interface PassportElementError.
|
|
func (p PassportElementErrorUnspecified) ImplementsPassportElementError() {}
|
|
|
|
// SetPassportDataErrors Informs a user that some of the Telegram Passport elements they provided contains errors.
|
|
// The user will not be able to re-submit their Passport to you until the errors are fixed.
|
|
// The contents of the field for which you returned the error must change.
|
|
func (a API) SetPassportDataErrors(userID int64, errors []PassportElementError) (res APIResponseBool, err error) {
|
|
var vals = make(url.Values)
|
|
|
|
errorsArr, err := json.Marshal(errors)
|
|
if err != nil {
|
|
return res, err
|
|
}
|
|
|
|
vals.Set("user_id", itoa(userID))
|
|
vals.Set("errors", string(errorsArr))
|
|
return res, client.get(a.base, "setPassportDataErrors", vals, &res)
|
|
}
|