mirror of https://github.com/quasar/Quasar.git
101 lines
3.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|