mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-07-28 02:57:56 +00:00
353 lines
13 KiB
C#
Executable File
353 lines
13 KiB
C#
Executable File
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.IO;
|
|
using System.Security;
|
|
using MTApiService;
|
|
|
|
namespace Licensing
|
|
{
|
|
public partial class MainForm : Form
|
|
{
|
|
private bool mIsSaved = true;
|
|
|
|
public MainForm()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void buttonGenerateKey_Click(object sender, EventArgs e)
|
|
{
|
|
textBoxPrivateKey.Text = DigitalSignatureHelper.GeneratePrivateKey();
|
|
|
|
mIsSaved = false;
|
|
}
|
|
|
|
private void buttonGetPublicKey_Click(object sender, EventArgs e)
|
|
{
|
|
string privateKey = textBoxPrivateKey.Text;
|
|
|
|
if (string.IsNullOrEmpty(privateKey) == false)
|
|
{
|
|
textBoxPublicKey.Text = DigitalSignatureHelper.GetPublicKey(privateKey);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Private Key is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
private void buttonSaveKey_Click(object sender, EventArgs e)
|
|
{
|
|
string privateKey = textBoxPrivateKey.Text;
|
|
|
|
if (string.IsNullOrEmpty(privateKey) == false)
|
|
{
|
|
SaveFileDialog dlg = new SaveFileDialog();
|
|
|
|
dlg.Filter = "MetaTraderApi Key Files (*.mtk)|*.mtk";
|
|
dlg.Title = "Save MetaTraderApi Key File";
|
|
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
try
|
|
{
|
|
using (TextWriter file = new StreamWriter(dlg.FileName, true))
|
|
{
|
|
file.WriteLine(privateKey);
|
|
}
|
|
|
|
mIsSaved = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var errorMsg = string.Format("Saving failed!\n{0}", ex.Message);
|
|
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Private Key is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
private void buttonLoadKey_Click(object sender, EventArgs e)
|
|
{
|
|
if (mIsSaved == false)
|
|
{
|
|
if (MessageBox.Show("Private Key is not saved. Continue?", "Private Key", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
|
|
return;
|
|
}
|
|
|
|
OpenFileDialog dlg = new OpenFileDialog();
|
|
|
|
dlg.Filter = "MetaTraderApi Key Files (*.mtk)|*.mtk";
|
|
dlg.Title = "Load MetaTraderApi Key File";
|
|
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
textBoxPrivateKey.Text = string.Empty;
|
|
textBoxPublicKey.Text = string.Empty;
|
|
|
|
try
|
|
{
|
|
using (TextReader file = new StreamReader(dlg.FileName))
|
|
{
|
|
textBoxPrivateKey.Text = file.ReadLine();
|
|
}
|
|
|
|
mIsSaved = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var errorMsg = string.Format("Saving failed!\n{0}", ex.Message);
|
|
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void buttonSign_Click(object sender, EventArgs e)
|
|
{
|
|
string privateKey = textBoxPrivateKey.Text;
|
|
|
|
if (string.IsNullOrEmpty(privateKey) == false)
|
|
{
|
|
string accountName = textBoxAccountName.Text;
|
|
string accountNumber = textBoxAccountNumber.Text;
|
|
|
|
if (string.IsNullOrEmpty(accountName) == false)
|
|
{
|
|
if (string.IsNullOrEmpty(accountNumber) == false)
|
|
{
|
|
string inputData = accountName + accountNumber;
|
|
|
|
textBoxSignature.Text = DigitalSignatureHelper.CreateSignature(inputData, privateKey);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("AccountNumber is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("AccountName is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Private Key is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
private void buttonExportPublicKey_Click(object sender, EventArgs e)
|
|
{
|
|
string publicKey = textBoxPublicKey.Text;
|
|
|
|
if (string.IsNullOrEmpty(publicKey) == false)
|
|
{
|
|
SaveFileDialog dlg = new SaveFileDialog();
|
|
|
|
dlg.Filter = "MetaTraderApi Key Files (*.mtk)|*.mtk";
|
|
dlg.Title = "Export MetaTraderApi Key File";
|
|
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
try
|
|
{
|
|
using (TextWriter file = new StreamWriter(dlg.FileName, true))
|
|
{
|
|
file.WriteLine(publicKey);
|
|
}
|
|
|
|
mIsSaved = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var errorMsg = string.Format("Export failed!\n{0}", ex.Message);
|
|
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Public Key is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
private void buttonExportSignature_Click(object sender, EventArgs e)
|
|
{
|
|
string signature = textBoxSignature.Text;
|
|
|
|
if (string.IsNullOrEmpty(signature) == false)
|
|
{
|
|
SaveFileDialog dlg = new SaveFileDialog();
|
|
|
|
dlg.Filter = "MetaTraderApi Key (*.mta)|*.mta";
|
|
dlg.Title = "Export MetaTraderApi Key";
|
|
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
try
|
|
{
|
|
using (TextWriter file = new StreamWriter(dlg.FileName))
|
|
{
|
|
file.WriteLine(signature);
|
|
}
|
|
|
|
mIsSaved = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var errorMsg = string.Format("Export failed!\n{0}", ex.Message);
|
|
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Signature is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
private void buttonVerify_Click(object sender, EventArgs e)
|
|
{
|
|
string publicKey = textBoxPublicKey.Text;
|
|
|
|
if (string.IsNullOrEmpty(publicKey) == false)
|
|
{
|
|
string signature = textBoxSignature.Text;
|
|
|
|
if (string.IsNullOrEmpty(signature) == false)
|
|
{
|
|
string accountName = textBoxAccountName.Text;
|
|
string accountNumber = textBoxAccountNumber.Text;
|
|
|
|
if (string.IsNullOrEmpty(accountName) == false)
|
|
{
|
|
if (string.IsNullOrEmpty(accountNumber) == false)
|
|
{
|
|
string inputData = accountName + accountNumber;
|
|
var verifyResult = false;
|
|
try
|
|
{
|
|
verifyResult = DigitalSignatureHelper.VerifySignature(inputData, signature, publicKey);
|
|
}
|
|
catch (SecurityException ex)
|
|
{
|
|
MessageBox.Show(ex.Message, "Verify", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
verifyResult = false;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
string errorMsg = string.Format("Verify process failed!\n{0}", ex.Message);
|
|
MessageBox.Show(errorMsg, "Verify", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
verifyResult = false;
|
|
}
|
|
|
|
if (verifyResult == true)
|
|
{
|
|
MessageBox.Show("Signature good", "Verify", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("AccountNumber is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("AccountName is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
MessageBox.Show("Signature is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Public Key is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
private void clipboardCopyBtn_Click(object sender, EventArgs e)
|
|
{
|
|
Clipboard.SetText(textBoxPublicKey.Text);
|
|
}
|
|
|
|
private void saveToRegBtn_Click(object sender, EventArgs e)
|
|
{
|
|
string signature = textBoxSignature.Text;
|
|
string accountName = textBoxAccountName.Text;
|
|
string accountNumber = textBoxAccountNumber.Text;
|
|
|
|
if (string.IsNullOrEmpty(signature))
|
|
{
|
|
MessageBox.Show("Signature is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(accountName))
|
|
{
|
|
MessageBox.Show("AccountName is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(accountNumber))
|
|
{
|
|
MessageBox.Show("AccountNumber is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
|
|
SaveFileDialog dlg = new SaveFileDialog();
|
|
|
|
dlg.Filter = "Registry files (*.reg)|*.reg";
|
|
dlg.Title = "Registry files";
|
|
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
{
|
|
string key = MtRegistryManager.SaveSignatureKey(accountName, accountNumber, signature);
|
|
|
|
bool exported = MtRegistryManager.ExportKey(key, dlg.FileName);
|
|
|
|
if (exported)
|
|
{
|
|
MessageBox.Show("Export successed.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.None);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Export failed!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void readRegBtn_Click(object sender, EventArgs e)
|
|
{
|
|
string accountName = textBoxAccountName.Text;
|
|
string accountNumber = textBoxAccountNumber.Text;
|
|
|
|
if (string.IsNullOrEmpty(accountName))
|
|
{
|
|
MessageBox.Show("AccountName is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(accountNumber))
|
|
{
|
|
MessageBox.Show("AccountNumber is empty!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
|
|
string signature = MtRegistryManager.ReadSignatureKey(accountName, accountNumber);
|
|
textBoxSignature.Text = signature;
|
|
}
|
|
}
|
|
}
|