Quasar/Quasar.Server/Forms/FrmCertificate.cs

101 lines
3.5 KiB
C#

using Quasar.Server.Helper;
using System;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Windows.Forms;
using Quasar.Server.Models;
namespace Quasar.Server.Forms
{
public partial class FrmCertificate : Form
{
private X509Certificate2 _certificate;
public FrmCertificate()
{
InitializeComponent();
}
private void SetCertificate(X509Certificate2 certificate)
{
_certificate = certificate;
txtDetails.Text = _certificate.ToString(false);
btnSave.Enabled = true;
}
private void btnCreate_Click(object sender, EventArgs e)
{
SetCertificate(CertificateHelper.CreateCertificateAuthority("Quasar Server CA", 4096));
}
private void btnImport_Click(object sender, EventArgs e)
{
using (var ofd = new OpenFileDialog())
{
ofd.CheckFileExists = true;
ofd.Filter = "*.p12|*.p12";
ofd.Multiselect = false;
ofd.InitialDirectory = Application.StartupPath;
if (ofd.ShowDialog(this) == DialogResult.OK)
{
try
{
SetCertificate(new X509Certificate2(ofd.FileName, "", X509KeyStorageFlags.Exportable));
}
catch (Exception ex)
{
MessageBox.Show(this, $"Error importing the certificate:\n{ex.Message}", "Save error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void btnSave_Click(object sender, EventArgs e)
{
try
{
if (_certificate == null)
throw new ArgumentNullException();
if (!_certificate.HasPrivateKey)
throw new ArgumentException();
File.WriteAllBytes(Settings.CertificatePath, _certificate.Export(X509ContentType.Pkcs12));
MessageBox.Show(this,
"Please backup the certificate now. Loss of the certificate results in loosing all clients!",
"Certificate backup", MessageBoxButtons.OK, MessageBoxIcon.Information);
string argument = "/select, \"" + Settings.CertificatePath + "\"";
Process.Start("explorer.exe", argument);
this.DialogResult = DialogResult.OK;
}
catch (ArgumentNullException)
{
MessageBox.Show(this, "Please create or import a certificate first.", "Save error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (ArgumentException)
{
MessageBox.Show(this,
"The imported certificate has no associated private key. Please import a different certificate.",
"Save error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception)
{
MessageBox.Show(this,
"There was an error saving the certificate, please make sure you have write access to the Quasar directory.",
"Save error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btnExit_Click(object sender, EventArgs e)
{
Environment.Exit(0);
}
}
}