예제 #1
0
        public void Update(VerifyFileJson verifyItem)
        {
            if (verifyItem == null)
            {
                Reset();
                return;
            }

            _filename.Text = verifyItem.name;
            _hash.Text     = verifyItem.hash;
            _hashtype.Text = Tr.Get($"HashTypes.{verifyItem.hashtype}");
            _size.Text     = Tr.Get("VerifyFileView.SizeInfo", verifyItem.length);

            if (_link != null)
            {
                if (string.IsNullOrEmpty(verifyItem.link))
                {
                    _link.Text = "-";
                }
                else
                {
                    _link.Text = verifyItem.link;
                }
            }
        }
예제 #2
0
        protected override async Task Run()
        {
            (var hash, var length, _) = VerifyFileJson.GenerateHash(file);
            var verify = await VerifyApp.Current.DownloadVerificationResult(ServiceNode, id);

            if (verify != null)
            {
                try
                {
                    foreach (var f in verify.Verify.files)
                    {
                        if (f.length == length && f.GetHash() == hash)
                        {
                            SetSuccess(f.hash);
                            return;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log.HandleException(ex);
                }

                SetError("File is not valid");
            }
            else
            {
                SetError($"Verification {id} not found");
            }
        }
예제 #3
0
        public void AddUpdateFile(VerifyFileJson verifyItem)
        {
            var buttons = GetHeaderSectionRows("Files");

            foreach (var button in buttons)
            {
                if (button.Tag == verifyItem)
                {
                    var v = (button as ButtonRow).RowLayout.Children.Last() as VerifyFileView;
                    v.Update(verifyItem);
                    Status.ReValidate();
                    return;
                }
            }

            AddIndex       = _addButton;
            AddIndexBefore = true;

            var view = new VerifyFileView(true);

            view.Update(verifyItem);

            var newButton = AddButtonViewRow(view, EditFile);

            newButton.Tag = verifyItem;
            Status.AddBusyView(newButton);
            Status.ReValidate();
        }
예제 #4
0
        VerificationFilePage(AddVerificationPage verificationPage, VerifyFileJson verifyItem, OpenFile file = null) : base("VerificationFilePage")
        {
            _verificationPage = verificationPage;
            _item             = verifyItem ?? new VerifyFileJson();

            AddTitleRow("Title");
            AddHeaderRow("File");
            Status.AddBusyView(AddButtonRow("Select", Select));

            _link = AddEntryRow(null, "Link");
            _link.SetDetailViewIcon(Icons.RowLink);

            _verifyView = new VerifyFileView(false);
            AddViewRow(_verifyView);

            if (verifyItem != null)
            {
                _link.Edit.Text = verifyItem.link;
                _fileName       = verifyItem.name;
                _fileHash       = verifyItem.GetHash();
                _length         = verifyItem.length;
                _verifyView.Update(verifyItem);
            }

            Status.Add(_link.Edit, T("LinkStatus"), (view, entry, newText, oldText) =>
            {
                if (string.IsNullOrEmpty(newText))
                {
                    return(true);
                }

                return(newText.IsValdiUrl(true));
            });

            Status.Add(T("FileStatus"), (sv) =>
            {
                return(!string.IsNullOrEmpty(_fileName) && _fileHash != null && _length > 0);
            });

            AddFooterRow();

            AddSubmitRow("Submit", Submit);

            if (file != null)
            {
                UIApp.Run(() => HashFile(file));
            }
        }
예제 #5
0
        async Task Verify(VerifyFileJson verifyFile)
        {
            using (var file = await UIApp.OpenFilePicker2())
            {
                if (file.Valid)
                {
                    IsBusy = true;
                    Toast(".VerificationFilePage.Wait");

                    var valid = await Task.Run(() => VerifyFileJson.CheckHash(file.Stream, verifyFile.GetHash(), verifyFile.length));

                    IsBusy = false;
                    await MessageAsync(valid? ".VerifyPage.Success" : ".VerifyPage.Failure");
                }
            }
        }
예제 #6
0
        public static async Task Open(AddVerificationPage verificationPage, VerifyFileJson verifyItem)
        {
            if (verifyItem != null)
            {
                await verificationPage.Navigation.PushAsync(new VerificationFilePage(verificationPage, verifyItem));
            }
            else
            {
                var file = await UIApp.OpenFilePicker2(null);

                if (file.Valid)
                {
                    await verificationPage.Navigation.PushAsync(new VerificationFilePage(verificationPage, null, file));
                }
            }
        }
예제 #7
0
        protected override async Task Run()
        {
            var submitAccount = ServiceNode.GetSubmitAccounts <SubmitAccount>().First();

            var files = new List <VerifyFileJson>();

            for (var i = 0; i < this.files.Length; i++)
            {
                var file = this.files[i];
                try
                {
                    using (var stream = File.OpenRead(file))
                    {
                        var(hash, length) = VerifyFileJson.GenerateHash(stream);

                        var fileJson = new VerifyFileJson {
                            name = Path.GetFileName(file), hashtype = hash.HashType.ToString().ToLower(), hash = Hex.ToString(hash.RawData), length = length, link = GetLink(i)
                        };

                        files.Add(fileJson);
                    }
                }
                catch (Exception ex)
                {
                    Log.IgnoreException(ex);
                    return;
                }
            }

            var verifyJson = new VerifyJson {
                description = description, link = link, files = files
            };
            var result = await VerifyApp.Current.UploadVerification(submitAccount, verifyJson);

            if (result.TransactionResult == TransactionResultTypes.Ok)
            {
                SetSuccess(VerifyApp.Current.GetRequestCode(ServiceNode, VerifyServiceInfo.ChainIndex, ViewVerificationSchemeAction.ActionName, result.Transaction.OperationId));
            }
            else
            {
                SetError(result.GetErrorMessage());
            }
        }
예제 #8
0
        async Task VerifyFile(ButtonRow button)
        {
            var verify = button.Tag as VerifyJson;

            using (var file = await UIApp.OpenFilePicker2(null))
            {
                if (file.Valid)
                {
                    IsBusy = true;
                    Toast(".VerificationFilePage.Wait");

                    var valid = await Task.Run(() =>
                    {
                        try
                        {
                            (var hash, var length) = VerifyFileJson.GenerateHash(file.Stream);
                            if (hash != null)
                            {
                                foreach (var f in verify.files)
                                {
                                    var filehash = f.GetHash();
                                    if (hash == filehash && f.length == file.Stream.Length)
                                    {
                                        return(true);
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Log.IgnoreException(ex);
                        }

                        return(false);
                    });

                    IsBusy = false;
                    await MessageAsync(valid? "Success" : "Failure");
                }
            }
        }
예제 #9
0
        async Task HashFile(OpenFile file)
        {
            IsBusy = true;
            Toast("Wait");

            _fileHash = null;
            _fileName = null;
            _length   = 0;

            await Task.Run(() =>
            {
                try
                {
                    (var hash, var length) = VerifyFileJson.GenerateHash(file.Stream);
                    if (hash != null)
                    {
                        _fileName = file.Name;
                        _fileHash = hash;
                        _length   = length;
                    }
                }
                catch (Exception ex)
                {
                    Log.IgnoreException(ex);
                }
            });

            if (_fileHash != null)
            {
                _verifyView.Update(new VerifyFileJson {
                    name = _fileName, hashtype = _fileHash.HashType.ToString().ToLower(), hash = Hex.ToString(_fileHash.RawData), length = _length, link = _link.Edit.Text
                });
            }

            IsBusy = false;
        }