all repos — telegram-bot-api @ afa296aeacfa590b411319acebbd4c4e8d72bff1

Golang bindings for the Telegram Bot API

passport.go (view raw)

  1package tgbotapi
  2
  3// PassportRequestInfoConfig allows you to request passport info
  4type PassportRequestInfoConfig struct {
  5	BotID     int            `json:"bot_id"`
  6	Scope     *PassportScope `json:"scope"`
  7	Nonce     string         `json:"nonce"`
  8	PublicKey string         `json:"public_key"`
  9}
 10
 11// PassportScopeElement supports using one or one of several elements.
 12type PassportScopeElement interface {
 13	ScopeType() string
 14}
 15
 16// PassportScope is the requested scopes of data.
 17type PassportScope struct {
 18	V    int                    `json:"v"`
 19	Data []PassportScopeElement `json:"data"`
 20}
 21
 22// PassportScopeElementOneOfSeveral allows you to request any one of the
 23// requested documents.
 24type PassportScopeElementOneOfSeveral struct {
 25}
 26
 27// ScopeType is the scope type.
 28func (eo *PassportScopeElementOneOfSeveral) ScopeType() string {
 29	return "one_of"
 30}
 31
 32// PassportScopeElementOne requires the specified element be provided.
 33type PassportScopeElementOne struct {
 34	Type        string `json:"type"` // One of “personal_details”, “passport”, “driver_license”, “identity_card”, “internal_passport”, “address”, “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration”, “temporary_registration”, “phone_number”, “email”
 35	Selfie      bool   `json:"selfie"`
 36	Translation bool   `json:"translation"`
 37	NativeNames bool   `json:"native_name"`
 38}
 39
 40// ScopeType is the scope type.
 41func (eo *PassportScopeElementOne) ScopeType() string {
 42	return "one"
 43}
 44
 45type (
 46	// PassportData contains information about Telegram Passport data shared with
 47	// the bot by the user.
 48	PassportData struct {
 49		// Array with information about documents and other Telegram Passport
 50		// elements that was shared with the bot
 51		Data []EncryptedPassportElement `json:"data"`
 52
 53		// Encrypted credentials required to decrypt the data
 54		Credentials *EncryptedCredentials `json:"credentials"`
 55	}
 56
 57	// PassportFile represents a file uploaded to Telegram Passport. Currently all
 58	// Telegram Passport files are in JPEG format when decrypted and don't exceed
 59	// 10MB.
 60	PassportFile struct {
 61		// Unique identifier for this file
 62		FileID string `json:"file_id"`
 63
 64		// File size
 65		FileSize int `json:"file_size"`
 66
 67		// Unix time when the file was uploaded
 68		FileDate int64 `json:"file_date"`
 69	}
 70
 71	// EncryptedPassportElement contains information about documents or other
 72	// Telegram Passport elements shared with the bot by the user.
 73	EncryptedPassportElement struct {
 74		// Element type.
 75		Type string `json:"type"`
 76
 77		// Base64-encoded encrypted Telegram Passport element data provided by
 78		// the user, available for "personal_details", "passport",
 79		// "driver_license", "identity_card", "identity_passport" and "address"
 80		// types. Can be decrypted and verified using the accompanying
 81		// EncryptedCredentials.
 82		Data string `json:"data,omitempty"`
 83
 84		// User's verified phone number, available only for "phone_number" type
 85		PhoneNumber string `json:"phone_number,omitempty"`
 86
 87		// User's verified email address, available only for "email" type
 88		Email string `json:"email,omitempty"`
 89
 90		// Array of encrypted files with documents provided by the user,
 91		// available for "utility_bill", "bank_statement", "rental_agreement",
 92		// "passport_registration" and "temporary_registration" types. Files can
 93		// be decrypted and verified using the accompanying EncryptedCredentials.
 94		Files []PassportFile `json:"files,omitempty"`
 95
 96		// Encrypted file with the front side of the document, provided by the
 97		// user. Available for "passport", "driver_license", "identity_card" and
 98		// "internal_passport". The file can be decrypted and verified using the
 99		// accompanying EncryptedCredentials.
100		FrontSide *PassportFile `json:"front_side,omitempty"`
101
102		// Encrypted file with the reverse side of the document, provided by the
103		// user. Available for "driver_license" and "identity_card". The file can
104		// be decrypted and verified using the accompanying EncryptedCredentials.
105		ReverseSide *PassportFile `json:"reverse_side,omitempty"`
106
107		// Encrypted file with the selfie of the user holding a document,
108		// provided by the user; available for "passport", "driver_license",
109		// "identity_card" and "internal_passport". The file can be decrypted
110		// and verified using the accompanying EncryptedCredentials.
111		Selfie *PassportFile `json:"selfie,omitempty"`
112	}
113
114	// EncryptedCredentials contains data required for decrypting and
115	// authenticating EncryptedPassportElement. See the Telegram Passport
116	// Documentation for a complete description of the data decryption and
117	// authentication processes.
118	EncryptedCredentials struct {
119		// Base64-encoded encrypted JSON-serialized data with unique user's
120		// payload, data hashes and secrets required for EncryptedPassportElement
121		// decryption and authentication
122		Data string `json:"data"`
123
124		// Base64-encoded data hash for data authentication
125		Hash string `json:"hash"`
126
127		// Base64-encoded secret, encrypted with the bot's public RSA key,
128		// required for data decryption
129		Secret string `json:"secret"`
130	}
131
132	// PassportElementError represents an error in the Telegram Passport element
133	// which was submitted that should be resolved by the user.
134	PassportElementError interface{}
135
136	// PassportElementErrorDataField represents an issue in one of the data
137	// fields that was provided by the user. The error is considered resolved
138	// when the field's value changes.
139	PassportElementErrorDataField struct {
140		// Error source, must be data
141		Source string `json:"source"`
142
143		// The section of the user's Telegram Passport which has the error, one
144		// of "personal_details", "passport", "driver_license", "identity_card",
145		// "internal_passport", "address"
146		Type string `json:"type"`
147
148		// Name of the data field which has the error
149		FieldName string `json:"field_name"`
150
151		// Base64-encoded data hash
152		DataHash string `json:"data_hash"`
153
154		// Error message
155		Message string `json:"message"`
156	}
157
158	// PassportElementErrorFrontSide represents an issue with the front side of
159	// a document. The error is considered resolved when the file with the front
160	// side of the document changes.
161	PassportElementErrorFrontSide struct {
162		// Error source, must be front_side
163		Source string `json:"source"`
164
165		// The section of the user's Telegram Passport which has the issue, one
166		// of "passport", "driver_license", "identity_card", "internal_passport"
167		Type string `json:"type"`
168
169		// Base64-encoded hash of the file with the front side of the document
170		FileHash string `json:"file_hash"`
171
172		// Error message
173		Message string `json:"message"`
174	}
175
176	// PassportElementErrorReverseSide represents an issue with the reverse side
177	// of a document. The error is considered resolved when the file with reverse
178	// side of the document changes.
179	PassportElementErrorReverseSide struct {
180		// Error source, must be reverse_side
181		Source string `json:"source"`
182
183		// The section of the user's Telegram Passport which has the issue, one
184		// of "driver_license", "identity_card"
185		Type string `json:"type"`
186
187		// Base64-encoded hash of the file with the reverse side of the document
188		FileHash string `json:"file_hash"`
189
190		// Error message
191		Message string `json:"message"`
192	}
193
194	// PassportElementErrorSelfie represents an issue with the selfie with a
195	// document. The error is considered resolved when the file with the selfie
196	// changes.
197	PassportElementErrorSelfie struct {
198		// Error source, must be selfie
199		Source string `json:"source"`
200
201		// The section of the user's Telegram Passport which has the issue, one
202		// of "passport", "driver_license", "identity_card", "internal_passport"
203		Type string `json:"type"`
204
205		// Base64-encoded hash of the file with the selfie
206		FileHash string `json:"file_hash"`
207
208		// Error message
209		Message string `json:"message"`
210	}
211
212	// PassportElementErrorFile represents an issue with a document scan. The
213	// error is considered resolved when the file with the document scan changes.
214	PassportElementErrorFile struct {
215		// Error source, must be file
216		Source string `json:"source"`
217
218		// The section of the user's Telegram Passport which has the issue, one
219		// of "utility_bill", "bank_statement", "rental_agreement",
220		// "passport_registration", "temporary_registration"
221		Type string `json:"type"`
222
223		// Base64-encoded file hash
224		FileHash string `json:"file_hash"`
225
226		// Error message
227		Message string `json:"message"`
228	}
229
230	// PassportElementErrorFiles represents an issue with a list of scans. The
231	// error is considered resolved when the list of files containing the scans
232	// changes.
233	PassportElementErrorFiles struct {
234		// Error source, must be files
235		Source string `json:"source"`
236
237		// The section of the user's Telegram Passport which has the issue, one
238		// of "utility_bill", "bank_statement", "rental_agreement",
239		// "passport_registration", "temporary_registration"
240		Type string `json:"type"`
241
242		// List of base64-encoded file hashes
243		FileHashes []string `json:"file_hashes"`
244
245		// Error message
246		Message string `json:"message"`
247	}
248
249	// Credentials contains encrypted data.
250	Credentials struct {
251		Data SecureData `json:"secure_data"`
252		// Nonce the same nonce given in the request
253		Nonce string `json:"nonce"`
254	}
255
256	// SecureData is a map of the fields and their encrypted values.
257	SecureData map[string]*SecureValue
258	// PersonalDetails       *SecureValue `json:"personal_details"`
259	// Passport              *SecureValue `json:"passport"`
260	// InternalPassport      *SecureValue `json:"internal_passport"`
261	// DriverLicense         *SecureValue `json:"driver_license"`
262	// IdentityCard          *SecureValue `json:"identity_card"`
263	// Address               *SecureValue `json:"address"`
264	// UtilityBill           *SecureValue `json:"utility_bill"`
265	// BankStatement         *SecureValue `json:"bank_statement"`
266	// RentalAgreement       *SecureValue `json:"rental_agreement"`
267	// PassportRegistration  *SecureValue `json:"passport_registration"`
268	// TemporaryRegistration *SecureValue `json:"temporary_registration"`
269
270	// SecureValue contains encrypted values for a SecureData item.
271	SecureValue struct {
272		Data        *DataCredentials   `json:"data"`
273		FrontSide   *FileCredentials   `json:"front_side"`
274		ReverseSide *FileCredentials   `json:"reverse_side"`
275		Selfie      *FileCredentials   `json:"selfie"`
276		Translation []*FileCredentials `json:"translation"`
277		Files       []*FileCredentials `json:"files"`
278	}
279
280	// DataCredentials contains information required to decrypt data.
281	DataCredentials struct {
282		// DataHash checksum of encrypted data
283		DataHash string `json:"data_hash"`
284		// Secret of encrypted data
285		Secret string `json:"secret"`
286	}
287
288	// FileCredentials contains information required to decrypt files.
289	FileCredentials struct {
290		// FileHash checksum of encrypted data
291		FileHash string `json:"file_hash"`
292		// Secret of encrypted data
293		Secret string `json:"secret"`
294	}
295
296	// PersonalDetails https://core.telegram.org/passport#personaldetails
297	PersonalDetails struct {
298		FirstName            string `json:"first_name"`
299		LastName             string `json:"last_name"`
300		MiddleName           string `json:"middle_name"`
301		BirthDate            string `json:"birth_date"`
302		Gender               string `json:"gender"`
303		CountryCode          string `json:"country_code"`
304		ResidenceCountryCode string `json:"residence_country_code"`
305		FirstNameNative      string `json:"first_name_native"`
306		LastNameNative       string `json:"last_name_native"`
307		MiddleNameNative     string `json:"middle_name_native"`
308	}
309
310	// IDDocumentData https://core.telegram.org/passport#iddocumentdata
311	IDDocumentData struct {
312		DocumentNumber string `json:"document_no"`
313		ExpiryDate     string `json:"expiry_date"`
314	}
315)