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