async Task Restore(ButtonRow arg) { IsBusy = true; var seed = Hex.FromString(_key.Edit.Text); var key = Key.GenerateEd25519(seed); var accountId = long.Parse(_accountId.Edit.Text); var name = _name.Edit.Text; var password = _password1.Edit.Text; var result = await WalletApp.RequestRestore(accountId, name, password, key); IsBusy = false; if (result.ResultType == HeleusClientResultTypes.Ok) { await MessageAsync("Success"); await Navigation.PopAsync(); } else { await ErrorTextAsync(result.GetErrorMessage()); } }
protected override async Task Submit(ButtonRow button) { try { if (!await ConfirmAsync("AuthorizeConfirm")) { return; } var password = _password?.Edit?.Text; var chainId = int.Parse(_chainIdText.Edit.Text); IsBusy = true; if (!_useCoreAccount) { // TODO Join Key Expire UIApp.Run(() => WalletApp.JoinChain(chainId, 0, _chainKey.PublicKey, password)); } else { UIApp.Run(() => WalletApp.JoinChainWithCoreAccount(chainId, password)); } } catch { } }
public RestorePage() : base("RestorePage") { EnableStatus(); AddTitleRow("Title"); AddHeaderRow("Account"); _accountId = AddEntryRow(null, "AccountId"); _accountId.SetDetailViewIcon(Icons.Coins); AddSeparatorRow(); _name = AddEntryRow("", "RegisterPage.Name"); _name.SetDetailViewIcon(Icons.Pencil); _password1 = AddPasswordRow("", "RegisterPage.Password1"); var password2 = AddPasswordRow("", "RegisterPage.Password2"); Status.AddBusyView(_accountId); Status.Add(_accountId.Edit, T("AccountStatus"), StatusValidators.PositiveNumberValidator); Status.Add(_password1.Edit, T("RegisterPage.PasswordStatus", WalletApp.MinPasswordLength), (sv, entry, newText, oldText) => { var pw1 = _password1.Edit.Text; var pw2 = password2.Edit.Text; return(WalletApp.IsValidPassword(pw1) && WalletApp.IsValidPassword(pw2) && pw1 == pw2); }). AddBusyView(password2); AddFooterRow(); AddHeaderRow("AuthorizeAccountPage.SignatureKey"); _passphrase = AddEntryRow(null, "AuthorizeAccountPage.Passphrase", ServiceNodeManager.MinimumServiceAccountPassphraseLength); var button = AddButtonRow("AuthorizeAccountPage.NewPassphrase", Generate); Status.AddBusyView(button); _key = AddEditorRow(null, "AuthorizeAccountPage.SignatureKey"); _key.SetDetailViewIcon(Icons.Key); Status.Add(_key.Edit, T("RestoreAccountPage.KeyStatus"), (sv, edit, newText, oldText) => { return(StatusValidators.HexValidator(64, sv, edit, newText, oldText)); }); AddFooterRow(); password2.Edit.TextChanged += (sender, e) => { Status.ReValidate(); }; AddSubmitRow("Restore", Restore); }
protected override async Task Submit(ButtonRow button) { IsBusy = true; var password = _password?.Edit?.Text; if (!WalletApp.IsCoreAccountUnlocked) { if (!await WalletApp.UnlockCoreAccount(password)) { await ErrorAsync("PasswordWrong"); IsBusy = false; return; } } var chainId = int.Parse(_chainIdText.Edit.Text); var coreAccount = WalletApp.CurrentCoreAccount; var secretKey = await PassphraseSecretKeyInfo.NewPassphraseSecretKey(chainId, $"{Hex.ToString(coreAccount.RawData)}.{coreAccount.AccountId}"); var key = await Task.Run(() => Key.GenerateEd25519(secretKey.SecretHash)); var encryption = await Task.Run(() => Encryption.GenerateAes256(key.Data, _derivedPassword)); _keyView.Update(key); if (!await ConfirmAsync("AuthorizeConfirm")) { IsBusy = false; return; } (var response, var publicKey) = await WalletApp.JoinChain(chainId, 0, key.PublicKey, password); if (response.TransactionResult == TransactionResultTypes.Ok || response.TransactionResult == TransactionResultTypes.AlreadyJoined) { var derivedKey = new DerivedKey(coreAccount.AccountId, chainId, publicKey.KeyIndex, encryption); var hex = Hex.ToCrcString(derivedKey.ToByteArray()); _export.Edit.Text = hex; UIApp.CopyToClipboard(hex); await MessageAsync("SuccessDerived"); } else { await ErrorTextAsync(response.GetErrorMessage()); } IsBusy = false; }
async Task Unlock(ButtonRow button) { IsBusy = true; var pw = _unlockPassword?.Edit?.Text; var success = await WalletApp.UnlockCoreAccount(pw); IsBusy = false; if (!success) { await MessageAsync("UnlockFailed"); } }
Task Submit(ButtonRow button) { IsBusy = true; var receiver = long.Parse(_receiver.Edit.Text); var amount = Currency.ToHel(decimal.Parse(_amount.Edit.Text)); var reason = _reason.Edit.Text; var password = _password.Edit.Text; _ = WalletApp.TransferCoins(receiver, amount, reason, password); return(Task.CompletedTask); }
protected override Task Submit(ButtonRow button) { var password = _password?.Edit?.Text; try { var purchaseid = int.Parse(_purchaseIdText.Edit.Text); _ = WalletApp.Purchase(_chainInfo.ChainId, purchaseid, password); IsBusy = true; } catch { } return Task.CompletedTask; }
async Task Submit(ButtonRow button) { var profileName = _profileName.Edit.Text; var realName = _realName.Edit.Text; var bio = _bio.Edit.Text; var items = new List <ProfileItemJson>(); if (!string.IsNullOrEmpty(profileName)) { items.Add(new ProfileItemJson { k = ProfileItemJson.ProfileNameItem, v = profileName, p = ProfileItemJson.ProfileNameItem }); } if (!string.IsNullOrEmpty(realName)) { items.Add(new ProfileItemJson { k = ProfileItemJson.RealNameItem, v = realName, p = ProfileItemJson.RealNameItem }); } if (!string.IsNullOrEmpty(bio)) { items.Add(new ProfileItemJson { k = ProfileItemJson.BioItem, v = bio, p = ProfileItemJson.BioItem }); } var rows = GetHeaderSectionRows("EditSection"); foreach (var row in rows) { if (row.Tag is ProfileItemJson profileItem) { items.Add(profileItem); } } if (ProfileItemJson.ListsEqual(items, _profileData.ProfileJsonItems)) { items = null; } if (items == null && _imageData == null) { await MessageAsync("NoChanges"); return; } IsBusy = true; UIApp.Run(() => WalletApp.UploadProfileData(_imageData, items)); }
Task Register(ButtonRow button) { IsBusy = true; var seed = Hex.FromString(_keyRow.Edit.Text); var key = Key.GenerateEd25519(seed); var name = _name.Edit.Text; var password = _password1.Edit.Text; UIApp.Run(() => WalletApp.RegisterCoreAccount(name, password, key)); return(Task.CompletedTask); }
protected override async Task Submit(ButtonRow button) { var info = _revenueInfo; if (info == null) { return; } var amount = _revenueInfo.TotalRevenue - _revenueInfo.Payout; if (await ConfirmTextAsync(T("ConfirmRevenue", Currency.ToString(amount)))) { IsBusy = true; UIApp.Run(() => WalletApp.RequestRevenue(info.ChainId, _revenueInfo)); } }
void AddAccountSection() { AddHeaderRow("Account"); if (ToolbarItems.Count == 0) { ToolbarItems.Add(new ExtToolbarItem(Tr.Get("Common.Refresh"), null, async() => { await WalletApp.UpdateCoreAccountBalance(); })); } var lastBalance = WalletApp.LastBalanceEvent; _balanceView = new BalanceView(); AddViewRow(_balanceView); AddButtonRow("Transfer", Transfer).SetDetailViewIcon(Icons.CreditCardFront); AddButtonRow("RequestRevenue", RequestRevenue).SetDetailViewIcon(Icons.MoneyCheckEdit); #if DEBUG AddButtonRow("Derived", async(button) => { await Navigation.PushAsync(new AuthorizeDerivedKeyPage(0, Hex.ToString(new byte[16]))); }); AddButtonRow("Join", Join); AddButtonRow("Purchase", Purchase); #endif AddSeparatorRow(); AddButtonRow("ProfilePage.Title", Profile).SetDetailViewIcon(Icons.UserCircle); AddButtonRow("ChainOverviewPage.Title", Chain).SetDetailViewIcon(Icons.Link); AddButtonRow(HandleRequestPage.HandleRequestTranslation, HandleRequest).SetDetailViewIcon(HandleRequestPage.HandleRequestIcon); AddFooterRow(); AddHeaderRow("Key"); AddButtonViewRow(new ClientAccountView(WalletApp.CurrentCoreAccount), DisplayKeyAction); AddSubmitButtonRow("Export", Export); AddFooterRow(); }
public ChainKeyPage(ChainPage chainPage, List <ChainKeyItem> chainKeys) : base("ChainKeyPage") { _chainPage = chainPage; AddTitleRow("Title"); AddHeaderRow("Key"); _name = AddEntryRow(null, "Name"); _name.SetDetailViewIcon(Icons.Pencil); _key = AddEditorRow(null, "Key"); _key.SetDetailViewIcon(Icons.Key); AddButtonRow("KeyButton", NewKey); _keyIndex = AddEntryRow(string.Empty, "KeyIndex"); _keyIndex.SetDetailViewIcon(Icons.Highlighter); AddFooterRow(); AddHeaderRow("KeyOptions"); _admin = AddSwitchRow("Admin"); _serviceKey = AddSwitchRow("ServiceKey"); _serviceVote = AddSwitchRow("ServiceVote"); _dataKey = AddSwitchRow("DataKey"); _dataVote = AddSwitchRow("DataVote"); _chainIndex = AddEntryRow(string.Empty, "ChainIndex"); _admin.Switch.Toggled = (swt) => { if (swt.IsToggled) { _serviceKey.Switch.IsToggled = false; _serviceVote.Switch.IsToggled = false; _dataKey.Switch.IsToggled = false; _dataVote.Switch.IsToggled = false; _chainIndex.Edit.Text = null; } Status.ReValidate(); }; _serviceKey.Switch.Toggled = (swt) => { if (swt.IsToggled) { _admin.Switch.IsToggled = false; _dataKey.Switch.IsToggled = false; _dataVote.Switch.IsToggled = false; _chainIndex.Edit.Text = null; } else { _serviceVote.Switch.IsToggled = false; } Status.ReValidate(); }; _serviceVote.Switch.Toggled = (swt) => { if (swt.IsToggled) { _serviceKey.Switch.IsToggled = true; } }; _dataKey.Switch.Toggled = (swt) => { if (swt.IsToggled) { _admin.Switch.IsToggled = false; _serviceKey.Switch.IsToggled = false; _serviceVote.Switch.IsToggled = false; } else { _dataVote.Switch.IsToggled = false; } Status.ReValidate(); }; _dataVote.Switch.Toggled = (swt) => { if (swt.IsToggled) { _dataKey.Switch.IsToggled = true; } }; AddFooterRow(); AddHeaderRow("Password"); _pw1 = AddEntryRow(string.Empty, "Password"); _pw1.SetDetailViewIcon(Icons.Unlock); _pw2 = AddEntryRow(string.Empty, "Password2"); _pw2.SetDetailViewIcon(Icons.Unlock); _pw1.Edit.IsPassword = _pw2.Edit.IsPassword = true; AddFooterRow(); Status.Add(_key.Edit, T("KeyStatus"), (view, entry, newText, oldtext) => { try { var key = Key.Restore(entry.Text); return(key.KeyType == Protocol.TransactionKeyType); } catch { } return(false); }). Add(_keyIndex.Edit, T("KeyIndexStatus", short.MinValue, short.MaxValue), (view, entry, newText, oldText) => { if (short.TryParse(newText, out var idx)) { foreach (var key in chainKeys) { if (key.Item.KeyIndex == idx) { return(false); } } return(true); } if (!newText.IsNullOrEmpty()) { entry.Text = oldText; } return(false); }). Add(_chainIndex.Edit, T("ChainIndexStatus"), (view, entry, newText, oldText) => { if (_dataKey.Switch.IsToggled) { return(StatusValidators.PositiveNumberValidatorWithZero(view, entry, newText, oldText)); } if (!string.IsNullOrEmpty(newText)) { entry.Text = null; } return(true); }). Add(_name.Edit, T("NameStatus"), (view, entry, newText, oldtext) => { return(!newText.IsNullOrWhiteSpace()); }). Add(_pw1.Edit, T("PasswordStatus", WalletApp.MinPasswordLength), (view, entry, newText, oldtext) => { var pw1 = _pw1.Edit.Text; var pw2 = _pw2.Edit.Text; return(WalletApp.IsValidPassword(pw1) && WalletApp.IsValidPassword(pw2) && pw1 == pw2); }); _pw2.Edit.TextChanged += (sender, e) => { Status.ReValidate(); }; AddSubmitRow("Submit", Submit); }
void UnlockPasswordChanged(object sender, Xamarin.Forms.TextChangedEventArgs e) { _unlockButton.IsEnabled = WalletApp.IsValidPassword(_unlockPassword.Edit.Text); }
public RegisterPage() : base("RegisterPage") { EnableStatus(); Subscribe <CoreAccountRegisterEvent>(AccountRegistered); AddTitleRow("Title"); AddHeaderRow("NewAccount"); _name = AddEntryRow("", "Name"); _name.SetDetailViewIcon(Icons.Pencil); _password1 = AddPasswordRow("", "Password1"); var password2 = AddPasswordRow("", "Password2"); Status.Add(_password1.Edit, T("PasswordStatus", WalletApp.MinPasswordLength), (sv, entry, newText, oldText) => { var pw1 = _password1.Edit.Text; var pw2 = password2.Edit.Text; return(WalletApp.IsValidPassword(pw1) && WalletApp.IsValidPassword(pw2) && pw1 == pw2); }). AddBusyView(password2); AddFooterRow(); AddHeaderRow(); AddLinkRow("Common.DataLicence", Tr.Get("Link.DataLicence")); var _agree = AddSwitchRow("Agree", Tr.Get("Common.DataLicence")); AddFooterRow(); Status. Add(_agree.Switch, T("AgreeStatus", Tr.Get("Common.DataLicence")), StatusValidators.IsToggled); password2.Edit.TextChanged += (sender, e) => { Status.ReValidate(); }; AddSubmitRow("Register", Register); AddHeaderRow("SignatureKeyInfo"); _selectionRow = AddSelectionRows(new SelectionItemList <AuthorizeType> { new SelectionItem <AuthorizeType>(AuthorizeType.Random, Tr.Get("AuthorizeType.Random")), new SelectionItem <AuthorizeType>(AuthorizeType.Passphrase, Tr.Get("AuthorizeType.Passphrase")) }, AuthorizeType.Random); _selectionRow.SelectionChanged = SecretTypeChanged; AddSeparatorRow(); _keyRow = AddEditorRow("", "SignatureKey"); _keyRow.SetDetailViewIcon(Icons.Key); Status.Add(_keyRow.Edit, T("AuthorizeAccountPage.KeyStatus"), (sv, edit, newText, oldText) => { return(StatusValidators.HexValidator(64, sv, edit, newText, oldText)); }); AddInfoRow("AuthorizeAccountPage.SignatureKeyInfo"); AddFooterRow(); AddHeaderRow(); AddLinkRow("Common.TermsOfUse", Tr.Get("Link.TermsOfUse")); AddLinkRow("Common.Privacy", Tr.Get("Link.Privacy")); AddFooterRow(); IsBusy = true; Update(); }
void Download(bool queryOlder = false) { IsBusy = true; UIApp.Run(() => WalletApp.DownloadCoreAccountTransaction(queryOlder)); }
Task Submit(ButtonRow button) { var name = _name.Edit.Text; var webSite = _website.Edit.Text; var keys = new List <WalletClient.ChainKey>(); var revokedKeys = new List <short>(); var endPoints = new List <Uri>(); var removedEndPoints = new List <Uri>(); var purchases = new List <PurchaseInfo>(); var revokedPurchases = new List <int>(); foreach (var chainKey in _chainKeys) { if (chainKey.Status == ChainItemStatus.New) { keys.Add(new WalletClient.ChainKey(chainKey.Key, chainKey.Item, chainKey.Name, chainKey.Password)); } else if (chainKey.Status == ChainItemStatus.Revoked) { revokedKeys.Add(chainKey.Item.KeyIndex); } } foreach (var endPoint in _endPoints) { if (endPoint.Status == ChainItemStatus.New) { endPoints.Add(new Uri(endPoint.Item)); } else if (endPoint.Status == ChainItemStatus.Revoked) { removedEndPoints.Add(new Uri(endPoint.Item)); } } foreach (var purchase in _purchases) { if (purchase.Status == ChainItemStatus.New) { purchases.Add(purchase.Item); } else if (purchase.Status == ChainItemStatus.Revoked) { revokedPurchases.Add(purchase.Item.PurchaseItemId); } } if (ChainInfo == null) { _ = WalletApp.RegisterChain(name, webSite, keys.ToArray(), endPoints.ToArray(), purchases.ToArray()); } else { if (keys.Count == 0 && endPoints.Count == 0 && purchases.Count == 0 && revokedKeys.Count == 0 && removedEndPoints.Count == 0 && revokedPurchases.Count == 0) { Message("NoChanges"); return(Task.CompletedTask); } var password = _keyPassword.Edit.Text; _ = WalletApp.UpdateChain(_chainKey, password, name, webSite, keys.ToArray(), endPoints.ToArray(), purchases.ToArray(), revokedKeys.ToArray(), removedEndPoints.ToArray(), revokedPurchases.ToArray()); } IsBusy = true; return(Task.CompletedTask); }
public static bool HeleusPasswordValidator(StatusView statusView, ExtEntry edit, string newText, string oldText) { return(WalletApp.IsValidPassword(newText)); }
public void Init() { SchemeAction.SchemeParser = (host, segments) => { var action = string.Empty; var startIndex = 0; if (host == "heleuscore.com" && segments[1] == "heleus/") { if (segments[2] == "request/") { action = SchemeAction.GetString(segments, 3); startIndex = 4; } } return(new Tuple <string, int>(action, startIndex)); }; SchemeAction.RegisterSchemeAction <TransferCoinsSchemeAction>(); SchemeAction.RegisterSchemeAction <RequestRevenueSchemeAction>(); SchemeAction.RegisterSchemeAction <AuthorizeServiceSchemeAction>(); SchemeAction.RegisterSchemeAction <AuthorizeServiceDerivedSchemeAction>(); SchemeAction.RegisterSchemeAction <ViewTransactionsSchemeAction>(); SchemeAction.RegisterSchemeAction <ViewProfileSchemeAction>(); SchemeAction.RegisterSchemeAction <AuthorizePurchaseSchemeAction>(); SchemeAction.RegisterSchemeAction <EditProfileSchemeAction>(); WalletApp.Init(); if (IsAndroid || IsUWP || IsDesktop) { var masterDetail = new ExtMasterDetailPage(); var navigation = new ExtNavigationPage(new Apps.HeleusApp.Page.Account.AccountPage()); MenuPage menu = null; if (IsAndroid) { menu = new AndroidMenuPage(masterDetail, navigation); } else if (IsUWP) { menu = new UWPMenuPage(masterDetail, navigation); } else if (IsDesktop) { menu = new DesktopMenuPage(masterDetail, navigation); } menu.AddPage(typeof(Apps.HeleusApp.Page.Account.AccountPage), "AccountPage.Title", Icons.Coins); menu.AddPage(typeof(Apps.HeleusApp.Page.Profile.ProfilePage), "ProfilePage.Title", Icons.UserCircle); menu.AddPage(typeof(TransactionsPage), "TransactionsPage.Title", Icons.History); menu.AddPage(typeof(SettingsPage), "SettingsPage.Title", Icons.Slider); masterDetail.Master = menu; masterDetail.Detail = navigation; MainPage = MainMasterDetailPage = masterDetail; } else if (IsIOS) { var tabbed = new ExtTabbedPage(); tabbed.AddPage(typeof(Apps.HeleusApp.Page.Account.AccountPage), "AccountPage.Title", "icons/coins.png"); tabbed.AddPage(typeof(Apps.HeleusApp.Page.Profile.ProfilePage), "ProfilePage.Title", "icons/usercircle.png"); tabbed.AddPage(typeof(TransactionsPage), "TransactionsPage.Title", "icons/history.png"); tabbed.AddPage(typeof(SettingsPage), "SettingsPage.Title", "icons/sliders.png"); MainPage = MainTabbedPage = tabbed; } }