Exemplo n.º 1
0
 public PassportFormField(PassportAuthorizationForm form, PassportSuitableElement requiredType, List <PassportSuitableElement> documentTypes, bool documentOnly)
 {
     AuthorizationForm = form;
     RequiredType      = requiredType;
     DocumentTypes     = documentTypes;
     IsDocumentOnly    = documentOnly;
 }
Exemplo n.º 2
0
        //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));
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }