public PassportFormField(PassportAuthorizationForm form, PassportSuitableElement requiredType, List <PassportSuitableElement> documentTypes, bool documentOnly) { AuthorizationForm = form; RequiredType = requiredType; DocumentTypes = documentTypes; IsDocumentOnly = documentOnly; }
//private Dictionary<string, string> GenerateErrorsMap(PassportAuthorizationForm form) //{ // try // { // var errors = form.Errors.OrderBy(x => x.Source, new ErrorSourceComparator()).ToList(); // for (int a = 0, size = errors.Count; a < size; a++) // { // var secureValueError = errors[a]; // String key; // String description; // String target; // String field = null; // byte[] file_hash = null; // if (secureValueError.Source is PassportElementErrorSourceFrontSide) // { // TLRPC.TL_secureValueErrorFrontSide secureValueErrorFrontSide = (TLRPC.TL_secureValueErrorFrontSide)secureValueError; // key = getNameForType(secureValueError.Type); // description = secureValueError.Message; // file_hash = secureValueErrorFrontSide.file_hash; // target = "front"; // } // else if (secureValueError.Source is PassportElementErrorSourceReverseSide) // { // TLRPC.TL_secureValueErrorReverseSide secureValueErrorReverseSide = (TLRPC.TL_secureValueErrorReverseSide)secureValueError; // key = getNameForType(secureValueError.Type); // description = secureValueError.Message; // file_hash = secureValueErrorReverseSide.file_hash; // target = "reverse"; // } // else if (secureValueError.Source is PassportElementErrorSourceSelfie) // { // TLRPC.TL_secureValueErrorSelfie secureValueErrorSelfie = (TLRPC.TL_secureValueErrorSelfie)secureValueError; // key = getNameForType(secureValueError.Type); // description = secureValueError.Message; // file_hash = secureValueErrorSelfie.file_hash; // target = "selfie"; // } // else if (secureValueError.Source is PassportElementErrorSourceTranslationFile) // { // TLRPC.TL_secureValueErrorTranslationFile secureValueErrorTranslationFile = (TLRPC.TL_secureValueErrorTranslationFile)secureValueError; // key = getNameForType(secureValueError.Type); // description = secureValueError.Message; // file_hash = secureValueErrorTranslationFile.file_hash; // target = "translation"; // } // else if (secureValueError.Source is PassportElementErrorSourceTranslationFiles) // { // TLRPC.TL_secureValueErrorTranslationFiles secureValueErrorTranslationFiles = (TLRPC.TL_secureValueErrorTranslationFiles)secureValueError; // key = getNameForType(secureValueError.Type); // description = secureValueError.Message; // target = "translation"; // } // else if (secureValueError.Source is PassportElementErrorSourceFile) // { // TLRPC.TL_secureValueErrorFile secureValueErrorFile = (TLRPC.TL_secureValueErrorFile)secureValueError; // key = getNameForType(secureValueError.Type); // description = secureValueError.Message; // file_hash = secureValueErrorFile.file_hash; // target = "files"; // } // else if (secureValueError.Source is PassportElementErrorSourceFiles) // { // TLRPC.TL_secureValueErrorFiles secureValueErrorFiles = (TLRPC.TL_secureValueErrorFiles)secureValueError; // key = getNameForType(secureValueError.Type); // description = secureValueError.Message; // target = "files"; // } // else if (secureValueError is TLRPC.TL_secureValueError) // { // TLRPC.TL_secureValueError secureValueErrorAll = (TLRPC.TL_secureValueError)secureValueError; // key = getNameForType(secureValueError.Type); // description = secureValueError.Message; // file_hash = secureValueErrorAll.hash; // target = "error_all"; // } // else if (secureValueError.Source is PassportElementErrorSourceDataField) // { // TLRPC.TL_secureValueErrorData secureValueErrorData = (TLRPC.TL_secureValueErrorData)secureValueError; // boolean found = false; // for (int b = 0; b < form.values.size(); b++) // { // TLRPC.TL_secureValue value = form.values.get(b); // if (value.data != null && Arrays.equals(value.data.data_hash, secureValueErrorData.data_hash)) // { // found = true; // break; // } // } // if (!found) // { // continue; // } // key = getNameForType(secureValueErrorData.type); // description = secureValueErrorData.text; // field = secureValueErrorData.field; // file_hash = secureValueErrorData.data_hash; // target = "data"; // } // else // { // continue; // } // HashMap<String, String> vals = errorsMap.get(key); // if (vals == null) // { // vals = new HashMap<>(); // errorsMap.put(key, vals); // mainErrorsMap.put(key, description); // } // String hash; // if (file_hash != null) // { // hash = Base64.encodeToString(file_hash, Base64.NO_WRAP); // } // else // { // hash = ""; // } // if ("data".Equals(target)) // { // if (field != null) // { // vals.put(field, description); // } // } // else if ("files".Equals(target)) // { // if (file_hash != null) // { // vals.put("files" + hash, description); // } // else // { // vals.put("files_all", description); // } // } // else if ("selfie".Equals(target)) // { // vals.put("selfie" + hash, description); // } // else if ("translation".Equals(target)) // { // if (file_hash != null) // { // vals.put("translation" + hash, description); // } // else // { // vals.put("translation_all", description); // } // } // else if ("front".Equals(target)) // { // vals.put("front" + hash, description); // } // else if ("reverse".Equals(target)) // { // vals.put("reverse" + hash, description); // } // else if ("error_all".Equals(target)) // { // vals.put("error_all", description); // } // } // } // catch (Exception ignore) // { // } //} private void addField(PassportAuthorizationForm form, PassportSuitableElement requiredType, List <PassportSuitableElement> documentTypes, bool documentOnly, bool last) { Items.Add(new PassportFormField(form, requiredType, documentTypes, documentOnly)); }
private string getSubtitle(PassportFormField field, PassportSuitableElement documentRequiredType, string value, int availableDocumentTypesCount) { if (field.RequiredType.Type is PassportElementTypePhoneNumber) { var element = field.AvailableElements.GetElementForType(field.RequiredType.Type); value = getTextForElement(element); } else if (field.RequiredType.Type is PassportElementTypeEmailAddress) { var element = field.AvailableElements.GetElementForType(field.RequiredType.Type); value = getTextForElement(element); } else { var builder = new StringBuilder(); if (documentRequiredType != null) { var documentRequiredTypeValue = field.AvailableElements.GetElementForType(documentRequiredType?.Type); if (availableDocumentTypesCount > 1) { builder.Append(GetTextForType(documentRequiredType.Type)); } else if (documentRequiredTypeValue == null) { builder.Append(Strings.Resources.PassportDocuments); } } if (field.RequiredType.Type is PassportElementTypePersonalDetails) { if (!field.IsDocumentOnly) { var element = field.AvailableElements.GetElementForType(field.RequiredType.Type); if (builder.Length > 0) { builder.Append(", "); } builder.Append(getTextForElement(element)); } if (documentRequiredType != null) { var element = field.AvailableElements.GetElementForType(documentRequiredType.Type); if (builder.Length > 0) { builder.Append(", "); } builder.Append(getTextForElement(element)); } } else if (field.RequiredType.Type is PassportElementTypeAddress) { if (!field.IsDocumentOnly) { var element = field.AvailableElements.GetElementForType(field.RequiredType.Type); if (builder.Length > 0) { builder.Append(", "); } builder.Append(getTextForElement(element)); } } value = builder.ToString(); } bool isError = false; var errors = !field.IsDocumentOnly ? field.AvailableElements.GetErrorsForType(field.RequiredType.Type).ToList() : null; var documentsErrors = documentRequiredType != null?field.AvailableElements.GetErrorsForType(documentRequiredType.Type).ToList() : null; if (errors != null && errors.Count > 0 || documentsErrors != null && documentsErrors.Count > 0) { value = null; if (!field.IsDocumentOnly) { value = errors[0].Message; } if (value == null) { value = documentsErrors[0].Message; } isError = true; } //Dictionary<String, String> errors = !field.GetHashCode ? errorsMap.get(getNameForType(requiredType.type)) : null; //Dictionary<String, String> documentsErrors = documentRequiredType != null ? errorsMap.get(getNameForType(documentRequiredType.type)) : null; //if (errors != null && errors.size() > 0 || documentsErrors != null && documentsErrors.size() > 0) //{ // value = null; // if (!documentOnly) // { // value = mainErrorsMap.get(getNameForType(requiredType.type)); // } // if (value == null) // { // value = mainErrorsMap.get(getNameForType(documentRequiredType.type)); // } // isError = true; //} else { if (field.RequiredType.Type is PassportElementTypePersonalDetails) { if (string.IsNullOrEmpty(value)) { if (documentRequiredType == null) { value = Strings.Resources.PassportPersonalDetailsInfo; } else { //if (currentActivityType == TYPE_MANAGE) //{ // value = Strings.Resources.PassportDocuments; //} //else { if (availableDocumentTypesCount == 1) { if (documentRequiredType.Type is PassportElementTypePassport) { value = Strings.Resources.PassportIdentityPassport; } else if (documentRequiredType.Type is PassportElementTypeInternalPassport) { value = Strings.Resources.PassportIdentityInternalPassport; } else if (documentRequiredType.Type is PassportElementTypeDriverLicense) { value = Strings.Resources.PassportIdentityDriverLicence; } else if (documentRequiredType.Type is PassportElementTypeIdentityCard) { value = Strings.Resources.PassportIdentityID; } } else { value = Strings.Resources.PassportIdentityDocumentInfo; } } } } } else if (field.RequiredType.Type is PassportElementTypeAddress) { if (string.IsNullOrEmpty(value)) { if (documentRequiredType == null) { value = Strings.Resources.PassportAddressNoUploadInfo; } else { //if (currentActivityType == TYPE_MANAGE) //{ // value = Strings.Resources.PassportDocuments; //} //else { if (availableDocumentTypesCount == 1) { if (documentRequiredType.Type is PassportElementTypeRentalAgreement) { value = Strings.Resources.PassportAddAgreementInfo; } else if (documentRequiredType.Type is PassportElementTypeUtilityBill) { value = Strings.Resources.PassportAddBillInfo; } else if (documentRequiredType.Type is PassportElementTypePassportRegistration) { value = Strings.Resources.PassportAddPassportRegistrationInfo; } else if (documentRequiredType.Type is PassportElementTypeTemporaryRegistration) { value = Strings.Resources.PassportAddTemporaryRegistrationInfo; } else if (documentRequiredType.Type is PassportElementTypeBankStatement) { value = Strings.Resources.PassportAddBankInfo; } } else { value = Strings.Resources.PassportAddressInfo; } } } } } else if (field.RequiredType.Type is PassportElementTypePhoneNumber) { if (string.IsNullOrEmpty(value)) { value = Strings.Resources.PassportPhoneInfo; } } else if (field.RequiredType.Type is PassportElementTypeEmailAddress) { if (string.IsNullOrEmpty(value)) { value = Strings.Resources.PassportEmailInfo; } } } return(value); }
private async Task <Error> InitializeFormAsync(string password) { var request = _authorizationRequest; if (request != null) { _authorizationRequest = null; //request.Password = password; } var response = await ProtoService.SendAsync(request); if (response is PassportAuthorizationForm authorizationForm) { State = PassportState.Form; BotId = request.BotUserId; AuthorizationForm = authorizationForm; int size = authorizationForm.RequiredElements.Count; List <PassportSuitableElement> personalDocuments = new List <PassportSuitableElement>(); List <PassportSuitableElement> addressDocuments = new List <PassportSuitableElement>(); int personalCount = 0; int addressCount = 0; bool hasPersonalInfo = false; bool hasAddressInfo = false; foreach (var secureRequiredType in authorizationForm.RequiredElements) { if (secureRequiredType.SuitableElements.Count > 1) { var requiredType = secureRequiredType.SuitableElements[0]; if (IsPersonalDocument(requiredType.Type)) { foreach (var innerType in secureRequiredType.SuitableElements) { personalDocuments.Add(innerType); } personalCount++; } else if (IsAddressDocument(requiredType.Type)) { foreach (var innerType in secureRequiredType.SuitableElements) { addressDocuments.Add(innerType); } addressCount++; } } else if (secureRequiredType.SuitableElements.Count > 0) { var requiredType = secureRequiredType.SuitableElements[0]; if (IsPersonalDocument(requiredType.Type)) { personalDocuments.Add(requiredType); personalCount++; } else if (IsAddressDocument(requiredType.Type)) { addressDocuments.Add(requiredType); addressCount++; } else if (requiredType.Type is PassportElementTypePersonalDetails) { hasPersonalInfo = true; } else if (requiredType.Type is PassportElementTypeAddress) { hasAddressInfo = true; } } } bool separatePersonal = !hasPersonalInfo || personalCount > 1; bool separateAddress = !hasAddressInfo || addressCount > 1; foreach (var secureRequiredType in authorizationForm.RequiredElements) { List <PassportSuitableElement> documentTypes; PassportSuitableElement requiredType; bool documentOnly; if (secureRequiredType.SuitableElements.Count > 1) { requiredType = secureRequiredType.SuitableElements[0]; if (separatePersonal && IsPersonalDocument(requiredType.Type) || separateAddress && IsAddressDocument(requiredType.Type)) { documentTypes = new List <PassportSuitableElement>(); foreach (var innerType in secureRequiredType.SuitableElements) { documentTypes.Add(innerType); } if (IsPersonalDocument(requiredType.Type)) { requiredType = new PassportSuitableElement(); requiredType.Type = new PassportElementTypePersonalDetails(); } else { requiredType = new PassportSuitableElement(); requiredType.Type = new PassportElementTypeAddress(); } documentOnly = true; } else { continue; } } else if (secureRequiredType.SuitableElements.Count > 0) { requiredType = secureRequiredType.SuitableElements[0]; if (requiredType.Type is PassportElementTypePhoneNumber || requiredType.Type is PassportElementTypeEmailAddress) { documentTypes = null; documentOnly = false; } else if (requiredType.Type is PassportElementTypePersonalDetails) { if (separatePersonal) { documentTypes = null; } else { documentTypes = personalDocuments; } documentOnly = false; } else if (requiredType.Type is PassportElementTypeAddress) { if (separateAddress) { documentTypes = null; } else { documentTypes = addressDocuments; } documentOnly = false; } else if (separatePersonal && IsPersonalDocument(requiredType.Type)) { documentTypes = new List <PassportSuitableElement>(); documentTypes.Add(requiredType); requiredType = new PassportSuitableElement(); requiredType.Type = new PassportElementTypePersonalDetails(); documentOnly = true; } else if (separateAddress && IsAddressDocument(requiredType.Type)) { documentTypes = new List <PassportSuitableElement>(); documentTypes.Add(requiredType); requiredType = new PassportSuitableElement(); requiredType.Type = new PassportElementTypeAddress(); documentOnly = true; } else { continue; } } else { continue; } addField(authorizationForm, requiredType, documentTypes, documentOnly, false); } } else if (response is Error error) { return(error); } return(null); }
private void SetupFormField(TextBlock title, TextBlock subtitle, PassportFormField field) { int availableDocumentTypesCount = field.DocumentTypes != null ? field.DocumentTypes.Count : 0; //TextDetailSecureCell view = new TextDetailSecureCell(context); //view.setBackgroundDrawable(Theme.getSelectorDrawable(true)); if (field.RequiredType.Type is PassportElementTypePersonalDetails) { String label; if (field.DocumentTypes == null || field.DocumentTypes.IsEmpty()) { label = Strings.Resources.PassportPersonalDetails; } else if (field.IsDocumentOnly && field.DocumentTypes.Count == 1) { label = GetTextForType(field.DocumentTypes[0].Type); } else if (field.IsDocumentOnly && field.DocumentTypes.Count == 2) { label = string.Format(Strings.Resources.PassportTwoDocuments, GetTextForType(field.DocumentTypes[0].Type), GetTextForType(field.DocumentTypes[1].Type)); } else { label = Strings.Resources.PassportIdentityDocument; } title.Text = label; } else if (field.RequiredType.Type is PassportElementTypeAddress) { String label; if (field.DocumentTypes == null || field.DocumentTypes.IsEmpty()) { label = Strings.Resources.PassportAddress; } else if (field.IsDocumentOnly && field.DocumentTypes.Count == 1) { label = GetTextForType(field.DocumentTypes[0].Type); } else if (field.IsDocumentOnly && field.DocumentTypes.Count == 2) { label = string.Format(Strings.Resources.PassportTwoDocuments, GetTextForType(field.DocumentTypes[0].Type), GetTextForType(field.DocumentTypes[1].Type)); } else { label = Strings.Resources.PassportResidentialAddress; } title.Text = label; } else if (field.RequiredType.Type is PassportElementTypePhoneNumber) { title.Text = Strings.Resources.PassportPhone; } else if (field.RequiredType.Type is PassportElementTypeEmailAddress) { title.Text = Strings.Resources.PassportEmail; } PassportSuitableElement documentsType = null; if (field.DocumentTypes != null && field.DocumentTypes.Count > 0) { bool found = false; for (int a = 0, count = field.DocumentTypes.Count; a < count; a++) { var documentType = field.DocumentTypes[a]; //typesValues.put(documentType, new HashMap<>()); //documentsToTypesLink.put(documentType, requiredType); if (!found) { var documentValue = field.AvailableElements.GetElementForType(documentType.Type); if (documentValue != null) { //if (documentValue.data != null) //{ // documentJson = decryptData(documentValue.data.data, decryptValueSecret(documentValue.data.secret, documentValue.data.data_hash), documentValue.data.data_hash); //} documentsType = documentType; found = true; } } } if (documentsType == null) { documentsType = field.DocumentTypes[0]; } } subtitle.Text = getSubtitle(field, documentsType, string.Empty, availableDocumentTypesCount); }