2 Commits

Author SHA1 Message Date
6218b337fb main: Added Yubikey device check and removed redundant code
- Added a check for the number of connected Yubikeys
- Removed redundant code that prompts user to insert Yubikey before unlocking.
2023-06-15 19:31:24 +10:00
79350570fd main: Added YubiKey
- Added a reference to the Yubico.YubiKey package in FireWallet.csproj

MainForm.cs: Added Yubikey login functionality
- Added code to use a connected Yubikey to encrypt and decrypt account passwords for login.

MainForm.Designer.cs: Added button for Yubikey settings
- Created a button for users to access the settings for using their Yubikey.
2023-06-15 19:08:55 +10:00
14 changed files with 555 additions and 466 deletions

View File

@@ -465,7 +465,7 @@ namespace FireWallet
HttpClient httpClient = new HttpClient();
private async void buttonSend_Click(object sender, EventArgs e)
{
if (!mainForm.WatchOnly)
if (!mainForm.watchOnly)
{
string batchTX = "[" + string.Join(", ", batches.Select(batch => batch.ToString())) + "]";
string content = "{\"method\": \"sendbatch\",\"params\":[ " + batchTX + "]}";
@@ -508,7 +508,7 @@ namespace FireWallet
JObject result = JObject.Parse(jObject["result"].ToString());
string hash = result["hash"].ToString();
AddLog("Batch sent with hash: " + hash);
NotifyForm notifyForm2 = new NotifyForm("Batch sent\nThis might take a while to mine.", "Explorer", mainForm.UserSettings["explorer-tx"] + hash);
NotifyForm notifyForm2 = new NotifyForm("Batch sent\nThis might take a while to mine.", "Explorer", mainForm.userSettings["explorer-tx"] + hash);
notifyForm2.ShowDialog();
notifyForm2.Dispose();
this.Close();
@@ -552,7 +552,7 @@ namespace FireWallet
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.FileName = "node.exe";
proc.StartInfo.WorkingDirectory = dir + "hsd-ledger/bin/";
string args = "hsd-ledger/bin/hsd-ledger sendraw \"\"" + response.Replace("\"","\\\"") + "\"\" [" + domainslist + "] --api-key " + mainForm.NodeSettings["Key"] + " -w " + mainForm.Account;
string args = "hsd-ledger/bin/hsd-ledger sendraw \"\"" + response.Replace("\"","\\\"") + "\"\" [" + domainslist + "] --api-key " + mainForm.nodeSettings["Key"] + " -w " + mainForm.account;
proc.StartInfo.Arguments = dir + args;
var outputBuilder = new StringBuilder();
@@ -578,7 +578,7 @@ namespace FireWallet
if (output.Contains("Submitted TXID"))
{
string hash = output.Substring(output.IndexOf("Submitted TXID") + 16, 64);
string link = mainForm.UserSettings["explorer-tx"] + hash;
string link = mainForm.userSettings["explorer-tx"] + hash;
NotifyForm notifySuccess = new NotifyForm("Transaction Sent\nThis transaction could take up to 20 minutes to mine",
"Explorer", link);
notifySuccess.ShowDialog();
@@ -739,10 +739,10 @@ namespace FireWallet
/// <returns></returns>
private async Task<string> APIPost(string path, bool wallet, string content)
{
string key = mainForm.NodeSettings["Key"];
string ip = mainForm.NodeSettings["IP"];
string key = mainForm.nodeSettings["Key"];
string ip = mainForm.nodeSettings["IP"];
string port = "1203";
if (mainForm.HSDNetwork == 1)
if (mainForm.network == 1)
{
port = "1303";
}

View File

@@ -27,7 +27,7 @@ namespace FireWallet
InitializeComponent();
this.domain = domain;
this.mainForm = mainForm;
nodeSettings = mainForm.NodeSettings;
nodeSettings = mainForm.nodeSettings;
cancel = true;
this.Text = domain + "/ DNS | FireWallet";
@@ -439,7 +439,7 @@ namespace FireWallet
string key = nodeSettings["Key"];
string ip = nodeSettings["IP"];
string port = "1203";
if (mainForm.HSDNetwork == 1)
if (mainForm.network == 1)
{
port = "1303";
}
@@ -478,7 +478,7 @@ namespace FireWallet
string ip = nodeSettings["IP"];
string port = "1203";
if (mainForm.HSDNetwork == 1)
if (mainForm.network == 1)
{
port = "1303";
}

View File

@@ -32,7 +32,7 @@ namespace FireWallet
this.explorerTX = explorerTX;
this.explorerName = explorerName;
this.mainForm = mainForm;
this.theme = mainForm.Theme;
this.theme = mainForm.theme;
// Apply theme
this.BackColor = ColorTranslator.FromHtml(theme["background"]);
@@ -47,7 +47,7 @@ namespace FireWallet
mainForm.ThemeControl(c);
}
applyTransparency(mainForm.Theme);
applyTransparency(mainForm.theme);
}
#region Theme
private void applyTransparency(Dictionary<string, string> theme)
@@ -157,7 +157,7 @@ namespace FireWallet
network = Convert.ToInt32(nodeSettings["Network"]);
GetName();
if (mainForm.WatchOnly)
if (mainForm.watchOnly)
{
buttonActionMain.Enabled = false; // Only allow sending in batches for ledger
}

View File

@@ -12,7 +12,7 @@
<PackageIcon>HSDBatcher.png</PackageIcon>
<RepositoryUrl>https://github.com/Nathanwoodburn/FireWallet</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Version>3.2</Version>
<Version>3.0</Version>
</PropertyGroup>
<ItemGroup>
@@ -30,6 +30,7 @@
<PackageReference Include="DnsClient" Version="1.7.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="QRCoder" Version="1.4.3" />
<PackageReference Include="Yubico.YubiKey" Version="1.7.0" />
</ItemGroup>
<ItemGroup>

View File

@@ -104,6 +104,7 @@ namespace FireWallet
textBoxDomainSearch = new TextBox();
panelSettings = new Panel();
groupBoxSettingsWallet = new GroupBox();
buttonSettingsYubikey = new Button();
buttonSettingsRescan = new Button();
buttonSeed = new Button();
groupBoxSettingsMisc = new GroupBox();
@@ -124,8 +125,6 @@ namespace FireWallet
textBoxExAddr = new TextBox();
labelSettings4 = new Label();
textBoxExTX = new TextBox();
toolStripSeparator1 = new ToolStripSeparator();
otherProjectsToolStripMenuItem = new ToolStripMenuItem();
statusStripmain.SuspendLayout();
panelaccount.SuspendLayout();
groupBoxaccount.SuspendLayout();
@@ -203,7 +202,7 @@ namespace FireWallet
// toolStripDropDownButtonHelp
//
toolStripDropDownButtonHelp.DisplayStyle = ToolStripItemDisplayStyle.Text;
toolStripDropDownButtonHelp.DropDownItems.AddRange(new ToolStripItem[] { githubToolStripMenuItem, websiteToolStripMenuItem, supportDiscordServerToolStripMenuItem, toolStripSeparator1, otherProjectsToolStripMenuItem });
toolStripDropDownButtonHelp.DropDownItems.AddRange(new ToolStripItem[] { githubToolStripMenuItem, websiteToolStripMenuItem, supportDiscordServerToolStripMenuItem });
toolStripDropDownButtonHelp.Image = (Image)resources.GetObject("toolStripDropDownButtonHelp.Image");
toolStripDropDownButtonHelp.ImageTransparentColor = Color.Magenta;
toolStripDropDownButtonHelp.Margin = new Padding(20, 2, 0, 0);
@@ -243,7 +242,7 @@ namespace FireWallet
//
panelaccount.BackColor = Color.Transparent;
panelaccount.Controls.Add(groupBoxaccount);
panelaccount.Location = new Point(1082, 211);
panelaccount.Location = new Point(132, 30);
panelaccount.Name = "panelaccount";
panelaccount.Size = new Size(1074, 642);
panelaccount.TabIndex = 1;
@@ -576,7 +575,7 @@ namespace FireWallet
panelSend.Controls.Add(labelSendingTo);
panelSend.Controls.Add(labelSendPrompt);
panelSend.Controls.Add(labelHIPArrow);
panelSend.Location = new Point(138, 33);
panelSend.Location = new Point(880, 441);
panelSend.Name = "panelSend";
panelSend.Size = new Size(974, 521);
panelSend.TabIndex = 2;
@@ -794,7 +793,7 @@ namespace FireWallet
panelDomains.Controls.Add(groupBoxDomains);
panelDomains.Controls.Add(labelDomainSearch);
panelDomains.Controls.Add(textBoxDomainSearch);
panelDomains.Location = new Point(120, 48);
panelDomains.Location = new Point(861, 364);
panelDomains.Name = "panelDomains";
panelDomains.Size = new Size(920, 536);
panelDomains.TabIndex = 18;
@@ -883,7 +882,7 @@ namespace FireWallet
panelSettings.Controls.Add(buttonSettingsSave);
panelSettings.Controls.Add(groupBoxSettingsExplorer);
panelSettings.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
panelSettings.Location = new Point(1065, 51);
panelSettings.Location = new Point(848, 306);
panelSettings.Name = "panelSettings";
panelSettings.Size = new Size(930, 550);
panelSettings.TabIndex = 19;
@@ -891,6 +890,7 @@ namespace FireWallet
//
// groupBoxSettingsWallet
//
groupBoxSettingsWallet.Controls.Add(buttonSettingsYubikey);
groupBoxSettingsWallet.Controls.Add(buttonSettingsRescan);
groupBoxSettingsWallet.Controls.Add(buttonSeed);
groupBoxSettingsWallet.Location = new Point(507, 16);
@@ -900,6 +900,17 @@ namespace FireWallet
groupBoxSettingsWallet.TabStop = false;
groupBoxSettingsWallet.Text = "Wallet Controls";
//
// buttonSettingsYubikey
//
buttonSettingsYubikey.FlatStyle = FlatStyle.Flat;
buttonSettingsYubikey.Location = new Point(6, 133);
buttonSettingsYubikey.Name = "buttonSettingsYubikey";
buttonSettingsYubikey.Size = new Size(98, 50);
buttonSettingsYubikey.TabIndex = 9;
buttonSettingsYubikey.Text = "YubiKey";
buttonSettingsYubikey.UseVisualStyleBackColor = true;
buttonSettingsYubikey.Click += buttonSettingsYubikey_Click;
//
// buttonSettingsRescan
//
buttonSettingsRescan.FlatStyle = FlatStyle.Flat;
@@ -1093,27 +1104,15 @@ namespace FireWallet
textBoxExTX.Size = new Size(307, 29);
textBoxExTX.TabIndex = 1;
//
// toolStripSeparator1
//
toolStripSeparator1.Name = "toolStripSeparator1";
toolStripSeparator1.Size = new Size(191, 6);
//
// otherProjectsToolStripMenuItem
//
otherProjectsToolStripMenuItem.Name = "otherProjectsToolStripMenuItem";
otherProjectsToolStripMenuItem.Size = new Size(194, 22);
otherProjectsToolStripMenuItem.Text = "Other Projects";
otherProjectsToolStripMenuItem.Click += otherProjectsToolStripMenuItem_Click;
//
// MainForm
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1152, 575);
Controls.Add(panelaccount);
Controls.Add(panelSettings);
Controls.Add(panelDomains);
Controls.Add(panelSend);
Controls.Add(panelSettings);
Controls.Add(panelaccount);
Controls.Add(panelPortfolio);
Controls.Add(panelRecieve);
Controls.Add(panelNav);
@@ -1248,7 +1247,6 @@ namespace FireWallet
private Label labelSendingHIPAddress;
private ComboBox comboBoxDomainSort;
private Label labelDomainSort;
private ToolStripSeparator toolStripSeparator1;
private ToolStripMenuItem otherProjectsToolStripMenuItem;
private Button buttonSettingsYubikey;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -27,7 +27,7 @@ namespace FireWallet
private void NewAccountForm_Load(object sender, EventArgs e)
{
page = 0;
Dictionary<string, string> theme = mainForm.Theme;
Dictionary<string, string> theme = mainForm.theme;
this.BackColor = ColorTranslator.FromHtml(theme["background"]);
this.ForeColor = ColorTranslator.FromHtml(theme["foreground"]);
foreach (Control c in Controls)
@@ -208,7 +208,7 @@ namespace FireWallet
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"];
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
@@ -243,10 +243,10 @@ namespace FireWallet
HttpClient httpClient = new HttpClient();
private async Task<string> APIPut(string path, bool wallet, string content)
{
string key = mainForm.NodeSettings["Key"];
string ip = mainForm.NodeSettings["IP"];
string key = mainForm.nodeSettings["Key"];
string ip = mainForm.nodeSettings["IP"];
string port = "1203";
if (mainForm.HSDNetwork == 1)
if (mainForm.network == 1)
{
port = "1303";
}

View File

@@ -28,13 +28,21 @@
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SplashScreen));
timerSplashDelay = new System.Windows.Forms.Timer(components);
label1 = new Label();
pictureBox1 = new PictureBox();
label2 = new Label();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
SuspendLayout();
//
// timerSplashDelay
//
timerSplashDelay.Enabled = true;
timerSplashDelay.Interval = 3000;
timerSplashDelay.Tick += timerSplashDelay_Tick;
//
// label1
//
label1.AutoSize = true;
@@ -83,6 +91,7 @@
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "FireWallet";
TopMost = true;
FormClosing += SplashScreen_FormClosing;
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
ResumeLayout(false);
@@ -90,6 +99,8 @@
}
#endregion
private System.Windows.Forms.Timer timerSplashDelay;
private Label label1;
private PictureBox pictureBox1;
private Label label2;

View File

@@ -13,25 +13,23 @@ namespace FireWallet
{
public partial class SplashScreen : Form
{
public SplashScreen(bool timer)
public SplashScreen()
{
InitializeComponent();
close = false;
}
bool close;
private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e)
{
if (!close)
{
e.Cancel = true;
}
}
public void CloseSplash()
private void timerSplashDelay_Tick(object sender, EventArgs e)
{
close = true;
this.Close();
}
private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e)
{
}
private void label2_Click(object sender, EventArgs e)
{
ProcessStartInfo psi = new ProcessStartInfo

View File

@@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timerSplashDelay.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>

View File

@@ -22,8 +22,8 @@ namespace FireWallet
{
InitializeComponent();
// Theme
this.BackColor = ColorTranslator.FromHtml(mainForm.Theme["background"]);
this.ForeColor = ColorTranslator.FromHtml(mainForm.Theme["foreground"]);
this.BackColor = ColorTranslator.FromHtml(mainForm.theme["background"]);
this.ForeColor = ColorTranslator.FromHtml(mainForm.theme["foreground"]);
foreach (Control c in Controls)
{
mainForm.ThemeControl(c);
@@ -35,7 +35,7 @@ namespace FireWallet
private async void TXForm_Load(object sender, EventArgs e)
{
tx = JObject.Parse(await mainForm.APIGet("wallet/"+mainForm.Account+"/tx/" + txid,true));
tx = JObject.Parse(await mainForm.APIGet("wallet/"+mainForm.account+"/tx/" + txid,true));
this.Text = "TX: " + tx["hash"].ToString();
labelHash.Text = "Hash: " + tx["hash"].ToString();
@@ -142,7 +142,7 @@ namespace FireWallet
private void Explorer_Click(object sender, EventArgs e)
{
// Open the transaction in a browser
string url = mainForm.UserSettings["explorer-tx"] + tx["hash"].ToString();
string url = mainForm.userSettings["explorer-tx"] + tx["hash"].ToString();
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = url,

View File

@@ -25,18 +25,18 @@ namespace FireWallet
Domain = domain;
this.Text = "Transfer " + Domain + " | FireWallet";
label1.Text = "Transfer " + Domain;
if (MainForm.Theme.ContainsKey("error"))
if (MainForm.theme.ContainsKey("error"))
{
labelError.ForeColor = ColorTranslator.FromHtml(MainForm.Theme["error"]);
labelError.ForeColor = ColorTranslator.FromHtml(MainForm.theme["error"]);
}
if (MainForm.WatchOnly)
if (MainForm.watchOnly)
{
buttonTransfer.Enabled = false; // watch only wallet only batch
}
// Theme
this.BackColor = ColorTranslator.FromHtml(MainForm.Theme["background"]);
this.ForeColor = ColorTranslator.FromHtml(MainForm.Theme["foreground"]);
this.BackColor = ColorTranslator.FromHtml(MainForm.theme["background"]);
this.ForeColor = ColorTranslator.FromHtml(MainForm.theme["foreground"]);
foreach (Control c in Controls)
{
MainForm.ThemeControl(c);
@@ -73,7 +73,7 @@ namespace FireWallet
}
JObject result = JObject.Parse(APIresp["result"].ToString());
string hash = result["hash"].ToString();
string link = MainForm.UserSettings["explorer-tx"] + hash;
string link = MainForm.userSettings["explorer-tx"] + hash;
NotifyForm notifySuccess = new NotifyForm("Transaction Sent\nThis transaction could take up to 20 minutes to mine",
"Explorer", link);
notifySuccess.ShowDialog();

View File

@@ -224,15 +224,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:FireWallet"
"ProductCode" = "8:{C4D699E7-B668-48CD-AC78-920E852B98D9}"
"PackageCode" = "8:{38D2B4D2-E8BA-43AF-8475-F0E70AD733FE}"
"ProductCode" = "8:{007B0A5E-57B9-4DB7-AABE-5A3631A89BEB}"
"PackageCode" = "8:{546D4209-3E58-4144-A9DC-E659A2482DD4}"
"UpgradeCode" = "8:{0C86F725-6B01-4173-AA05-3F0EDF481362}"
"AspNetVersion" = "8:"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:3.2"
"ProductVersion" = "8:3.0"
"Manufacturer" = "8:Nathan.Woodburn/"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:https://l.woodburn.au/discord"

View File

@@ -2,14 +2,6 @@
Experimental wallet for Handshake chain
## Installation
### Dependencies
You will need .net desktop installed. You can download it from [here](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-desktop-6.0.18-windows-x64-installer).
You will also need Node, NPM, and git installed if you want to use the internal HSD or Ledger wallets.
[Git](https://git-scm.com/downloads)
[Node](https://nodejs.org/en/download/)
[NPM](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
### From Releases
You can install the latest release from [here](https://github.com/Nathanwoodburn/FireWallet/releases/).
@@ -141,12 +133,6 @@ They are stored in `%appdata%\FireWallet\` (`C:\Users\{username}\AppData\Roaming
## settings.txt
This file stores the user settings for the application.
If you want to change the default HIP-02 resolver you can add these settings
```yaml
hip-02-ip: 127.0.0.1
hip-02-port: 5350
```
## node.txt
This file stores the node (HSD/Bob connection) settings.