mirror of
https://github.com/Nathanwoodburn/FireWallet.git
synced 2024-11-24 08:08:14 +11:00
main: Added ledger verification for receive address
This commit is contained in:
parent
03a6b4d6da
commit
92bef9ef5d
36
FireWallet/MainForm.Designer.cs
generated
36
FireWallet/MainForm.Designer.cs
generated
@ -39,6 +39,7 @@ namespace FireWallet
|
||||
toolStripStatusLabelNetwork = new ToolStripStatusLabel();
|
||||
toolStripStatusLabelstatus = new ToolStripStatusLabel();
|
||||
toolStripStatusLabelaccount = new ToolStripStatusLabel();
|
||||
toolStripStatusLabelLedger = new ToolStripStatusLabel();
|
||||
toolStripSplitButtonlogout = new ToolStripSplitButton();
|
||||
timerNodeStatus = new System.Windows.Forms.Timer(components);
|
||||
panelaccount = new Panel();
|
||||
@ -80,6 +81,7 @@ namespace FireWallet
|
||||
labelSendingTo = new Label();
|
||||
labelSendPrompt = new Label();
|
||||
panelRecieve = new Panel();
|
||||
buttonAddressVerify = new Button();
|
||||
pictureBoxReceiveQR = new PictureBox();
|
||||
labelReceive2 = new Label();
|
||||
textBoxReceiveAddress = new TextBox();
|
||||
@ -111,7 +113,6 @@ namespace FireWallet
|
||||
textBoxExAddr = new TextBox();
|
||||
labelSettings4 = new Label();
|
||||
textBoxExTX = new TextBox();
|
||||
toolStripStatusLabelLedger = new ToolStripStatusLabel();
|
||||
statusStripmain.SuspendLayout();
|
||||
panelaccount.SuspendLayout();
|
||||
groupBoxaccount.SuspendLayout();
|
||||
@ -167,6 +168,13 @@ namespace FireWallet
|
||||
toolStripStatusLabelaccount.Size = new Size(55, 17);
|
||||
toolStripStatusLabelaccount.Text = "Account:";
|
||||
//
|
||||
// toolStripStatusLabelLedger
|
||||
//
|
||||
toolStripStatusLabelLedger.Margin = new Padding(50, 3, 50, 2);
|
||||
toolStripStatusLabelLedger.Name = "toolStripStatusLabelLedger";
|
||||
toolStripStatusLabelLedger.Size = new Size(71, 17);
|
||||
toolStripStatusLabelLedger.Text = "Cold Wallet:";
|
||||
//
|
||||
// toolStripSplitButtonlogout
|
||||
//
|
||||
toolStripSplitButtonlogout.DisplayStyle = ToolStripItemDisplayStyle.Text;
|
||||
@ -619,16 +627,30 @@ namespace FireWallet
|
||||
//
|
||||
// panelRecieve
|
||||
//
|
||||
panelRecieve.Controls.Add(buttonAddressVerify);
|
||||
panelRecieve.Controls.Add(pictureBoxReceiveQR);
|
||||
panelRecieve.Controls.Add(labelReceive2);
|
||||
panelRecieve.Controls.Add(textBoxReceiveAddress);
|
||||
panelRecieve.Controls.Add(labelReceive1);
|
||||
panelRecieve.Location = new Point(1057, 62);
|
||||
panelRecieve.Location = new Point(117, 34);
|
||||
panelRecieve.Name = "panelRecieve";
|
||||
panelRecieve.Size = new Size(995, 523);
|
||||
panelRecieve.TabIndex = 17;
|
||||
panelRecieve.Visible = false;
|
||||
//
|
||||
// buttonAddressVerify
|
||||
//
|
||||
buttonAddressVerify.FlatStyle = FlatStyle.Flat;
|
||||
buttonAddressVerify.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
buttonAddressVerify.Location = new Point(769, 110);
|
||||
buttonAddressVerify.Name = "buttonAddressVerify";
|
||||
buttonAddressVerify.Size = new Size(126, 32);
|
||||
buttonAddressVerify.TabIndex = 21;
|
||||
buttonAddressVerify.Text = "Create && Verify";
|
||||
buttonAddressVerify.UseVisualStyleBackColor = true;
|
||||
buttonAddressVerify.Visible = false;
|
||||
buttonAddressVerify.Click += buttonAddressVerify_Click;
|
||||
//
|
||||
// pictureBoxReceiveQR
|
||||
//
|
||||
pictureBoxReceiveQR.Location = new Point(391, 190);
|
||||
@ -937,21 +959,14 @@ namespace FireWallet
|
||||
textBoxExTX.Size = new Size(307, 29);
|
||||
textBoxExTX.TabIndex = 1;
|
||||
//
|
||||
// toolStripStatusLabelLedger
|
||||
//
|
||||
toolStripStatusLabelLedger.Margin = new Padding(50, 3, 50, 2);
|
||||
toolStripStatusLabelLedger.Name = "toolStripStatusLabelLedger";
|
||||
toolStripStatusLabelLedger.Size = new Size(71, 17);
|
||||
toolStripStatusLabelLedger.Text = "Cold Wallet:";
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(1152, 575);
|
||||
Controls.Add(panelRecieve);
|
||||
Controls.Add(panelSettings);
|
||||
Controls.Add(panelDomains);
|
||||
Controls.Add(panelRecieve);
|
||||
Controls.Add(panelSend);
|
||||
Controls.Add(panelPortfolio);
|
||||
Controls.Add(panelNav);
|
||||
@ -1074,5 +1089,6 @@ namespace FireWallet
|
||||
private GroupBox groupBoxSettingsWallet;
|
||||
private Button buttonSettingsRescan;
|
||||
private ToolStripStatusLabel toolStripStatusLabelLedger;
|
||||
private Button buttonAddressVerify;
|
||||
}
|
||||
}
|
@ -46,6 +46,8 @@ namespace FireWallet
|
||||
account = "";
|
||||
timerNodeStatus.Stop();
|
||||
LoadSettings();
|
||||
UpdateTheme();
|
||||
LoadNode();
|
||||
|
||||
if (userSettings.ContainsKey("hide-splash"))
|
||||
{
|
||||
@ -58,8 +60,6 @@ namespace FireWallet
|
||||
}
|
||||
}
|
||||
|
||||
UpdateTheme();
|
||||
LoadNode();
|
||||
|
||||
|
||||
// Edit the theme of the navigation panel
|
||||
@ -523,6 +523,15 @@ namespace FireWallet
|
||||
if (jObject["watchOnly"].ToString() == "True") watchOnly = true;
|
||||
else watchOnly = false;
|
||||
toolStripStatusLabelLedger.Text = "Cold Wallet: " + watchOnly.ToString();
|
||||
|
||||
if (watchOnly)
|
||||
{
|
||||
buttonAddressVerify.Visible = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonAddressVerify.Visible = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1118,7 +1127,8 @@ namespace FireWallet
|
||||
labelSendingError.Hide();
|
||||
labelSendingError.Text = "";
|
||||
buttonNavPortfolio.PerformClick();
|
||||
} else // Cold wallet signing
|
||||
}
|
||||
else // Cold wallet signing
|
||||
{
|
||||
AddLog("Sending CW " + amount.ToString() + " HNS to " + address);
|
||||
|
||||
@ -1202,7 +1212,8 @@ namespace FireWallet
|
||||
textBoxSendingTo.Text = "";
|
||||
textBoxSendingAmount.Text = "";
|
||||
buttonNavPortfolio.PerformClick();
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
NotifyForm notifyError = new NotifyForm("Error Transaction Failed\nCheck logs for more details");
|
||||
notifyError.ShowDialog();
|
||||
@ -1219,7 +1230,7 @@ namespace FireWallet
|
||||
labelSendingError.Text = ex.Message;
|
||||
}
|
||||
}
|
||||
private void CloneRepository(string repositoryUrl, string destinationPath)
|
||||
public void CloneRepository(string repositoryUrl, string destinationPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -1272,7 +1283,7 @@ namespace FireWallet
|
||||
AddLog(ex.Message);
|
||||
}
|
||||
}
|
||||
static bool CheckNodeInstalled()
|
||||
public bool CheckNodeInstalled()
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -1308,6 +1319,52 @@ namespace FireWallet
|
||||
labelReceive2.Text = "Copied to clipboard";
|
||||
labelReceive2.Left = (panelRecieve.Width - labelReceive2.Width) / 2;
|
||||
}
|
||||
private async void buttonAddressVerify_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
var proc = new Process();
|
||||
proc.StartInfo.CreateNoWindow = true;
|
||||
proc.StartInfo.RedirectStandardInput = true;
|
||||
proc.StartInfo.RedirectStandardOutput = true;
|
||||
proc.StartInfo.UseShellExecute = false;
|
||||
proc.StartInfo.RedirectStandardError = true;
|
||||
proc.StartInfo.FileName = "node.exe";
|
||||
proc.StartInfo.Arguments = dir + "hsd-ledger/bin/hsd-ledger createaddress --api-key " + nodeSettings["Key"] + " -w " + account;
|
||||
proc.Start();
|
||||
|
||||
// Wait 1 sec
|
||||
await Task.Delay(1000);
|
||||
|
||||
// Get the output into a string
|
||||
string result = proc.StandardOutput.ReadLine();
|
||||
try
|
||||
{
|
||||
result = result.Replace("Verify address on Ledger device: ", "");
|
||||
}
|
||||
catch { }
|
||||
AddLog(result);
|
||||
textBoxReceiveAddress.Text = result;
|
||||
Size size = TextRenderer.MeasureText(textBoxReceiveAddress.Text, textBoxReceiveAddress.Font);
|
||||
textBoxReceiveAddress.Width = size.Width + 10;
|
||||
textBoxReceiveAddress.Left = (panelRecieve.Width - textBoxReceiveAddress.Width) / 2;
|
||||
|
||||
|
||||
NotifyForm notify = new NotifyForm("Please confirm the address on your Ledger device", false);
|
||||
notify.Show();
|
||||
|
||||
// Handle events until process exits
|
||||
while (!proc.HasExited)
|
||||
{
|
||||
// Check for cancellation
|
||||
if (proc.WaitForExit(100))
|
||||
break;
|
||||
Application.DoEvents();
|
||||
}
|
||||
|
||||
notify.CloseNotification();
|
||||
notify.Dispose();
|
||||
|
||||
}
|
||||
#endregion
|
||||
#region Domains
|
||||
public string[] Domains { get; set; }
|
||||
@ -1525,5 +1582,7 @@ namespace FireWallet
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
1
FireWallet/NewAccountForm.Designer.cs
generated
1
FireWallet/NewAccountForm.Designer.cs
generated
@ -104,7 +104,6 @@
|
||||
//
|
||||
// buttonCold
|
||||
//
|
||||
buttonCold.Enabled = false;
|
||||
buttonCold.FlatStyle = FlatStyle.Flat;
|
||||
buttonCold.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
buttonCold.Location = new Point(147, 239);
|
||||
|
@ -2,9 +2,11 @@
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Security.Principal;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
@ -59,9 +61,50 @@ namespace FireWallet
|
||||
groupBoxNew.Text = "Import Wallet";
|
||||
}
|
||||
|
||||
private void buttonCold_Click(object sender, EventArgs e)
|
||||
private async void buttonCold_Click(object sender, EventArgs e)
|
||||
{
|
||||
// TODO - Cold wallet
|
||||
if (!Directory.Exists(mainForm.dir + "hsd-ledger"))
|
||||
{
|
||||
if (mainForm.CheckNodeInstalled() == false)
|
||||
{
|
||||
mainForm.AddLog("Node not installed");
|
||||
NotifyForm notify1 = new NotifyForm("Node not installed\nPlease install it to use Ledger");
|
||||
notify1.ShowDialog();
|
||||
notify1.Dispose();
|
||||
return;
|
||||
}
|
||||
mainForm.AddLog("Installing hsd-ledger");
|
||||
|
||||
// Try to install hsd-ledger
|
||||
try
|
||||
{
|
||||
NotifyForm Notifyinstall = new NotifyForm("Installing hsd-ledger\nThis may take a few minutes\nDo not close FireWallet", false);
|
||||
Notifyinstall.Show();
|
||||
// Wait for the notification to show
|
||||
await Task.Delay(1000);
|
||||
|
||||
string repositoryUrl = "https://github.com/handshake-org/hsd-ledger.git";
|
||||
string destinationPath = mainForm.dir + "hsd-ledger";
|
||||
mainForm.CloneRepository(repositoryUrl, destinationPath);
|
||||
|
||||
Notifyinstall.CloseNotification();
|
||||
Notifyinstall.Dispose();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
NotifyForm notifyError = new NotifyForm("Error installing hsd-ledger\n" + ex.Message);
|
||||
mainForm.AddLog(ex.Message);
|
||||
notifyError.ShowDialog();
|
||||
notifyError.Dispose();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Import HSD Wallet
|
||||
groupBoxNew.Show();
|
||||
groupBoxNew.Text = "Import Ledger";
|
||||
buttonNext.Show();
|
||||
page = 4;
|
||||
}
|
||||
|
||||
private void textBoxNewName_TextChanged(object sender, EventArgs e)
|
||||
@ -152,6 +195,40 @@ namespace FireWallet
|
||||
notify2.Dispose();
|
||||
this.Close();
|
||||
}
|
||||
else if (page == 4)
|
||||
{
|
||||
// Import Ledger
|
||||
buttonNext.Enabled = false;
|
||||
|
||||
|
||||
var proc = new Process();
|
||||
proc.StartInfo.CreateNoWindow = true;
|
||||
proc.StartInfo.RedirectStandardInput = true;
|
||||
proc.StartInfo.RedirectStandardOutput = true;
|
||||
proc.StartInfo.UseShellExecute = false;
|
||||
proc.StartInfo.RedirectStandardError = true;
|
||||
proc.StartInfo.FileName = "node.exe";
|
||||
proc.StartInfo.Arguments = mainForm.dir + "hsd-ledger/bin/hsd-ledger createwallet " + textBoxNewPass1.Text + " --api-key " + mainForm.nodeSettings["Key"];
|
||||
var outputBuilder = new StringBuilder();
|
||||
|
||||
// Event handler for capturing output data
|
||||
proc.OutputDataReceived += (sender, args) =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(args.Data))
|
||||
{
|
||||
outputBuilder.AppendLine(args.Data);
|
||||
}
|
||||
};
|
||||
|
||||
proc.Start();
|
||||
proc.BeginOutputReadLine();
|
||||
proc.WaitForExit();
|
||||
|
||||
mainForm.AddLog(outputBuilder.ToString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
HttpClient httpClient = new HttpClient();
|
||||
|
Loading…
Reference in New Issue
Block a user