mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-26 03:49:23 +08:00
Compare commits
154 Commits
v1.8-dev
...
2023.03.03
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
985feb4b91 | ||
|
|
c43c85bb21 | ||
|
|
038074131c | ||
|
|
ab9156a7d3 | ||
|
|
f4b76818e8 | ||
|
|
12a399a354 | ||
|
|
dfdbbea85c | ||
|
|
fe94da4727 | ||
|
|
361ae3af50 | ||
|
|
9a2453524a | ||
|
|
3a2e128e98 | ||
|
|
1bd2dbf9f0 | ||
|
|
b7f880e7f8 | ||
|
|
13cd926b4f | ||
|
|
6fb7b1c6e4 | ||
|
|
8f35015a6c | ||
|
|
a926bccb97 | ||
|
|
b9f2abf5eb | ||
|
|
8dc5bda171 | ||
|
|
d24bdb543b | ||
|
|
8e248cb545 | ||
|
|
21dd175456 | ||
|
|
46732803c3 | ||
|
|
39d205bd4d | ||
|
|
8e2bd7997e | ||
|
|
76db9a6c62 | ||
|
|
c03d5e891d | ||
|
|
b21f6e8ce7 | ||
|
|
1f80e5339b | ||
|
|
dc616f8ea1 | ||
|
|
dc6588243f | ||
|
|
690d3b0d4e | ||
|
|
4bc5dffabb | ||
|
|
55a1e4a544 | ||
|
|
5cb32dd75a | ||
|
|
f858c9fe48 | ||
|
|
0ac39af404 | ||
|
|
fc757b236f | ||
|
|
a921e6e3d4 | ||
|
|
8cf0f50565 | ||
|
|
575ad7664f | ||
|
|
be17488070 | ||
|
|
f504107928 | ||
|
|
0113f549c5 | ||
|
|
9ff831faab | ||
|
|
a9ca243c0b | ||
|
|
553bbef45f | ||
|
|
8f713f861b | ||
|
|
324054b9d7 | ||
|
|
d3fc9404ee | ||
|
|
5bb780439b | ||
|
|
f0e6008441 | ||
|
|
39dd69f15e | ||
|
|
7b2e89df26 | ||
|
|
aa853f8481 | ||
|
|
83bba75af6 | ||
|
|
23889aa5b1 | ||
|
|
5e6094fc42 | ||
|
|
a4181cb6d6 | ||
|
|
88c49f0722 | ||
|
|
513d9e199c | ||
|
|
e80975c56e | ||
|
|
9051ac102c | ||
|
|
39a9b2e619 | ||
|
|
dbc55d248f | ||
|
|
2b46180bfb | ||
|
|
5abe6c7e27 | ||
|
|
4595ebeb9a | ||
|
|
815c08e6d4 | ||
|
|
a72ad218a0 | ||
|
|
944ad1f769 | ||
|
|
e17a68f61c | ||
|
|
0b8196be68 | ||
|
|
d9c01148b7 | ||
|
|
2b3cfd992f | ||
|
|
7e4bd7a6f3 | ||
|
|
161e0ed637 | ||
|
|
1ee03e863c | ||
|
|
2411481d8b | ||
|
|
0314a627ed | ||
|
|
4d339a0b09 | ||
|
|
c171e7f94b | ||
|
|
eac4d966d9 | ||
|
|
c20868c20c | ||
|
|
bb74d46f1f | ||
|
|
152d48c583 | ||
|
|
b7a0155ba4 | ||
|
|
0414724b21 | ||
|
|
469f21db8d | ||
|
|
b6c9d30195 | ||
|
|
7b89430317 | ||
|
|
5bd854116a | ||
|
|
3fb7575529 | ||
|
|
a3a868c2ce | ||
|
|
1eb6fc2235 | ||
|
|
5ff4502f0a | ||
|
|
3126b8d4b0 | ||
|
|
dfb1d34b8a | ||
|
|
ace62c07be | ||
|
|
ec2f3024b6 | ||
|
|
25543f6561 | ||
|
|
3278657da7 | ||
|
|
90c4d12688 | ||
|
|
4ceaea99f7 | ||
|
|
585de34ef1 | ||
|
|
60e1a3ce93 | ||
|
|
413d77ff1a | ||
|
|
d8bb561063 | ||
|
|
5dff2c20b2 | ||
|
|
27803e7787 | ||
|
|
58f9c1575f | ||
|
|
7b909665b9 | ||
|
|
11eee991a1 | ||
|
|
7056a859ef | ||
|
|
2455f0d73e | ||
|
|
943d36e23e | ||
|
|
b563ac6e0c | ||
|
|
ed37a8ca2a | ||
|
|
55bee8b0d8 | ||
|
|
6bd18c29e3 | ||
|
|
37fc611767 | ||
|
|
f95fe351e2 | ||
|
|
2fb0ab1d91 | ||
|
|
85f7be1d79 | ||
|
|
b3e5c1abc2 | ||
|
|
9e216c0020 | ||
|
|
a9f00b6a8c | ||
|
|
46e7b02da2 | ||
|
|
8db0bc6e6f | ||
|
|
1702b5867a | ||
|
|
c03a6452ef | ||
|
|
69b840fb12 | ||
|
|
9385ab287f | ||
|
|
d2b2c39b97 | ||
|
|
f8ff978738 | ||
|
|
d50b32236c | ||
|
|
88d1db2840 | ||
|
|
b1dbe562d6 | ||
|
|
e95b6f1b5d | ||
|
|
1cbb7bb5dd | ||
|
|
34f3ffa129 | ||
|
|
ecd25a673e | ||
|
|
58d0778c3d | ||
|
|
81a5422974 | ||
|
|
eb859e5ede | ||
|
|
c8035b5071 | ||
|
|
a98a336e52 | ||
|
|
d7f6535b85 | ||
|
|
f9d4e3152b | ||
|
|
69bd816aeb | ||
|
|
783810749c | ||
|
|
92c3c967ba | ||
|
|
c632ba4306 | ||
|
|
e29d2c25ba |
@@ -5,7 +5,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
|
||||
## [1.77.3]
|
||||
### Added
|
||||
- # #2123: Thycotic Secret Server - Added 2FA OTP support
|
||||
- #1736: Update of SSH.NET to 2020.0.2 to allow File Transfer again
|
||||
- #2138: Improve compatibility with Remote Desktop Connection Manager v2.83
|
||||
- #2123: Thycotic Secret Server - Added 2FA OTP support
|
||||
### Changed
|
||||
- #1546: Enable resize without reconnect for RDP Version Rdc9 or higher
|
||||
|
||||
## [1.77.2]
|
||||
### Added
|
||||
- #2086: Replace WebClient with async HttpClient for updater.
|
||||
|
||||
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
@@ -1,4 +1,4 @@
|
||||
namespace ExternalConnectors.TSS
|
||||
namespace ExternalConnectors.DSS
|
||||
{
|
||||
partial class SSConnectionForm
|
||||
{
|
||||
@@ -51,29 +51,29 @@
|
||||
// tbSSURL
|
||||
//
|
||||
this.tbSSURL.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tbSSURL.Location = new System.Drawing.Point(260, 4);
|
||||
this.tbSSURL.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.tbSSURL.Location = new System.Drawing.Point(298, 5);
|
||||
this.tbSSURL.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
||||
this.tbSSURL.Name = "tbSSURL";
|
||||
this.tbSSURL.Size = new System.Drawing.Size(536, 23);
|
||||
this.tbSSURL.Size = new System.Drawing.Size(611, 27);
|
||||
this.tbSSURL.TabIndex = 0;
|
||||
//
|
||||
// tbUsername
|
||||
//
|
||||
this.tbUsername.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tbUsername.Location = new System.Drawing.Point(260, 35);
|
||||
this.tbUsername.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.tbUsername.Location = new System.Drawing.Point(298, 47);
|
||||
this.tbUsername.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
||||
this.tbUsername.Name = "tbUsername";
|
||||
this.tbUsername.Size = new System.Drawing.Size(536, 23);
|
||||
this.tbUsername.Size = new System.Drawing.Size(611, 27);
|
||||
this.tbUsername.TabIndex = 2;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label3.Location = new System.Drawing.Point(4, 62);
|
||||
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label3.Location = new System.Drawing.Point(5, 84);
|
||||
this.label3.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(248, 31);
|
||||
this.label3.Size = new System.Drawing.Size(283, 42);
|
||||
this.label3.TabIndex = 5;
|
||||
this.label3.Text = "Password";
|
||||
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
@@ -81,10 +81,10 @@
|
||||
// tbPassword
|
||||
//
|
||||
this.tbPassword.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tbPassword.Location = new System.Drawing.Point(260, 66);
|
||||
this.tbPassword.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.tbPassword.Location = new System.Drawing.Point(298, 89);
|
||||
this.tbPassword.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
||||
this.tbPassword.Name = "tbPassword";
|
||||
this.tbPassword.Size = new System.Drawing.Size(536, 23);
|
||||
this.tbPassword.Size = new System.Drawing.Size(611, 27);
|
||||
this.tbPassword.TabIndex = 4;
|
||||
this.tbPassword.UseSystemPasswordChar = true;
|
||||
//
|
||||
@@ -92,10 +92,10 @@
|
||||
//
|
||||
this.btnOK.Anchor = System.Windows.Forms.AnchorStyles.Right;
|
||||
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
this.btnOK.Location = new System.Drawing.Point(296, 12);
|
||||
this.btnOK.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.btnOK.Location = new System.Drawing.Point(337, 16);
|
||||
this.btnOK.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.Size = new System.Drawing.Size(88, 26);
|
||||
this.btnOK.Size = new System.Drawing.Size(101, 35);
|
||||
this.btnOK.TabIndex = 6;
|
||||
this.btnOK.Text = "OK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
@@ -104,10 +104,10 @@
|
||||
//
|
||||
this.btnCancel.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnCancel.Location = new System.Drawing.Point(415, 12);
|
||||
this.btnCancel.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.btnCancel.Location = new System.Drawing.Point(474, 16);
|
||||
this.btnCancel.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
||||
this.btnCancel.Name = "btnCancel";
|
||||
this.btnCancel.Size = new System.Drawing.Size(88, 26);
|
||||
this.btnCancel.Size = new System.Drawing.Size(101, 35);
|
||||
this.btnCancel.TabIndex = 11;
|
||||
this.btnCancel.Text = "Cancel";
|
||||
this.btnCancel.UseVisualStyleBackColor = true;
|
||||
@@ -129,7 +129,7 @@
|
||||
this.tableLayoutPanel1.Controls.Add(this.tbOTP, 1, 3);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 5;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
|
||||
@@ -137,17 +137,17 @@
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(800, 159);
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(914, 212);
|
||||
this.tableLayoutPanel1.TabIndex = 12;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label5.Location = new System.Drawing.Point(260, 124);
|
||||
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label5.Location = new System.Drawing.Point(298, 168);
|
||||
this.label5.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(536, 35);
|
||||
this.label5.Size = new System.Drawing.Size(611, 44);
|
||||
this.label5.TabIndex = 15;
|
||||
this.label5.Text = "For SSO to work, additional IIS configuration is required!";
|
||||
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
@@ -156,10 +156,10 @@
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label1.Location = new System.Drawing.Point(4, 0);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label1.Location = new System.Drawing.Point(5, 0);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(248, 31);
|
||||
this.label1.Size = new System.Drawing.Size(283, 42);
|
||||
this.label1.TabIndex = 2;
|
||||
this.label1.Text = "Secret Server URL";
|
||||
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
@@ -168,10 +168,10 @@
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label2.Location = new System.Drawing.Point(4, 31);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label2.Location = new System.Drawing.Point(5, 42);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(248, 31);
|
||||
this.label2.Size = new System.Drawing.Size(283, 42);
|
||||
this.label2.TabIndex = 4;
|
||||
this.label2.Text = "DOMAIN\\Username";
|
||||
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
@@ -179,10 +179,10 @@
|
||||
// cbUseSSO
|
||||
//
|
||||
this.cbUseSSO.AutoSize = true;
|
||||
this.cbUseSSO.Location = new System.Drawing.Point(4, 128);
|
||||
this.cbUseSSO.Margin = new System.Windows.Forms.Padding(4, 4, 4, 0);
|
||||
this.cbUseSSO.Location = new System.Drawing.Point(5, 173);
|
||||
this.cbUseSSO.Margin = new System.Windows.Forms.Padding(5, 5, 5, 0);
|
||||
this.cbUseSSO.Name = "cbUseSSO";
|
||||
this.cbUseSSO.Size = new System.Drawing.Size(69, 19);
|
||||
this.cbUseSSO.Size = new System.Drawing.Size(86, 24);
|
||||
this.cbUseSSO.TabIndex = 14;
|
||||
this.cbUseSSO.Text = "Use SSO";
|
||||
this.cbUseSSO.UseVisualStyleBackColor = true;
|
||||
@@ -192,47 +192,48 @@
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label6.Location = new System.Drawing.Point(3, 93);
|
||||
this.label6.Location = new System.Drawing.Point(3, 126);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(250, 31);
|
||||
this.label6.Size = new System.Drawing.Size(287, 42);
|
||||
this.label6.TabIndex = 15;
|
||||
this.label6.Text = "2FA OTP (Optional)";
|
||||
//
|
||||
// tbOTP
|
||||
//
|
||||
this.tbOTP.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tbOTP.Location = new System.Drawing.Point(259, 96);
|
||||
this.tbOTP.Location = new System.Drawing.Point(296, 130);
|
||||
this.tbOTP.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
|
||||
this.tbOTP.Name = "tbOTP";
|
||||
this.tbOTP.Size = new System.Drawing.Size(538, 23);
|
||||
this.tbOTP.Size = new System.Drawing.Size(615, 27);
|
||||
this.tbOTP.TabIndex = 5;
|
||||
//
|
||||
// tableLayoutPanel2
|
||||
//
|
||||
this.tableLayoutPanel2.ColumnCount = 5;
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 93F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 106F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 23F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 26F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 93F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 107F));
|
||||
this.tableLayoutPanel2.Controls.Add(this.btnOK, 1, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.btnCancel, 3, 0);
|
||||
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 225);
|
||||
this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 300);
|
||||
this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
||||
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
|
||||
this.tableLayoutPanel2.RowCount = 1;
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel2.Size = new System.Drawing.Size(800, 50);
|
||||
this.tableLayoutPanel2.Size = new System.Drawing.Size(914, 67);
|
||||
this.tableLayoutPanel2.TabIndex = 13;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label4.Location = new System.Drawing.Point(0, 159);
|
||||
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label4.Location = new System.Drawing.Point(0, 212);
|
||||
this.label4.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(341, 15);
|
||||
this.label4.Size = new System.Drawing.Size(427, 20);
|
||||
this.label4.TabIndex = 14;
|
||||
this.label4.Text = "URL is the base URL, like https://cred.domain.local/SecretServer";
|
||||
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
@@ -240,14 +241,14 @@
|
||||
// SSConnectionForm
|
||||
//
|
||||
this.AcceptButton = this.btnOK;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(800, 275);
|
||||
this.ClientSize = new System.Drawing.Size(914, 367);
|
||||
this.Controls.Add(this.label4);
|
||||
this.Controls.Add(this.tableLayoutPanel2);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5);
|
||||
this.Name = "SSConnectionForm";
|
||||
this.Text = "Secret Server API Login Data";
|
||||
this.Activated += new System.EventHandler(this.SSConnectionForm_Activated);
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace ExternalConnectors.TSS
|
||||
namespace ExternalConnectors.DSS
|
||||
{
|
||||
public partial class SSConnectionForm : Form
|
||||
{
|
||||
@@ -13,7 +13,12 @@
|
||||
if (cbUseSSO.Checked)
|
||||
btnOK.Focus();
|
||||
else
|
||||
tbPassword.Focus();
|
||||
{
|
||||
if (tbPassword.Text.Length == 0)
|
||||
tbPassword.Focus();
|
||||
else
|
||||
tbOTP.Focus();
|
||||
}
|
||||
}
|
||||
|
||||
private void cbUseSSO_CheckedChanged(object sender, EventArgs e)
|
||||
@@ -12,7 +12,7 @@
|
||||
#pragma warning disable 8073 // Disable "CS8073 The result of the expression is always 'false' since a value of type 'T' is never equal to 'null' of type 'T?'"
|
||||
#pragma warning disable 3016 // Disable "CS3016 Arrays as attribute arguments is not CLS-compliant"
|
||||
|
||||
namespace SecretServerAuthentication.TSS
|
||||
namespace SecretServerAuthentication.DSS
|
||||
{
|
||||
using System = global::System;
|
||||
|
||||
342
ExternalConnectors/DSS/SecretServerInterface.cs
Normal file
342
ExternalConnectors/DSS/SecretServerInterface.cs
Normal file
@@ -0,0 +1,342 @@
|
||||
using Microsoft.Win32;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using Org.BouncyCastle.Crypto.Parameters;
|
||||
using Org.BouncyCastle.OpenSsl;
|
||||
using Org.BouncyCastle.Security;
|
||||
using SecretServerAuthentication.DSS;
|
||||
using SecretServerRestClient.DSS;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace ExternalConnectors.DSS
|
||||
{
|
||||
public class SecretServerInterface
|
||||
{
|
||||
private static class SSConnectionData
|
||||
{
|
||||
public static string ssUsername = "";
|
||||
public static string ssPassword = "";
|
||||
public static string ssUrl = "";
|
||||
public static string ssOTP = "";
|
||||
public static bool ssSSO = false;
|
||||
public static bool initdone = false;
|
||||
|
||||
//token
|
||||
public static string ssTokenBearer = "";
|
||||
public static DateTime ssTokenExpiresOn = DateTime.UtcNow;
|
||||
public static string ssTokenRefresh = "";
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
if (initdone == true)
|
||||
return;
|
||||
|
||||
RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\mRemoteSSInterface");
|
||||
try
|
||||
{
|
||||
// display gui and ask for data
|
||||
SSConnectionForm f = new SSConnectionForm();
|
||||
string? un = key.GetValue("Username") as string;
|
||||
f.tbUsername.Text = un ?? "";
|
||||
f.tbPassword.Text = SSConnectionData.ssPassword; // in OTP refresh cases, this value might already be filled
|
||||
|
||||
string? url = key.GetValue("URL") as string;
|
||||
if (url == null || !url.Contains("://"))
|
||||
url = "https://cred.domain.local/SecretServer";
|
||||
f.tbSSURL.Text = url;
|
||||
|
||||
var b = key.GetValue("SSO");
|
||||
if (b == null || (string)b != "True")
|
||||
ssSSO = false;
|
||||
else
|
||||
ssSSO = true;
|
||||
f.cbUseSSO.Checked = ssSSO;
|
||||
|
||||
// show dialog
|
||||
while (true)
|
||||
{
|
||||
_ = f.ShowDialog();
|
||||
|
||||
if (f.DialogResult != DialogResult.OK)
|
||||
return;
|
||||
|
||||
// store values to memory
|
||||
ssUsername = f.tbUsername.Text;
|
||||
ssPassword = f.tbPassword.Text;
|
||||
ssUrl = f.tbSSURL.Text;
|
||||
ssSSO = f.cbUseSSO.Checked;
|
||||
ssOTP = f.tbOTP.Text;
|
||||
// check connection first
|
||||
try
|
||||
{
|
||||
if (TestCredentials() == true)
|
||||
{
|
||||
initdone = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
MessageBox.Show("Test Credentials failed - please check your credentials");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// write values to registry
|
||||
key.SetValue("Username", ssUsername);
|
||||
key.SetValue("URL", ssUrl);
|
||||
key.SetValue("SSO", ssSSO);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
key.Close();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TestCredentials()
|
||||
{
|
||||
if (SSConnectionData.ssSSO)
|
||||
{
|
||||
// checking creds doesn't really make sense here, as we can't modify them anyway if something is wrong
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (!String.IsNullOrEmpty(GetToken()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static SecretsServiceClient ConstructSecretsServiceClient()
|
||||
{
|
||||
string baseURL = SSConnectionData.ssUrl;
|
||||
if (SSConnectionData.ssSSO)
|
||||
{
|
||||
// REQUIRES IIS CONFIG! https://docs.thycotic.com/ss/11.0.0/api-scripting/webservice-iwa-powershell
|
||||
var handler = new HttpClientHandler() { UseDefaultCredentials = true };
|
||||
var httpClient = new HttpClient(handler);
|
||||
{
|
||||
// Call REST API:
|
||||
return new SecretsServiceClient($"{baseURL}/winauthwebservices/api", httpClient);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var httpClient = new HttpClient();
|
||||
{
|
||||
|
||||
var token = GetToken();
|
||||
// Set credentials (token):
|
||||
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
|
||||
|
||||
// Call REST API:
|
||||
return new SecretsServiceClient($"{baseURL}/api", httpClient);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
private static void FetchSecret(int secretID, out string secretUsername, out string secretPassword, out string secretDomain, out string privatekey)
|
||||
{
|
||||
var client = ConstructSecretsServiceClient();
|
||||
SecretModel secret = client.GetSecretAsync(false, true, secretID, null).Result;
|
||||
|
||||
// clear return variables
|
||||
secretDomain = "";
|
||||
secretUsername = "";
|
||||
secretPassword = "";
|
||||
privatekey = "";
|
||||
string privatekeypassphrase = "";
|
||||
|
||||
// parse data and extract what we need
|
||||
foreach (var item in secret.Items)
|
||||
{
|
||||
if (item.FieldName.ToLower().Equals("domain"))
|
||||
secretDomain = item.ItemValue;
|
||||
else if (item.FieldName.ToLower().Equals("username"))
|
||||
secretUsername = item.ItemValue;
|
||||
else if (item.FieldName.ToLower().Equals("password"))
|
||||
secretPassword = item.ItemValue;
|
||||
else if (item.FieldName.ToLower().Equals("private key"))
|
||||
{
|
||||
client.ReadResponseNoJSONConvert = true;
|
||||
privatekey = client.GetFieldAsync(false, false, secretID, "private-key").Result;
|
||||
client.ReadResponseNoJSONConvert = false;
|
||||
}
|
||||
else if (item.FieldName.ToLower().Equals("private key passphrase"))
|
||||
privatekeypassphrase = item.ItemValue;
|
||||
}
|
||||
|
||||
// need to decode the private key?
|
||||
if (!string.IsNullOrEmpty(privatekeypassphrase))
|
||||
{
|
||||
try
|
||||
{
|
||||
var key = DecodePrivateKey(privatekey, privatekeypassphrase);
|
||||
privatekey = key;
|
||||
}
|
||||
catch(Exception)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// conversion to putty format necessary?
|
||||
if (!string.IsNullOrEmpty(privatekey) && !privatekey.StartsWith("PuTTY-User-Key-File-2"))
|
||||
{
|
||||
try
|
||||
{
|
||||
RSACryptoServiceProvider key = ImportPrivateKey(privatekey);
|
||||
privatekey = PuttyKeyFileGenerator.ToPuttyPrivateKey(key);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region PUTTY KEY HANDLING
|
||||
// decode rsa private key with encryption password
|
||||
private static string DecodePrivateKey(string encryptedPrivateKey, string password)
|
||||
{
|
||||
TextReader textReader = new StringReader(encryptedPrivateKey);
|
||||
PemReader pemReader = new PemReader(textReader, new PasswordFinder(password));
|
||||
|
||||
AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();
|
||||
|
||||
TextWriter textWriter = new StringWriter();
|
||||
var pemWriter = new PemWriter(textWriter);
|
||||
pemWriter.WriteObject(keyPair.Private);
|
||||
pemWriter.Writer.Flush();
|
||||
|
||||
return ""+textWriter.ToString();
|
||||
}
|
||||
private class PasswordFinder : IPasswordFinder
|
||||
{
|
||||
private string password;
|
||||
|
||||
public PasswordFinder(string password)
|
||||
{
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
|
||||
public char[] GetPassword()
|
||||
{
|
||||
return password.ToCharArray();
|
||||
}
|
||||
}
|
||||
|
||||
// read private key pem string to rsacryptoserviceprovider
|
||||
public static RSACryptoServiceProvider ImportPrivateKey(string pem)
|
||||
{
|
||||
PemReader pr = new PemReader(new StringReader(pem));
|
||||
AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject();
|
||||
RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)KeyPair.Private);
|
||||
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
|
||||
rsa.ImportParameters(rsaParams);
|
||||
return rsa;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region TOKEN
|
||||
private static string GetToken()
|
||||
{
|
||||
// if there is no token, fetch a fresh one
|
||||
if (String.IsNullOrEmpty(SSConnectionData.ssTokenBearer))
|
||||
{
|
||||
return GetTokenFresh();
|
||||
}
|
||||
// if there is a token, check if it is valid
|
||||
if (SSConnectionData.ssTokenExpiresOn >= DateTime.UtcNow)
|
||||
{
|
||||
return SSConnectionData.ssTokenBearer;
|
||||
}
|
||||
else
|
||||
{
|
||||
// try using refresh token
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
var tokenClient = new OAuth2ServiceClient(SSConnectionData.ssUrl, httpClient);
|
||||
TokenResponse token = new();
|
||||
try
|
||||
{
|
||||
token = tokenClient.AuthorizeAsync(Grant_type.Refresh_token, null, null, SSConnectionData.ssTokenRefresh, null).Result;
|
||||
var tokenResult = token.Access_token;
|
||||
|
||||
SSConnectionData.ssTokenBearer = tokenResult;
|
||||
SSConnectionData.ssTokenRefresh = token.Refresh_token;
|
||||
SSConnectionData.ssTokenExpiresOn = token.Expires_on;
|
||||
return tokenResult;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// refresh token failed. clean memory and start fresh
|
||||
SSConnectionData.ssTokenBearer = "";
|
||||
SSConnectionData.ssTokenRefresh = "";
|
||||
SSConnectionData.ssTokenExpiresOn = DateTime.Now;
|
||||
// if OTP is required we need to ask user for a new OTP
|
||||
if (!String.IsNullOrEmpty(SSConnectionData.ssOTP))
|
||||
{
|
||||
SSConnectionData.initdone = false;
|
||||
// the call below executes a connection test, which fetches a valid token
|
||||
SSConnectionData.Init();
|
||||
// we now have a fresh token in memory. return it to caller
|
||||
return SSConnectionData.ssTokenBearer;
|
||||
}
|
||||
else
|
||||
{
|
||||
// no user interaction required. get a fresh token and return it to caller
|
||||
return GetTokenFresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
static string GetTokenFresh()
|
||||
{
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
// Authenticate:
|
||||
var tokenClient = new OAuth2ServiceClient(SSConnectionData.ssUrl, httpClient);
|
||||
// call below will throw an exception if the creds are invalid
|
||||
var token = tokenClient.AuthorizeAsync(Grant_type.Password, SSConnectionData.ssUsername, SSConnectionData.ssPassword, null, SSConnectionData.ssOTP).Result;
|
||||
// here we can be sure the creds are ok - return success state
|
||||
var tokenResult = token.Access_token;
|
||||
|
||||
SSConnectionData.ssTokenBearer = tokenResult;
|
||||
SSConnectionData.ssTokenRefresh = token.Refresh_token;
|
||||
SSConnectionData.ssTokenExpiresOn = token.Expires_on;
|
||||
return tokenResult;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
// input must be the secret id to fetch
|
||||
public static void FetchSecretFromServer(string input, out string username, out string password, out string domain, out string privatekey)
|
||||
{
|
||||
// get secret id
|
||||
int secretID = Int32.Parse(input);
|
||||
|
||||
// init connection credentials, display popup if necessary
|
||||
SSConnectionData.Init();
|
||||
|
||||
// get the secret
|
||||
FetchSecret(secretID, out username, out password, out domain, out privatekey);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
#pragma warning disable 8073 // Disable "CS8073 The result of the expression is always 'false' since a value of type 'T' is never equal to 'null' of type 'T?'"
|
||||
#pragma warning disable 3016 // Disable "CS3016 Arrays as attribute arguments is not CLS-compliant"
|
||||
|
||||
namespace SecretServerRestClient.TSS
|
||||
namespace SecretServerRestClient.DSS
|
||||
{
|
||||
using System = global::System;
|
||||
|
||||
@@ -72886,6 +72886,9 @@ namespace SecretServerRestClient.TSS
|
||||
}
|
||||
|
||||
public bool ReadResponseAsString { get; set; }
|
||||
// RR 2022-09-97
|
||||
public bool ReadResponseNoJSONConvert { get; set; }
|
||||
// RR END
|
||||
|
||||
protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers, System.Threading.CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -72894,6 +72897,14 @@ namespace SecretServerRestClient.TSS
|
||||
return new ObjectResponseResult<T>(default(T), string.Empty);
|
||||
}
|
||||
|
||||
// RR 2022-09-97
|
||||
if (ReadResponseNoJSONConvert)
|
||||
{
|
||||
var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
|
||||
return new ObjectResponseResult<T>((T)(object)responseText, responseText); // not sure if this is best practice, but it works.
|
||||
}
|
||||
// RR END
|
||||
|
||||
if (ReadResponseAsString)
|
||||
{
|
||||
var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
|
||||
@@ -11,16 +11,17 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AWSSDK.Core" Version="3.7.6" />
|
||||
<PackageReference Include="AWSSDK.EC2" Version="3.7.55.3" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageReference Include="AWSSDK.Core" Version="3.7.105.13" />
|
||||
<PackageReference Include="AWSSDK.EC2" Version="3.7.125" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
||||
<PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="AWS\AWSConnectionForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Update="TSS\SSConnectionForm.cs">
|
||||
<Compile Update="DSS\SSConnectionForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
109
ExternalConnectors/PuttyKeyFileGenerator.cs
Normal file
109
ExternalConnectors/PuttyKeyFileGenerator.cs
Normal file
@@ -0,0 +1,109 @@
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace ExternalConnectors;
|
||||
|
||||
public class PuttyKeyFileGenerator
|
||||
{
|
||||
private const int prefixSize = 4;
|
||||
private const int paddedPrefixSize = prefixSize + 1;
|
||||
private const int lineLength = 64;
|
||||
private const string keyType = "ssh-rsa";
|
||||
private const string encryptionType = "none";
|
||||
|
||||
// source from
|
||||
// https://gist.github.com/canton7/5670788?permalink_comment_id=3240331
|
||||
// https://gist.github.com/bosima/ee6630d30b533c7d7b2743a849e9b9d0
|
||||
|
||||
public static string ToPuttyPrivateKey(RSACryptoServiceProvider cryptoServiceProvider, string Comment = "imported-openssh-key")
|
||||
{
|
||||
var publicParameters = cryptoServiceProvider.ExportParameters(false);
|
||||
byte[] publicBuffer = new byte[3 + keyType.Length + GetPrefixSize(publicParameters.Exponent) + publicParameters.Exponent.Length +
|
||||
GetPrefixSize(publicParameters.Modulus) + publicParameters.Modulus.Length + 1];
|
||||
|
||||
using (var bw = new BinaryWriter(new MemoryStream(publicBuffer)))
|
||||
{
|
||||
bw.Write(new byte[] { 0x00, 0x00, 0x00 });
|
||||
bw.Write(keyType);
|
||||
PutPrefixed(bw, publicParameters.Exponent, CheckIsNeddPadding(publicParameters.Exponent));
|
||||
PutPrefixed(bw, publicParameters.Modulus, CheckIsNeddPadding(publicParameters.Modulus));
|
||||
}
|
||||
var publicBlob = System.Convert.ToBase64String(publicBuffer);
|
||||
|
||||
var privateParameters = cryptoServiceProvider.ExportParameters(true);
|
||||
byte[] privateBuffer = new byte[paddedPrefixSize + privateParameters.D.Length + paddedPrefixSize + privateParameters.P.Length + paddedPrefixSize + privateParameters.Q.Length + paddedPrefixSize + privateParameters.InverseQ.Length];
|
||||
|
||||
using (var bw = new BinaryWriter(new MemoryStream(privateBuffer)))
|
||||
{
|
||||
PutPrefixed(bw, privateParameters.D, true);
|
||||
PutPrefixed(bw, privateParameters.P, true);
|
||||
PutPrefixed(bw, privateParameters.Q, true);
|
||||
PutPrefixed(bw, privateParameters.InverseQ, true);
|
||||
}
|
||||
var privateBlob = System.Convert.ToBase64String(privateBuffer);
|
||||
|
||||
HMACSHA1 hmacsha1 = new HMACSHA1(new SHA1CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes("putty-private-key-file-mac-key")));
|
||||
//byte[] bytesToHash = new byte[4 + 7 + 4 + 4 + 4 + Comment.Length + 4 + publicBuffer.Length + 4 + privateBuffer.Length];
|
||||
byte[] bytesToHash = new byte[prefixSize + keyType.Length + prefixSize + encryptionType.Length + prefixSize + Comment.Length +
|
||||
prefixSize + publicBuffer.Length + prefixSize + privateBuffer.Length];
|
||||
|
||||
using (var bw = new BinaryWriter(new MemoryStream(bytesToHash)))
|
||||
{
|
||||
PutPrefixed(bw, Encoding.ASCII.GetBytes("ssh-rsa"));
|
||||
PutPrefixed(bw, Encoding.ASCII.GetBytes("none"));
|
||||
PutPrefixed(bw, Encoding.ASCII.GetBytes(Comment));
|
||||
PutPrefixed(bw, publicBuffer);
|
||||
PutPrefixed(bw, privateBuffer);
|
||||
}
|
||||
|
||||
var hash = string.Join("", hmacsha1.ComputeHash(bytesToHash).Select(x => string.Format("{0:x2}", x)));
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine("PuTTY-User-Key-File-2: " + keyType);
|
||||
sb.AppendLine("Encryption: " + encryptionType);
|
||||
sb.AppendLine("Comment: " + Comment);
|
||||
|
||||
var publicLines = SpliceText(publicBlob, lineLength);
|
||||
sb.AppendLine("Public-Lines: " + publicLines.Length);
|
||||
foreach (var line in publicLines)
|
||||
{
|
||||
sb.AppendLine(line);
|
||||
}
|
||||
|
||||
var privateLines = SpliceText(privateBlob, lineLength);
|
||||
sb.AppendLine("Private-Lines: " + privateLines.Length);
|
||||
foreach (var line in privateLines)
|
||||
{
|
||||
sb.AppendLine(line);
|
||||
}
|
||||
|
||||
sb.AppendLine("Private-MAC: " + hash);
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
private static void PutPrefixed(BinaryWriter bw, byte[] bytes, bool addLeadingNull = false)
|
||||
{
|
||||
bw.Write(BitConverter.GetBytes(bytes.Length + (addLeadingNull ? 1 : 0)).Reverse().ToArray());
|
||||
if (addLeadingNull)
|
||||
bw.Write(new byte[] { 0x00 });
|
||||
bw.Write(bytes);
|
||||
}
|
||||
|
||||
private static string[] SpliceText(string text, int lineLength)
|
||||
{
|
||||
return Regex.Matches(text, ".{1," + lineLength + "}").Cast<Match>().Select(m => m.Value).ToArray();
|
||||
}
|
||||
private static int GetPrefixSize(byte[] bytes)
|
||||
{
|
||||
return CheckIsNeddPadding(bytes) ? paddedPrefixSize : prefixSize;
|
||||
}
|
||||
private static bool CheckIsNeddPadding(byte[] bytes)
|
||||
{
|
||||
// 128 == 10000000
|
||||
// This means that the number of bits can be divided by 8.
|
||||
// According to the algorithm in putty, you need to add a padding.
|
||||
return bytes[0] >= 128;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,239 +0,0 @@
|
||||
using Microsoft.Win32;
|
||||
using SecretServerAuthentication.TSS;
|
||||
using SecretServerRestClient.TSS;
|
||||
|
||||
namespace ExternalConnectors.TSS
|
||||
{
|
||||
public class SecretServerInterface
|
||||
{
|
||||
private static class SSConnectionData
|
||||
{
|
||||
public static string ssUsername = "";
|
||||
public static string ssPassword = "";
|
||||
public static string ssUrl = "";
|
||||
public static string ssOTP = "";
|
||||
public static bool ssSSO = false;
|
||||
public static bool initdone = false;
|
||||
|
||||
//token
|
||||
public static string ssTokenBearer = "";
|
||||
public static DateTime ssTokenExpiresOn = DateTime.UtcNow;
|
||||
public static string ssTokenRefresh = "";
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
if (ssPassword != "" || initdone == true)
|
||||
return;
|
||||
|
||||
RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\mRemoteSSInterface");
|
||||
try
|
||||
{
|
||||
// display gui and ask for data
|
||||
SSConnectionForm f = new SSConnectionForm();
|
||||
string? un = key.GetValue("Username") as string;
|
||||
f.tbUsername.Text = un ?? "";
|
||||
|
||||
string? url = key.GetValue("URL") as string;
|
||||
if (url == null || !url.Contains("://"))
|
||||
url = "https://cred.domain.local/SecretServer";
|
||||
f.tbSSURL.Text = url;
|
||||
|
||||
var b = key.GetValue("SSO");
|
||||
if (b == null || (string)b != "True")
|
||||
ssSSO = false;
|
||||
else
|
||||
{
|
||||
ssSSO = true;
|
||||
initdone = true;
|
||||
}
|
||||
f.cbUseSSO.Checked = ssSSO;
|
||||
|
||||
// show dialog
|
||||
while (true)
|
||||
{
|
||||
_ = f.ShowDialog();
|
||||
|
||||
if (f.DialogResult != DialogResult.OK)
|
||||
return;
|
||||
|
||||
// store values to memory
|
||||
ssUsername = f.tbUsername.Text;
|
||||
ssPassword = f.tbPassword.Text;
|
||||
ssUrl = f.tbSSURL.Text;
|
||||
ssSSO = f.cbUseSSO.Checked;
|
||||
ssOTP = f.tbOTP.Text;
|
||||
// check connection first
|
||||
try
|
||||
{
|
||||
if (TestCredentials() == true)
|
||||
break;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
MessageBox.Show("Test Credentials failed - please check your credentials");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// write values to registry
|
||||
key.SetValue("Username", ssUsername);
|
||||
key.SetValue("URL", ssUrl);
|
||||
key.SetValue("SSO", ssSSO);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
key.Close();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TestCredentials()
|
||||
{
|
||||
if (SSConnectionData.ssSSO)
|
||||
{
|
||||
// checking creds doesn't really make sense here, as we can't modify them anyway if something is wrong
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (!String.IsNullOrEmpty(GetToken()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void FetchSecret(int secretID, out string secretUsername, out string secretPassword, out string secretDomain)
|
||||
{
|
||||
string baseURL = SSConnectionData.ssUrl;
|
||||
|
||||
SecretModel secret;
|
||||
if (SSConnectionData.ssSSO)
|
||||
{
|
||||
// REQUIRES IIS CONFIG! https://docs.thycotic.com/ss/11.0.0/api-scripting/webservice-iwa-powershell
|
||||
var handler = new HttpClientHandler() { UseDefaultCredentials = true };
|
||||
using (var httpClient = new HttpClient(handler))
|
||||
{
|
||||
// Call REST API:
|
||||
var client = new SecretsServiceClient($"{baseURL}/winauthwebservices/api", httpClient);
|
||||
secret = client.GetSecretAsync(false, true, secretID, null).Result;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
|
||||
var token = GetToken();
|
||||
// Set credentials (token):
|
||||
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
|
||||
|
||||
// Call REST API:
|
||||
var client = new SecretsServiceClient($"{baseURL}/api", httpClient);
|
||||
secret = client.GetSecretAsync(false, true, secretID, null).Result;
|
||||
}
|
||||
}
|
||||
|
||||
// clear return variables
|
||||
secretDomain = "";
|
||||
secretUsername = "";
|
||||
secretPassword = "";
|
||||
|
||||
// parse data and extract what we need
|
||||
foreach (var item in secret.Items)
|
||||
{
|
||||
if (item.FieldName.ToLower().Equals("domain"))
|
||||
secretDomain = item.ItemValue;
|
||||
else if (item.FieldName.ToLower().Equals("username"))
|
||||
secretUsername = item.ItemValue;
|
||||
else if (item.FieldName.ToLower().Equals("password"))
|
||||
secretPassword = item.ItemValue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static string GetToken()
|
||||
{
|
||||
|
||||
string authUsername = SSConnectionData.ssUsername;
|
||||
string authPassword = SSConnectionData.ssPassword;
|
||||
string baseURL = SSConnectionData.ssUrl;
|
||||
string OTP = SSConnectionData.ssOTP;
|
||||
string Bearer = SSConnectionData.ssTokenBearer;
|
||||
string Refresh = SSConnectionData.ssTokenRefresh;
|
||||
DateTime ExpiresOn = SSConnectionData.ssTokenExpiresOn;
|
||||
|
||||
|
||||
// Check if current token is valid
|
||||
if (!String.IsNullOrEmpty(Bearer))
|
||||
{
|
||||
if (ExpiresOn >= DateTime.UtcNow)
|
||||
{
|
||||
return Bearer;
|
||||
}
|
||||
else
|
||||
{
|
||||
//try using refresh token
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
var tokenClient = new OAuth2ServiceClient(baseURL, httpClient);
|
||||
var token = tokenClient.AuthorizeAsync(Grant_type.Refresh_token, null, null, Refresh, null).Result;
|
||||
var tokenResult = token.Access_token;
|
||||
|
||||
SSConnectionData.ssTokenBearer = tokenResult;
|
||||
SSConnectionData.ssTokenRefresh = token.Refresh_token;
|
||||
SSConnectionData.ssTokenExpiresOn = token.Expires_on;
|
||||
return tokenResult;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
// Authenticate:
|
||||
var tokenClient = new OAuth2ServiceClient(baseURL, httpClient);
|
||||
// call below will throw an exception if the creds are invalid
|
||||
var token = tokenClient.AuthorizeAsync(Grant_type.Password, authUsername, authPassword, null, OTP).Result;
|
||||
// here we can be sure the creds are ok - return success state
|
||||
var tokenResult = token.Access_token;
|
||||
|
||||
SSConnectionData.ssTokenBearer = tokenResult;
|
||||
SSConnectionData.ssTokenRefresh = token.Refresh_token;
|
||||
SSConnectionData.ssTokenExpiresOn = token.Expires_on;
|
||||
return tokenResult;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// input must be in form "SSAPI:xxxx" where xxx is the secret id to fetch
|
||||
public static void FetchSecretFromServer(string input, out string username, out string password, out string domain)
|
||||
{
|
||||
// get secret id
|
||||
if (!input.StartsWith("SSAPI:"))
|
||||
throw new Exception("calling this function requires SSAPI: input");
|
||||
int secretID = Int32.Parse(input.Substring(6));
|
||||
|
||||
// init connection credentials, display popup if necessary
|
||||
SSConnectionData.Init();
|
||||
|
||||
// get the secret
|
||||
FetchSecret(secretID, out username, out password, out domain);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,7 +51,7 @@
|
||||
| ---------------|--------------|-----------|
|
||||
| Stable |  | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.76.20) |
|
||||
| Preview |  | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.77.1) |
|
||||
| Nightly |  | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/2022.01.07-1.77.2-nb) |
|
||||
| Nightly |  | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/2022.06.13-v1.77.3-nb) |
|
||||
|
||||
## Features
|
||||
|
||||
@@ -88,12 +88,14 @@ You will need to compile it yourself using Visual Studio.
|
||||
### Minimum Requirements
|
||||
|
||||
* [Microsoft Visual C++ Redistributable for Visual Studio 2015 - 2022](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)
|
||||
* [Microsoft .NET 6.0](https://dotnet.microsoft.com/download/dotnet/6.0)
|
||||
* [Microsoft .NET 6.0 Desktop Runtime](https://dotnet.microsoft.com/download/dotnet/6.0)
|
||||
* Microsoft Terminal Service Client 6.0 or later
|
||||
* Needed if you use RDP. mstscax.dll and/or msrdp.ocx be registered.
|
||||
|
||||
### Download
|
||||
|
||||
> :star: Starting Windows 11 you can use winget to install mRemoteNG. Just run `winget install -e --id mRemoteNG.mRemoteNG`
|
||||
|
||||
mRemoteNG is available as a redistributable MSI package or as a portable ZIP package and can be downloaded from the following locations:
|
||||
* [GitHub](https://github.com/mRemoteNG/mRemoteNG/releases)
|
||||
* [Project Website](https://mremoteng.org/download)
|
||||
|
||||
@@ -40,4 +40,4 @@ Format-Table -AutoSize -Wrap -InputObject @{
|
||||
|
||||
& "$PSScriptRoot\sign_binaries.ps1" -TargetDir $TargetDir -CertificatePath $CertificatePath -CertificatePassword $CertificatePassword -ConfigurationName $ConfigurationName -Exclude $ExcludeFromSigning -SolutionDir $SolutionDir
|
||||
& "$PSScriptRoot\verify_binary_signatures.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName -CertificatePath $CertificatePath -SolutionDir $SolutionDir
|
||||
& "$PSScriptRoot\rename_and_copy_installer.ps1" -SolutionDir $SolutionDir
|
||||
& "$PSScriptRoot\rename_and_copy_installer.ps1" -SolutionDir $SolutionDir -BuildConfiguration $ConfigurationName.Trim()
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
param (
|
||||
[string]
|
||||
$SolutionDir
|
||||
$SolutionDir,
|
||||
[string]
|
||||
$BuildConfiguration
|
||||
)
|
||||
|
||||
|
||||
$targetVersionedFile = "$SolutionDir\mRemoteNG\bin\x64\Release\mRemoteNG.exe"
|
||||
$targetVersionedFile = "$SolutionDir\mRemoteNG\bin\x64\$BuildConfiguration\mRemoteNG.exe"
|
||||
$version = &"$SolutionDir\Tools\exes\sigcheck.exe" /accepteula -q -n $targetVersionedFile
|
||||
$src = $SolutionDir + "mRemoteNGInstaller\Installer\bin\Release\en-US\mRemoteNG-Installer.msi"
|
||||
$dst = $SolutionDir + "mRemoteNG\bin\x64\Release\mRemoteNG-Installer-" + $version + ".msi"
|
||||
$src = $SolutionDir + "mRemoteNGInstaller\Installer\bin\$BuildConfiguration\en-US\mRemoteNG-Installer.msi"
|
||||
$dst = $SolutionDir + "mRemoteNG\bin\x64\$BuildConfiguration\mRemoteNG-Installer-" + $version + ".msi"
|
||||
|
||||
# Copy file
|
||||
Copy-Item $src -Destination $dst -Force
|
||||
|
||||
@@ -13,7 +13,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomActions", "mRemoteNGI
|
||||
EndProject
|
||||
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Installer", "mRemoteNGInstaller\Installer\Installer.wixproj", "{F0168B9F-6815-40DF-BA53-46CEE7683B68}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6} = {4934A491-40BC-4E5B-9166-EA1169A220F6}
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04} = {5423D985-CB48-4344-B47F-E8C6D60C8B04}
|
||||
{A56A2029-79B8-492A-ABE5-D2BFE05801BD} = {A56A2029-79B8-492A-ABE5-D2BFE05801BD}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "mRemoteNGSpecs", "mRemoteNGSpecs\mRemoteNGSpecs.csproj", "{16AA21E2-D6B7-427D-AB7D-AA8C611B724E}"
|
||||
@@ -22,6 +24,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExternalConnectors", "Exter
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug Installer|x64 = Debug Installer|x64
|
||||
Debug Portable|x64 = Debug Portable|x64
|
||||
Debug|x64 = Debug|x64
|
||||
Release Installer|x64 = Release Installer|x64
|
||||
@@ -29,6 +32,8 @@ Global
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Installer|x64.ActiveCfg = Debug|x64
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Installer|x64.Build.0 = Debug|x64
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x64.ActiveCfg = Debug Portable|x64
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x64.Build.0 = Debug Portable|x64
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x64.ActiveCfg = Debug|x64
|
||||
@@ -39,6 +44,7 @@ Global
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x64.Build.0 = Release Portable|x64
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x64.ActiveCfg = Release|x64
|
||||
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x64.Build.0 = Release|x64
|
||||
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Installer|x64.ActiveCfg = Debug|x64
|
||||
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|x64.ActiveCfg = Debug Portable|x64
|
||||
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Installer|x64.ActiveCfg = Release|x64
|
||||
@@ -46,23 +52,30 @@ Global
|
||||
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x64.Build.0 = Release Portable|x64
|
||||
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x64.ActiveCfg = Release|x64
|
||||
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x64.Build.0 = Release|x64
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Installer|x64.ActiveCfg = Debug|x64
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Installer|x64.Build.0 = Debug|x64
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|x64.ActiveCfg = Debug Portable|x64
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Installer|x64.ActiveCfg = Release|x64
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Installer|x64.Build.0 = Release|x64
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|x64.ActiveCfg = Release Portable|x64
|
||||
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|x64.ActiveCfg = Release|x64
|
||||
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Installer|x64.ActiveCfg = Debug|x64
|
||||
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Installer|x64.Build.0 = Debug|x64
|
||||
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|x64.ActiveCfg = Debug Portable|x64
|
||||
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Installer|x64.ActiveCfg = Release|x64
|
||||
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Installer|x64.Build.0 = Release|x64
|
||||
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|x64.ActiveCfg = Release Portable|x64
|
||||
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|x64.ActiveCfg = Release|x64
|
||||
{16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Debug Installer|x64.ActiveCfg = Debug|x64
|
||||
{16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Debug Portable|x64.ActiveCfg = Debug Portable|x64
|
||||
{16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Release Installer|x64.ActiveCfg = Release|x64
|
||||
{16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Release Portable|x64.ActiveCfg = Release Portable|x64
|
||||
{16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Release|x64.ActiveCfg = Release|x64
|
||||
{A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug Installer|x64.ActiveCfg = Debug|x64
|
||||
{A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug Installer|x64.Build.0 = Debug|x64
|
||||
{A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug Portable|x64.ActiveCfg = Debug Portable|x64
|
||||
{A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug Portable|x64.Build.0 = Debug Portable|x64
|
||||
{A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
|
||||
3
mRemoteNG/App.config
Normal file
3
mRemoteNG/App.config
Normal file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
</configuration>
|
||||
@@ -37,14 +37,9 @@ namespace mRemoteNG.App
|
||||
messageCollector.AddMessage(MessageClass.ErrorMsg, errorText, true);
|
||||
|
||||
//About to pop up a message, let's not block it...
|
||||
FrmSplashScreen.getInstance().Close();
|
||||
FrmSplashScreenNew.GetInstance().Close();
|
||||
|
||||
var ShouldIStayOrShouldIGo = CTaskDialog.MessageBox(Application.ProductName,
|
||||
Language.CompatibilityProblemDetected, errorText, "",
|
||||
"",
|
||||
Language.CheckboxDoNotShowThisMessageAgain,
|
||||
ETaskDialogButtons.OkCancel, ESysIcons.Warning,
|
||||
ESysIcons.Warning);
|
||||
var ShouldIStayOrShouldIGo = CTaskDialog.MessageBox(Application.ProductName, Language.CompatibilityProblemDetected, errorText, "", "", Language.CheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.OkCancel, ESysIcons.Warning, ESysIcons.Warning);
|
||||
if (CTaskDialog.VerificationChecked && ShouldIStayOrShouldIGo == DialogResult.OK)
|
||||
{
|
||||
messageCollector.AddMessage(MessageClass.ErrorMsg, "User requests that FIPS check be overridden", true);
|
||||
|
||||
@@ -38,8 +38,8 @@ namespace mRemoteNG.App
|
||||
return;
|
||||
|
||||
HeadlessFileImport(
|
||||
openFileDialog.FileNames,
|
||||
importDestinationContainer,
|
||||
openFileDialog.FileNames,
|
||||
importDestinationContainer,
|
||||
Runtime.ConnectionsService,
|
||||
fileName => MessageBox.Show(string.Format(Language.ImportFileFailedContent, fileName), Language.AskUpdatesMainInstruction,
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1));
|
||||
@@ -51,9 +51,40 @@ namespace mRemoteNG.App
|
||||
}
|
||||
}
|
||||
|
||||
public static void ImportFromRemoteDesktopManagerCsv(ContainerInfo importDestinationContainer)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (Runtime.ConnectionsService.BatchedSavingContext())
|
||||
{
|
||||
using (var openFileDialog = new OpenFileDialog())
|
||||
{
|
||||
openFileDialog.CheckFileExists = true;
|
||||
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
|
||||
openFileDialog.Multiselect = false;
|
||||
|
||||
var fileTypes = new List<string>();
|
||||
fileTypes.AddRange(new[] {Language.FiltermRemoteRemoteDesktopManagerCSV, "*.csv"});
|
||||
|
||||
openFileDialog.Filter = string.Join("|", fileTypes.ToArray());
|
||||
|
||||
if (openFileDialog.ShowDialog() != DialogResult.OK)
|
||||
return;
|
||||
|
||||
var importer = new RemoteDesktopManagerImporter();
|
||||
importer.Import(openFileDialog.FileName, importDestinationContainer);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromRemoteDesktopManagerCsv() failed.", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static void HeadlessFileImport(
|
||||
IEnumerable<string> filePaths,
|
||||
ContainerInfo importDestinationContainer,
|
||||
IEnumerable<string> filePaths,
|
||||
ContainerInfo importDestinationContainer,
|
||||
ConnectionsService connectionsService,
|
||||
Action<string> exceptionAction = null)
|
||||
{
|
||||
|
||||
@@ -18,12 +18,7 @@ namespace mRemoteNG.App.Info
|
||||
public const string UrlDocumentation = "https://mremoteng.readthedocs.io/en/latest/";
|
||||
public static string ApplicationVersion = Application.ProductVersion;
|
||||
public static readonly string ProductName = Application.ProductName;
|
||||
|
||||
public static readonly string Copyright =
|
||||
((AssemblyCopyrightAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),
|
||||
typeof(AssemblyCopyrightAttribute), false))
|
||||
.Copyright;
|
||||
|
||||
public static readonly string Copyright = ((AssemblyCopyrightAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyCopyrightAttribute), false)).Copyright;
|
||||
public static readonly string HomePath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
|
||||
|
||||
//public static string ReportingFilePath = "";
|
||||
|
||||
@@ -8,13 +8,9 @@ namespace mRemoteNG.App.Info
|
||||
{
|
||||
public static class SettingsFileInfo
|
||||
{
|
||||
private static readonly string ExePath =
|
||||
Path.GetDirectoryName(Assembly.GetAssembly(typeof(ConnectionInfo))?.Location);
|
||||
private static readonly string ExePath = Path.GetDirectoryName(Assembly.GetAssembly(typeof(ConnectionInfo))?.Location);
|
||||
|
||||
public static string SettingsPath =>
|
||||
Runtime.IsPortableEdition
|
||||
? ExePath
|
||||
: Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" + Application.ProductName;
|
||||
public static string SettingsPath => Runtime.IsPortableEdition ? ExePath : Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\" + Application.ProductName;
|
||||
|
||||
public static string LayoutFileName { get; } = "pnlLayout.xml";
|
||||
public static string ExtAppsFilesName { get; } = "extApps.xml";
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace mRemoteNG.App.Info
|
||||
|
||||
public static Uri GetUpdateChannelInfo()
|
||||
{
|
||||
var channel = IsValidChannel(Settings.Default.UpdateChannel) ? Settings.Default.UpdateChannel : STABLE;
|
||||
var channel = IsValidChannel(Properties.OptionsUpdatesPage.Default.UpdateChannel) ? Properties.OptionsUpdatesPage.Default.UpdateChannel : STABLE;
|
||||
return GetUpdateTxtUri(channel);
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace mRemoteNG.App.Info
|
||||
|
||||
private static Uri GetUpdateTxtUri(string channel)
|
||||
{
|
||||
return new Uri(new Uri(Settings.Default.UpdateAddress),
|
||||
return new Uri(new Uri(Properties.OptionsUpdatesPage.Default.UpdateAddress),
|
||||
new Uri(GetChannelFileName(channel), UriKind.Relative));
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,8 @@ namespace mRemoteNG.App.Initialization
|
||||
{
|
||||
new SaveConnectionsOnEdit(Runtime.ConnectionsService);
|
||||
|
||||
if (Settings.Default.FirstStart && !Settings.Default.LoadConsFromCustomLocation &&
|
||||
!File.Exists(Runtime.ConnectionsService.GetStartupConnectionFileName()))
|
||||
Runtime.ConnectionsService.NewConnectionsFile(Runtime.ConnectionsService
|
||||
.GetStartupConnectionFileName());
|
||||
if (Properties.App.Default.FirstStart && !Properties.OptionsBackupPage.Default.LoadConsFromCustomLocation && !File.Exists(Runtime.ConnectionsService.GetStartupConnectionFileName()))
|
||||
Runtime.ConnectionsService.NewConnectionsFile(Runtime.ConnectionsService.GetStartupConnectionFileName());
|
||||
|
||||
Runtime.LoadConnections();
|
||||
}
|
||||
|
||||
@@ -27,10 +27,10 @@ namespace mRemoteNG.App
|
||||
private void Initialize()
|
||||
{
|
||||
XmlConfigurator.Configure(LogManager.CreateRepository("mRemoteNG"));
|
||||
if (string.IsNullOrEmpty(Settings.Default.LogFilePath))
|
||||
Settings.Default.LogFilePath = BuildLogFilePath();
|
||||
if (string.IsNullOrEmpty(Properties.OptionsNotificationsPage.Default.LogFilePath))
|
||||
Properties.OptionsNotificationsPage.Default.LogFilePath = BuildLogFilePath();
|
||||
|
||||
SetLogPath(Settings.Default.LogToApplicationDirectory ? DefaultLogPath : Settings.Default.LogFilePath);
|
||||
SetLogPath(Properties.OptionsNotificationsPage.Default.LogToApplicationDirectory ? DefaultLogPath : Properties.OptionsNotificationsPage.Default.LogFilePath);
|
||||
}
|
||||
|
||||
public void SetLogPath(string path)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using mRemoteNG.Properties;
|
||||
using mRemoteNG.UI.Forms;
|
||||
@@ -17,7 +19,7 @@ namespace mRemoteNG.App
|
||||
[STAThread]
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
if (Settings.Default.SingleInstance)
|
||||
if (Properties.OptionsStartupExitPage.Default.SingleInstance)
|
||||
StartApplicationAsSingleInstance();
|
||||
else
|
||||
StartApplication();
|
||||
@@ -26,11 +28,23 @@ namespace mRemoteNG.App
|
||||
private static void StartApplication()
|
||||
{
|
||||
CatchAllUnhandledExceptions();
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
var frmSplashScreen = FrmSplashScreen.getInstance();
|
||||
System.Windows.Forms.Application.EnableVisualStyles();
|
||||
System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
var frmSplashScreen = FrmSplashScreenNew.GetInstance();
|
||||
|
||||
var targetScreen = Screen.PrimaryScreen;
|
||||
|
||||
Rectangle viewport = targetScreen.WorkingArea;
|
||||
frmSplashScreen.Top = viewport.Top;
|
||||
frmSplashScreen.Left = viewport.Left;
|
||||
// normaly it should be screens[1] however due DPI apply 1 size "same" as default with 100%
|
||||
frmSplashScreen.Left = viewport.Left + (targetScreen.Bounds.Size.Width / 2) - (frmSplashScreen.Width / 2);
|
||||
frmSplashScreen.Top = viewport.Top + (targetScreen.Bounds.Size.Height / 2) - (frmSplashScreen.Height / 2);
|
||||
|
||||
frmSplashScreen.Show();
|
||||
Application.Run(FrmMain.Default);
|
||||
|
||||
System.Windows.Forms.Application.Run(FrmMain.Default);
|
||||
}
|
||||
|
||||
public static void CloseSingletonInstanceMutex()
|
||||
@@ -78,15 +92,15 @@ namespace mRemoteNG.App
|
||||
|
||||
private static void CatchAllUnhandledExceptions()
|
||||
{
|
||||
Application.ThreadException += ApplicationOnThreadException;
|
||||
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
|
||||
System.Windows.Forms.Application.ThreadException += ApplicationOnThreadException;
|
||||
System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
|
||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
|
||||
}
|
||||
|
||||
private static void ApplicationOnThreadException(object sender, ThreadExceptionEventArgs e)
|
||||
{
|
||||
if (!FrmSplashScreen.getInstance().IsDisposed)
|
||||
FrmSplashScreen.getInstance().Close();
|
||||
// if (PresentationSource.FromVisual(FrmSplashScreenNew))
|
||||
FrmSplashScreenNew.GetInstance().Close();
|
||||
|
||||
if (FrmMain.Default.IsDisposed) return;
|
||||
|
||||
@@ -97,8 +111,9 @@ namespace mRemoteNG.App
|
||||
|
||||
private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
if (!FrmSplashScreen.getInstance().IsDisposed)
|
||||
FrmSplashScreen.getInstance().Close();
|
||||
//TODO: Check if splash closed properly
|
||||
//if (!FrmSplashScreenNew.GetInstance().IsDisposed)
|
||||
// FrmSplashScreenNew.GetInstance().Close();
|
||||
|
||||
var window = new FrmUnhandledException(e.ExceptionObject as Exception, e.IsTerminating);
|
||||
window.ShowDialog(FrmMain.Default);
|
||||
|
||||
@@ -91,17 +91,17 @@ namespace mRemoteNG.App
|
||||
return;
|
||||
|
||||
connectionFileName = loadDialog.FileName;
|
||||
Settings.Default.UseSQLServer = false;
|
||||
Settings.Default.Save();
|
||||
Properties.OptionsDBsPage.Default.UseSQLServer = false;
|
||||
Properties.OptionsDBsPage.Default.Save();
|
||||
}
|
||||
else if (!Settings.Default.UseSQLServer)
|
||||
else if (!Properties.OptionsDBsPage.Default.UseSQLServer)
|
||||
{
|
||||
connectionFileName = ConnectionsService.GetStartupConnectionFileName();
|
||||
}
|
||||
|
||||
ConnectionsService.LoadConnections(Settings.Default.UseSQLServer, false, connectionFileName);
|
||||
ConnectionsService.LoadConnections(Properties.OptionsDBsPage.Default.UseSQLServer, false, connectionFileName);
|
||||
|
||||
if (Settings.Default.UseSQLServer)
|
||||
if (Properties.OptionsDBsPage.Default.UseSQLServer)
|
||||
{
|
||||
ConnectionsService.LastSqlUpdate = DateTime.Now;
|
||||
}
|
||||
@@ -115,26 +115,20 @@ namespace mRemoteNG.App
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
FrmSplashScreen.getInstance().Close();
|
||||
FrmSplashScreenNew.GetInstance().Close();
|
||||
|
||||
if (Settings.Default.UseSQLServer)
|
||||
if (Properties.OptionsDBsPage.Default.UseSQLServer)
|
||||
{
|
||||
MessageCollector.AddExceptionMessage(Language.LoadFromSqlFailed, ex);
|
||||
var commandButtons = string.Join("|", Language._TryAgain,
|
||||
Language.CommandOpenConnectionFile,
|
||||
string.Format(Language.CommandExitProgram,
|
||||
Application.ProductName));
|
||||
CTaskDialog.ShowCommandBox(Application.ProductName, Language.LoadFromSqlFailed,
|
||||
Language.LoadFromSqlFailedContent,
|
||||
MiscTools.GetExceptionMessageRecursive(ex), "", "",
|
||||
commandButtons, false, ESysIcons.Error, ESysIcons.Error);
|
||||
var commandButtons = string.Join("|", Language._TryAgain, Language.CommandOpenConnectionFile, string.Format(Language.CommandExitProgram, Application.ProductName));
|
||||
CTaskDialog.ShowCommandBox(Application.ProductName, Language.LoadFromSqlFailed, Language.LoadFromSqlFailedContent, MiscTools.GetExceptionMessageRecursive(ex), "", "", commandButtons, false, ESysIcons.Error, ESysIcons.Error);
|
||||
switch (CTaskDialog.CommandButtonResult)
|
||||
{
|
||||
case 0:
|
||||
LoadConnections(withDialog);
|
||||
return;
|
||||
case 1:
|
||||
Settings.Default.UseSQLServer = false;
|
||||
Properties.OptionsDBsPage.Default.UseSQLServer = false;
|
||||
LoadConnections(true);
|
||||
return;
|
||||
default:
|
||||
@@ -163,14 +157,7 @@ namespace mRemoteNG.App
|
||||
{
|
||||
try
|
||||
{
|
||||
CTaskDialog.ShowTaskDialogBox(
|
||||
GeneralAppInfo.ProductName,
|
||||
Language.ConnectionFileNotFound,
|
||||
"", "", "", "", "",
|
||||
string.Join(" | ", commandButtons),
|
||||
ETaskDialogButtons.None,
|
||||
ESysIcons.Question,
|
||||
ESysIcons.Question);
|
||||
CTaskDialog.ShowTaskDialogBox(GeneralAppInfo.ProductName, Language.ConnectionFileNotFound, "", "", "", "", "", string.Join(" | ", commandButtons), ETaskDialogButtons.None, ESysIcons.Question, ESysIcons.Question);
|
||||
|
||||
switch (CTaskDialog.CommandButtonResult)
|
||||
{
|
||||
@@ -195,11 +182,7 @@ namespace mRemoteNG.App
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
MessageCollector.AddExceptionMessage(
|
||||
string
|
||||
.Format(Language.ConnectionsFileCouldNotBeLoadedNew,
|
||||
connectionFileName), exc,
|
||||
MessageClass.InformationMsg);
|
||||
MessageCollector.AddExceptionMessage(string.Format(Language.ConnectionsFileCouldNotBeLoadedNew, connectionFileName), exc, MessageClass.InformationMsg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,12 +198,7 @@ namespace mRemoteNG.App
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(FrmMain.Default,
|
||||
string.Format(Language.ErrorStartupConnectionFileLoad, Environment.NewLine,
|
||||
Application.ProductName,
|
||||
ConnectionsService.GetStartupConnectionFileName(),
|
||||
MiscTools.GetExceptionMessageRecursive(ex)),
|
||||
@"Could not load startup file.", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
MessageBox.Show(FrmMain.Default, string.Format(Language.ErrorStartupConnectionFileLoad, Environment.NewLine, Application.ProductName, ConnectionsService.GetStartupConnectionFileName(), MiscTools.GetExceptionMessageRecursive(ex)), @"Could not load startup file.", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
Application.Exit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,14 +66,14 @@ namespace mRemoteNG.App
|
||||
DateTime currentDate = DateTime.Now;
|
||||
|
||||
//OBSOLETE: Settings.Default.SaveConsOnExit is obsolete and should be removed in a future release
|
||||
if (Settings.Default.SaveConsOnExit || (Settings.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.OnExit))
|
||||
if (Properties.OptionsStartupExitPage.Default.SaveConnectionsOnExit || (Properties.OptionsBackupPage.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.OnExit))
|
||||
{
|
||||
Runtime.ConnectionsService.SaveConnections();
|
||||
return;
|
||||
}
|
||||
lastUpdate = Runtime.ConnectionsService.UsingDatabase ? Runtime.ConnectionsService.LastSqlUpdate : Runtime.ConnectionsService.LastFileUpdate;
|
||||
|
||||
switch (Settings.Default.SaveConnectionsFrequency)
|
||||
switch (Properties.OptionsBackupPage.Default.SaveConnectionsFrequency)
|
||||
{
|
||||
case (int)ConnectionsBackupFrequencyEnum.Daily:
|
||||
updateDate = lastUpdate.AddDays(1);
|
||||
|
||||
@@ -38,8 +38,7 @@ namespace mRemoteNG.App
|
||||
|
||||
public void InitializeProgram(MessageCollector messageCollector)
|
||||
{
|
||||
Debug.Print("---------------------------" + Environment.NewLine + "[START] - " +
|
||||
Convert.ToString(DateTime.Now, CultureInfo.InvariantCulture));
|
||||
Debug.Print("---------------------------" + Environment.NewLine + "[START] - " + Convert.ToString(DateTime.Now, CultureInfo.InvariantCulture));
|
||||
var startupLogger = new StartupDataLogger(messageCollector);
|
||||
startupLogger.LogStartupData();
|
||||
CompatibilityChecker.CheckCompatibility(messageCollector);
|
||||
@@ -59,10 +58,9 @@ namespace mRemoteNG.App
|
||||
public void CreateConnectionsProvider(MessageCollector messageCollector)
|
||||
{
|
||||
messageCollector.AddMessage(MessageClass.DebugMsg, "Determining if we need a database syncronizer");
|
||||
if (!Settings.Default.UseSQLServer) return;
|
||||
if (!Properties.OptionsDBsPage.Default.UseSQLServer) return;
|
||||
messageCollector.AddMessage(MessageClass.DebugMsg, "Creating database syncronizer");
|
||||
Runtime.ConnectionsService.RemoteConnectionsSyncronizer =
|
||||
new RemoteConnectionsSyncronizer(new SqlConnectionsUpdateChecker());
|
||||
Runtime.ConnectionsService.RemoteConnectionsSyncronizer = new RemoteConnectionsSyncronizer(new SqlConnectionsUpdateChecker());
|
||||
Runtime.ConnectionsService.RemoteConnectionsSyncronizer.Enable();
|
||||
}
|
||||
|
||||
@@ -78,12 +76,8 @@ namespace mRemoteNG.App
|
||||
}
|
||||
|
||||
var nextUpdateCheck =
|
||||
Convert.ToDateTime(Settings.Default.CheckForUpdatesLastCheck.Add(
|
||||
TimeSpan
|
||||
.FromDays(Convert.ToDouble(Settings
|
||||
.Default
|
||||
.CheckForUpdatesFrequencyDays))));
|
||||
if (!Settings.Default.UpdatePending && DateTime.UtcNow < nextUpdateCheck)
|
||||
Convert.ToDateTime(Properties.OptionsUpdatesPage.Default.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(Convert.ToDouble(Properties.OptionsUpdatesPage.Default.CheckForUpdatesFrequencyDays))));
|
||||
if (!Properties.OptionsUpdatesPage.Default.UpdatePending && DateTime.UtcNow < nextUpdateCheck)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
@@ -22,7 +22,7 @@ namespace mRemoteNG.App
|
||||
|
||||
private SupportedCultures()
|
||||
{
|
||||
foreach (var CultureName in Settings.Default.SupportedUICultures.Split(','))
|
||||
foreach (var CultureName in Properties.AppUI.Default.SupportedUICultures.Split(','))
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
@@ -58,23 +58,18 @@ namespace mRemoteNG.App.Update
|
||||
|
||||
private void SetDefaultProxySettings()
|
||||
{
|
||||
var shouldWeUseProxy = Settings.Default.UpdateUseProxy;
|
||||
var proxyAddress = Settings.Default.UpdateProxyAddress;
|
||||
var port = Settings.Default.UpdateProxyPort;
|
||||
var useAuthentication = Settings.Default.UpdateProxyUseAuthentication;
|
||||
var username = Settings.Default.UpdateProxyAuthUser;
|
||||
var shouldWeUseProxy = Properties.OptionsUpdatesPage.Default.UpdateUseProxy;
|
||||
var proxyAddress = Properties.OptionsUpdatesPage.Default.UpdateProxyAddress;
|
||||
var port = Properties.OptionsUpdatesPage.Default.UpdateProxyPort;
|
||||
var useAuthentication = Properties.OptionsUpdatesPage.Default.UpdateProxyUseAuthentication;
|
||||
var username = Properties.OptionsUpdatesPage.Default.UpdateProxyAuthUser;
|
||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||
var password = cryptographyProvider.Decrypt(Settings.Default.UpdateProxyAuthPass, Runtime.EncryptionKey);
|
||||
var password = cryptographyProvider.Decrypt(Properties.OptionsUpdatesPage.Default.UpdateProxyAuthPass, Runtime.EncryptionKey);
|
||||
|
||||
SetProxySettings(shouldWeUseProxy, proxyAddress, port, useAuthentication, username, password);
|
||||
}
|
||||
|
||||
public void SetProxySettings(bool useProxy,
|
||||
string address,
|
||||
int port,
|
||||
bool useAuthentication,
|
||||
string username,
|
||||
string password)
|
||||
public void SetProxySettings(bool useProxy, string address, int port, bool useAuthentication, string username, string password)
|
||||
{
|
||||
if (useProxy && !string.IsNullOrEmpty(address))
|
||||
{
|
||||
@@ -229,11 +224,11 @@ namespace mRemoteNG.App.Update
|
||||
_getUpdateInfoCancelToken = new CancellationTokenSource();
|
||||
var updateInfo = await _httpClient.GetStringAsync(UpdateChannelInfo.GetUpdateChannelInfo(), _getUpdateInfoCancelToken.Token);
|
||||
CurrentUpdateInfo = UpdateInfo.FromString(updateInfo);
|
||||
Settings.Default.CheckForUpdatesLastCheck = DateTime.UtcNow;
|
||||
Properties.OptionsUpdatesPage.Default.CheckForUpdatesLastCheck = DateTime.UtcNow;
|
||||
|
||||
if (!Settings.Default.UpdatePending)
|
||||
if (!Properties.OptionsUpdatesPage.Default.UpdatePending)
|
||||
{
|
||||
Settings.Default.UpdatePending = IsUpdateAvailable();
|
||||
Properties.OptionsUpdatesPage.Default.UpdatePending = IsUpdateAvailable();
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
using System;
|
||||
#region Usings
|
||||
using System;
|
||||
using mRemoteNG.Resources.Language;
|
||||
using mRemoteNG.UI;
|
||||
using mRemoteNG.UI.Forms;
|
||||
using mRemoteNG.UI.Window;
|
||||
#endregion
|
||||
|
||||
namespace mRemoteNG.App
|
||||
{
|
||||
@@ -39,11 +42,8 @@ namespace mRemoteNG.App
|
||||
_adimportForm.Show(dockPanel);
|
||||
break;
|
||||
case WindowType.Options:
|
||||
using (var optionsForm = new FrmOptions())
|
||||
{
|
||||
optionsForm.ShowDialog(dockPanel);
|
||||
}
|
||||
|
||||
FrmMain.OptionsForm.SetActivatedPage(Language.StartupExit);
|
||||
FrmMain.OptionsForm.Visible = true;
|
||||
break;
|
||||
case WindowType.SSHTransfer:
|
||||
if (SshtransferForm == null || SshtransferForm.IsDisposed)
|
||||
|
||||
9
mRemoteNG/Config/ACLPermissions.cs
Normal file
9
mRemoteNG/Config/ACLPermissions.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace mRemoteNG.Config.ACL
|
||||
{
|
||||
public enum ACLPermissions
|
||||
{
|
||||
Hidden = 0,
|
||||
ReadOnly = 1,
|
||||
WriteAllow = 2
|
||||
}
|
||||
}
|
||||
@@ -20,8 +20,7 @@ namespace mRemoteNG.Config.Connections
|
||||
connectionsService.ConnectionsLoaded += ConnectionsServiceOnConnectionsLoaded;
|
||||
}
|
||||
|
||||
private void ConnectionsServiceOnConnectionsLoaded(object sender,
|
||||
ConnectionsLoadedEventArgs connectionsLoadedEventArgs)
|
||||
private void ConnectionsServiceOnConnectionsLoaded(object sender, ConnectionsLoadedEventArgs connectionsLoadedEventArgs)
|
||||
{
|
||||
connectionsLoadedEventArgs.NewConnectionTreeModel.CollectionChanged +=
|
||||
ConnectionTreeModelOnCollectionChanged;
|
||||
@@ -34,15 +33,12 @@ namespace mRemoteNG.Config.Connections
|
||||
}
|
||||
}
|
||||
|
||||
private void ConnectionTreeModelOnPropertyChanged(object sender,
|
||||
PropertyChangedEventArgs propertyChangedEventArgs)
|
||||
private void ConnectionTreeModelOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
|
||||
{
|
||||
SaveConnectionOnEdit(propertyChangedEventArgs.PropertyName);
|
||||
}
|
||||
|
||||
private void ConnectionTreeModelOnCollectionChanged(object sender,
|
||||
NotifyCollectionChangedEventArgs
|
||||
notifyCollectionChangedEventArgs)
|
||||
private void ConnectionTreeModelOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
|
||||
{
|
||||
SaveConnectionOnEdit();
|
||||
}
|
||||
@@ -50,7 +46,7 @@ namespace mRemoteNG.Config.Connections
|
||||
private void SaveConnectionOnEdit(string propertyName = "")
|
||||
{
|
||||
//OBSOLETE: mRemoteNG.Settings.Default.SaveConnectionsAfterEveryEdit is obsolete and should be removed in a future release
|
||||
if (mRemoteNG.Properties.Settings.Default.SaveConnectionsAfterEveryEdit || (mRemoteNG.Properties.Settings.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.OnEdit))
|
||||
if (Properties.OptionsBackupPage.Default.SaveConnectionsAfterEveryEdit || (Properties.OptionsBackupPage.Default.SaveConnectionsFrequency == (int)ConnectionsBackupFrequencyEnum.OnEdit))
|
||||
{
|
||||
if (FrmMain.Default.IsClosing)
|
||||
return;
|
||||
|
||||
@@ -18,6 +18,7 @@ using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using mRemoteNG.Resources.Language;
|
||||
using mRemoteNG.Properties;
|
||||
|
||||
namespace mRemoteNG.Config.Connections
|
||||
{
|
||||
@@ -27,10 +28,7 @@ namespace mRemoteNG.Config.Connections
|
||||
private readonly ISerializer<IEnumerable<LocalConnectionPropertiesModel>, string> _localPropertiesSerializer;
|
||||
private readonly IDataProvider<string> _dataProvider;
|
||||
|
||||
public SqlConnectionsSaver(SaveFilter saveFilter,
|
||||
ISerializer<IEnumerable<LocalConnectionPropertiesModel>, string>
|
||||
localPropertieSerializer,
|
||||
IDataProvider<string> localPropertiesDataProvider)
|
||||
public SqlConnectionsSaver(SaveFilter saveFilter, ISerializer<IEnumerable<LocalConnectionPropertiesModel>, string> localPropertieSerializer, IDataProvider<string> localPropertiesDataProvider)
|
||||
{
|
||||
if (saveFilter == null)
|
||||
throw new ArgumentNullException(nameof(saveFilter));
|
||||
@@ -47,15 +45,13 @@ namespace mRemoteNG.Config.Connections
|
||||
|
||||
if (PropertyIsLocalOnly(propertyNameTrigger))
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg,
|
||||
$"Property {propertyNameTrigger} is local only. Not saving to database.");
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, $"Property {propertyNameTrigger} is local only. Not saving to database.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (SqlUserIsReadOnly())
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
"Trying to save connection tree but the SQL read only checkbox is checked, aborting!");
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, "Trying to save connection tree but the SQL read only checkbox is checked, aborting!");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -68,8 +64,7 @@ namespace mRemoteNG.Config.Connections
|
||||
|
||||
if (!databaseVersionVerifier.VerifyDatabaseVersion(metaData.ConfVersion))
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
Language.ErrorConnectionListSaveFailed);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.ErrorConnectionListSaveFailed);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -178,7 +173,7 @@ namespace mRemoteNG.Config.Connections
|
||||
|
||||
private bool SqlUserIsReadOnly()
|
||||
{
|
||||
return Properties.Settings.Default.SQLReadOnly;
|
||||
return Properties.OptionsDBsPage.Default.SQLReadOnly;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ using mRemoteNG.Security;
|
||||
using mRemoteNG.Security.Factories;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using mRemoteNG.Properties;
|
||||
|
||||
namespace mRemoteNG.Config.Connections
|
||||
{
|
||||
@@ -37,7 +38,7 @@ namespace mRemoteNG.Config.Connections
|
||||
cryptographyProvider,
|
||||
connectionTreeModel,
|
||||
_saveFilter,
|
||||
Properties.Settings.Default.EncryptCompleteConnectionsFile);
|
||||
Properties.OptionsSecurityPage.Default.EncryptCompleteConnectionsFile);
|
||||
|
||||
var rootNode = connectionTreeModel.RootNodes.OfType<RootNodeInfo>().First();
|
||||
var xml = xmlConnectionsSerializer.Serialize(rootNode);
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace mRemoteNG.Config.DataProviders
|
||||
return;
|
||||
|
||||
var backupFileName =
|
||||
string.Format(Properties.Settings.Default.BackupFileNameFormat, fileName, DateTime.Now);
|
||||
string.Format(Properties.OptionsBackupPage.Default.BackupFileNameFormat, fileName, DateTime.Now);
|
||||
File.Copy(fileName, backupFileName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -39,7 +39,7 @@ namespace mRemoteNG.Config.DataProviders
|
||||
|
||||
private bool FeatureIsTurnedOff()
|
||||
{
|
||||
return Properties.Settings.Default.BackupFileKeepCount == 0;
|
||||
return Properties.OptionsBackupPage.Default.BackupFileKeepCount == 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ namespace mRemoteNG.Config.DataProviders
|
||||
if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(directoryName))
|
||||
return;
|
||||
|
||||
var searchPattern = string.Format(Properties.Settings.Default.BackupFileNameFormat, fileName, "*");
|
||||
var searchPattern = string.Format(Properties.OptionsBackupPage.Default.BackupFileNameFormat, fileName, "*");
|
||||
var files = Directory.GetFiles(directoryName, searchPattern);
|
||||
|
||||
if (files.Length <= maxBackupsToKeep)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using mRemoteNG.Config.DatabaseConnectors;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Properties;
|
||||
using MySql.Data.MySqlClient;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
@@ -108,7 +109,7 @@ namespace mRemoteNG.Config.DataProviders
|
||||
|
||||
private bool DbUserIsReadOnly()
|
||||
{
|
||||
return Properties.Settings.Default.SQLReadOnly;
|
||||
return Properties.OptionsDBsPage.Default.SQLReadOnly;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Properties;
|
||||
using mRemoteNG.Security.SymmetricEncryption;
|
||||
|
||||
namespace mRemoteNG.Config.DatabaseConnectors
|
||||
@@ -7,12 +8,12 @@ namespace mRemoteNG.Config.DatabaseConnectors
|
||||
{
|
||||
public static IDatabaseConnector DatabaseConnectorFromSettings()
|
||||
{
|
||||
var sqlType = Properties.Settings.Default.SQLServerType;
|
||||
var sqlHost = Properties.Settings.Default.SQLHost;
|
||||
var sqlCatalog = Properties.Settings.Default.SQLDatabaseName;
|
||||
var sqlUsername = Properties.Settings.Default.SQLUser;
|
||||
var sqlType = Properties.OptionsDBsPage.Default.SQLServerType;
|
||||
var sqlHost = Properties.OptionsDBsPage.Default.SQLHost;
|
||||
var sqlCatalog = Properties.OptionsDBsPage.Default.SQLDatabaseName;
|
||||
var sqlUsername = Properties.OptionsDBsPage.Default.SQLUser;
|
||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||
var sqlPassword = cryptographyProvider.Decrypt(Properties.Settings.Default.SQLPass, Runtime.EncryptionKey);
|
||||
var sqlPassword = cryptographyProvider.Decrypt(Properties.OptionsDBsPage.Default.SQLPass, Runtime.EncryptionKey);
|
||||
|
||||
return DatabaseConnector(sqlType, sqlHost, sqlCatalog, sqlUsername, sqlPassword);
|
||||
}
|
||||
|
||||
47
mRemoteNG/Config/Import/RemoteDesktopManagerImporter.cs
Normal file
47
mRemoteNG/Config/Import/RemoteDesktopManagerImporter.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
#region
|
||||
|
||||
using System.IO;
|
||||
using Castle.Core.Internal;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopManager;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Messages;
|
||||
|
||||
#endregion
|
||||
|
||||
namespace mRemoteNG.Config.Import;
|
||||
|
||||
public class RemoteDesktopManagerImporter : IConnectionImporter<string>
|
||||
{
|
||||
public void Import(string filePath, ContainerInfo destinationContainer)
|
||||
{
|
||||
if (string.IsNullOrEmpty(filePath))
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "Unable to import file. File path is null.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!File.Exists(filePath))
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
$"Unable to import file. File does not exist. Path: {filePath}");
|
||||
|
||||
var dataProvider = new FileDataProvider(filePath);
|
||||
var csvString = dataProvider.Load();
|
||||
|
||||
if (!string.IsNullOrEmpty(csvString))
|
||||
{
|
||||
var csvDeserializer = new CsvConnectionsDeserializerRdmFormat();
|
||||
var connectionTreeModel = csvDeserializer.Deserialize(csvString);
|
||||
|
||||
var rootContainer = new ContainerInfo { Name = Path.GetFileNameWithoutExtension(filePath) };
|
||||
rootContainer.AddChildRange(connectionTreeModel.RootNodes);
|
||||
destinationContainer.AddChild(rootContainer);
|
||||
}
|
||||
else
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "Unable to import file. File is empty.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -186,13 +186,25 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
? connectionCsv[headers.IndexOf("RDGatewayDomain")]
|
||||
: "";
|
||||
|
||||
connectionRecord.RDGatewayHostname = headers.Contains("RDGatewayHostname")
|
||||
? connectionCsv[headers.IndexOf("RDGatewayHostname")]
|
||||
: "";
|
||||
|
||||
if (headers.Contains("RDGatewayExternalCredentialProvider"))
|
||||
{
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("RDGatewayExternalCredentialProvider")], out ExternalCredentialProvider value))
|
||||
connectionRecord.RDGatewayExternalCredentialProvider = value;
|
||||
}
|
||||
|
||||
connectionRecord.RDGatewayUserViaAPI = headers.Contains("RDGatewayUserViaAPI")
|
||||
? connectionCsv[headers.IndexOf("RDGatewayUserViaAPI")]
|
||||
: "";
|
||||
|
||||
|
||||
connectionRecord.VNCProxyIP = headers.Contains("VNCProxyIP")
|
||||
? connectionCsv[headers.IndexOf("VNCProxyIP")]
|
||||
: "";
|
||||
|
||||
connectionRecord.RDGatewayHostname = headers.Contains("RDGatewayHostname")
|
||||
? connectionCsv[headers.IndexOf("RDGatewayHostname")]
|
||||
: "";
|
||||
|
||||
connectionRecord.RDPStartProgram = headers.Contains("RDPStartProgram")
|
||||
? connectionCsv[headers.IndexOf("RDPStartProgram")]
|
||||
@@ -226,6 +238,18 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
connectionRecord.UseCredSsp = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("UseRestrictedAdmin"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("UseRestrictedAdmin")], out bool value))
|
||||
connectionRecord.UseRestrictedAdmin = value;
|
||||
}
|
||||
if (headers.Contains("UseRCG"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("UseRCG")], out bool value))
|
||||
connectionRecord.UseRCG = value;
|
||||
}
|
||||
|
||||
|
||||
if (headers.Contains("UseVmId"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("UseVmId")], out bool value))
|
||||
@@ -441,6 +465,16 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("RdpVersion")], true, out RdpVersion version))
|
||||
connectionRecord.RdpVersion = version;
|
||||
}
|
||||
if (headers.Contains("ExternalCredentialProvider"))
|
||||
{
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("ExternalCredentialProvider")], out ExternalCredentialProvider value))
|
||||
connectionRecord.ExternalCredentialProvider = value;
|
||||
}
|
||||
if (headers.Contains("ExternalAddressProvider"))
|
||||
{
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("ExternalAddressProvider")], out ExternalAddressProvider value))
|
||||
connectionRecord.ExternalAddressProvider = value;
|
||||
}
|
||||
|
||||
#region Inheritance
|
||||
|
||||
@@ -636,6 +670,19 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
connectionRecord.Inheritance.UseCredSsp = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritUseRestrictedAdmin"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUseRestrictedAdmin")], out bool value))
|
||||
connectionRecord.Inheritance.UseRestrictedAdmin = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritUseRCG"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUseRCG")], out bool value))
|
||||
connectionRecord.Inheritance.UseRCG = value;
|
||||
}
|
||||
|
||||
|
||||
if (headers.Contains("InheritUseVmId"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUseVmId")], out bool value))
|
||||
@@ -654,6 +701,11 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
connectionRecord.Inheritance.RenderingEngine = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritExternalCredentialProvider"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritExternalCredentialProvider")], out bool value))
|
||||
connectionRecord.Inheritance.ExternalCredentialProvider = value;
|
||||
}
|
||||
if (headers.Contains("InheritUserViaAPI"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUserViaAPI")], out bool value))
|
||||
@@ -829,6 +881,18 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
connectionRecord.Inheritance.RDGatewayDomain = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDGatewayExternalCredentialProvider"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDGatewayExternalCredentialProvider")], out bool value))
|
||||
connectionRecord.Inheritance.RDGatewayExternalCredentialProvider = value;
|
||||
}
|
||||
if (headers.Contains("InheritRDGatewayUserViaAPI"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDGatewayUserViaAPI")], out bool value))
|
||||
connectionRecord.Inheritance.RDGatewayUserViaAPI = value;
|
||||
}
|
||||
|
||||
|
||||
if (headers.Contains("InheritRDPAlertIdleTimeout"))
|
||||
{
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDPAlertIdleTimeout")], out bool value))
|
||||
|
||||
@@ -56,25 +56,25 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
if (_saveFilter.SaveDomain)
|
||||
sb.Append("Domain;");
|
||||
|
||||
sb.Append("Hostname;Port;VmId;Protocol;SSHTunnelConnectionName;OpeningCommand;SSHOptions;PuttySession;ConnectToConsole;UseCredSsp;UseVmId;UseEnhancedMode;RenderingEngine;RDPAuthenticationLevel;" +
|
||||
sb.Append("Hostname;Port;VmId;Protocol;SSHTunnelConnectionName;OpeningCommand;SSHOptions;PuttySession;ConnectToConsole;UseCredSsp;UseRestrictedAdmin;UseRCG;UseVmId;UseEnhancedMode;RenderingEngine;RDPAuthenticationLevel;" +
|
||||
"LoadBalanceInfo;Colors;Resolution;AutomaticResize;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;DisableFullWindowDrag;DisableMenuAnimations;DisableCursorShadow;DisableCursorBlinking;" +
|
||||
"CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectClipboard;RedirectSmartCards;RedirectSound;RedirectKeys;" +
|
||||
"PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;Favorite;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;" +
|
||||
"VNCProxyPort;VNCProxyUsername;VNCProxyPassword;VNCColors;VNCSmartSizeMode;VNCViewOnly;RDGatewayUsageMethod;RDGatewayHostname;" +
|
||||
"RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;RedirectAudioCapture;RdpVersion;RDPStartProgram;RDPStartProgramWorkDir;UserViaAPI;EC2InstanceId;EC2Region;");
|
||||
"RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;RDGatewayExternalCredentialProvider;RDGatewayUserViaAPI;RedirectAudioCapture;RdpVersion;RDPStartProgram;RDPStartProgramWorkDir;UserViaAPI;EC2InstanceId;EC2Region;ExternalCredentialProvider;ExternalAddressProvider;");
|
||||
|
||||
if (_saveFilter.SaveInheritance)
|
||||
sb.Append("InheritCacheBitmaps;InheritColors;InheritDescription;InheritDisplayThemes;InheritDisplayWallpaper;" +
|
||||
"InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDisableFullWindowDrag;InheritDisableMenuAnimations;InheritDisableCursorShadow;InheritDisableCursorBlinking;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;" +
|
||||
"InheritProtocol;InheritSSHTunnelConnectionName;InheritOpeningCommand;InheritSSHOptions;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;" +
|
||||
"InheritRedirectClipboard;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritAutomaticResize;" +
|
||||
"InheritUseConsoleSession;InheritUseCredSsp;InheritUseVmId;InheritUseEnhancedMode;InheritVmId;InheritRenderingEngine;InheritUsername;" +
|
||||
"InheritUseConsoleSession;InheritUseCredSsp;InheritUseRestrictedAdmin;InheritUseRCG;InheritUseVmId;InheritUseEnhancedMode;InheritVmId;InheritRenderingEngine;InheritUsername;" +
|
||||
"InheritRDPAuthenticationLevel;InheritLoadBalanceInfo;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;" +
|
||||
"InheritFavorite;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;" +
|
||||
"InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;" +
|
||||
"InheritRDGatewayUsageMethod;InheritRDGatewayHostname;InheritRDGatewayUseConnectionCredentials;InheritRDGatewayUsername;" +
|
||||
"InheritRDGatewayPassword;InheritRDGatewayDomain;InheritRDPAlertIdleTimeout;InheritRDPMinutesToIdleTimeout;InheritSoundQuality;InheritUserViaAPI;" +
|
||||
"InheritRedirectAudioCapture;InheritRdpVersion");
|
||||
"InheritRDGatewayPassword;InheritRDGatewayDomain;InheritRDGatewayExternalCredentialProvider;InheritRDGatewayUserViaAPI;InheritRDPAlertIdleTimeout;InheritRDPMinutesToIdleTimeout;InheritSoundQuality;InheritUserViaAPI;" +
|
||||
"InheritRedirectAudioCapture;InheritRdpVersion;InheritExternalCredentialProvider");
|
||||
}
|
||||
|
||||
private void SerializeNodesRecursive(ConnectionInfo node, StringBuilder sb)
|
||||
@@ -125,6 +125,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
.Append(FormatForCsv(con.PuttySession))
|
||||
.Append(FormatForCsv(con.UseConsoleSession))
|
||||
.Append(FormatForCsv(con.UseCredSsp))
|
||||
.Append(FormatForCsv(con.UseRestrictedAdmin))
|
||||
.Append(FormatForCsv(con.UseRCG))
|
||||
.Append(FormatForCsv(con.UseVmId))
|
||||
.Append(FormatForCsv(con.UseEnhancedMode))
|
||||
.Append(FormatForCsv(con.RenderingEngine))
|
||||
@@ -172,13 +174,18 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
.Append(FormatForCsv(con.RDGatewayUsername))
|
||||
.Append(FormatForCsv(con.RDGatewayPassword))
|
||||
.Append(FormatForCsv(con.RDGatewayDomain))
|
||||
.Append(FormatForCsv(con.RDGatewayExternalCredentialProvider))
|
||||
.Append(FormatForCsv(con.RDGatewayUserViaAPI))
|
||||
.Append(FormatForCsv(con.RedirectAudioCapture))
|
||||
.Append(FormatForCsv(con.RdpVersion))
|
||||
.Append(FormatForCsv(con.RDPStartProgram))
|
||||
.Append(FormatForCsv(con.RDPStartProgramWorkDir))
|
||||
.Append(FormatForCsv(con.UserViaAPI))
|
||||
.Append(FormatForCsv(con.EC2InstanceId))
|
||||
.Append(FormatForCsv(con.EC2Region));
|
||||
.Append(FormatForCsv(con.EC2Region))
|
||||
.Append(FormatForCsv(con.ExternalCredentialProvider))
|
||||
.Append(FormatForCsv(con.ExternalAddressProvider))
|
||||
;
|
||||
|
||||
|
||||
if (!_saveFilter.SaveInheritance)
|
||||
@@ -216,6 +223,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
.Append(FormatForCsv(con.Inheritance.AutomaticResize))
|
||||
.Append(FormatForCsv(con.Inheritance.UseConsoleSession))
|
||||
.Append(FormatForCsv(con.Inheritance.UseCredSsp))
|
||||
.Append(FormatForCsv(con.Inheritance.UseRestrictedAdmin))
|
||||
.Append(FormatForCsv(con.Inheritance.UseRCG))
|
||||
.Append(FormatForCsv(con.Inheritance.UseVmId))
|
||||
.Append(FormatForCsv(con.Inheritance.UseEnhancedMode))
|
||||
.Append(FormatForCsv(con.Inheritance.VmId))
|
||||
@@ -246,12 +255,15 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayUsername))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayPassword))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayDomain))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayExternalCredentialProvider))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayUserViaAPI))
|
||||
.Append(FormatForCsv(con.Inheritance.RDPAlertIdleTimeout))
|
||||
.Append(FormatForCsv(con.Inheritance.RDPMinutesToIdleTimeout))
|
||||
.Append(FormatForCsv(con.Inheritance.SoundQuality))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectAudioCapture))
|
||||
.Append(FormatForCsv(con.Inheritance.RdpVersion))
|
||||
.Append(FormatForCsv(con.Inheritance.UserViaAPI));
|
||||
.Append(FormatForCsv(con.Inheritance.UserViaAPI))
|
||||
.Append(FormatForCsv(con.Inheritance.ExternalCredentialProvider));
|
||||
}
|
||||
|
||||
private string FormatForCsv(object value)
|
||||
|
||||
@@ -0,0 +1,226 @@
|
||||
#region
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Tree;
|
||||
|
||||
#endregion
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopManager;
|
||||
|
||||
/// <summary>
|
||||
/// Import of connections from the Remote Desktop Manager (RDM) in a CSV file format
|
||||
/// </summary>
|
||||
public partial class CsvConnectionsDeserializerRdmFormat : IDeserializer<string, ConnectionTreeModel>
|
||||
{
|
||||
private readonly List<RemoteDesktopManagerConnectionInfo> _connectionTypes;
|
||||
private readonly HashSet<string> _groups;
|
||||
|
||||
public CsvConnectionsDeserializerRdmFormat()
|
||||
{
|
||||
_connectionTypes = new List<RemoteDesktopManagerConnectionInfo>
|
||||
{
|
||||
new(ProtocolType.RDP, "RDP (Microsoft Remote Desktop)", 3389, "Remote Desktop"),
|
||||
new(ProtocolType.SSH2, "SSH Shell", 22, "SSH")
|
||||
};
|
||||
|
||||
_groups = new HashSet<string>();
|
||||
|
||||
Containers = new List<ContainerInfo>();
|
||||
}
|
||||
|
||||
private List<ContainerInfo> Containers { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes the CSV file into a <see cref="ConnectionTreeModel" />
|
||||
/// </summary>
|
||||
/// <param name="serializedData">Data from the CSV file</param>
|
||||
/// <returns></returns>
|
||||
public ConnectionTreeModel Deserialize(string serializedData)
|
||||
{
|
||||
var lines = serializedData.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var csvHeaders = new List<string>();
|
||||
|
||||
var connections = new List<(ConnectionInfo, string)>(); // (ConnectionInfo, group)
|
||||
|
||||
for (var lineNumber = 0; lineNumber < lines.Length; lineNumber++)
|
||||
{
|
||||
var line = lines[lineNumber].Split(',');
|
||||
if (lineNumber == 0)
|
||||
{
|
||||
csvHeaders = line.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
var (connectionInfo, group) = ParseConnectionInfo(csvHeaders, line);
|
||||
if (connectionInfo == default) continue;
|
||||
|
||||
connections.Add((connectionInfo, group));
|
||||
}
|
||||
}
|
||||
|
||||
var connectionTreeModel = new ConnectionTreeModel();
|
||||
var unsortedConnections = new ContainerInfo { Name = "Unsorted" };
|
||||
|
||||
foreach (var containerInfo in Containers) connectionTreeModel.AddRootNode(containerInfo);
|
||||
|
||||
var allChildren = Containers.SelectMany(x => x.GetRecursiveChildList().Select(y => (ContainerInfo)y)).ToList();
|
||||
|
||||
foreach (var (connection, path) in connections)
|
||||
if (string.IsNullOrEmpty(path))
|
||||
{
|
||||
unsortedConnections.AddChild(connection);
|
||||
}
|
||||
else
|
||||
{
|
||||
var container = allChildren.FirstOrDefault(x => x.ConstantID == path);
|
||||
if (container == default) continue;
|
||||
|
||||
container.AddChild(connection);
|
||||
}
|
||||
|
||||
if (unsortedConnections.HasChildren())
|
||||
connectionTreeModel.AddRootNode(unsortedConnections);
|
||||
|
||||
return connectionTreeModel;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a line from the CSV file and returns <see cref="ConnectionInfo" />
|
||||
/// </summary>
|
||||
/// <param name="headers">CSV Headers</param>
|
||||
/// <param name="connectionCsv">CSV Columns</param>
|
||||
/// <returns></returns>
|
||||
private (ConnectionInfo connectionInfo, string) ParseConnectionInfo(IList<string> headers, IReadOnlyList<string> connectionCsv)
|
||||
{
|
||||
if (headers.Count != connectionCsv.Count) return default;
|
||||
|
||||
var hostString = connectionCsv[headers.IndexOf("Host")].Trim();
|
||||
if (string.IsNullOrEmpty(hostString)) return default;
|
||||
|
||||
var hostType = Uri.CheckHostName(hostString);
|
||||
if (hostType == UriHostNameType.Unknown) return default;
|
||||
|
||||
var connectionTypeString = connectionCsv[headers.IndexOf("ConnectionType")];
|
||||
if (string.IsNullOrEmpty(connectionTypeString)) return default;
|
||||
|
||||
var connectionType = _connectionTypes.FirstOrDefault(x => x.Name == connectionTypeString);
|
||||
if (connectionType == default) return default;
|
||||
|
||||
var portString = connectionCsv[headers.IndexOf("Port")] ?? connectionType.Port.ToString();
|
||||
if (!int.TryParse(portString, out var port)) port = connectionType.Port;
|
||||
|
||||
var name = connectionCsv[headers.IndexOf("Name")];
|
||||
var description = connectionCsv[headers.IndexOf("Description")];
|
||||
var group = connectionCsv[headers.IndexOf("Group")];
|
||||
|
||||
var username = connectionCsv[headers.IndexOf("CredentialUserName")];
|
||||
var domain = connectionCsv[headers.IndexOf("CredentialDomain")];
|
||||
var password = connectionCsv[headers.IndexOf("CredentialPassword")];
|
||||
|
||||
var connectionInfo = new ConnectionInfo(Guid.NewGuid().ToString())
|
||||
{
|
||||
Name = name,
|
||||
Hostname = hostString,
|
||||
Port = port,
|
||||
Username = username,
|
||||
Password = password,
|
||||
Domain = domain,
|
||||
Icon = connectionType.IconName ?? "mRemoteNG",
|
||||
Description = description,
|
||||
Protocol = connectionType.Protocol
|
||||
};
|
||||
|
||||
if (!string.IsNullOrEmpty(group))
|
||||
if (group.Contains('\\'))
|
||||
{
|
||||
var groupParts = group.Split('\\').ToList();
|
||||
var parentContainerName = groupParts[0];
|
||||
|
||||
var parentContainer = Containers.FirstOrDefault(x => x.Name == parentContainerName);
|
||||
if (parentContainer == default)
|
||||
{
|
||||
parentContainer = new ContainerInfo(group) { Name = parentContainerName };
|
||||
Containers.Add(parentContainer);
|
||||
}
|
||||
|
||||
groupParts.RemoveAt(0);
|
||||
|
||||
AddChildrenRecursive(group, groupParts, parentContainer);
|
||||
}
|
||||
|
||||
return string.IsNullOrEmpty(group) ? (connectionInfo, default) : (connectionInfo, group);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a child to a container recursively
|
||||
/// </summary>
|
||||
/// <param name="group">Full path of the RDM Grouping</param>
|
||||
/// <param name="groupParts">Segements of the group path</param>
|
||||
/// <param name="parentContainer">Parent container to add children to</param>
|
||||
private void AddChildrenRecursive(string group, IList<string> groupParts, ContainerInfo parentContainer)
|
||||
{
|
||||
if (_groups.Contains(group)) return;
|
||||
|
||||
var groupCount = groupParts.Count;
|
||||
while (groupCount > 0)
|
||||
{
|
||||
var childName = groupParts[0];
|
||||
var newContainer = new ContainerInfo(group) { Name = childName };
|
||||
|
||||
var childrenNames = parentContainer.GetRecursiveChildList().Select(x => x.Name).ToList();
|
||||
if (!childrenNames.Any())
|
||||
{
|
||||
groupCount = AddChild(parentContainer, newContainer, groupCount);
|
||||
_groups.Add(group);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (groupParts.Count > 1)
|
||||
{
|
||||
var childContainer = (ContainerInfo)parentContainer.Children.FirstOrDefault(x => x.Name == childName);
|
||||
if (childContainer == default)
|
||||
{
|
||||
groupCount = AddChild(parentContainer, newContainer, groupCount);
|
||||
continue;
|
||||
}
|
||||
|
||||
AddChildrenRecursive(group, groupParts.Skip(1).ToList(), childContainer);
|
||||
}
|
||||
else
|
||||
{
|
||||
parentContainer.AddChild(newContainer);
|
||||
_groups.Add(group);
|
||||
}
|
||||
|
||||
groupCount--;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a child to a container and returns the remaining group count
|
||||
/// </summary>
|
||||
/// <param name="parentContainer">Parent container</param>
|
||||
/// <param name="newContainer">New child container</param>
|
||||
/// <param name="groupCount">Remaining group count</param>
|
||||
/// <returns></returns>
|
||||
private static int AddChild(ContainerInfo parentContainer, ContainerInfo newContainer, int groupCount)
|
||||
{
|
||||
parentContainer.AddChild(newContainer);
|
||||
groupCount--;
|
||||
return groupCount;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Record of supported connection types
|
||||
/// </summary>
|
||||
/// <param name="Protocol">Procotol</param>
|
||||
/// <param name="Name">Display Name</param>
|
||||
/// <param name="Port">Default Port</param>
|
||||
/// <param name="IconName">Icon Name</param>
|
||||
internal sealed record RemoteDesktopManagerConnectionInfo(ProtocolType Protocol, string Name, int Port, string IconName);
|
||||
@@ -0,0 +1,18 @@
|
||||
#region
|
||||
|
||||
using System;
|
||||
using mRemoteNG.Connection;
|
||||
|
||||
#endregion
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopManager;
|
||||
|
||||
public partial class CsvConnectionsDeserializerRdmFormat : ISerializer<ConnectionInfo, string>
|
||||
{
|
||||
public string Serialize(ConnectionInfo model)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Version Version { get; }
|
||||
}
|
||||
@@ -83,10 +83,15 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
connectionInfo.Description = (string)dataRow["Description"];
|
||||
connectionInfo.Icon = (string)dataRow["Icon"];
|
||||
connectionInfo.Panel = (string)dataRow["Panel"];
|
||||
//connectionInfo.ExternalCredentialProvider = (ExternalCredentialProvider)Enum.Parse(typeof(ExternalCredentialProvider), (string)dataRow["ExternalCredentialProvider"]);
|
||||
//connectionInfo.UserViaAPI = (string)dataRow["UserViaAPI"];
|
||||
connectionInfo.Username = (string)dataRow["Username"];
|
||||
connectionInfo.Domain = (string)dataRow["Domain"];
|
||||
connectionInfo.Password = DecryptValue((string)dataRow["Password"]);
|
||||
connectionInfo.Hostname = (string)dataRow["Hostname"];
|
||||
//connectionInfo.ExternalAddressProvider = (ExternalAddressProvider)Enum.Parse(typeof(ExternalAddressProvider), (string)dataRow["ExternalAddressProvider"]);
|
||||
//connectionInfo.EC2Region = (string)dataRow["EC2Region"];
|
||||
//connectionInfo.EC2InstanceId = (string)dataRow["EC2InstanceId"];
|
||||
connectionInfo.VmId = (string)dataRow["VmId"];
|
||||
connectionInfo.UseEnhancedMode = (bool)dataRow["UseEnhancedMode"];
|
||||
connectionInfo.Protocol = (ProtocolType)Enum.Parse(typeof(ProtocolType), (string)dataRow["Protocol"]);
|
||||
@@ -97,6 +102,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
connectionInfo.Port = (int)dataRow["Port"];
|
||||
connectionInfo.UseConsoleSession = (bool)dataRow["ConnectToConsole"];
|
||||
connectionInfo.UseCredSsp = (bool)dataRow["UseCredSsp"];
|
||||
connectionInfo.UseRestrictedAdmin = (bool)dataRow["UseRestrictedAdmin"];
|
||||
connectionInfo.UseRCG = (bool)dataRow["UseRCG"];
|
||||
connectionInfo.UseVmId = (bool)dataRow["UseVmId"];
|
||||
connectionInfo.RenderingEngine = (HTTPBase.RenderingEngine)Enum.Parse(typeof(HTTPBase.RenderingEngine), (string)dataRow["RenderingEngine"]);
|
||||
connectionInfo.RDPAuthenticationLevel = (AuthenticationLevel)Enum.Parse(typeof(AuthenticationLevel), (string)dataRow["RDPAuthenticationLevel"]);
|
||||
@@ -149,6 +156,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
connectionInfo.RDGatewayUsername = (string)dataRow["RDGatewayUsername"];
|
||||
connectionInfo.RDGatewayPassword = DecryptValue((string)dataRow["RDGatewayPassword"]);
|
||||
connectionInfo.RDGatewayDomain = (string)dataRow["RDGatewayDomain"];
|
||||
//connectionInfo.RDGatewayExternalCredentialProvider = (ExternalCredentialProvider)Enum.Parse(typeof(ExternalCredentialProvider), (string)dataRow["RDGatewayExternalCredentialProvider"]);
|
||||
//connectionInfo.RDGatewayUserViaAPI = (string)dataRow["RDGatewayUserViaAPI"];
|
||||
|
||||
if (!dataRow.IsNull("RdpVersion")) // table allows null values which must be handled
|
||||
if (Enum.TryParse((string)dataRow["RdpVersion"], true, out RdpVersion rdpVersion))
|
||||
@@ -165,6 +174,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
connectionInfo.Inheritance.DisableMenuAnimations = (bool)dataRow["InheritDisableMenuAnimations"];
|
||||
connectionInfo.Inheritance.DisableCursorShadow = (bool)dataRow["InheritDisableCursorShadow"];
|
||||
connectionInfo.Inheritance.DisableCursorBlinking = (bool)dataRow["InheritDisableCursorBlinking"];
|
||||
//connectionInfo.Inheritance.ExternalCredentialProvider = (bool)dataRow["InheritExternalCredentialProvider"];
|
||||
//connectionInfo.Inheritance.UserViaAPI = (bool)dataRow["InheritUserViaAPI"];
|
||||
connectionInfo.Inheritance.Domain = (bool)dataRow["InheritDomain"];
|
||||
connectionInfo.Inheritance.Icon = (bool)dataRow["InheritIcon"];
|
||||
connectionInfo.Inheritance.Panel = (bool)dataRow["InheritPanel"];
|
||||
@@ -188,6 +199,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
connectionInfo.Inheritance.AutomaticResize = (bool)dataRow["InheritAutomaticResize"];
|
||||
connectionInfo.Inheritance.UseConsoleSession = (bool)dataRow["InheritUseConsoleSession"];
|
||||
connectionInfo.Inheritance.UseCredSsp = (bool)dataRow["InheritUseCredSsp"];
|
||||
connectionInfo.Inheritance.UseRestrictedAdmin = (bool)dataRow["InheritUseRestrictedAdmin"];
|
||||
connectionInfo.Inheritance.UseRCG = (bool)dataRow["InheritUseRCG"];
|
||||
connectionInfo.Inheritance.UseVmId = (bool)dataRow["InheritUseVmId"];
|
||||
connectionInfo.Inheritance.UseEnhancedMode = (bool)dataRow["InheritUseEnhancedMode"];
|
||||
connectionInfo.Inheritance.VmId = (bool)dataRow["InheritVmId"];
|
||||
@@ -220,6 +233,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
connectionInfo.Inheritance.RDGatewayUsername = (bool)dataRow["InheritRDGatewayUsername"];
|
||||
connectionInfo.Inheritance.RDGatewayPassword = (bool)dataRow["InheritRDGatewayPassword"];
|
||||
connectionInfo.Inheritance.RDGatewayDomain = (bool)dataRow["InheritRDGatewayDomain"];
|
||||
//connectionInfo.Inheritance.RDGatewayExternalCredentialProvider = (bool)dataRow["InheritRDGatewayExternalCredentialProvider"];
|
||||
//connectionInfo.Inheritance.RDGatewayUserViaAPI = (bool)dataRow["InheritRDGatewayUserViaAPI"];
|
||||
connectionInfo.Inheritance.RdpVersion = (bool)dataRow["InheritRdpVersion"];
|
||||
}
|
||||
|
||||
|
||||
@@ -105,10 +105,15 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataTable.Columns.Add("Description", typeof(string));
|
||||
dataTable.Columns.Add("Icon", typeof(string));
|
||||
dataTable.Columns.Add("Panel", typeof(string));
|
||||
dataTable.Columns.Add("ExternalCredentialProvider", typeof(string));
|
||||
dataTable.Columns.Add("UserViaAPI", typeof(string));
|
||||
dataTable.Columns.Add("Username", typeof(string));
|
||||
dataTable.Columns.Add("Domain", typeof(string));
|
||||
dataTable.Columns.Add("Password", typeof(string));
|
||||
dataTable.Columns.Add("Hostname", typeof(string));
|
||||
dataTable.Columns.Add("ExternalAddressProvider", typeof(string));
|
||||
dataTable.Columns.Add("EC2Region", typeof(string));
|
||||
dataTable.Columns.Add("EC2InstanceId", typeof(string));
|
||||
dataTable.Columns.Add("Port", typeof(int));
|
||||
dataTable.Columns.Add("Protocol", typeof(string));
|
||||
dataTable.Columns.Add("SSHTunnelConnectionName", typeof(string));
|
||||
@@ -116,6 +121,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataTable.Columns.Add("PuttySession", typeof(string));
|
||||
dataTable.Columns.Add("ConnectToConsole", typeof(bool));
|
||||
dataTable.Columns.Add("UseCredSsp", typeof(bool));
|
||||
dataTable.Columns.Add("UseRestrictedAdmin", typeof(bool));
|
||||
dataTable.Columns.Add("UseRCG", typeof(bool));
|
||||
dataTable.Columns.Add("RenderingEngine", typeof(string));
|
||||
dataTable.Columns.Add("RDPAuthenticationLevel", typeof(string));
|
||||
dataTable.Columns.Add("Colors", typeof(string));
|
||||
@@ -161,6 +168,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataTable.Columns.Add("RDGatewayUsername", typeof(string));
|
||||
dataTable.Columns.Add("RDGatewayPassword", typeof(string));
|
||||
dataTable.Columns.Add("RDGatewayDomain", typeof(string));
|
||||
dataTable.Columns.Add("RDGatewayExternalCredentialProvider", typeof(string));
|
||||
dataTable.Columns.Add("RDGatewayUserViaAPI", typeof(string));
|
||||
dataTable.Columns.Add("InheritCacheBitmaps", typeof(bool));
|
||||
dataTable.Columns.Add("InheritColors", typeof(bool));
|
||||
dataTable.Columns.Add("InheritDescription", typeof(bool));
|
||||
@@ -178,6 +187,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataTable.Columns.Add("InheritPassword", typeof(bool));
|
||||
dataTable.Columns.Add("InheritPort", typeof(bool));
|
||||
dataTable.Columns.Add("InheritProtocol", typeof(bool));
|
||||
dataTable.Columns.Add("InheritExternalCredentialProvider", typeof(bool));
|
||||
dataTable.Columns.Add("InheritUserViaAPI", typeof(bool));
|
||||
dataTable.Columns.Add("InheritSSHTunnelConnectionName", typeof(bool));
|
||||
dataTable.Columns.Add("InheritSSHOptions", typeof(bool));
|
||||
dataTable.Columns.Add("InheritPuttySession", typeof(bool));
|
||||
@@ -192,6 +203,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataTable.Columns.Add("InheritResolution", typeof(bool));
|
||||
dataTable.Columns.Add("InheritUseConsoleSession", typeof(bool));
|
||||
dataTable.Columns.Add("InheritUseCredSsp", typeof(bool));
|
||||
dataTable.Columns.Add("InheritUseRestrictedAdmin", typeof(bool));
|
||||
dataTable.Columns.Add("InheritUseRCG", typeof(bool));
|
||||
dataTable.Columns.Add("InheritRenderingEngine", typeof(bool));
|
||||
dataTable.Columns.Add("InheritRDPAuthenticationLevel", typeof(bool));
|
||||
dataTable.Columns.Add("InheritUsername", typeof(bool));
|
||||
@@ -218,6 +231,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataTable.Columns.Add("InheritRDGatewayUsername", typeof(bool));
|
||||
dataTable.Columns.Add("InheritRDGatewayPassword", typeof(bool));
|
||||
dataTable.Columns.Add("InheritRDGatewayDomain", typeof(bool));
|
||||
dataTable.Columns.Add("InheritRDGatewayExternalCredentialProvider", typeof(bool));
|
||||
dataTable.Columns.Add("InheritRDGatewayUserViaAPI", typeof(bool));
|
||||
dataTable.Columns.Add("LoadBalanceInfo", typeof(string));
|
||||
dataTable.Columns.Add("AutomaticResize", typeof(bool));
|
||||
dataTable.Columns.Add("InheritLoadBalanceInfo", typeof(bool));
|
||||
@@ -275,7 +290,12 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["Domain"].Equals(_saveFilter.SaveDomain ? connectionInfo.Domain : "");
|
||||
|
||||
isFieldNotChange = isFieldNotChange && dataRow["Hostname"].Equals(connectionInfo.Hostname);
|
||||
isFieldNotChange = isFieldNotChange && dataRow["VmId"].Equals(connectionInfo.VmId);
|
||||
isFieldNotChange = isFieldNotChange && dataRow["EC2Region"].Equals(connectionInfo.EC2Region);
|
||||
isFieldNotChange = isFieldNotChange && dataRow["EC2InstanceId"].Equals(connectionInfo.EC2InstanceId);
|
||||
isFieldNotChange = isFieldNotChange && dataRow["ExternalAddressProvider"].Equals(connectionInfo.ExternalAddressProvider);
|
||||
isFieldNotChange = isFieldNotChange && dataRow["ExternalCredentialProvider"].Equals(connectionInfo.ExternalCredentialProvider);
|
||||
isFieldNotChange = isFieldNotChange && dataRow["UserViaAPI"].Equals(connectionInfo.UserViaAPI);
|
||||
isFieldNotChange = isFieldNotChange && dataRow["VmId"].Equals(connectionInfo.VmId);
|
||||
isFieldNotChange = isFieldNotChange && dataRow["Protocol"].Equals(connectionInfo.Protocol.ToString());
|
||||
isFieldNotChange = isFieldNotChange && dataRow["PuttySession"].Equals(connectionInfo.PuttySession);
|
||||
isFieldNotChange = isFieldNotChange &&
|
||||
@@ -285,6 +305,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
isFieldNotChange = isFieldNotChange &&
|
||||
dataRow["UseCredSsp"].Equals(connectionInfo.UseCredSsp);
|
||||
isFieldNotChange = isFieldNotChange &&
|
||||
dataRow["UseRestrictedAdmin"].Equals(connectionInfo.UseRestrictedAdmin);
|
||||
isFieldNotChange = isFieldNotChange &&
|
||||
dataRow["UseRCG"].Equals(connectionInfo.UseRCG);
|
||||
isFieldNotChange = isFieldNotChange &&
|
||||
dataRow["UseVmId"].Equals(connectionInfo.UseVmId);
|
||||
isFieldNotChange = isFieldNotChange &&
|
||||
dataRow["UseEnhancedMode"].Equals(connectionInfo.UseEnhancedMode);
|
||||
@@ -347,8 +371,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["RDGatewayUsageMethod"].Equals(connectionInfo.RDGatewayUsageMethod.ToString()) &&
|
||||
dataRow["RDGatewayHostname"].Equals(connectionInfo.RDGatewayHostname) &&
|
||||
dataRow["RDGatewayUseConnectionCredentials"].Equals(connectionInfo.RDGatewayUseConnectionCredentials.ToString()) &&
|
||||
dataRow["RDGatewayExternalCredentialProvider"].Equals(connectionInfo.RDGatewayExternalCredentialProvider) &&
|
||||
dataRow["RDGatewayUsername"].Equals(connectionInfo.RDGatewayUsername) &&
|
||||
dataRow["RDGatewayDomain"].Equals(connectionInfo.RDGatewayDomain) &&
|
||||
dataRow["RDGatewayUserViaAPI"].Equals(connectionInfo.RDGatewayUserViaAPI) &&
|
||||
dataRow["RdpVersion"].Equals(connectionInfo.RdpVersion.ToString());
|
||||
|
||||
var isInheritanceFieldNotChange = false;
|
||||
@@ -371,6 +397,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritPassword"].Equals(connectionInfo.Inheritance.Password) &&
|
||||
dataRow["InheritPort"].Equals(connectionInfo.Inheritance.Port) &&
|
||||
dataRow["InheritProtocol"].Equals(connectionInfo.Inheritance.Protocol) &&
|
||||
dataRow["InheritExternalCredentialProvider"].Equals(connectionInfo.Inheritance.ExternalCredentialProvider) &&
|
||||
dataRow["InheritUserViaAPI"].Equals(connectionInfo.Inheritance.UserViaAPI) &&
|
||||
dataRow["InheritPuttySession"].Equals(connectionInfo.Inheritance.PuttySession) &&
|
||||
dataRow["InheritRedirectDiskDrives"].Equals(connectionInfo.Inheritance.RedirectDiskDrives) &&
|
||||
dataRow["InheritRedirectKeys"].Equals(connectionInfo.Inheritance.RedirectKeys) &&
|
||||
@@ -385,6 +413,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritAutomaticResize"].Equals(connectionInfo.Inheritance.AutomaticResize) &&
|
||||
dataRow["InheritUseConsoleSession"].Equals(connectionInfo.Inheritance.UseConsoleSession) &&
|
||||
dataRow["InheritUseCredSsp"].Equals(connectionInfo.Inheritance.UseCredSsp) &&
|
||||
dataRow["InheritUseRestrictedAdmin"].Equals(connectionInfo.Inheritance.UseRestrictedAdmin) &&
|
||||
dataRow["InheritUseRCG"].Equals(connectionInfo.Inheritance.UseRCG) &&
|
||||
dataRow["InheritRenderingEngine"].Equals(connectionInfo.Inheritance.RenderingEngine) &&
|
||||
dataRow["InheritUsername"].Equals(connectionInfo.Inheritance.Username) &&
|
||||
dataRow["InheritVmId"].Equals(connectionInfo.Inheritance.VmId) &&
|
||||
@@ -414,9 +444,11 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritRDGatewayUsageMethod"].Equals(connectionInfo.Inheritance.RDGatewayUsageMethod) &&
|
||||
dataRow["InheritRDGatewayHostname"].Equals(connectionInfo.Inheritance.RDGatewayHostname) &&
|
||||
dataRow["InheritRDGatewayUseConnectionCredentials"].Equals(connectionInfo.Inheritance.RDGatewayUseConnectionCredentials) &&
|
||||
dataRow["InheritRDGatewayExternalCredentialProvider"].Equals(connectionInfo.Inheritance.RDGatewayExternalCredentialProvider) &&
|
||||
dataRow["InheritRDGatewayUsername"].Equals(connectionInfo.Inheritance.RDGatewayUsername) &&
|
||||
dataRow["InheritRDGatewayPassword"].Equals(connectionInfo.Inheritance.RDGatewayPassword) &&
|
||||
dataRow["InheritRDGatewayDomain"].Equals(connectionInfo.Inheritance.RDGatewayDomain) &&
|
||||
dataRow["InheritRDGatewayUserViaAPI"].Equals(connectionInfo.Inheritance.RDGatewayUserViaAPI) &&
|
||||
dataRow["InheritRdpVersion"].Equals(connectionInfo.Inheritance.RdpVersion));
|
||||
}
|
||||
else
|
||||
@@ -438,6 +470,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritPassword"].Equals(false) &&
|
||||
dataRow["InheritPort"].Equals(false) &&
|
||||
dataRow["InheritProtocol"].Equals(false) &&
|
||||
dataRow["InheritExternalCredentialProvider"].Equals(false) &&
|
||||
dataRow["InheritUserViaAPI"].Equals(false) &&
|
||||
dataRow["InheritPuttySession"].Equals(false) &&
|
||||
dataRow["InheritRedirectDiskDrives"].Equals(false) &&
|
||||
dataRow["InheritRedirectKeys"].Equals(false) &&
|
||||
@@ -452,6 +486,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritAutomaticResize"].Equals(false) &&
|
||||
dataRow["InheritUseConsoleSession"].Equals(false) &&
|
||||
dataRow["InheritUseCredSsp"].Equals(false) &&
|
||||
dataRow["InheritUseRestrictedAdmin"].Equals(false) &&
|
||||
dataRow["InheritUseRCG"].Equals(false) &&
|
||||
dataRow["InheritRenderingEngine"].Equals(false) &&
|
||||
dataRow["InheritUsername"].Equals(false) &&
|
||||
dataRow["InheritRDPAuthenticationLevel"].Equals(false) &&
|
||||
@@ -478,9 +514,11 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritRDGatewayUsageMethod"].Equals(false) &&
|
||||
dataRow["InheritRDGatewayHostname"].Equals(false) &&
|
||||
dataRow["InheritRDGatewayUseConnectionCredentials"].Equals(false) &&
|
||||
dataRow["InheritRDGatewayExternalCredentialProvider"].Equals(connectionInfo.Inheritance.RDGatewayExternalCredentialProvider) &&
|
||||
dataRow["InheritRDGatewayUsername"].Equals(false) &&
|
||||
dataRow["InheritRDGatewayPassword"].Equals(false) &&
|
||||
dataRow["InheritRDGatewayDomain"].Equals(false) &&
|
||||
dataRow["InheritRDGatewayUserViaAPI"].Equals(false) &&
|
||||
dataRow["InheritRdpVersion"].Equals(false));
|
||||
}
|
||||
|
||||
@@ -534,6 +572,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["Port"] = connectionInfo.Port;
|
||||
dataRow["ConnectToConsole"] = connectionInfo.UseConsoleSession;
|
||||
dataRow["UseCredSsp"] = connectionInfo.UseCredSsp;
|
||||
dataRow["UseRestrictedAdmin"] = connectionInfo.UseRestrictedAdmin;
|
||||
dataRow["UseRCG"] = connectionInfo.UseRCG;
|
||||
dataRow["UseVmId"] = connectionInfo.UseVmId;
|
||||
dataRow["UseEnhancedMode"] = connectionInfo.UseEnhancedMode;
|
||||
dataRow["RenderingEngine"] = connectionInfo.RenderingEngine;
|
||||
@@ -612,6 +652,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritPassword"] = connectionInfo.Inheritance.Password;
|
||||
dataRow["InheritPort"] = connectionInfo.Inheritance.Port;
|
||||
dataRow["InheritProtocol"] = connectionInfo.Inheritance.Protocol;
|
||||
dataRow["InheritExternalCredentialProvider"] = connectionInfo.Inheritance.ExternalCredentialProvider;
|
||||
dataRow["InheritUserViaAPI"] = connectionInfo.Inheritance.UserViaAPI;
|
||||
dataRow["InheritSSHTunnelConnectionName"] = connectionInfo.Inheritance.SSHTunnelConnectionName;
|
||||
dataRow["InheritOpeningCommand"] = connectionInfo.Inheritance.OpeningCommand;
|
||||
dataRow["InheritSSHOptions"] = connectionInfo.Inheritance.SSHOptions;
|
||||
@@ -629,6 +671,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritAutomaticResize"] = connectionInfo.Inheritance.AutomaticResize;
|
||||
dataRow["InheritUseConsoleSession"] = connectionInfo.Inheritance.UseConsoleSession;
|
||||
dataRow["InheritUseCredSsp"] = connectionInfo.Inheritance.UseCredSsp;
|
||||
dataRow["InheritUseRestrictedAdmin"] = connectionInfo.Inheritance.UseRestrictedAdmin;
|
||||
dataRow["InheritUseRCG"] = connectionInfo.Inheritance.UseRCG;
|
||||
dataRow["InheritRenderingEngine"] = connectionInfo.Inheritance.RenderingEngine;
|
||||
dataRow["InheritUsername"] = connectionInfo.Inheritance.Username;
|
||||
dataRow["InheritVmId"] = connectionInfo.Inheritance.VmId;
|
||||
@@ -658,9 +702,11 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritRDGatewayUsageMethod"] = connectionInfo.Inheritance.RDGatewayUsageMethod;
|
||||
dataRow["InheritRDGatewayHostname"] = connectionInfo.Inheritance.RDGatewayHostname;
|
||||
dataRow["InheritRDGatewayUseConnectionCredentials"] = connectionInfo.Inheritance.RDGatewayUseConnectionCredentials;
|
||||
dataRow["InheritRDGatewayExternalCredentialProvider"] = connectionInfo.Inheritance.RDGatewayExternalCredentialProvider;
|
||||
dataRow["InheritRDGatewayUsername"] = connectionInfo.Inheritance.RDGatewayUsername;
|
||||
dataRow["InheritRDGatewayPassword"] = connectionInfo.Inheritance.RDGatewayPassword;
|
||||
dataRow["InheritRDGatewayDomain"] = connectionInfo.Inheritance.RDGatewayDomain;
|
||||
dataRow["InheritRDGatewayUserViaAPI"] = connectionInfo.Inheritance.RDGatewayUserViaAPI;
|
||||
dataRow["InheritRdpVersion"] = connectionInfo.Inheritance.RdpVersion;
|
||||
dataRow["InheritFavorite"] = connectionInfo.Inheritance.Favorite;
|
||||
dataRow["InheritICAEncryptionStrength"] = false;
|
||||
@@ -684,6 +730,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritPassword"] = false;
|
||||
dataRow["InheritPort"] = false;
|
||||
dataRow["InheritProtocol"] = false;
|
||||
dataRow["InheritExternalCredentialProvider"] = false;
|
||||
dataRow["InheritUserViaAPI"] = false;
|
||||
dataRow["InheritSSHTunnelConnectionName"] = false;
|
||||
dataRow["InheritSSHOptions"] = false;
|
||||
dataRow["InheritPuttySession"] = false;
|
||||
@@ -700,6 +748,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritAutomaticResize"] = false;
|
||||
dataRow["InheritUseConsoleSession"] = false;
|
||||
dataRow["InheritUseCredSsp"] = false;
|
||||
dataRow["InheritUseRestrictedAdmin"] = false;
|
||||
dataRow["InheritUseRCG"] = false;
|
||||
dataRow["InheritRenderingEngine"] = false;
|
||||
dataRow["InheritUsername"] = false;
|
||||
dataRow["InheritRDPAuthenticationLevel"] = false;
|
||||
@@ -726,9 +776,11 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
dataRow["InheritRDGatewayUsageMethod"] = false;
|
||||
dataRow["InheritRDGatewayHostname"] = false;
|
||||
dataRow["InheritRDGatewayUseConnectionCredentials"] = false;
|
||||
dataRow["InheritRDGatewayExternalCredentialProvider"] = false;
|
||||
dataRow["InheritRDGatewayUsername"] = false;
|
||||
dataRow["InheritRDGatewayPassword"] = false;
|
||||
dataRow["InheritRDGatewayDomain"] = false;
|
||||
dataRow["InheritRDGatewayUserViaAPI"] = false;
|
||||
dataRow["InheritRdpVersion"] = false;
|
||||
dataRow["InheritFavorite"] = false;
|
||||
dataRow["InheritICAEncryptionStrength"] = false;
|
||||
|
||||
@@ -21,22 +21,33 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
|
||||
try
|
||||
{
|
||||
var dbCommand = databaseConnector.DbCommand("SELECT * FROM tblRoot");
|
||||
if (!databaseConnector.IsConnected)
|
||||
databaseConnector.Connect();
|
||||
|
||||
if (!DoesDbTableExist(databaseConnector, "tblRoot"))
|
||||
{
|
||||
// database exists but is empty, initialize it with the schema
|
||||
InitializeDatabaseSchema(databaseConnector);
|
||||
}
|
||||
|
||||
DbCommand dbCommand = databaseConnector.DbCommand("SELECT * FROM tblRoot");
|
||||
dbDataReader = dbCommand.ExecuteReader();
|
||||
if (!dbDataReader.HasRows)
|
||||
return null; // assume new empty database
|
||||
{
|
||||
// assume new empty database
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
dbDataReader.Read();
|
||||
}
|
||||
|
||||
metaData = new SqlConnectionListMetaData
|
||||
{
|
||||
Name = dbDataReader["Name"] as string ?? "",
|
||||
Protected = dbDataReader["Protected"] as string ?? "",
|
||||
Export = (bool)dbDataReader["Export"],
|
||||
ConfVersion =
|
||||
new Version(Convert.ToString(dbDataReader["confVersion"], CultureInfo.InvariantCulture))
|
||||
ConfVersion = new Version(Convert.ToString(dbDataReader["confVersion"], CultureInfo.InvariantCulture) ?? string.Empty)
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -55,40 +66,506 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
|
||||
|
||||
public void WriteDatabaseMetaData(RootNodeInfo rootTreeNode, IDatabaseConnector databaseConnector)
|
||||
{
|
||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||
string strProtected;
|
||||
if (rootTreeNode != null)
|
||||
{
|
||||
if (rootTreeNode.Password)
|
||||
{
|
||||
var password = rootTreeNode.PasswordString.ConvertToSecureString();
|
||||
strProtected = cryptographyProvider.Encrypt("ThisIsProtected", password);
|
||||
}
|
||||
else
|
||||
{
|
||||
strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
|
||||
}
|
||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||
string strProtected;
|
||||
if (rootTreeNode != null)
|
||||
{
|
||||
if (rootTreeNode.Password)
|
||||
{
|
||||
var password = rootTreeNode.PasswordString.ConvertToSecureString();
|
||||
strProtected = cryptographyProvider.Encrypt("ThisIsProtected", password);
|
||||
}
|
||||
else
|
||||
{
|
||||
strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
|
||||
}
|
||||
|
||||
var cmd = databaseConnector.DbCommand("DELETE FROM tblRoot");
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
if (rootTreeNode != null)
|
||||
{
|
||||
cmd = databaseConnector.DbCommand(
|
||||
if (rootTreeNode != null)
|
||||
{
|
||||
cmd = databaseConnector.DbCommand(
|
||||
"INSERT INTO tblRoot (Name, Export, Protected, ConfVersion) VALUES('" +
|
||||
MiscTools.PrepareValueForDB(rootTreeNode.Name) + "', 0, '" + strProtected + "','" +
|
||||
ConnectionsFileInfo.ConnectionFileVersion.ToString() + "')");
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
else
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"UpdateRootNodeTable: rootTreeNode was null. Could not insert!");
|
||||
}
|
||||
}
|
||||
MiscTools.PrepareValueForDB(rootTreeNode.Name) + "', 0, '" + strProtected + "','" +
|
||||
ConnectionsFileInfo.ConnectionFileVersion.ToString() + "')");
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
else
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"UpdateRootNodeTable: rootTreeNode was null. Could not insert!");
|
||||
}
|
||||
}
|
||||
|
||||
private bool DoesDbTableExist(IDatabaseConnector databaseConnector, string tableName)
|
||||
{
|
||||
bool exists;
|
||||
|
||||
try
|
||||
{
|
||||
// ANSI SQL way. Works in PostgreSQL, MSSQL, MySQL.
|
||||
var cmd = databaseConnector.DbCommand("select case when exists((select * from information_schema.tables where table_name = '" + tableName + "')) then 1 else 0 end");
|
||||
cmd.ExecuteNonQuery();
|
||||
exists = (int)cmd.ExecuteScalar()! == 1;
|
||||
}
|
||||
catch
|
||||
{
|
||||
try
|
||||
{
|
||||
// Other RDBMS. Graceful degradation
|
||||
exists = true;
|
||||
var cmdOthers = databaseConnector.DbCommand("select 1 from " + tableName + " where 1 = 0");
|
||||
cmdOthers.ExecuteNonQuery();
|
||||
}
|
||||
catch
|
||||
{
|
||||
exists = false;
|
||||
}
|
||||
}
|
||||
|
||||
return exists;
|
||||
}
|
||||
|
||||
private void InitializeDatabaseSchema(IDatabaseConnector databaseConnector)
|
||||
{
|
||||
string sql;
|
||||
|
||||
var t = databaseConnector.GetType();
|
||||
|
||||
if (databaseConnector.GetType() == typeof(MSSqlDatabaseConnector))
|
||||
{
|
||||
sql = @"
|
||||
if exists (select * from dbo.sysobjects
|
||||
where id = object_id(N'[dbo].[tblCons]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[tblCons]
|
||||
|
||||
if exists (select * from dbo.sysobjects
|
||||
where id = object_id(N'[dbo].[tblRoot]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[tblRoot]
|
||||
|
||||
if exists (select * from dbo.sysobjects
|
||||
where id = object_id(N'[dbo].[tblUpdate]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
|
||||
drop table [dbo].[tblUpdate]
|
||||
|
||||
CREATE TABLE [dbo].[tblCons] (
|
||||
[ID] int NOT NULL IDENTITY(1,1),
|
||||
[ConstantID] varchar(128) NOT NULL PRIMARY KEY,
|
||||
[PositionID] int NOT NULL,
|
||||
[ParentID] varchar(128),
|
||||
[LastChange] datetime NOT NULL,
|
||||
[Name] varchar(128) NOT NULL,
|
||||
[Type] varchar(32) NOT NULL,
|
||||
[Expanded] bit NOT NULL,
|
||||
[AutomaticResize] bit NOT NULL DEFAULT ((1)),
|
||||
[CacheBitmaps] bit NOT NULL,
|
||||
[Colors] varchar(32) NOT NULL,
|
||||
[ConnectToConsole] bit NOT NULL,
|
||||
[Connected] bit NOT NULL,
|
||||
[Description] varchar(1024),
|
||||
[DisableCursorBlinking] bit NOT NULL,
|
||||
[DisableCursorShadow] bit NOT NULL,
|
||||
[DisableFullWindowDrag] bit NOT NULL,
|
||||
[DisableMenuAnimations] bit NOT NULL,
|
||||
[DisplayThemes] bit NOT NULL,
|
||||
[DisplayWallpaper] bit NOT NULL,
|
||||
[Domain] varchar(512),
|
||||
[EnableDesktopComposition] bit NOT NULL,
|
||||
[EnableFontSmoothing] bit NOT NULL,
|
||||
[ExtApp] varchar(256),
|
||||
[Favorite] tinyint NOT NULL,
|
||||
[Hostname] varchar(512),
|
||||
[Icon] varchar(128) NOT NULL,
|
||||
[LoadBalanceInfo] varchar(1024),
|
||||
[MacAddress] varchar(32),
|
||||
[OpeningCommand] varchar(512),
|
||||
[Panel] varchar(128) NOT NULL,
|
||||
[Password] varchar(1024),
|
||||
[Port] int NOT NULL,
|
||||
[PostExtApp] varchar(256),
|
||||
[PreExtApp] varchar(256),
|
||||
[Protocol] varchar(32) NOT NULL,
|
||||
[PuttySession] varchar(128),
|
||||
[RDGatewayDomain] varchar(512),
|
||||
[RDGatewayHostname] varchar(512),
|
||||
[RDGatewayPassword] varchar(1024),
|
||||
[RDGatewayUsageMethod] varchar(32) NOT NULL,
|
||||
[RDGatewayUseConnectionCredentials] varchar(32) NOT NULL,
|
||||
[RDGatewayUsername] varchar(512),
|
||||
[RDPAlertIdleTimeout] bit NOT NULL,
|
||||
[RDPAuthenticationLevel] varchar(32) NOT NULL,
|
||||
[RDPMinutesToIdleTimeout] int NOT NULL,
|
||||
[RdpVersion] varchar(10) NULL,
|
||||
[RedirectAudioCapture] bit NOT NULL,
|
||||
[RedirectClipboard] bit NOT NULL,
|
||||
[RedirectDiskDrives] bit NOT NULL,
|
||||
[RedirectKeys] bit NOT NULL,
|
||||
[RedirectPorts] bit NOT NULL,
|
||||
[RedirectPrinters] bit NOT NULL,
|
||||
[RedirectSmartCards] bit NOT NULL,
|
||||
[RedirectSound] varchar(64) NOT NULL,
|
||||
[RenderingEngine] varchar(16) NULL,
|
||||
[Resolution] varchar(32) NOT NULL,
|
||||
[SSHOptions] varchar(1024) NOT NULL,
|
||||
[SSHTunnelConnectionName] varchar(128) NOT NULL,
|
||||
[SoundQuality] varchar(20) NOT NULL,
|
||||
[UseCredSsp] bit NOT NULL,
|
||||
[UseEnhancedMode] bit NOT NULL,
|
||||
[UseVmId] bit NOT NULL,
|
||||
[UserField] varchar(256) NULL,
|
||||
[Username] varchar(512) NULL,
|
||||
[VNCAuthMode] varchar(10) NULL,
|
||||
[VNCColors] varchar(10) NULL,
|
||||
[VNCCompression] varchar(10) NULL,
|
||||
[VNCEncoding] varchar(20) NULL,
|
||||
[VNCProxyIP] varchar(128) NULL,
|
||||
[VNCProxyPassword] varchar(1024) NULL,
|
||||
[VNCProxyPort] int NULL,
|
||||
[VNCProxyType] varchar(20) NULL,
|
||||
[VNCProxyUsername] varchar(512) NULL,
|
||||
[VNCSmartSizeMode] varchar(20) NULL,
|
||||
[VNCViewOnly] bit NOT NULL,
|
||||
[VmId] varchar(100) NULL,
|
||||
[ICAEncryptionStrength] varchar(32) NOT NULL,
|
||||
[InheritAutomaticResize] bit NOT NULL,
|
||||
[InheritCacheBitmaps] bit NOT NULL,
|
||||
[InheritColors] bit NOT NULL,
|
||||
[InheritDescription] bit NOT NULL,
|
||||
[InheritDisableCursorBlinking] bit NOT NULL,
|
||||
[InheritDisableCursorShadow] bit NOT NULL,
|
||||
[InheritDisableFullWindowDrag] bit NOT NULL,
|
||||
[InheritDisableMenuAnimations] bit NOT NULL,
|
||||
[InheritDisplayThemes] bit NOT NULL,
|
||||
[InheritDisplayWallpaper] bit NOT NULL,
|
||||
[InheritDomain] bit NOT NULL,
|
||||
[InheritEnableDesktopComposition] bit NOT NULL,
|
||||
[InheritEnableFontSmoothing] bit NOT NULL,
|
||||
[InheritExtApp] bit NOT NULL,
|
||||
[InheritFavorite] bit NOT NULL,
|
||||
[InheritICAEncryptionStrength] bit NOT NULL,
|
||||
[InheritIcon] bit NOT NULL,
|
||||
[InheritLoadBalanceInfo] bit NOT NULL,
|
||||
[InheritMacAddress] bit NOT NULL,
|
||||
[InheritOpeningCommand] bit NOT NULL,
|
||||
[InheritPanel] bit NOT NULL,
|
||||
[InheritPassword] bit NOT NULL,
|
||||
[InheritPort] bit NOT NULL,
|
||||
[InheritPostExtApp] bit NOT NULL,
|
||||
[InheritPreExtApp] bit NOT NULL,
|
||||
[InheritProtocol] bit NOT NULL,
|
||||
[InheritPuttySession] bit NOT NULL,
|
||||
[InheritRDGatewayDomain] bit NOT NULL,
|
||||
[InheritRDGatewayHostname] bit NOT NULL,
|
||||
[InheritRDGatewayPassword] bit NOT NULL,
|
||||
[InheritRDGatewayUsageMethod] bit NOT NULL,
|
||||
[InheritRDGatewayUseConnectionCredentials] bit NOT NULL,
|
||||
[InheritRDGatewayExternalCredentialProvider] bit NOT NULL,
|
||||
[InheritRDGatewayUsername] bit NOT NULL,
|
||||
[InheritRDGatewayUserViaAPI] bit NOT NULL,
|
||||
[InheritRDPAlertIdleTimeout] bit NOT NULL,
|
||||
[InheritRDPAuthenticationLevel] bit NOT NULL,
|
||||
[InheritRDPMinutesToIdleTimeout] bit NOT NULL,
|
||||
[InheritRdpVersion] bit NOT NULL,
|
||||
[InheritRedirectAudioCapture] bit NOT NULL,
|
||||
[InheritRedirectClipboard] bit NOT NULL,
|
||||
[InheritRedirectDiskDrives] bit NOT NULL,
|
||||
[InheritRedirectKeys] bit NOT NULL,
|
||||
[InheritRedirectPorts] bit NOT NULL,
|
||||
[InheritRedirectPrinters] bit NOT NULL,
|
||||
[InheritRedirectSmartCards] bit NOT NULL,
|
||||
[InheritRedirectSound] bit NOT NULL,
|
||||
[InheritRenderingEngine] bit NOT NULL,
|
||||
[InheritResolution] bit NOT NULL,
|
||||
[InheritSSHOptions] bit NOT NULL,
|
||||
[InheritSSHTunnelConnectionName] bit NOT NULL,
|
||||
[InheritSoundQuality] bit NOT NULL,
|
||||
[InheritUseConsoleSession] bit NOT NULL,
|
||||
[InheritUseCredSsp] bit NOT NULL,
|
||||
[InheritUseRestrictedAdmin] bit NOT NULL,
|
||||
[InheritUseRCG] bit NOT NULL,
|
||||
[InheritExternalCredentialProvider] bit NOT NULL,
|
||||
[InheritUserViaAPI] bit NOT NULL,
|
||||
[UseRestrictedAdmin] bit NOT NULL,
|
||||
[UseRCG] bit NOT NULL,
|
||||
[InheritUseEnhancedMode] bit NOT NULL,
|
||||
[InheritUseVmId] bit,
|
||||
[InheritUserField] bit NOT NULL,
|
||||
[InheritUsername] bit NOT NULL,
|
||||
[InheritVNCAuthMode] bit NOT NULL,
|
||||
[InheritVNCColors] bit NOT NULL,
|
||||
[InheritVNCCompression] bit NOT NULL,
|
||||
[InheritVNCEncoding] bit NOT NULL,
|
||||
[InheritVNCProxyIP] bit NOT NULL,
|
||||
[InheritVNCProxyPassword] bit NOT NULL,
|
||||
[InheritVNCProxyPort] bit NOT NULL,
|
||||
[InheritVNCProxyType] bit NOT NULL,
|
||||
[InheritVNCProxyUsername] bit NOT NULL,
|
||||
[InheritVNCSmartSizeMode] bit NOT NULL,
|
||||
[InheritVNCViewOnly] bit NOT NULL,
|
||||
[InheritVmId] bit NOT NULL,
|
||||
[StartProgram] varchar(512) NULL,
|
||||
[StartProgramWorkDir] varchar(512) NULL,
|
||||
[EC2Region] varchar(32) NULL,
|
||||
[EC2InstanceId] varchar(32) NULL,
|
||||
[ExternalCredentialProvider] varchar(256) NULL,
|
||||
[ExternalAddressProvider] varchar(256) NULL,
|
||||
) ON [PRIMARY]
|
||||
|
||||
CREATE TABLE [dbo].[tblRoot] (
|
||||
[Name] [varchar] (2048) NOT NULL,
|
||||
[Export] [bit] NOT NULL,
|
||||
[Protected] [varchar] (4048) NOT NULL,
|
||||
[ConfVersion] [varchar] (15) NOT NULL
|
||||
) ON [PRIMARY]
|
||||
|
||||
CREATE TABLE [dbo].[tblUpdate] (
|
||||
[LastUpdate] [datetime] NULL
|
||||
) ON [PRIMARY]
|
||||
";
|
||||
}
|
||||
else if (databaseConnector.GetType() == typeof(MySqlDatabaseConnector))
|
||||
{
|
||||
sql = @"
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
--
|
||||
-- Table structure for table `tblCons`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tblCons`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tblCons` (
|
||||
`ID` int NOT NULL AUTO_INCREMENT,
|
||||
`ConstantID` varchar(128) NOT NULL,
|
||||
`PositionID` int NOT NULL,
|
||||
`ParentID` varchar(128) DEFAULT NULL,
|
||||
`LastChange` datetime NOT NULL,
|
||||
`Name` varchar(128) NOT NULL,
|
||||
`Type` varchar(32) NOT NULL,
|
||||
`Expanded` tinyint(1) NOT NULL,
|
||||
`AutomaticResize` tinyint(1) NOT NULL DEFAULT 1,
|
||||
`CacheBitmaps` tinyint(1) NOT NULL,
|
||||
`Colors` varchar(32) NOT NULL,
|
||||
`ConnectToConsole` tinyint(1) NOT NULL,
|
||||
`Connected` tinyint(1) NOT NULL,
|
||||
`Description` varchar(1024) DEFAULT NULL,
|
||||
`DisableCursorBlinking` tinyint(1) NOT NULL,
|
||||
`DisableCursorShadow` tinyint(1) NOT NULL,
|
||||
`DisableFullWindowDrag` tinyint(1) NOT NULL,
|
||||
`DisableMenuAnimations` tinyint(1) NOT NULL,
|
||||
`DisplayThemes` tinyint(1) NOT NULL,
|
||||
`DisplayWallpaper` tinyint(1) NOT NULL,
|
||||
`Domain` varchar(512) DEFAULT NULL,
|
||||
`EnableDesktopComposition` tinyint(1) NOT NULL,
|
||||
`EnableFontSmoothing` tinyint(1) NOT NULL,
|
||||
`ExtApp` varchar(256) DEFAULT NULL,
|
||||
`Favorite` tinyint(1) NOT NULL,
|
||||
`Hostname` varchar(512) DEFAULT NULL,
|
||||
`Icon` varchar(128) NOT NULL,
|
||||
`LoadBalanceInfo` varchar(1024) DEFAULT NULL,
|
||||
`MacAddress` varchar(32) DEFAULT NULL,
|
||||
`OpeningCommand` varchar(512) DEFAULT NULL,
|
||||
`Panel` varchar(128) NOT NULL,
|
||||
`Password` varchar(1024) DEFAULT NULL,
|
||||
`Port` int NOT NULL,
|
||||
`PostExtApp` varchar(256) DEFAULT NULL,
|
||||
`PreExtApp` varchar(256) DEFAULT NULL,
|
||||
`Protocol` varchar(32) NOT NULL,
|
||||
`PuttySession` varchar(128) DEFAULT NULL,
|
||||
`RDGatewayDomain` varchar(512) DEFAULT NULL,
|
||||
`RDGatewayHostname` varchar(512) DEFAULT NULL,
|
||||
`RDGatewayPassword` varchar(1024) DEFAULT NULL,
|
||||
`RDGatewayUsageMethod` varchar(32) NOT NULL,
|
||||
`RDGatewayUseConnectionCredentials` varchar(32) NOT NULL,
|
||||
`RDGatewayUsername` varchar(512) DEFAULT NULL,
|
||||
`RDPAlertIdleTimeout` tinyint(1) NOT NULL,
|
||||
`RDPAuthenticationLevel` varchar(32) NOT NULL,
|
||||
`RDPMinutesToIdleTimeout` int(11) NOT NULL,
|
||||
`RdpVersion` varchar(10) DEFAULT NULL,
|
||||
`RedirectAudioCapture` tinyint(1) NOT NULL,
|
||||
`RedirectClipboard` tinyint(1) NOT NULL,
|
||||
`RedirectDiskDrives` tinyint(1) NOT NULL,
|
||||
`RedirectKeys` tinyint(1) NOT NULL,
|
||||
`RedirectPorts` tinyint(1) NOT NULL,
|
||||
`RedirectPrinters` tinyint(1) NOT NULL,
|
||||
`RedirectSmartCards` tinyint(1) NOT NULL,
|
||||
`RedirectSound` varchar(64) NOT NULL,
|
||||
`RenderingEngine` varchar(16) DEFAULT NULL,
|
||||
`Resolution` varchar(32) NOT NULL,
|
||||
`SSHOptions` varchar(1024) NOT NULL,
|
||||
`SSHTunnelConnectionName` varchar(128) NOT NULL,
|
||||
`SoundQuality` varchar(20) NOT NULL,
|
||||
`UseCredSsp` tinyint(1) NOT NULL,
|
||||
`UseEnhancedMode` tinyint(1) NOT NULL,
|
||||
`UseVmId` tinyint(1) NOT NULL,
|
||||
`UserField` varchar(256) DEFAULT NULL,
|
||||
`Username` varchar(512) DEFAULT NULL,
|
||||
`VNCAuthMode` varchar(10) DEFAULT NULL,
|
||||
`VNCColors` varchar(10) DEFAULT NULL,
|
||||
`VNCCompression` varchar(10) DEFAULT NULL,
|
||||
`VNCEncoding` varchar(20) DEFAULT NULL,
|
||||
`VNCProxyIP` varchar(128) DEFAULT NULL,
|
||||
`VNCProxyPassword` varchar(1024) DEFAULT NULL,
|
||||
`VNCProxyPort` int DEFAULT NULL,
|
||||
`VNCProxyType` varchar(20) DEFAULT NULL,
|
||||
`VNCProxyUsername` varchar(512) DEFAULT NULL,
|
||||
`VNCSmartSizeMode` varchar(20) DEFAULT NULL,
|
||||
`VNCViewOnly` tinyint(1) NOT NULL,
|
||||
`VmId` varchar(512) DEFAULT NULL,
|
||||
`ICAEncryptionStrength` varchar(32) NOT NULL,
|
||||
`InheritAutomaticResize` tinyint(1) NOT NULL,
|
||||
`InheritCacheBitmaps` tinyint(1) NOT NULL,
|
||||
`InheritColors` tinyint(1) NOT NULL,
|
||||
`InheritDescription` tinyint(1) NOT NULL,
|
||||
`InheritDisableCursorBlinking` tinyint(1) NOT NULL,
|
||||
`InheritDisableCursorShadow` tinyint(1) NOT NULL,
|
||||
`InheritDisableFullWindowDrag` tinyint(1) NOT NULL,
|
||||
`InheritDisableMenuAnimations` tinyint(1) NOT NULL,
|
||||
`InheritDisplayThemes` tinyint(1) NOT NULL,
|
||||
`InheritDisplayWallpaper` tinyint(1) NOT NULL,
|
||||
`InheritDomain` tinyint(1) NOT NULL,
|
||||
`InheritEnableDesktopComposition` tinyint(1) NOT NULL,
|
||||
`InheritEnableFontSmoothing` tinyint(1) NOT NULL,
|
||||
`InheritExtApp` tinyint(1) NOT NULL,
|
||||
`InheritFavorite` tinyint(1) NOT NULL,
|
||||
`InheritICAEncryptionStrength` tinyint(1) NOT NULL,
|
||||
`InheritIcon` tinyint(1) NOT NULL,
|
||||
`InheritLoadBalanceInfo` tinyint(1) NOT NULL,
|
||||
`InheritMacAddress` tinyint(1) NOT NULL,
|
||||
`InheritOpeningCommand` tinyint(1) NOT NULL,
|
||||
`InheritPanel` tinyint(1) NOT NULL,
|
||||
`InheritPassword` tinyint(1) NOT NULL,
|
||||
`InheritPort` tinyint(1) NOT NULL,
|
||||
`InheritPostExtApp` tinyint(1) NOT NULL,
|
||||
`InheritPreExtApp` tinyint(1) NOT NULL,
|
||||
`InheritProtocol` tinyint(1) NOT NULL,
|
||||
`InheritPuttySession` tinyint(1) NOT NULL,
|
||||
`InheritRDGatewayDomain` tinyint(1) NOT NULL,
|
||||
`InheritRDGatewayHostname` tinyint(1) NOT NULL,
|
||||
`InheritRDGatewayPassword` tinyint(1) NOT NULL,
|
||||
`InheritRDGatewayUsageMethod` tinyint(1) NOT NULL,
|
||||
`InheritRDGatewayUseConnectionCredentials` tinyint(1) NOT NULL,
|
||||
`InheritRDGatewayExternalCredentialProvider` tinyint(1) NOT NULL,
|
||||
`InheritRDGatewayUsername` tinyint(1) NOT NULL,
|
||||
`InheritRDGatewayUserViaAPI` tinyint(1) NOT NULL,
|
||||
`InheritRDPAlertIdleTimeout` tinyint(1) NOT NULL,
|
||||
`InheritRDPAuthenticationLevel` tinyint(1) NOT NULL,
|
||||
`InheritRDPMinutesToIdleTimeout` tinyint(1) NOT NULL,
|
||||
`InheritRdpVersion` tinyint(1) NOT NULL,
|
||||
`InheritRedirectAudioCapture` tinyint(1) NOT NULL,
|
||||
`InheritRedirectClipboard` tinyint(1) NOT NULL,
|
||||
`InheritRedirectDiskDrives` tinyint(1) NOT NULL,
|
||||
`InheritRedirectKeys` tinyint(1) NOT NULL,
|
||||
`InheritRedirectPorts` tinyint(1) NOT NULL,
|
||||
`InheritRedirectPrinters` tinyint(1) NOT NULL,
|
||||
`InheritRedirectSmartCards` tinyint(1) NOT NULL,
|
||||
`InheritRedirectSound` tinyint(1) NOT NULL,
|
||||
`InheritRenderingEngine` tinyint(1) NOT NULL,
|
||||
`InheritResolution` tinyint(1) NOT NULL,
|
||||
`InheritSSHOptions` tinyint(1) NOT NULL,
|
||||
`InheritSSHTunnelConnectionName` tinyint(1) NOT NULL,
|
||||
`InheritSoundQuality` tinyint(1) NOT NULL,
|
||||
`InheritUseConsoleSession` tinyint(1) NOT NULL,
|
||||
`InheritUseCredSsp` tinyint(1) NOT NULL,
|
||||
`InheritUseRestrictedAdmin` tinyint(1) NOT NULL,
|
||||
`InheritUseRCG` tinyint(1) NOT NULL,
|
||||
`InheritExternalCredentialProvider` tinyint(1) NOT NULL,
|
||||
`InheritUserViaAPI` tinyint(1) NOT NULL,
|
||||
`UseRestrictedAdmin` tinyint(1) NOT NULL,
|
||||
`UseRCG` tinyint(1) NOT NULL,
|
||||
`InheritUseEnhancedMode` tinyint(1) DEFAULT NULL,
|
||||
`InheritUseVmId` tinyint(1) DEFAULT NULL,
|
||||
`InheritUserField` tinyint(1) NOT NULL,
|
||||
`InheritUsername` tinyint(1) NOT NULL,
|
||||
`InheritVNCAuthMode` tinyint(1) NOT NULL,
|
||||
`InheritVNCColors` tinyint(1) NOT NULL,
|
||||
`InheritVNCCompression` tinyint(1) NOT NULL,
|
||||
`InheritVNCEncoding` tinyint(1) NOT NULL,
|
||||
`InheritVNCProxyIP` tinyint(1) NOT NULL,
|
||||
`InheritVNCProxyPassword` tinyint(1) NOT NULL,
|
||||
`InheritVNCProxyPort` tinyint(1) NOT NULL,
|
||||
`InheritVNCProxyType` tinyint(1) NOT NULL,
|
||||
`InheritVNCProxyUsername` tinyint(1) NOT NULL,
|
||||
`InheritVNCSmartSizeMode` tinyint(1) NOT NULL,
|
||||
`InheritVNCViewOnly` tinyint(1) NOT NULL,
|
||||
`InheritVmId` tinyint(1) NOT NULL,
|
||||
`StartProgram` varchar(512) DEFAULT NULL,
|
||||
`StartProgramWorkDir` varchar(512) DEFAULT NULL,
|
||||
`EC2Region` varchar(32) DEFAULT NULL,
|
||||
`EC2InstanceId` varchar(32) DEFAULT NULL,
|
||||
`ExternalCredentialProvider` varchar(256) DEFAULT NULL,
|
||||
`ExternalAddressProvider` varchar(256) DEFAULT NULL,
|
||||
PRIMARY KEY (`ConstantID`),
|
||||
UNIQUE KEY `ID_UNIQUE` (`ID`),
|
||||
UNIQUE KEY `ConstantID_UNIQUE` (`ConstantID`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=3324 DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `tblRoot`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tblRoot`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tblRoot` (
|
||||
`Name` varchar(2048) NOT NULL,
|
||||
`Export` tinyint(1) NOT NULL,
|
||||
`Protected` varchar(4048) NOT NULL,
|
||||
`ConfVersion` varchar(15) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `tblUpdate`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `tblUpdate`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `tblUpdate` (
|
||||
`LastUpdate` datetime(3) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
";
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Unknown database backend");
|
||||
}
|
||||
|
||||
DbCommand cmd = databaseConnector.DbCommand(sql);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//// MySql.Data.MySqlClient.MySqlException: 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(`ConstantID`),
|
||||
//UNIQUE(`ID`)
|
||||
// ) ENGINE = InnoDB AUTO_INCREMENT = 3324 DEFAULT ' at line 156'
|
||||
@@ -138,6 +138,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
|
||||
element.Add(new XAttribute("RDGatewayUsageMethod", connectionInfo.RDGatewayUsageMethod));
|
||||
element.Add(new XAttribute("RDGatewayHostname", connectionInfo.RDGatewayHostname));
|
||||
element.Add(new XAttribute("RDGatewayUseConnectionCredentials", connectionInfo.RDGatewayUseConnectionCredentials));
|
||||
element.Add(new XAttribute("RDGatewayExternalCredentialProvider", connectionInfo.RDGatewayExternalCredentialProvider));
|
||||
element.Add(new XAttribute("RDGatewayUserViaAPI", connectionInfo.RDGatewayUserViaAPI));
|
||||
|
||||
element.Add(_saveFilter.SaveUsername
|
||||
? new XAttribute("RDGatewayUsername", connectionInfo.RDGatewayUsername)
|
||||
@@ -151,9 +153,14 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
|
||||
? new XAttribute("RDGatewayDomain", connectionInfo.RDGatewayDomain)
|
||||
: new XAttribute("RDGatewayDomain", ""));
|
||||
|
||||
element.Add(new XAttribute("UseRCG", connectionInfo.UseRCG));
|
||||
element.Add(new XAttribute("UseRestrictedAdmin", connectionInfo.UseRestrictedAdmin));
|
||||
|
||||
element.Add(new XAttribute("UserViaAPI", connectionInfo.UserViaAPI));
|
||||
element.Add(new XAttribute("EC2InstanceId", connectionInfo.EC2InstanceId));
|
||||
element.Add(new XAttribute("EC2Region", connectionInfo.EC2Region));
|
||||
element.Add(new XAttribute("ExternalCredentialProvider", connectionInfo.ExternalCredentialProvider));
|
||||
element.Add(new XAttribute("ExternalAddressProvider", connectionInfo.ExternalAddressProvider));
|
||||
}
|
||||
|
||||
private void SetInheritanceAttributes(XContainer element, IInheritable connectionInfo)
|
||||
@@ -290,14 +297,25 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
|
||||
element.Add(new XAttribute("InheritRDGatewayPassword", inheritance.RDGatewayPassword.ToString().ToLowerInvariant()));
|
||||
if (inheritance.RDGatewayDomain)
|
||||
element.Add(new XAttribute("InheritRDGatewayDomain", inheritance.RDGatewayDomain.ToString().ToLowerInvariant()));
|
||||
if (inheritance.RDGatewayExternalCredentialProvider)
|
||||
element.Add(new XAttribute("InheritRDGatewayExternalCredentialProvider", inheritance.RDGatewayExternalCredentialProvider.ToString().ToLowerInvariant()));
|
||||
if (inheritance.RDGatewayUserViaAPI)
|
||||
element.Add(new XAttribute("InheritRDGatewayUserViaAPI", inheritance.RDGatewayUserViaAPI.ToString().ToLowerInvariant()));
|
||||
|
||||
if (inheritance.VmId)
|
||||
element.Add(new XAttribute("InheritVmId", inheritance.VmId.ToString().ToLowerInvariant()));
|
||||
if (inheritance.UseVmId)
|
||||
element.Add(new XAttribute("InheritUseVmId", inheritance.UseVmId.ToString().ToLowerInvariant()));
|
||||
if (inheritance.UseEnhancedMode)
|
||||
element.Add(new XAttribute("InheritUseEnhancedMode", inheritance.UseEnhancedMode.ToString().ToLowerInvariant()));
|
||||
if (inheritance.ExternalCredentialProvider)
|
||||
element.Add(new XAttribute("InheritExternalCredentialProvider", inheritance.ExternalCredentialProvider.ToString().ToLowerInvariant()));
|
||||
if (inheritance.UserViaAPI)
|
||||
element.Add(new XAttribute("InheritUserViaAPI", inheritance.UserViaAPI.ToString().ToLowerInvariant()));
|
||||
if (inheritance.UseRCG)
|
||||
element.Add(new XAttribute("InheritUseRCG", inheritance.UseRCG.ToString().ToLowerInvariant()));
|
||||
if (inheritance.UseRestrictedAdmin)
|
||||
element.Add(new XAttribute("InheritUseRestrictedAdmin", inheritance.UseRestrictedAdmin.ToString().ToLowerInvariant()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -469,28 +469,19 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
|
||||
if (_confVersion >= 2.2)
|
||||
{
|
||||
// Get settings
|
||||
connectionInfo.RDGatewayUsageMethod =
|
||||
xmlnode.GetAttributeAsEnum<RDGatewayUsageMethod>("RDGatewayUsageMethod");
|
||||
connectionInfo.RDGatewayUsageMethod = xmlnode.GetAttributeAsEnum<RDGatewayUsageMethod>("RDGatewayUsageMethod");
|
||||
connectionInfo.RDGatewayHostname = xmlnode.GetAttributeAsString("RDGatewayHostname");
|
||||
connectionInfo.RDGatewayUseConnectionCredentials =
|
||||
xmlnode.GetAttributeAsEnum<RDGatewayUseConnectionCredentials>(
|
||||
"RDGatewayUseConnectionCredentials");
|
||||
connectionInfo.RDGatewayUseConnectionCredentials = xmlnode.GetAttributeAsEnum<RDGatewayUseConnectionCredentials>("RDGatewayUseConnectionCredentials");
|
||||
connectionInfo.RDGatewayUsername = xmlnode.GetAttributeAsString("RDGatewayUsername");
|
||||
connectionInfo.RDGatewayPassword =
|
||||
_decryptor.Decrypt(xmlnode.GetAttributeAsString("RDGatewayPassword"));
|
||||
connectionInfo.RDGatewayPassword = _decryptor.Decrypt(xmlnode.GetAttributeAsString("RDGatewayPassword"));
|
||||
connectionInfo.RDGatewayDomain = xmlnode.GetAttributeAsString("RDGatewayDomain");
|
||||
|
||||
// Get inheritance settings
|
||||
connectionInfo.Inheritance.RDGatewayUsageMethod =
|
||||
xmlnode.GetAttributeAsBool("InheritRDGatewayUsageMethod");
|
||||
connectionInfo.Inheritance.RDGatewayHostname =
|
||||
xmlnode.GetAttributeAsBool("InheritRDGatewayHostname");
|
||||
connectionInfo.Inheritance.RDGatewayUseConnectionCredentials =
|
||||
xmlnode.GetAttributeAsBool("InheritRDGatewayUseConnectionCredentials");
|
||||
connectionInfo.Inheritance.RDGatewayUsername =
|
||||
xmlnode.GetAttributeAsBool("InheritRDGatewayUsername");
|
||||
connectionInfo.Inheritance.RDGatewayPassword =
|
||||
xmlnode.GetAttributeAsBool("InheritRDGatewayPassword");
|
||||
connectionInfo.Inheritance.RDGatewayUsageMethod = xmlnode.GetAttributeAsBool("InheritRDGatewayUsageMethod");
|
||||
connectionInfo.Inheritance.RDGatewayHostname = xmlnode.GetAttributeAsBool("InheritRDGatewayHostname");
|
||||
connectionInfo.Inheritance.RDGatewayUseConnectionCredentials = xmlnode.GetAttributeAsBool("InheritRDGatewayUseConnectionCredentials");
|
||||
connectionInfo.Inheritance.RDGatewayUsername = xmlnode.GetAttributeAsBool("InheritRDGatewayUsername");
|
||||
connectionInfo.Inheritance.RDGatewayPassword = xmlnode.GetAttributeAsBool("InheritRDGatewayPassword");
|
||||
connectionInfo.Inheritance.RDGatewayDomain = xmlnode.GetAttributeAsBool("InheritRDGatewayDomain");
|
||||
}
|
||||
|
||||
@@ -501,10 +492,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
|
||||
connectionInfo.EnableDesktopComposition = xmlnode.GetAttributeAsBool("EnableDesktopComposition");
|
||||
|
||||
// Get inheritance settings
|
||||
connectionInfo.Inheritance.EnableFontSmoothing =
|
||||
xmlnode.GetAttributeAsBool("InheritEnableFontSmoothing");
|
||||
connectionInfo.Inheritance.EnableDesktopComposition =
|
||||
xmlnode.GetAttributeAsBool("InheritEnableDesktopComposition");
|
||||
connectionInfo.Inheritance.EnableFontSmoothing = xmlnode.GetAttributeAsBool("InheritEnableFontSmoothing");
|
||||
connectionInfo.Inheritance.EnableDesktopComposition = xmlnode.GetAttributeAsBool("InheritEnableDesktopComposition");
|
||||
}
|
||||
|
||||
if (_confVersion >= 2.4)
|
||||
@@ -523,15 +512,13 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
|
||||
|
||||
if (_confVersion >= 2.6)
|
||||
{
|
||||
connectionInfo.SoundQuality =
|
||||
xmlnode.GetAttributeAsEnum<RDPSoundQuality>("SoundQuality");
|
||||
connectionInfo.SoundQuality = xmlnode.GetAttributeAsEnum<RDPSoundQuality>("SoundQuality");
|
||||
connectionInfo.Inheritance.SoundQuality = xmlnode.GetAttributeAsBool("InheritSoundQuality");
|
||||
connectionInfo.RDPMinutesToIdleTimeout = xmlnode.GetAttributeAsInt("RDPMinutesToIdleTimeout");
|
||||
connectionInfo.Inheritance.RDPMinutesToIdleTimeout =
|
||||
xmlnode.GetAttributeAsBool("InheritRDPMinutesToIdleTimeout");
|
||||
connectionInfo.Inheritance.RDPMinutesToIdleTimeout = xmlnode.GetAttributeAsBool("InheritRDPMinutesToIdleTimeout");
|
||||
connectionInfo.RDPAlertIdleTimeout = xmlnode.GetAttributeAsBool("RDPAlertIdleTimeout");
|
||||
connectionInfo.Inheritance.RDPAlertIdleTimeout =
|
||||
xmlnode.GetAttributeAsBool("InheritRDPAlertIdleTimeout"); }
|
||||
connectionInfo.Inheritance.RDPAlertIdleTimeout = xmlnode.GetAttributeAsBool("InheritRDPAlertIdleTimeout");
|
||||
}
|
||||
|
||||
if (_confVersion >= 2.7)
|
||||
{
|
||||
@@ -565,10 +552,21 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml
|
||||
connectionInfo.Inheritance.DisableMenuAnimations = xmlnode.GetAttributeAsBool("InheritDisableMenuAnimations");
|
||||
connectionInfo.Inheritance.DisableCursorShadow = xmlnode.GetAttributeAsBool("InheritDisableCursorShadow");
|
||||
connectionInfo.Inheritance.DisableCursorBlinking = xmlnode.GetAttributeAsBool("InheritDisableCursorBlinking");
|
||||
connectionInfo.ExternalCredentialProvider = xmlnode.GetAttributeAsEnum("ExternalCredentialProvider", ExternalCredentialProvider.None);
|
||||
connectionInfo.Inheritance.ExternalCredentialProvider = xmlnode.GetAttributeAsBool("InheritExternalCredentialProvider");
|
||||
connectionInfo.UserViaAPI = xmlnode.GetAttributeAsString("UserViaAPI");
|
||||
connectionInfo.Inheritance.UserViaAPI = xmlnode.GetAttributeAsBool("InheritUserViaAPI");
|
||||
connectionInfo.ExternalAddressProvider = xmlnode.GetAttributeAsEnum("ExternalAddressProvider", ExternalAddressProvider.None);
|
||||
connectionInfo.EC2InstanceId = xmlnode.GetAttributeAsString("EC2InstanceId");
|
||||
connectionInfo.EC2Region = xmlnode.GetAttributeAsString("EC2Region");
|
||||
connectionInfo.UseRestrictedAdmin = xmlnode.GetAttributeAsBool("UseRestrictedAdmin");
|
||||
connectionInfo.Inheritance.UseRestrictedAdmin = xmlnode.GetAttributeAsBool("InheritUseRestrictedAdmin");
|
||||
connectionInfo.UseRCG = xmlnode.GetAttributeAsBool("UseRCG");
|
||||
connectionInfo.Inheritance.UseRCG = xmlnode.GetAttributeAsBool("InheritUseRCG");
|
||||
connectionInfo.RDGatewayExternalCredentialProvider = xmlnode.GetAttributeAsEnum("RDGatewayExternalCredentialProvider", ExternalCredentialProvider.None);
|
||||
connectionInfo.RDGatewayUserViaAPI = xmlnode.GetAttributeAsString("RDGatewayUserViaAPI");
|
||||
connectionInfo.Inheritance.RDGatewayExternalCredentialProvider = xmlnode.GetAttributeAsBool("InheritRDGatewayExternalCredentialProvider");
|
||||
connectionInfo.Inheritance.RDGatewayUserViaAPI = xmlnode.GetAttributeAsBool("InheritRDGatewayUserViaAPI");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers
|
||||
if (versionAttribute != null)
|
||||
{
|
||||
var version = new Version(versionAttribute);
|
||||
if (!(version == new Version(2, 7)))
|
||||
if (!(version == new Version(2, 7)) && !(version == new Version(2, 83)))
|
||||
{
|
||||
throw new FileFormatException($"Unsupported file version ({version}).");
|
||||
}
|
||||
@@ -183,8 +183,8 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers
|
||||
{
|
||||
if (bool.TryParse(connectionSettingsNode.SelectSingleNode("./connectToConsole")?.InnerText, out var useConsole))
|
||||
connectionInfo.UseConsoleSession = useConsole;
|
||||
connectionInfo.RDPStartProgram = connectionSettingsNode.SelectSingleNode("./startProgram")?.InnerText;
|
||||
connectionInfo.RDPStartProgramWorkDir = connectionSettingsNode.SelectSingleNode("./startProgramWorkDir")?.InnerText;
|
||||
connectionInfo.RDPStartProgram = connectionSettingsNode.SelectSingleNode("./startProgram")?.InnerText ?? string.Empty;
|
||||
connectionInfo.RDPStartProgramWorkDir = connectionSettingsNode.SelectSingleNode("./startProgramWorkDir")?.InnerText ?? string.Empty;
|
||||
if (int.TryParse(connectionSettingsNode.SelectSingleNode("./port")?.InnerText, out var port))
|
||||
connectionInfo.Port = port;
|
||||
}
|
||||
|
||||
@@ -1,75 +1,75 @@
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.App.Info;
|
||||
using mRemoteNG.Config.DatabaseConnectors;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.Resources.Language;
|
||||
using System;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.Versioning
|
||||
{
|
||||
public class SqlDatabaseVersionVerifier
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.App.Info;
|
||||
using mRemoteNG.Config.DatabaseConnectors;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.Resources.Language;
|
||||
using System;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.Versioning
|
||||
{
|
||||
public class SqlDatabaseVersionVerifier
|
||||
{
|
||||
protected readonly Version currentSupportedVersion = new Version(2, 9);
|
||||
|
||||
private readonly IDatabaseConnector _databaseConnector;
|
||||
|
||||
public SqlDatabaseVersionVerifier(IDatabaseConnector DatabaseConnector)
|
||||
{
|
||||
if (DatabaseConnector == null)
|
||||
throw new ArgumentNullException(nameof(DatabaseConnector));
|
||||
|
||||
_databaseConnector = DatabaseConnector;
|
||||
}
|
||||
|
||||
public bool VerifyDatabaseVersion(Version dbVersion)
|
||||
{
|
||||
var isVerified = false;
|
||||
try
|
||||
{
|
||||
var databaseVersion = dbVersion;
|
||||
|
||||
if (databaseVersion.Equals(new Version()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var dbUpgraders = new IVersionUpgrader[]
|
||||
{
|
||||
new SqlVersion22To23Upgrader(_databaseConnector),
|
||||
new SqlVersion23To24Upgrader(_databaseConnector),
|
||||
new SqlVersion24To25Upgrader(_databaseConnector),
|
||||
new SqlVersion25To26Upgrader(_databaseConnector),
|
||||
new SqlVersion26To27Upgrader(_databaseConnector),
|
||||
new SqlVersion27To28Upgrader(_databaseConnector),
|
||||
new SqlVersion28To29Upgrader(_databaseConnector),
|
||||
};
|
||||
|
||||
foreach (var upgrader in dbUpgraders)
|
||||
{
|
||||
if (upgrader.CanUpgrade(databaseVersion))
|
||||
{
|
||||
databaseVersion = upgrader.Upgrade();
|
||||
}
|
||||
}
|
||||
|
||||
// DB is at the highest current supported version
|
||||
if (databaseVersion.CompareTo(currentSupportedVersion) == 0)
|
||||
isVerified = true;
|
||||
|
||||
if (isVerified == false)
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
string.Format(Language.ErrorBadDatabaseVersion,
|
||||
databaseVersion,
|
||||
GeneralAppInfo.ProductName));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
string.Format(Language.ErrorVerifyDatabaseVersionFailed,
|
||||
ex.Message));
|
||||
}
|
||||
|
||||
return isVerified;
|
||||
}
|
||||
}
|
||||
|
||||
private readonly IDatabaseConnector _databaseConnector;
|
||||
|
||||
public SqlDatabaseVersionVerifier(IDatabaseConnector DatabaseConnector)
|
||||
{
|
||||
if (DatabaseConnector == null)
|
||||
throw new ArgumentNullException(nameof(DatabaseConnector));
|
||||
|
||||
_databaseConnector = DatabaseConnector;
|
||||
}
|
||||
|
||||
public bool VerifyDatabaseVersion(Version dbVersion)
|
||||
{
|
||||
var isVerified = false;
|
||||
try
|
||||
{
|
||||
var databaseVersion = dbVersion;
|
||||
|
||||
if (databaseVersion.Equals(new Version()))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var dbUpgraders = new IVersionUpgrader[]
|
||||
{
|
||||
new SqlVersion22To23Upgrader(_databaseConnector),
|
||||
new SqlVersion23To24Upgrader(_databaseConnector),
|
||||
new SqlVersion24To25Upgrader(_databaseConnector),
|
||||
new SqlVersion25To26Upgrader(_databaseConnector),
|
||||
new SqlVersion26To27Upgrader(_databaseConnector),
|
||||
new SqlVersion27To28Upgrader(_databaseConnector),
|
||||
new SqlVersion28To29Upgrader(_databaseConnector),
|
||||
};
|
||||
|
||||
foreach (var upgrader in dbUpgraders)
|
||||
{
|
||||
if (upgrader.CanUpgrade(databaseVersion))
|
||||
{
|
||||
databaseVersion = upgrader.Upgrade();
|
||||
}
|
||||
}
|
||||
|
||||
// DB is at the highest current supported version
|
||||
if (databaseVersion.CompareTo(currentSupportedVersion) == 0)
|
||||
isVerified = true;
|
||||
|
||||
if (isVerified == false)
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg,
|
||||
string.Format(Language.ErrorBadDatabaseVersion,
|
||||
databaseVersion,
|
||||
GeneralAppInfo.ProductName));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
string.Format(Language.ErrorVerifyDatabaseVersionFailed,
|
||||
ex.Message));
|
||||
}
|
||||
|
||||
return isVerified;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
using mRemoteNG.Config.DatabaseConnectors;
|
||||
using mRemoteNG.Messages;
|
||||
using System;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.Versioning
|
||||
{
|
||||
@@ -23,24 +24,31 @@ namespace mRemoteNG.Config.Serializers.Versioning
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
"Upgrading database from version 2.6 to version 2.7.");
|
||||
const string sqlText = @"
|
||||
try
|
||||
{
|
||||
const string sqlText = @"
|
||||
ALTER TABLE tblCons
|
||||
ADD RedirectClipboard bit NOT NULL DEFAULT 0,
|
||||
InheritRedirectClipboard bit NOT NULL DEFAULT 0,
|
||||
VmId varchar NOT NULL DEFAULT '',
|
||||
UseVmId bit NOT NULL DEFAULT 0,
|
||||
UseEnhancedMode bit NOT NULL DEFAULT 0,
|
||||
InheritVmId bit NOT NULL DEFAULT 0,
|
||||
InheritUseVmId bit NOT NULL DEFAULT 0,
|
||||
SSHTunnelConnectionName varchar NOT NULL DEFAULT '',
|
||||
InheritSSHTunnelConnectionName bit NOT NULL DEFAULT 0,
|
||||
SSHOptions varchar NOT NULL DEFAULT '',
|
||||
InheritSSHOptions bit NOT NULL DEFAULT 0,
|
||||
InheritUseEnhancedMode bit NOT NULL DEFAULT 0;
|
||||
ADD RedirectClipboard bit NOT NULL,
|
||||
InheritRedirectClipboard bit NOT NULL,
|
||||
VmId varchar NOT NULL DEFAULT NULL,
|
||||
UseVmId bit NOT NULL,
|
||||
UseEnhancedMode bit NOT NULL,
|
||||
InheritVmId bit NOT NULL,
|
||||
InheritUseVmId bit NOT NULL,
|
||||
SSHTunnelConnectionName varchar NOT NULL DEFAULT NULL,
|
||||
InheritSSHTunnelConnectionName bit NOT NULL,
|
||||
SSHOptions varchar NOT NULL DEFAULT NULL,
|
||||
InheritSSHOptions bit NOT NULL,
|
||||
InheritUseEnhancedMode bit NOT NULL;
|
||||
UPDATE tblRoot
|
||||
SET ConfVersion='2.7'";
|
||||
var dbCommand = _databaseConnector.DbCommand(sqlText);
|
||||
dbCommand.ExecuteNonQuery();
|
||||
var dbCommand = _databaseConnector.DbCommand(sqlText);
|
||||
dbCommand.ExecuteNonQuery();
|
||||
}
|
||||
catch (SqlException)
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
|
||||
return new Version(2, 7);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using mRemoteNG.Config.DatabaseConnectors;
|
||||
using mRemoteNG.Messages;
|
||||
using System;
|
||||
using System.Data.Common;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.Versioning
|
||||
{
|
||||
@@ -25,39 +26,44 @@ namespace mRemoteNG.Config.Serializers.Versioning
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
"Upgrading database from version 2.7 to version 2.8.");
|
||||
|
||||
const string mySqlText = @"
|
||||
try
|
||||
{
|
||||
const string mySqlText1 = @"
|
||||
ALTER TABLE tblCons MODIFY COLUMN ID INT;
|
||||
ALTER TABLE tblCons DROP PRIMARY KEY, ADD PRIMARY KEY (ConstantID);
|
||||
ALTER TABLE tblCons ADD INDEX `id` (ID), MODIFY ID int auto_increment;
|
||||
ALTER TABLE tblCons MODIFY COLUMN ID INT AUTO_INCREMENT, ADD UNIQUE(ID);
|
||||
UPDATE tblRoot SET ConfVersion='2.8'";
|
||||
const string msSqlText1 = @"
|
||||
ALTER TABLE tblCons ADD DEFAULT 0 FOR UseEnhancedMode;
|
||||
ALTER TABLE tblCons ADD DEFAULT 0 FOR InheritUseEnhancedMode;
|
||||
|
||||
const string msSqlText1 = @"
|
||||
UPDATE tblCons SET UseEnhancedMode = 0 WHERE UseEnhancedMode IS NULL;
|
||||
UPDATE tblCons SET InheritUseEnhancedMode = 0 WHERE InheritUseEnhancedMode IS NULL;
|
||||
ALTER TABLE tblCons ALTER COLUMN ConstantID varchar(128) NOT NULL;";
|
||||
const string msSqlText2 = @"
|
||||
const string msSqlText2 = @"
|
||||
ALTER TABLE tblCons ADD CONSTRAINT PK_tblCons PRIMARY KEY (ConstantID);
|
||||
UPDATE tblRoot SET ConfVersion='2.8';";
|
||||
DbCommand dbCommand;
|
||||
|
||||
if (_databaseConnector.GetType() == typeof(MSSqlDatabaseConnector))
|
||||
{
|
||||
dbCommand = _databaseConnector.DbCommand(msSqlText1);
|
||||
DbCommand dbCommand;
|
||||
|
||||
if (_databaseConnector.GetType() == typeof(MSSqlDatabaseConnector))
|
||||
{
|
||||
dbCommand = _databaseConnector.DbCommand(msSqlText1);
|
||||
dbCommand.ExecuteNonQuery();
|
||||
dbCommand = _databaseConnector.DbCommand(msSqlText2);
|
||||
} else if (_databaseConnector.GetType() == typeof(MySqlDatabaseConnector))
|
||||
{
|
||||
dbCommand = _databaseConnector.DbCommand(mySqlText1);
|
||||
} else
|
||||
{
|
||||
throw new Exception("Unknown database backend");
|
||||
}
|
||||
|
||||
dbCommand.ExecuteNonQuery();
|
||||
dbCommand = _databaseConnector.DbCommand(msSqlText2);
|
||||
} else if (_databaseConnector.GetType() == typeof(MySqlDatabaseConnector))
|
||||
{
|
||||
dbCommand = _databaseConnector.DbCommand(mySqlText);
|
||||
} else
|
||||
{
|
||||
throw new Exception("Unknow database backend");
|
||||
}
|
||||
|
||||
|
||||
|
||||
dbCommand.ExecuteNonQuery();
|
||||
catch (SqlException)
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
return new Version(2, 8);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,20 +27,68 @@ namespace mRemoteNG.Config.Serializers.Versioning
|
||||
public Version Upgrade()
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
string.Format("Upgrading database to version {0}.", version));
|
||||
$"Upgrading database to version {version}.");
|
||||
|
||||
// MYSQL
|
||||
const string mySqlAlter = @"
|
||||
ALTER TABLE tblCons ADD COLUMN StartProgram varchar(512) DEFAULT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN StartProgramWorkDir varchar(512) DEFAULT NULL;
|
||||
ALTER TABLE tblRoot CHANGE COLUMN ConfVersion ConfVersion VARCHAR(15) NOT NULL;";
|
||||
ALTER TABLE tblCons ADD COLUMN `InheritUseRestrictedAdmin` tinyint(1) NOT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `UseRCG` tinyint(1) NOT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `UseRestrictedAdmin` tinyint(1) NOT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `InheritUseRCG` tinyint(1) NOT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `InheritRDGatewayExternalCredentialProvider` tinyint(1) NOT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `InheritRDGatewayUserViaAPI` tinyint(1) NOT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `InheritExternalCredentialProvider` tinyint(1) NOT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `InheritUserViaAPI` tinyint(1) NOT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `EC2Region` varchar(32) DEFAULT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `EC2InstanceId` varchar(32) DEFAULT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `ExternalCredentialProvider` varchar(256) DEFAULT NULL;
|
||||
ALTER TABLE tblCons ADD COLUMN `ExternalAddressProvider` varchar(256) DEFAULT NULL;
|
||||
SET SQL_SAFE_UPDATES=0;
|
||||
UPDATE tblCons SET InheritUseEnhancedMode = 0 WHERE InheritUseEnhancedMode IS NULL;
|
||||
ALTER TABLE tblCons MODIFY COLUMN InheritUseEnhancedMode tinyint(1) NOT NULL;
|
||||
UPDATE tblCons SET UseEnhancedMode = 0 WHERE UseEnhancedMode IS NULL;
|
||||
ALTER TABLE tblCons MODIFY COLUMN UseEnhancedMode tinyint(1) NOT NULL;
|
||||
UPDATE tblCons SET InheritVmId = 0 WHERE InheritVmId IS NULL;
|
||||
ALTER TABLE tblCons MODIFY COLUMN InheritVmId tinyint(1) NOT NULL;
|
||||
UPDATE tblCons SET InheritUseVmId = 0 WHERE InheritUseVmId IS NULL;
|
||||
ALTER TABLE tblCons MODIFY COLUMN InheritUseVmId tinyint(1) NOT NULL;
|
||||
UPDATE tblCons SET UseVmId = 0 WHERE UseVmId IS NULL;
|
||||
ALTER TABLE tblCons MODIFY COLUMN UseVmId tinyint(1) NOT NULL;
|
||||
SET SQL_SAFE_UPDATES=1;
|
||||
ALTER TABLE tblRoot ALTER COLUMN ConfVersion VARCHAR(15) NOT NULL;
|
||||
";
|
||||
|
||||
const string mySqlUpdate = @"UPDATE tblRoot SET ConfVersion=?;";
|
||||
|
||||
// MS-SQL
|
||||
const string msSqlAlter = @"
|
||||
IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(N'[dbo].[tblCons]') AND name = 'StartProgram')
|
||||
BEGIN
|
||||
ALTER TABLE tblCons ADD StartProgram varchar(512), StartProgramWorkDir varchar(512);
|
||||
END;GO;
|
||||
ALTER TABLE tblRoot MODIFY COLUMN ConfVersion varchar(15);GO;";
|
||||
ALTER TABLE tblCons ADD InheritUseRestrictedAdmin bit NOT NULL;
|
||||
ALTER TABLE tblCons ADD UseRCG bit NOT NULL;
|
||||
ALTER TABLE tblCons ADD UseRestrictedAdmin bit NOT NULL;
|
||||
ALTER TABLE tblCons ADD InheritUseRCG bit NOT NULL;
|
||||
ALTER TABLE tblCons ADD InheritRDGatewayExternalCredentialProvider bit NOT NULL;
|
||||
ALTER TABLE tblCons ADD InheritRDGatewayUserViaAPI bit NOT NULL;
|
||||
ALTER TABLE tblCons ADD InheritExternalCredentialProvider bit NOT NULL;
|
||||
ALTER TABLE tblCons ADD InheritUserViaAPI bit NOT NULL;
|
||||
ALTER TABLE tblCons ADD EC2Region varchar(32) NULL;
|
||||
ALTER TABLE tblCons ADD EC2InstanceId varchar(32) NULL;
|
||||
ALTER TABLE tblCons ADD ExternalCredentialProvider varchar(256) NULL;
|
||||
ALTER TABLE tblCons ADD ExternalAddressProvider varchar(256) NULL;
|
||||
UPDATE tblCons SET InheritUseEnhancedMode = 0 WHERE InheritUseEnhancedMode IS NULL;
|
||||
ALTER TABLE tblCons ALTER COLUMN InheritUseEnhancedMode bit NOT NULL;
|
||||
UPDATE tblCons SET UseEnhancedMode = 0 WHERE UseEnhancedMode IS NULL;
|
||||
ALTER TABLE tblCons ALTER COLUMN UseEnhancedMode bit NOT NULL;
|
||||
UPDATE tblCons SET InheritVmId = 0 WHERE InheritVmId IS NULL;
|
||||
ALTER TABLE tblCons ALTER COLUMN InheritVmId bit NOT NULL;
|
||||
UPDATE tblCons SET InheritUseVmId = 0 WHERE InheritUseVmId IS NULL;
|
||||
ALTER TABLE tblCons ALTER COLUMN InheritUseVmId bit NOT NULL;
|
||||
UPDATE tblCons SET UseVmId = 0 WHERE UseVmId IS NULL;
|
||||
ALTER TABLE tblCons ALTER COLUMN UseVmId bit NOT NULL;
|
||||
ALTER TABLE tblRoot ALTER COLUMN [ConfVersion] VARCHAR(15) NOT NULL;
|
||||
";
|
||||
|
||||
const string msSqlUpdate = @"UPDATE tblRoot SET ConfVersion=@confVersion;";
|
||||
|
||||
using (var sqlTran = _databaseConnector.DbConnection().BeginTransaction(System.Data.IsolationLevel.Serializable))
|
||||
{
|
||||
DbCommand dbCommand;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using WeifenLuo.WinFormsUI.Docking;
|
||||
@@ -27,12 +27,7 @@ namespace mRemoteNG.Config.Settings
|
||||
private FrmMain MainForm { get; }
|
||||
|
||||
|
||||
public SettingsLoader(FrmMain mainForm,
|
||||
MessageCollector messageCollector,
|
||||
QuickConnectToolStrip quickConnectToolStrip,
|
||||
ExternalToolsToolStrip externalToolsToolStrip,
|
||||
MultiSshToolStrip multiSshToolStrip,
|
||||
MenuStrip mainMenu)
|
||||
public SettingsLoader(FrmMain mainForm, MessageCollector messageCollector, QuickConnectToolStrip quickConnectToolStrip, ExternalToolsToolStrip externalToolsToolStrip, MultiSshToolStrip multiSshToolStrip, MenuStrip mainMenu)
|
||||
{
|
||||
if (mainForm == null)
|
||||
throw new ArgumentNullException(nameof(mainForm));
|
||||
@@ -74,7 +69,7 @@ namespace mRemoteNG.Config.Settings
|
||||
LoadExternalAppsFromXml();
|
||||
SetAlwaysShowPanelTabs();
|
||||
|
||||
if (Properties.Settings.Default.ResetToolbars)
|
||||
if (Properties.App.Default.ResetToolbars)
|
||||
SetToolbarsDefault();
|
||||
else
|
||||
LoadToolbarsFromSettings();
|
||||
@@ -87,40 +82,37 @@ namespace mRemoteNG.Config.Settings
|
||||
|
||||
private static void SetAlwaysShowPanelTabs()
|
||||
{
|
||||
if (Properties.Settings.Default.AlwaysShowPanelTabs)
|
||||
if (Properties.OptionsTabsPanelsPage.Default.AlwaysShowPanelTabs)
|
||||
FrmMain.Default.pnlDock.DocumentStyle = DocumentStyle.DockingWindow;
|
||||
}
|
||||
|
||||
|
||||
private void SetSupportedCulture()
|
||||
{
|
||||
if (Properties.Settings.Default.OverrideUICulture == "" ||
|
||||
!SupportedCultures.IsNameSupported(Properties.Settings.Default.OverrideUICulture)) return;
|
||||
if (Properties.Settings.Default.OverrideUICulture == "" || !SupportedCultures.IsNameSupported(Properties.Settings.Default.OverrideUICulture)) return;
|
||||
Thread.CurrentThread.CurrentUICulture = new CultureInfo(Properties.Settings.Default.OverrideUICulture);
|
||||
_messageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
$"Override Culture: {Thread.CurrentThread.CurrentUICulture.Name}/{Thread.CurrentThread.CurrentUICulture.NativeName}",
|
||||
true);
|
||||
_messageCollector.AddMessage(MessageClass.InformationMsg, $"Override Culture: {Thread.CurrentThread.CurrentUICulture.Name}/{Thread.CurrentThread.CurrentUICulture.NativeName}", true);
|
||||
}
|
||||
|
||||
private void SetApplicationWindowPositionAndSize()
|
||||
{
|
||||
MainForm.WindowState = FormWindowState.Normal;
|
||||
if (Properties.Settings.Default.MainFormState == FormWindowState.Normal)
|
||||
if (Properties.App.Default.MainFormState == FormWindowState.Normal)
|
||||
{
|
||||
if (!Properties.Settings.Default.MainFormLocation.IsEmpty)
|
||||
MainForm.Location = Properties.Settings.Default.MainFormLocation;
|
||||
if (!Properties.Settings.Default.MainFormSize.IsEmpty)
|
||||
MainForm.Size = Properties.Settings.Default.MainFormSize;
|
||||
if (!Properties.App.Default.MainFormLocation.IsEmpty)
|
||||
MainForm.Location = Properties.App.Default.MainFormLocation;
|
||||
if (!Properties.App.Default.MainFormSize.IsEmpty)
|
||||
MainForm.Size = Properties.App.Default.MainFormSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!Properties.Settings.Default.MainFormRestoreLocation.IsEmpty)
|
||||
MainForm.Location = Properties.Settings.Default.MainFormRestoreLocation;
|
||||
if (!Properties.Settings.Default.MainFormRestoreSize.IsEmpty)
|
||||
MainForm.Size = Properties.Settings.Default.MainFormRestoreSize;
|
||||
if (!Properties.App.Default.MainFormRestoreLocation.IsEmpty)
|
||||
MainForm.Location = Properties.App.Default.MainFormRestoreLocation;
|
||||
if (!Properties.App.Default.MainFormRestoreSize.IsEmpty)
|
||||
MainForm.Size = Properties.App.Default.MainFormRestoreSize;
|
||||
}
|
||||
|
||||
if (Properties.Settings.Default.MainFormState == FormWindowState.Maximized)
|
||||
if (Properties.App.Default.MainFormState == FormWindowState.Maximized)
|
||||
{
|
||||
MainForm.WindowState = FormWindowState.Maximized;
|
||||
}
|
||||
@@ -145,33 +137,31 @@ namespace mRemoteNG.Config.Settings
|
||||
|
||||
private void SetAutoSave()
|
||||
{
|
||||
if (Properties.Settings.Default.AutoSaveEveryMinutes <= 0) return;
|
||||
MainForm.tmrAutoSave.Interval = Properties.Settings.Default.AutoSaveEveryMinutes * 60000;
|
||||
if (Properties.OptionsConnectionsPage.Default.AutoSaveEveryMinutes <= 0) return;
|
||||
MainForm.tmrAutoSave.Interval = Properties.OptionsConnectionsPage.Default.AutoSaveEveryMinutes * 60000;
|
||||
MainForm.tmrAutoSave.Enabled = true;
|
||||
}
|
||||
|
||||
private void SetKioskMode()
|
||||
{
|
||||
if (!Properties.Settings.Default.MainFormKiosk) return;
|
||||
if (!Properties.App.Default.MainFormKiosk) return;
|
||||
MainForm.Fullscreen.Value = true;
|
||||
}
|
||||
|
||||
private static void SetShowSystemTrayIcon()
|
||||
{
|
||||
if (Properties.Settings.Default.ShowSystemTrayIcon)
|
||||
if (Properties.OptionsAppearancePage.Default.ShowSystemTrayIcon)
|
||||
Runtime.NotificationAreaIcon = new NotificationAreaIcon();
|
||||
}
|
||||
|
||||
private static void SetPuttyPath()
|
||||
{
|
||||
PuttyBase.PuttyPath = Properties.Settings.Default.UseCustomPuttyPath
|
||||
? Properties.Settings.Default.CustomPuttyPath
|
||||
: GeneralAppInfo.PuttyPath;
|
||||
PuttyBase.PuttyPath = Properties.OptionsAdvancedPage.Default.UseCustomPuttyPath ? Properties.OptionsAdvancedPage.Default.CustomPuttyPath : GeneralAppInfo.PuttyPath;
|
||||
}
|
||||
|
||||
private void EnsureSettingsAreSavedInNewestVersion()
|
||||
{
|
||||
if (Properties.Settings.Default.DoUpgrade)
|
||||
if (Properties.App.Default.DoUpgrade)
|
||||
UpgradeSettingsVersion();
|
||||
}
|
||||
|
||||
@@ -187,12 +177,12 @@ namespace mRemoteNG.Config.Settings
|
||||
_messageCollector.AddExceptionMessage("Settings.Upgrade() failed", ex);
|
||||
}
|
||||
|
||||
Properties.Settings.Default.DoUpgrade = false;
|
||||
Properties.App.Default.DoUpgrade = false;
|
||||
|
||||
// Clear pending update flag
|
||||
// This is used for automatic updates, not for settings migration, but it
|
||||
// needs to be cleared here because we know that we just updated.
|
||||
Properties.Settings.Default.UpdatePending = false;
|
||||
Properties.OptionsUpdatesPage.Default.UpdatePending = false;
|
||||
}
|
||||
|
||||
private void SetToolbarsDefault()
|
||||
@@ -259,9 +249,7 @@ namespace mRemoteNG.Config.Settings
|
||||
|
||||
private void SetToolstripGripStyle(ToolStrip toolbar)
|
||||
{
|
||||
toolbar.GripStyle = Properties.Settings.Default.LockToolbars
|
||||
? ToolStripGripStyle.Hidden
|
||||
: ToolStripGripStyle.Visible;
|
||||
toolbar.GripStyle = Properties.Settings.Default.LockToolbars ? ToolStripGripStyle.Hidden : ToolStripGripStyle.Visible;
|
||||
}
|
||||
|
||||
private ToolStripPanel ToolStripPanelFromString(string panel)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.App.Info;
|
||||
@@ -11,10 +11,7 @@ namespace mRemoteNG.Config.Settings
|
||||
{
|
||||
public static class SettingsSaver
|
||||
{
|
||||
public static void SaveSettings(Control quickConnectToolStrip,
|
||||
ExternalToolsToolStrip externalToolsToolStrip,
|
||||
MultiSshToolStrip multiSshToolStrip,
|
||||
FrmMain frmMain)
|
||||
public static void SaveSettings(Control quickConnectToolStrip, ExternalToolsToolStrip externalToolsToolStrip, MultiSshToolStrip multiSshToolStrip, FrmMain frmMain)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -25,31 +22,45 @@ namespace mRemoteNG.Config.Settings
|
||||
frmMain.WindowState = FormWindowState.Maximized;
|
||||
}
|
||||
|
||||
Properties.Settings.Default.MainFormLocation = frmMain.Location;
|
||||
Properties.Settings.Default.MainFormSize = frmMain.Size;
|
||||
Properties.App.Default.MainFormLocation = frmMain.Location;
|
||||
Properties.App.Default.MainFormSize = frmMain.Size;
|
||||
|
||||
if (frmMain.WindowState != FormWindowState.Normal)
|
||||
{
|
||||
Properties.Settings.Default.MainFormRestoreLocation = frmMain.RestoreBounds.Location;
|
||||
Properties.Settings.Default.MainFormRestoreSize = frmMain.RestoreBounds.Size;
|
||||
Properties.App.Default.MainFormRestoreLocation = frmMain.RestoreBounds.Location;
|
||||
Properties.App.Default.MainFormRestoreSize = frmMain.RestoreBounds.Size;
|
||||
}
|
||||
|
||||
Properties.Settings.Default.MainFormState = frmMain.WindowState;
|
||||
Properties.App.Default.MainFormState = frmMain.WindowState;
|
||||
|
||||
if (frmMain.Fullscreen != null)
|
||||
{
|
||||
Properties.Settings.Default.MainFormKiosk = frmMain.Fullscreen.Value;
|
||||
Properties.App.Default.MainFormKiosk = frmMain.Fullscreen.Value;
|
||||
}
|
||||
|
||||
Properties.Settings.Default.FirstStart = false;
|
||||
Properties.Settings.Default.ResetPanels = false;
|
||||
Properties.Settings.Default.ResetToolbars = false;
|
||||
Properties.Settings.Default.NoReconnect = false;
|
||||
Properties.App.Default.FirstStart = false;
|
||||
Properties.App.Default.ResetPanels = false;
|
||||
Properties.App.Default.ResetToolbars = false;
|
||||
|
||||
SaveExternalAppsToolbarLocation(externalToolsToolStrip);
|
||||
SaveQuickConnectToolbarLocation(quickConnectToolStrip);
|
||||
SaveMultiSshToolbarLocation(multiSshToolStrip);
|
||||
|
||||
Properties.App.Default.Save();
|
||||
Properties.AppUI.Default.Save();
|
||||
Properties.OptionsAdvancedPage.Default.Save();
|
||||
Properties.OptionsAppearancePage.Default.Save();
|
||||
Properties.OptionsBackupPage.Default.Save();
|
||||
Properties.OptionsConnectionsPage.Default.Save();
|
||||
Properties.OptionsCredentialsPage.Default.Save();
|
||||
Properties.OptionsDBsPage.Default.Save();
|
||||
Properties.OptionsNotificationsPage.Default.Save();
|
||||
Properties.OptionsSecurityPage.Default.Save();
|
||||
Properties.OptionsStartupExitPage.Default.Save();
|
||||
Properties.OptionsTabsPanelsPage.Default.Save();
|
||||
Properties.OptionsThemePage.Default.Save();
|
||||
Properties.OptionsUpdatesPage.Default.Save();
|
||||
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
SaveDockPanelLayout();
|
||||
|
||||
@@ -9,7 +9,6 @@ using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tools.Attributes;
|
||||
using mRemoteNG.Resources.Language;
|
||||
|
||||
|
||||
namespace mRemoteNG.Connection
|
||||
{
|
||||
public abstract class AbstractConnectionRecord : INotifyPropertyChanged
|
||||
@@ -22,8 +21,10 @@ namespace mRemoteNG.Connection
|
||||
private string _panel;
|
||||
|
||||
private string _hostname;
|
||||
private ExternalAddressProvider _externalAddressProvider;
|
||||
private string _ec2InstanceId = "";
|
||||
private string _ec2Region = "";
|
||||
private ExternalCredentialProvider _externalCredentialProvider;
|
||||
private string _userViaAPI = "";
|
||||
private string _username = "";
|
||||
private string _password = "";
|
||||
@@ -45,6 +46,8 @@ namespace mRemoteNG.Connection
|
||||
private string _loadBalanceInfo;
|
||||
private HTTPBase.RenderingEngine _renderingEngine;
|
||||
private bool _useCredSsp;
|
||||
private bool _useRestrictedAdmin;
|
||||
private bool _useRCG;
|
||||
private bool _useVmId;
|
||||
|
||||
private RDGatewayUsageMethod _rdGatewayUsageMethod;
|
||||
@@ -53,6 +56,9 @@ namespace mRemoteNG.Connection
|
||||
private string _rdGatewayUsername;
|
||||
private string _rdGatewayPassword;
|
||||
private string _rdGatewayDomain;
|
||||
private ExternalCredentialProvider _rdGatewayExternalCredentialProvider;
|
||||
private string _rdGatewayUserViaAPI = "";
|
||||
|
||||
|
||||
private RDPResolutions _resolution;
|
||||
private bool _automaticResize;
|
||||
@@ -165,15 +171,29 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _port, value, "Port");
|
||||
}
|
||||
|
||||
// external credential provider selector
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 2),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.ExternalCredentialProvider)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionExternalCredentialProvider)),
|
||||
TypeConverter(typeof(MiscTools.EnumTypeConverter)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP, ProtocolType.SSH1, ProtocolType.SSH2)]
|
||||
public ExternalCredentialProvider ExternalCredentialProvider
|
||||
{
|
||||
get => GetPropertyValue("ExternalCredentialProvider", _externalCredentialProvider);
|
||||
set => SetField(ref _externalCredentialProvider, value, "ExternalCredentialProvider");
|
||||
}
|
||||
|
||||
// credential record identifier for external credential provider
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 2),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.UserViaAPI)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUserViaAPI)),
|
||||
AttributeUsedInAllProtocolsExcept(ProtocolType.VNC, ProtocolType.Telnet, ProtocolType.Rlogin, ProtocolType.RAW)]
|
||||
AttributeUsedInProtocol(ProtocolType.RDP, ProtocolType.SSH1, ProtocolType.SSH2)]
|
||||
public virtual string UserViaAPI
|
||||
{
|
||||
get => GetPropertyValue("UserViaAPI", _userViaAPI);
|
||||
set => SetField(ref _userViaAPI, value, "UserViaAPI");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 2),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.Username)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUsername)),
|
||||
@@ -205,6 +225,19 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _domain, value?.Trim(), "Domain");
|
||||
}
|
||||
|
||||
|
||||
// external address provider selector
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 2),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.ExternalAddressProvider)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionExternalAddressProvider)),
|
||||
TypeConverter(typeof(MiscTools.EnumTypeConverter)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP, ProtocolType.SSH2)]
|
||||
public ExternalAddressProvider ExternalAddressProvider
|
||||
{
|
||||
get => GetPropertyValue("ExternalAddressProvider", _externalAddressProvider);
|
||||
set => SetField(ref _externalAddressProvider, value, "ExternalAddressProvider");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 2),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.EC2InstanceId)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionEC2InstanceId)),
|
||||
@@ -394,6 +427,28 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _useCredSsp, value, "UseCredSsp");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 3),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.UseRestrictedAdmin)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUseRestrictedAdmin)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP)]
|
||||
public bool UseRestrictedAdmin
|
||||
{
|
||||
get => GetPropertyValue("UseRestrictedAdmin", _useRestrictedAdmin);
|
||||
set => SetField(ref _useRestrictedAdmin, value, "UseRestrictedAdmin");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 3),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.UseRCG)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUseRCG)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP)]
|
||||
public bool UseRCG
|
||||
{
|
||||
get => GetPropertyValue("UseRCG", _useRCG);
|
||||
set => SetField(ref _useRCG, value, "UseRCG");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 3),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.UseVmId)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUseVmId)),
|
||||
@@ -419,7 +474,7 @@ namespace mRemoteNG.Connection
|
||||
|
||||
#region RD Gateway
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 4),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 4),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.RdpGatewayUsageMethod)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionRdpGatewayUsageMethod)),
|
||||
TypeConverter(typeof(MiscTools.EnumTypeConverter)),
|
||||
@@ -430,7 +485,7 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _rdGatewayUsageMethod, value, "RDGatewayUsageMethod");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 4),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 4),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.RdpGatewayHostname)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionRDGatewayHostname)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP)]
|
||||
@@ -440,7 +495,7 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _rdGatewayHostname, value?.Trim(), "RDGatewayHostname");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 4),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 4),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.RdpGatewayUseConnectionCredentials)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionRDGatewayUseConnectionCredentials)),
|
||||
TypeConverter(typeof(MiscTools.EnumTypeConverter)),
|
||||
@@ -451,7 +506,7 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _rdGatewayUseConnectionCredentials, value, "RDGatewayUseConnectionCredentials");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 4),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 4),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.RdpGatewayUsername)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionRDGatewayUsername)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP)]
|
||||
@@ -461,7 +516,7 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _rdGatewayUsername, value?.Trim(), "RDGatewayUsername");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 4),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 4),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.RdpGatewayPassword)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionRdpGatewayPassword)),
|
||||
PasswordPropertyText(true),
|
||||
@@ -472,7 +527,7 @@ namespace mRemoteNG.Connection
|
||||
set => SetField(ref _rdGatewayPassword, value, "RDGatewayPassword");
|
||||
}
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 4),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 4),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.RdpGatewayDomain)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionRDGatewayDomain)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP)]
|
||||
@@ -481,7 +536,28 @@ namespace mRemoteNG.Connection
|
||||
get => GetPropertyValue("RDGatewayDomain", _rdGatewayDomain).Trim();
|
||||
set => SetField(ref _rdGatewayDomain, value?.Trim(), "RDGatewayDomain");
|
||||
}
|
||||
// external credential provider selector for rd gateway
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 4),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.ExternalCredentialProvider)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionExternalCredentialProvider)),
|
||||
TypeConverter(typeof(MiscTools.EnumTypeConverter)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP)]
|
||||
public ExternalCredentialProvider RDGatewayExternalCredentialProvider
|
||||
{
|
||||
get => GetPropertyValue("RDGatewayExternalCredentialProvider", _rdGatewayExternalCredentialProvider);
|
||||
set => SetField(ref _rdGatewayExternalCredentialProvider, value, "RDGatewayExternalCredentialProvider");
|
||||
}
|
||||
|
||||
// credential record identifier for external credential provider
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 4),
|
||||
LocalizedAttributes.LocalizedDisplayName(nameof(Language.UserViaAPI)),
|
||||
LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionUserViaAPI)),
|
||||
AttributeUsedInProtocol(ProtocolType.RDP)]
|
||||
public virtual string RDGatewayUserViaAPI
|
||||
{
|
||||
get => GetPropertyValue("RDGatewayUserViaAPI", _rdGatewayUserViaAPI);
|
||||
set => SetField(ref _rdGatewayUserViaAPI, value, "RDGatewayUserViaAPI");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Appearance
|
||||
|
||||
@@ -19,7 +19,6 @@ using mRemoteNG.Tree;
|
||||
using mRemoteNG.Resources.Language;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
|
||||
namespace mRemoteNG.Connection
|
||||
{
|
||||
[DefaultProperty("Name")]
|
||||
@@ -296,7 +295,10 @@ namespace mRemoteNG.Connection
|
||||
private void SetConnectionDefaults()
|
||||
{
|
||||
Hostname = string.Empty;
|
||||
ExternalAddressProvider = (ExternalAddressProvider)Enum.Parse(typeof(ExternalAddressProvider), Settings.Default.ConDefaultExternalAddressProvider);
|
||||
EC2Region = Settings.Default.ConDefaultEC2Region;
|
||||
ExternalCredentialProvider = (ExternalCredentialProvider)Enum.Parse(typeof(ExternalCredentialProvider), Settings.Default.ConDefaultExternalCredentialProvider);
|
||||
UserViaAPI = "";
|
||||
}
|
||||
|
||||
private void SetProtocolDefaults()
|
||||
@@ -312,6 +314,8 @@ namespace mRemoteNG.Connection
|
||||
LoadBalanceInfo = Settings.Default.ConDefaultLoadBalanceInfo;
|
||||
RenderingEngine = (HTTPBase.RenderingEngine)Enum.Parse(typeof(HTTPBase.RenderingEngine), Settings.Default.ConDefaultRenderingEngine);
|
||||
UseCredSsp = Settings.Default.ConDefaultUseCredSsp;
|
||||
UseRestrictedAdmin = Settings.Default.ConDefaultUseRestrictedAdmin;
|
||||
UseRCG = Settings.Default.ConDefaultUseRCG;
|
||||
UseVmId = Settings.Default.ConDefaultUseVmId;
|
||||
UseEnhancedMode = Settings.Default.ConDefaultUseEnhancedMode;
|
||||
}
|
||||
@@ -330,6 +334,8 @@ namespace mRemoteNG.Connection
|
||||
RDGatewayUsername = Settings.Default.ConDefaultRDGatewayUsername;
|
||||
RDGatewayPassword = Settings.Default.ConDefaultRDGatewayPassword;
|
||||
RDGatewayDomain = Settings.Default.ConDefaultRDGatewayDomain;
|
||||
RDGatewayExternalCredentialProvider = (ExternalCredentialProvider)Enum.Parse(typeof(ExternalCredentialProvider), Settings.Default.ConDefaultRDGatewayExternalCredentialProvider);
|
||||
RDGatewayUserViaAPI = Settings.Default.ConDefaultRDGatewayUserViaAPI;
|
||||
}
|
||||
|
||||
private void SetAppearanceDefaults()
|
||||
|
||||
@@ -51,6 +51,14 @@ namespace mRemoteNG.Connection
|
||||
#endregion
|
||||
|
||||
#region Connection
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 3),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.ExternalCredentialProvider)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionExternalCredentialProvider)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
[Browsable(true)]
|
||||
public bool ExternalCredentialProvider { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 3),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.UserViaAPI)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionUserViaAPI)),
|
||||
@@ -184,6 +192,18 @@ namespace mRemoteNG.Connection
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool UseCredSsp { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 4),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.UseRestrictedAdmin)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionUseRestrictedAdmin)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool UseRestrictedAdmin { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 4),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.UseRCG)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionUseRCG)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool UseRCG { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Protocol), 4),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.UseVmId)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionUseVmId)),
|
||||
@@ -200,42 +220,55 @@ namespace mRemoteNG.Connection
|
||||
|
||||
#region RD Gateway
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 5),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 5),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.RdpGatewayUsageMethod)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionRdpGatewayUsageMethod)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool RDGatewayUsageMethod { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 5),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 5),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.RdpGatewayHostname)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionRDGatewayHostname)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool RDGatewayHostname { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 5),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 5),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.RdpGatewayUseConnectionCredentials)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionRDGatewayUseConnectionCredentials)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool RDGatewayUseConnectionCredentials { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 5),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 5),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.RdpGatewayUsername)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionRDGatewayUsername)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool RDGatewayUsername { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 5),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 5),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.RdpGatewayPassword)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionRdpGatewayPassword)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool RDGatewayPassword { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.Gateway), 5),
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 5),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.RdpGatewayDomain)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionRDGatewayDomain)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool RDGatewayDomain { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 5),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.ExternalCredentialProvider)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionExternalCredentialProvider)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool RDGatewayExternalCredentialProvider { get; set; }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory(nameof(Language.RDPGateway), 5),
|
||||
LocalizedAttributes.LocalizedDisplayNameInherit(nameof(Language.UserViaAPI)),
|
||||
LocalizedAttributes.LocalizedDescriptionInherit(nameof(Language.PropertyDescriptionUserViaAPI)),
|
||||
TypeConverter(typeof(MiscTools.YesNoTypeConverter))]
|
||||
public bool RDGatewayUserViaAPI { get; set; }
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Appearance
|
||||
|
||||
@@ -299,9 +299,7 @@ namespace mRemoteNG.Connection
|
||||
|
||||
private static string SetConnectionPanel(ConnectionInfo connectionInfo, ConnectionInfo.Force force)
|
||||
{
|
||||
if (connectionInfo.Panel != "" &&
|
||||
!force.HasFlag(ConnectionInfo.Force.OverridePanel) &&
|
||||
!Settings.Default.AlwaysShowPanelSelectionDlg)
|
||||
if (connectionInfo.Panel != "" && !force.HasFlag(ConnectionInfo.Force.OverridePanel) && !Properties.OptionsTabsPanelsPage.Default.AlwaysShowPanelSelectionDlg)
|
||||
return connectionInfo.Panel;
|
||||
|
||||
var frmPnl = new FrmChoosePanel();
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace mRemoteNG.Connection
|
||||
var newConnectionInfo = new ConnectionInfo();
|
||||
newConnectionInfo.CopyFrom(DefaultConnectionInfo.Instance);
|
||||
|
||||
newConnectionInfo.Name = Settings.Default.IdentifyQuickConnectTabs
|
||||
newConnectionInfo.Name = Properties.OptionsTabsPanelsPage.Default.IdentifyQuickConnectTabs
|
||||
? string.Format(Language.Quick, uriBuilder.Host)
|
||||
: uriBuilder.Host;
|
||||
|
||||
@@ -138,8 +138,7 @@ namespace mRemoteNG.Connection
|
||||
var oldIsUsingDatabaseValue = UsingDatabase;
|
||||
|
||||
var connectionLoader = useDatabase
|
||||
? (IConnectionsLoader)new SqlConnectionsLoader(_localConnectionPropertiesSerializer,
|
||||
_localConnectionPropertiesDataProvider)
|
||||
? (IConnectionsLoader)new SqlConnectionsLoader(_localConnectionPropertiesSerializer, _localConnectionPropertiesDataProvider)
|
||||
: new XmlConnectionsLoader(connectionFileName);
|
||||
|
||||
var newConnectionTreeModel = connectionLoader.Load();
|
||||
@@ -149,8 +148,7 @@ namespace mRemoteNG.Connection
|
||||
|
||||
if (newConnectionTreeModel == null)
|
||||
{
|
||||
DialogFactory.ShowLoadConnectionsFailedDialog(connectionFileName, "Decrypting connection file failed",
|
||||
IsConnectionsFileLoaded);
|
||||
DialogFactory.ShowLoadConnectionsFailedDialog(connectionFileName, "Decrypting connection file failed", IsConnectionsFileLoaded);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -166,10 +164,8 @@ namespace mRemoteNG.Connection
|
||||
|
||||
ConnectionTreeModel = newConnectionTreeModel;
|
||||
UpdateCustomConsPathSetting(connectionFileName);
|
||||
RaiseConnectionsLoadedEvent(oldConnectionTreeModel, newConnectionTreeModel, oldIsUsingDatabaseValue,
|
||||
useDatabase, connectionFileName);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg,
|
||||
$"Connections loaded using {connectionLoader.GetType().Name}");
|
||||
RaiseConnectionsLoadedEvent(oldConnectionTreeModel, newConnectionTreeModel, oldIsUsingDatabaseValue, useDatabase, connectionFileName);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, $"Connections loaded using {connectionLoader.GetType().Name}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -233,12 +229,7 @@ namespace mRemoteNG.Connection
|
||||
/// Optional. The name of the property that triggered
|
||||
/// this save.
|
||||
/// </param>
|
||||
public void SaveConnections(ConnectionTreeModel connectionTreeModel,
|
||||
bool useDatabase,
|
||||
SaveFilter saveFilter,
|
||||
string connectionFileName,
|
||||
bool forceSave = false,
|
||||
string propertyNameTrigger = "")
|
||||
public void SaveConnections(ConnectionTreeModel connectionTreeModel, bool useDatabase, SaveFilter saveFilter, string connectionFileName, bool forceSave = false, string propertyNameTrigger = "")
|
||||
{
|
||||
if (connectionTreeModel == null)
|
||||
return;
|
||||
@@ -260,9 +251,7 @@ namespace mRemoteNG.Connection
|
||||
var previouslyUsingDatabase = UsingDatabase;
|
||||
|
||||
var saver = useDatabase
|
||||
? (ISaver<ConnectionTreeModel>)new SqlConnectionsSaver(saveFilter,
|
||||
_localConnectionPropertiesSerializer,
|
||||
_localConnectionPropertiesDataProvider)
|
||||
? (ISaver<ConnectionTreeModel>)new SqlConnectionsSaver(saveFilter, _localConnectionPropertiesSerializer, _localConnectionPropertiesDataProvider)
|
||||
: new XmlConnectionsSaver(connectionFileName, saveFilter);
|
||||
|
||||
saver.Save(connectionTreeModel, propertyNameTrigger);
|
||||
@@ -278,9 +267,7 @@ namespace mRemoteNG.Connection
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector?.AddExceptionMessage(
|
||||
string.Format(Language.ConnectionsFileCouldNotSaveAs,
|
||||
connectionFileName), ex, logOnly: false);
|
||||
Runtime.MessageCollector?.AddExceptionMessage(string.Format(Language.ConnectionsFileCouldNotSaveAs, connectionFileName), ex, logOnly: false);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -307,12 +294,7 @@ namespace mRemoteNG.Connection
|
||||
{
|
||||
lock (SaveLock)
|
||||
{
|
||||
SaveConnections(
|
||||
ConnectionTreeModel,
|
||||
UsingDatabase,
|
||||
new SaveFilter(),
|
||||
ConnectionFileName,
|
||||
propertyNameTrigger: propertyNameTrigger);
|
||||
SaveConnections(ConnectionTreeModel, UsingDatabase, new SaveFilter(), ConnectionFileName, propertyNameTrigger: propertyNameTrigger);
|
||||
}
|
||||
});
|
||||
t.SetApartmentState(ApartmentState.STA);
|
||||
@@ -321,37 +303,45 @@ namespace mRemoteNG.Connection
|
||||
|
||||
public string GetStartupConnectionFileName()
|
||||
{
|
||||
return Settings.Default.LoadConsFromCustomLocation == false
|
||||
? GetDefaultStartupConnectionFileName()
|
||||
: Settings.Default.CustomConsPath;
|
||||
/*
|
||||
if (Properties.OptionsBackupPage.Default.LoadConsFromCustomLocation == true && Properties.OptionsBackupPage.Default.BackupLocation != "")
|
||||
{
|
||||
return Properties.OptionsBackupPage.Default.BackupLocation;
|
||||
} else {
|
||||
return GetDefaultStartupConnectionFileName();
|
||||
}
|
||||
*/
|
||||
if (Properties.OptionsConnectionsPage.Default.ConnectrionFilePath != "")
|
||||
{
|
||||
return Properties.OptionsConnectionsPage.Default.ConnectrionFilePath;
|
||||
}
|
||||
else
|
||||
{
|
||||
return GetDefaultStartupConnectionFileName();
|
||||
}
|
||||
}
|
||||
|
||||
public string GetDefaultStartupConnectionFileName()
|
||||
{
|
||||
return Runtime.IsPortableEdition
|
||||
? GetDefaultStartupConnectionFileNamePortableEdition()
|
||||
: GetDefaultStartupConnectionFileNameNormalEdition();
|
||||
return Runtime.IsPortableEdition ? GetDefaultStartupConnectionFileNamePortableEdition() : GetDefaultStartupConnectionFileNameNormalEdition();
|
||||
}
|
||||
|
||||
private void UpdateCustomConsPathSetting(string filename)
|
||||
{
|
||||
if (filename == GetDefaultStartupConnectionFileName())
|
||||
{
|
||||
Settings.Default.LoadConsFromCustomLocation = false;
|
||||
Properties.OptionsBackupPage.Default.LoadConsFromCustomLocation = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Settings.Default.LoadConsFromCustomLocation = true;
|
||||
Settings.Default.CustomConsPath = filename;
|
||||
Properties.OptionsBackupPage.Default.LoadConsFromCustomLocation = true;
|
||||
Properties.OptionsBackupPage.Default.BackupLocation = filename;
|
||||
}
|
||||
}
|
||||
|
||||
private string GetDefaultStartupConnectionFileNameNormalEdition()
|
||||
{
|
||||
var appDataPath = Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||
Application.ProductName,
|
||||
ConnectionsFileInfo.DefaultConnectionsFile);
|
||||
var appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.ProductName, ConnectionsFileInfo.DefaultConnectionsFile);
|
||||
return File.Exists(appDataPath) ? appDataPath : GetDefaultStartupConnectionFileNamePortableEdition();
|
||||
}
|
||||
|
||||
@@ -365,29 +355,14 @@ namespace mRemoteNG.Connection
|
||||
public event EventHandler<ConnectionsLoadedEventArgs> ConnectionsLoaded;
|
||||
public event EventHandler<ConnectionsSavedEventArgs> ConnectionsSaved;
|
||||
|
||||
private void RaiseConnectionsLoadedEvent(Optional<ConnectionTreeModel> previousTreeModel,
|
||||
ConnectionTreeModel newTreeModel,
|
||||
bool previousSourceWasDatabase,
|
||||
bool newSourceIsDatabase,
|
||||
string newSourcePath)
|
||||
private void RaiseConnectionsLoadedEvent(Optional<ConnectionTreeModel> previousTreeModel, ConnectionTreeModel newTreeModel, bool previousSourceWasDatabase, bool newSourceIsDatabase, string newSourcePath)
|
||||
{
|
||||
ConnectionsLoaded?.Invoke(this, new ConnectionsLoadedEventArgs(
|
||||
previousTreeModel,
|
||||
newTreeModel,
|
||||
previousSourceWasDatabase,
|
||||
newSourceIsDatabase,
|
||||
newSourcePath));
|
||||
ConnectionsLoaded?.Invoke(this, new ConnectionsLoadedEventArgs(previousTreeModel, newTreeModel, previousSourceWasDatabase, newSourceIsDatabase, newSourcePath));
|
||||
}
|
||||
|
||||
private void RaiseConnectionsSavedEvent(ConnectionTreeModel modelThatWasSaved,
|
||||
bool previouslyUsingDatabase,
|
||||
bool usingDatabase,
|
||||
string connectionFileName)
|
||||
private void RaiseConnectionsSavedEvent(ConnectionTreeModel modelThatWasSaved, bool previouslyUsingDatabase, bool usingDatabase, string connectionFileName)
|
||||
{
|
||||
ConnectionsSaved?.Invoke(this,
|
||||
new ConnectionsSavedEventArgs(modelThatWasSaved, previouslyUsingDatabase,
|
||||
usingDatabase,
|
||||
connectionFileName));
|
||||
ConnectionsSaved?.Invoke(this, new ConnectionsSavedEventArgs(modelThatWasSaved, previouslyUsingDatabase, usingDatabase, connectionFileName));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -28,9 +28,7 @@ namespace mRemoteNG.Connection
|
||||
var propertyFromSettings = typeof(TSource).GetProperty(propertyNameMutator(property.Name));
|
||||
if (propertyFromSettings == null)
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg,
|
||||
$"DefaultConInherit-LoadFrom: Could not load {property.Name}",
|
||||
true);
|
||||
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, $"DefaultConInherit-LoadFrom: Could not load {property.Name}", true);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -50,9 +48,7 @@ namespace mRemoteNG.Connection
|
||||
var localValue = property.GetValue(Instance, null);
|
||||
if (propertyFromSettings == null)
|
||||
{
|
||||
Runtime.MessageCollector?.AddMessage(Messages.MessageClass.ErrorMsg,
|
||||
$"DefaultConInherit-SaveTo: Could not load {property.Name}",
|
||||
true);
|
||||
Runtime.MessageCollector?.AddMessage(Messages.MessageClass.ErrorMsg, $"DefaultConInherit-SaveTo: Could not load {property.Name}", true);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
14
mRemoteNG/Connection/ExternalAddressProviderSelector.cs
Normal file
14
mRemoteNG/Connection/ExternalAddressProviderSelector.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using mRemoteNG.Resources.Language;
|
||||
using mRemoteNG.Tools;
|
||||
|
||||
namespace mRemoteNG.Connection
|
||||
{
|
||||
public enum ExternalAddressProvider
|
||||
{
|
||||
[LocalizedAttributes.LocalizedDescription(nameof(Language.EAPNone))]
|
||||
None = 0,
|
||||
|
||||
[LocalizedAttributes.LocalizedDescription(nameof(Language.EAPAmazonWebServices))]
|
||||
AmazonWebServices = 1
|
||||
}
|
||||
}
|
||||
14
mRemoteNG/Connection/ExternalCredentialProviderSelector.cs
Normal file
14
mRemoteNG/Connection/ExternalCredentialProviderSelector.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using mRemoteNG.Resources.Language;
|
||||
using mRemoteNG.Tools;
|
||||
|
||||
namespace mRemoteNG.Connection
|
||||
{
|
||||
public enum ExternalCredentialProvider
|
||||
{
|
||||
[LocalizedAttributes.LocalizedDescription(nameof(Language.ECPNone))]
|
||||
None = 0,
|
||||
|
||||
[LocalizedAttributes.LocalizedDescription(nameof(Language.ECPDelineaSecretServer))]
|
||||
DelineaSecretServer = 1
|
||||
}
|
||||
}
|
||||
@@ -80,11 +80,11 @@ namespace mRemoteNG.Connection.Protocol
|
||||
_process.Exited += ProcessExited;
|
||||
|
||||
_process.Start();
|
||||
_process.WaitForInputIdle(Settings.Default.MaxPuttyWaitTime * 1000);
|
||||
_process.WaitForInputIdle(Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000);
|
||||
|
||||
var startTicks = Environment.TickCount;
|
||||
while (_handle.ToInt32() == 0 &
|
||||
Environment.TickCount < startTicks + Settings.Default.MaxPuttyWaitTime * 1000)
|
||||
Environment.TickCount < startTicks + Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000)
|
||||
{
|
||||
_process.Refresh();
|
||||
if (_process.MainWindowTitle != "Default IME")
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace mRemoteNG.Connection.Protocol
|
||||
|
||||
public ConnectionInfo.Force Force { get; set; }
|
||||
|
||||
public readonly System.Timers.Timer tmrReconnect = new System.Timers.Timer(2000);
|
||||
public readonly System.Timers.Timer tmrReconnect = new System.Timers.Timer(5000);
|
||||
protected ReconnectGroup ReconnectGroup;
|
||||
|
||||
protected ProtocolBase(string name)
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace mRemoteNG.Connection.Protocol
|
||||
{
|
||||
case ProtocolType.RDP:
|
||||
var rdp = _rdpProtocolFactory.Build(connectionInfo.RdpVersion);
|
||||
rdp.LoadBalanceInfoUseUtf8 = Settings.Default.RdpLoadBalanceInfoUseUtf8;
|
||||
rdp.LoadBalanceInfoUseUtf8 = Properties.OptionsAdvancedPage.Default.RdpLoadBalanceInfoUseUtf8;
|
||||
return rdp;
|
||||
case ProtocolType.VNC:
|
||||
return new ProtocolVNC();
|
||||
|
||||
@@ -11,6 +11,7 @@ using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
using mRemoteNG.Properties;
|
||||
using mRemoteNG.Resources.Language;
|
||||
using System.IO;
|
||||
|
||||
// ReSharper disable ArrangeAccessorOwnerBody
|
||||
|
||||
@@ -56,6 +57,8 @@ namespace mRemoteNG.Connection.Protocol
|
||||
|
||||
public override bool Connect()
|
||||
{
|
||||
string optionalTemporaryPrivateKeyPath = ""; // path to ppk file instead of password. only temporary (extracted from credential vault).
|
||||
|
||||
try
|
||||
{
|
||||
_isPuttyNg = PuttyTypeDetector.GetPuttyType() == PuttyTypeDetector.PuttyType.PuttyNg;
|
||||
@@ -79,51 +82,70 @@ namespace mRemoteNG.Connection.Protocol
|
||||
|
||||
if (PuttyProtocol == Putty_Protocol.ssh)
|
||||
{
|
||||
var username = "";
|
||||
var password = "";
|
||||
|
||||
var username = InterfaceControl.Info?.Username ?? "";
|
||||
var password = InterfaceControl.Info?.Password ?? "";
|
||||
var domain = InterfaceControl.Info?.Domain ?? "";
|
||||
var UserViaAPI = InterfaceControl.Info?.UserViaAPI ?? "";
|
||||
string privatekey = "";
|
||||
|
||||
// access secret server api if necessary
|
||||
if (!string.IsNullOrEmpty(InterfaceControl.Info?.UserViaAPI))
|
||||
if (InterfaceControl.Info.ExternalCredentialProvider == ExternalCredentialProvider.DelineaSecretServer)
|
||||
{
|
||||
var domain = ""; // dummy
|
||||
try
|
||||
{
|
||||
ExternalConnectors.TSS.SecretServerInterface.FetchSecretFromServer("SSAPI:" + InterfaceControl.Info?.UserViaAPI, out username, out password, out domain);
|
||||
ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer($"{UserViaAPI}", out username, out password, out domain, out privatekey);
|
||||
|
||||
if (!string.IsNullOrEmpty(privatekey))
|
||||
{
|
||||
optionalTemporaryPrivateKeyPath = Path.GetTempFileName();
|
||||
File.WriteAllText(optionalTemporaryPrivateKeyPath, privatekey);
|
||||
FileInfo fileInfo = new FileInfo(optionalTemporaryPrivateKeyPath);
|
||||
fileInfo.Attributes = FileAttributes.Temporary;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Event_ErrorOccured(this, "Secret Server Interface Error: " + ex.Message, 0);
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(InterfaceControl.Info?.Username))
|
||||
|
||||
if (string.IsNullOrEmpty(username))
|
||||
{
|
||||
username = InterfaceControl.Info.Username;
|
||||
}
|
||||
else
|
||||
{
|
||||
// ReSharper disable once SwitchStatementMissingSomeCases
|
||||
switch (Settings.Default.EmptyCredentials)
|
||||
switch (Properties.OptionsCredentialsPage.Default.EmptyCredentials)
|
||||
{
|
||||
case "windows":
|
||||
username = Environment.UserName;
|
||||
break;
|
||||
case "custom" when !string.IsNullOrEmpty(Properties.OptionsCredentialsPage.Default.DefaultUsername):
|
||||
username = Properties.OptionsCredentialsPage.Default.DefaultUsername;
|
||||
break;
|
||||
case "custom":
|
||||
username = Settings.Default.DefaultUsername;
|
||||
|
||||
if (Properties.OptionsCredentialsPage.Default.ExternalCredentialProviderDefault == ExternalCredentialProvider.DelineaSecretServer)
|
||||
{
|
||||
try
|
||||
{
|
||||
ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer(
|
||||
$"{Properties.OptionsCredentialsPage.Default.UserViaAPIDefault}", out username, out password, out domain, out privatekey);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Event_ErrorOccured(this, "Secret Server Interface Error: " + ex.Message, 0);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(InterfaceControl.Info?.Password))
|
||||
if (string.IsNullOrEmpty(password) && !string.IsNullOrEmpty(optionalTemporaryPrivateKeyPath))
|
||||
{
|
||||
password = InterfaceControl.Info.Password;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Settings.Default.EmptyCredentials == "custom")
|
||||
if (Properties.OptionsCredentialsPage.Default.EmptyCredentials == "custom")
|
||||
{
|
||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||
password = cryptographyProvider.Decrypt(Settings.Default.DefaultPassword,
|
||||
Runtime.EncryptionKey);
|
||||
password = cryptographyProvider.Decrypt(Properties.OptionsCredentialsPage.Default.DefaultPassword, Runtime.EncryptionKey);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,6 +163,13 @@ namespace mRemoteNG.Connection.Protocol
|
||||
arguments.Add("-pw", password);
|
||||
}
|
||||
}
|
||||
|
||||
// use private key if specified
|
||||
if (!string.IsNullOrEmpty(optionalTemporaryPrivateKeyPath))
|
||||
{
|
||||
arguments.Add("-i", optionalTemporaryPrivateKeyPath);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
arguments.Add("-P", InterfaceControl.Info.Port.ToString());
|
||||
@@ -163,16 +192,15 @@ namespace mRemoteNG.Connection.Protocol
|
||||
PuttyProcess.Exited += ProcessExited;
|
||||
|
||||
PuttyProcess.Start();
|
||||
PuttyProcess.WaitForInputIdle(Settings.Default.MaxPuttyWaitTime * 1000);
|
||||
PuttyProcess.WaitForInputIdle(Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000);
|
||||
|
||||
var startTicks = Environment.TickCount;
|
||||
while (PuttyHandle.ToInt32() == 0 &
|
||||
Environment.TickCount < startTicks + Settings.Default.MaxPuttyWaitTime * 1000)
|
||||
Environment.TickCount < startTicks + Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000)
|
||||
{
|
||||
if (_isPuttyNg)
|
||||
{
|
||||
PuttyHandle = NativeMethods.FindWindowEx(
|
||||
InterfaceControl.Handle, new IntPtr(0), null, null);
|
||||
PuttyHandle = NativeMethods.FindWindowEx(InterfaceControl.Handle, new IntPtr(0), null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -192,14 +220,9 @@ namespace mRemoteNG.Connection.Protocol
|
||||
}
|
||||
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, Language.PuttyStuff, true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
string.Format(Language.PuttyHandle, PuttyHandle), true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
string.Format(Language.PuttyTitle, PuttyProcess.MainWindowTitle),
|
||||
true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
|
||||
string.Format(Language.PanelHandle,
|
||||
InterfaceControl.Parent.Handle), true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, string.Format(Language.PuttyHandle, PuttyHandle), true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, string.Format(Language.PuttyTitle, PuttyProcess.MainWindowTitle), true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, string.Format(Language.PanelHandle, InterfaceControl.Parent.Handle), true);
|
||||
|
||||
if (!string.IsNullOrEmpty(InterfaceControl.Info?.OpeningCommand))
|
||||
{
|
||||
@@ -214,11 +237,18 @@ namespace mRemoteNG.Connection.Protocol
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
Language.ConnectionFailed + Environment.NewLine +
|
||||
ex.Message);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.ConnectionFailed + Environment.NewLine + ex.Message);
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
// make sure to remove the private key file
|
||||
if (!string.IsNullOrEmpty(optionalTemporaryPrivateKeyPath))
|
||||
{
|
||||
System.Threading.Thread.Sleep(500);
|
||||
System.IO.File.Delete(optionalTemporaryPrivateKeyPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Focus()
|
||||
@@ -229,9 +259,7 @@ namespace mRemoteNG.Connection.Protocol
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg,
|
||||
Language.PuttyFocusFailed + Environment.NewLine + ex.Message,
|
||||
true);
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.PuttyFocusFailed + Environment.NewLine + ex.Message, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,9 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
Yes = 1,
|
||||
|
||||
[LocalizedAttributes.LocalizedDescription(nameof(Language.UseSmartCard))]
|
||||
SmartCard = 2
|
||||
SmartCard = 2,
|
||||
|
||||
[LocalizedAttributes.LocalizedDescription(nameof(Language.UseExternalCredentialProvider))]
|
||||
ExternalCredentialProvider = 3
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,8 @@ using mRemoteNG.UI.Forms;
|
||||
using mRemoteNG.UI.Tabs;
|
||||
using MSTSCLib;
|
||||
using mRemoteNG.Resources.Language;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
|
||||
using System.DirectoryServices.ActiveDirectory;
|
||||
|
||||
namespace mRemoteNG.Connection.Protocol.RDP
|
||||
{
|
||||
@@ -307,6 +309,16 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
{
|
||||
_rdpClient.AdvancedSettings7.EnableCredSspSupport = connectionInfo.UseCredSsp;
|
||||
}
|
||||
if(_rdpVersion >= Versions.RDC81)
|
||||
{
|
||||
if (connectionInfo.UseRestrictedAdmin)
|
||||
SetExtendedProperty("RestrictedLogon", true);
|
||||
else if (connectionInfo.UseRCG)
|
||||
{
|
||||
SetExtendedProperty("DisableCredentialsDelegation", true);
|
||||
SetExtendedProperty("RedirectedAuthentication", true);
|
||||
}
|
||||
}
|
||||
|
||||
SetUseConsoleSession();
|
||||
SetPort();
|
||||
@@ -372,8 +384,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
_rdpClient.TransportSettings.GatewayUsageMethod = (uint)connectionInfo.RDGatewayUsageMethod;
|
||||
_rdpClient.TransportSettings.GatewayHostname = connectionInfo.RDGatewayHostname;
|
||||
_rdpClient.TransportSettings.GatewayProfileUsageMethod = 1; // TSC_PROXY_PROFILE_MODE_EXPLICIT
|
||||
if (connectionInfo.RDGatewayUseConnectionCredentials ==
|
||||
RDGatewayUseConnectionCredentials.SmartCard)
|
||||
if (connectionInfo.RDGatewayUseConnectionCredentials == RDGatewayUseConnectionCredentials.SmartCard)
|
||||
{
|
||||
_rdpClient.TransportSettings.GatewayCredsSource = 1; // TSC_PROXY_CREDS_MODE_SMARTCARD
|
||||
}
|
||||
@@ -386,17 +397,36 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
_rdpClient.TransportSettings2.GatewayPassword = connectionInfo.Password;
|
||||
_rdpClient.TransportSettings2.GatewayDomain = connectionInfo?.Domain;
|
||||
}
|
||||
else if (connectionInfo.RDGatewayUseConnectionCredentials ==
|
||||
RDGatewayUseConnectionCredentials.SmartCard)
|
||||
else if (connectionInfo.RDGatewayUseConnectionCredentials == RDGatewayUseConnectionCredentials.SmartCard)
|
||||
{
|
||||
_rdpClient.TransportSettings2.GatewayCredSharing = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
_rdpClient.TransportSettings2.GatewayUsername = connectionInfo.RDGatewayUsername;
|
||||
_rdpClient.TransportSettings2.GatewayPassword = connectionInfo.RDGatewayPassword;
|
||||
_rdpClient.TransportSettings2.GatewayDomain = connectionInfo.RDGatewayDomain;
|
||||
_rdpClient.TransportSettings2.GatewayCredSharing = 0;
|
||||
|
||||
string gwu = connectionInfo.RDGatewayUsername;
|
||||
string gwp = connectionInfo.RDGatewayPassword;
|
||||
string gwd = connectionInfo.RDGatewayDomain;
|
||||
string pkey = "";
|
||||
|
||||
// access secret server api if necessary
|
||||
if (InterfaceControl.Info.RDGatewayExternalCredentialProvider == ExternalCredentialProvider.DelineaSecretServer)
|
||||
{
|
||||
try
|
||||
{
|
||||
string RDGUserViaAPI = InterfaceControl.Info.RDGatewayUserViaAPI;
|
||||
ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer($"{RDGUserViaAPI}", out gwu, out gwp, out gwd, out pkey);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Event_ErrorOccured(this, "Secret Server Interface Error: " + ex.Message, 0);
|
||||
}
|
||||
|
||||
}
|
||||
_rdpClient.TransportSettings2.GatewayUsername = gwu;
|
||||
_rdpClient.TransportSettings2.GatewayPassword = gwp;
|
||||
_rdpClient.TransportSettings2.GatewayDomain = gwd;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -463,13 +493,15 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
var userName = connectionInfo?.Username ?? "";
|
||||
var password = connectionInfo?.Password ?? "";
|
||||
var domain = connectionInfo?.Domain ?? "";
|
||||
var UserViaAPI = connectionInfo?.UserViaAPI ?? "";
|
||||
string pkey = "";
|
||||
|
||||
// access secret server api if necessary
|
||||
if (!string.IsNullOrEmpty(connectionInfo?.UserViaAPI))
|
||||
if (InterfaceControl.Info.ExternalCredentialProvider == ExternalCredentialProvider.DelineaSecretServer)
|
||||
{
|
||||
try
|
||||
{
|
||||
ExternalConnectors.TSS.SecretServerInterface.FetchSecretFromServer("SSAPI:" + connectionInfo?.UserViaAPI, out userName, out password, out domain);
|
||||
ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer($"{UserViaAPI}", out userName, out password, out domain, out pkey);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -480,13 +512,26 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
|
||||
if (string.IsNullOrEmpty(userName))
|
||||
{
|
||||
if (Settings.Default.EmptyCredentials == "windows")
|
||||
switch (Properties.OptionsCredentialsPage.Default.EmptyCredentials)
|
||||
{
|
||||
_rdpClient.UserName = Environment.UserName;
|
||||
}
|
||||
else if (Settings.Default.EmptyCredentials == "custom")
|
||||
{
|
||||
_rdpClient.UserName = Settings.Default.DefaultUsername;
|
||||
case "windows":
|
||||
_rdpClient.UserName = Environment.UserName;
|
||||
break;
|
||||
case "custom" when !string.IsNullOrEmpty(Properties.OptionsCredentialsPage.Default.DefaultUsername):
|
||||
_rdpClient.UserName = Properties.OptionsCredentialsPage.Default.DefaultUsername;
|
||||
break;
|
||||
case "custom":
|
||||
try
|
||||
{
|
||||
ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer(Properties.OptionsCredentialsPage.Default.UserViaAPIDefault, out userName, out password, out domain, out pkey);
|
||||
_rdpClient.UserName = userName;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Event_ErrorOccured(this, "Secret Server Interface Error: " + ex.Message, 0);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -496,13 +541,12 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
|
||||
if (string.IsNullOrEmpty(password))
|
||||
{
|
||||
if (Settings.Default.EmptyCredentials == "custom")
|
||||
if (Properties.OptionsCredentialsPage.Default.EmptyCredentials == "custom")
|
||||
{
|
||||
if (Settings.Default.DefaultPassword != "")
|
||||
if (Properties.OptionsCredentialsPage.Default.DefaultPassword != "")
|
||||
{
|
||||
var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
|
||||
_rdpClient.AdvancedSettings2.ClearTextPassword =
|
||||
cryptographyProvider.Decrypt(Settings.Default.DefaultPassword, Runtime.EncryptionKey);
|
||||
_rdpClient.AdvancedSettings2.ClearTextPassword = cryptographyProvider.Decrypt(Properties.OptionsCredentialsPage.Default.DefaultPassword, Runtime.EncryptionKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -513,14 +557,12 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
|
||||
if (string.IsNullOrEmpty(domain))
|
||||
{
|
||||
if (Settings.Default.EmptyCredentials == "windows")
|
||||
_rdpClient.Domain = Properties.OptionsCredentialsPage.Default.EmptyCredentials switch
|
||||
{
|
||||
_rdpClient.Domain = Environment.UserDomainName;
|
||||
}
|
||||
else if (Settings.Default.EmptyCredentials == "custom")
|
||||
{
|
||||
_rdpClient.Domain = Settings.Default.DefaultDomain;
|
||||
}
|
||||
"windows" => Environment.UserDomainName,
|
||||
"custom" => Properties.OptionsCredentialsPage.Default.DefaultDomain,
|
||||
_ => _rdpClient.Domain
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -728,7 +770,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
Event_Disconnected(this, reason, discReason);
|
||||
}
|
||||
|
||||
if (Settings.Default.ReconnectOnDisconnect)
|
||||
if (Properties.OptionsAdvancedPage.Default.ReconnectOnDisconnect)
|
||||
{
|
||||
ReconnectGroup = new ReconnectGroup();
|
||||
ReconnectGroup.CloseClicked += Event_ReconnectGroupCloseClicked;
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
protected set
|
||||
{
|
||||
base.SmartSize = value;
|
||||
ReconnectForResize();
|
||||
DoResizeClient();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
protected set
|
||||
{
|
||||
base.Fullscreen = value;
|
||||
ReconnectForResize();
|
||||
DoResizeClient();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,19 +50,19 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
|
||||
public override void Resize(object sender, EventArgs e)
|
||||
{
|
||||
if (DoResize() && _controlBeginningSize.IsEmpty)
|
||||
if (DoResizeControl() && _controlBeginningSize.IsEmpty)
|
||||
{
|
||||
ReconnectForResize();
|
||||
DoResizeClient();
|
||||
}
|
||||
base.Resize(sender, e);
|
||||
}
|
||||
|
||||
public override void ResizeEnd(object sender, EventArgs e)
|
||||
{
|
||||
DoResize();
|
||||
DoResizeControl();
|
||||
if (!(Control.Size == _controlBeginningSize))
|
||||
{
|
||||
ReconnectForResize();
|
||||
DoResizeClient();
|
||||
}
|
||||
_controlBeginningSize = Size.Empty;
|
||||
}
|
||||
@@ -72,7 +72,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
return new AxMsRdpClient8NotSafeForScripting();
|
||||
}
|
||||
|
||||
private void ReconnectForResize()
|
||||
private void DoResizeClient()
|
||||
{
|
||||
if (!loginComplete)
|
||||
return;
|
||||
@@ -94,8 +94,8 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
{
|
||||
var size = Fullscreen
|
||||
? Screen.FromControl(Control).Bounds.Size
|
||||
: Control.Size;
|
||||
RdpClient8.Reconnect((uint)size.Width, (uint)size.Height);
|
||||
: Control.Size;
|
||||
UpdateSessionDisplaySettings((uint)size.Width, (uint)size.Height);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -106,7 +106,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
}
|
||||
}
|
||||
|
||||
private bool DoResize()
|
||||
private bool DoResizeControl()
|
||||
{
|
||||
Control.Location = InterfaceControl.Location;
|
||||
// kmscode - this doesn't look right to me. But I'm not aware of any functionality issues with this currently...
|
||||
@@ -120,5 +120,10 @@ namespace mRemoteNG.Connection.Protocol.RDP
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void UpdateSessionDisplaySettings(uint width, uint height)
|
||||
{
|
||||
RdpClient8.Reconnect(width, height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,26 @@
|
||||
using System.Windows.Forms;
|
||||
using AxMSTSCLib;
|
||||
|
||||
namespace mRemoteNG.Connection.Protocol.RDP
|
||||
{
|
||||
public class RdpProtocol9 : RdpProtocol8
|
||||
{
|
||||
protected override RdpVersion RdpProtocolVersion => RdpVersion.Rdc9;
|
||||
|
||||
protected override AxHost CreateActiveXRdpClientControl()
|
||||
{
|
||||
return new AxMsRdpClient9NotSafeForScripting();
|
||||
}
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using AxMSTSCLib;
|
||||
using MSTSCLib;
|
||||
|
||||
namespace mRemoteNG.Connection.Protocol.RDP
|
||||
{
|
||||
public class RdpProtocol9 : RdpProtocol8
|
||||
{
|
||||
private MsRdpClient9NotSafeForScripting RdpClient9 =>
|
||||
(MsRdpClient9NotSafeForScripting)((AxHost)Control).GetOcx();
|
||||
|
||||
protected override RdpVersion RdpProtocolVersion => RdpVersion.Rdc9;
|
||||
|
||||
protected override AxHost CreateActiveXRdpClientControl()
|
||||
{
|
||||
return new AxMsRdpClient9NotSafeForScripting();
|
||||
}
|
||||
|
||||
protected override void UpdateSessionDisplaySettings(uint width, uint height)
|
||||
{
|
||||
RdpClient9.UpdateSessionDisplaySettings(width, height, width, height, 0, 1, 1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
448
mRemoteNG/Language/Language.Designer.cs
generated
448
mRemoteNG/Language/Language.Designer.cs
generated
@@ -222,6 +222,33 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Hidden.
|
||||
/// </summary>
|
||||
internal static string ACLPermissionsHidden {
|
||||
get {
|
||||
return ResourceManager.GetString("ACLPermissionsHidden", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to ReadOnly.
|
||||
/// </summary>
|
||||
internal static string ACLPermissionsReadOnly {
|
||||
get {
|
||||
return ResourceManager.GetString("ACLPermissionsReadOnly", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to WriteAllow.
|
||||
/// </summary>
|
||||
internal static string ACLPermissionsWriteAllow {
|
||||
get {
|
||||
return ResourceManager.GetString("ACLPermissionsWriteAllow", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Active Directory.
|
||||
/// </summary>
|
||||
@@ -376,7 +403,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Apply default inheritance ähnelt.
|
||||
/// Looks up a localized string similar to Apply default inheritance.
|
||||
/// </summary>
|
||||
internal static string ApplyDefaultInheritance {
|
||||
get {
|
||||
@@ -385,7 +412,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Apply inheritance to children ähnelt.
|
||||
/// Looks up a localized string similar to Apply inheritance to children.
|
||||
/// </summary>
|
||||
internal static string ApplyInheritanceToChildren {
|
||||
get {
|
||||
@@ -394,7 +421,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Arguments ähnelt.
|
||||
/// Looks up a localized string similar to Arguments.
|
||||
/// </summary>
|
||||
internal static string Arguments {
|
||||
get {
|
||||
@@ -528,6 +555,15 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Browse.
|
||||
/// </summary>
|
||||
internal static string btnBrowsePath {
|
||||
get {
|
||||
return ResourceManager.GetString("btnBrowsePath", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Default Inheritance.
|
||||
/// </summary>
|
||||
@@ -790,7 +826,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Colours.
|
||||
/// Looks up a localized string similar to Colors.
|
||||
/// </summary>
|
||||
internal static string Colors {
|
||||
get {
|
||||
@@ -1626,50 +1662,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
return ResourceManager.GetString("Domain", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to EC2InstanceId.
|
||||
/// </summary>
|
||||
internal static string EC2InstanceId
|
||||
{
|
||||
get
|
||||
{
|
||||
return ResourceManager.GetString("EC2InstanceId", resourceCulture);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to PropertyDescriptionEC2InstanceId.
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionEC2InstanceId
|
||||
{
|
||||
get
|
||||
{
|
||||
return ResourceManager.GetString("PropertyDescriptionEC2InstanceId", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to EC2InstanceId.
|
||||
/// </summary>
|
||||
internal static string EC2Region
|
||||
{
|
||||
get
|
||||
{
|
||||
return ResourceManager.GetString("EC2Region", resourceCulture);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to PropertyDescriptionEC2InstanceId.
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionEC2Region
|
||||
{
|
||||
get
|
||||
{
|
||||
return ResourceManager.GetString("PropertyDescriptionEC2Region", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Donate.
|
||||
/// </summary>
|
||||
@@ -1769,6 +1762,60 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to AmazonEC2.
|
||||
/// </summary>
|
||||
internal static string EAPAmazonWebServices {
|
||||
get {
|
||||
return ResourceManager.GetString("EAPAmazonWebServices", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to None.
|
||||
/// </summary>
|
||||
internal static string EAPNone {
|
||||
get {
|
||||
return ResourceManager.GetString("EAPNone", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to EC2 Instance Id.
|
||||
/// </summary>
|
||||
internal static string EC2InstanceId {
|
||||
get {
|
||||
return ResourceManager.GetString("EC2InstanceId", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to EC2 Region.
|
||||
/// </summary>
|
||||
internal static string EC2Region {
|
||||
get {
|
||||
return ResourceManager.GetString("EC2Region", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Delinea Secret Server.
|
||||
/// </summary>
|
||||
internal static string ECPDelineaSecretServer {
|
||||
get {
|
||||
return ResourceManager.GetString("ECPDelineaSecretServer", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to None.
|
||||
/// </summary>
|
||||
internal static string ECPNone {
|
||||
get {
|
||||
return ResourceManager.GetString("ECPNone", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Do you want to continue with no password?.
|
||||
/// </summary>
|
||||
@@ -2079,6 +2126,24 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to External Address Provider.
|
||||
/// </summary>
|
||||
internal static string ExternalAddressProvider {
|
||||
get {
|
||||
return ResourceManager.GetString("ExternalAddressProvider", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to External Credential Provider.
|
||||
/// </summary>
|
||||
internal static string ExternalCredentialProvider {
|
||||
get {
|
||||
return ResourceManager.GetString("ExternalCredentialProvider", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to External Tool.
|
||||
/// </summary>
|
||||
@@ -2160,6 +2225,24 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to File menu.
|
||||
/// </summary>
|
||||
internal static string FileMenu {
|
||||
get {
|
||||
return ResourceManager.GetString("FileMenu", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to File menu is hidded now. Press Alt button to peek.
|
||||
/// </summary>
|
||||
internal static string FileMenuWillBeHiddenNow {
|
||||
get {
|
||||
return ResourceManager.GetString("FileMenuWillBeHiddenNow", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Filename.
|
||||
/// </summary>
|
||||
@@ -2214,6 +2297,15 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Remote Desktop Manager Files (*.csv).
|
||||
/// </summary>
|
||||
internal static string FiltermRemoteRemoteDesktopManagerCSV {
|
||||
get {
|
||||
return ResourceManager.GetString("FiltermRemoteRemoteDesktopManagerCSV", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to mRemote XML Files (*.xml).
|
||||
/// </summary>
|
||||
@@ -2331,15 +2423,6 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Gateway.
|
||||
/// </summary>
|
||||
internal static string Gateway {
|
||||
get {
|
||||
return ResourceManager.GetString("Gateway", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to General.
|
||||
/// </summary>
|
||||
@@ -2691,6 +2774,69 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to ACL for user.
|
||||
/// </summary>
|
||||
internal static string lblACL {
|
||||
get {
|
||||
return ResourceManager.GetString("lblACL", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Backups for connection data.
|
||||
/// </summary>
|
||||
internal static string lblBackupEnable {
|
||||
get {
|
||||
return ResourceManager.GetString("lblBackupEnable", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Backup file name format.
|
||||
/// </summary>
|
||||
internal static string lblBackupNameFormat {
|
||||
get {
|
||||
return ResourceManager.GetString("lblBackupNameFormat", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Backup type.
|
||||
/// </summary>
|
||||
internal static string lblBackupType {
|
||||
get {
|
||||
return ResourceManager.GetString("lblBackupType", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Connection Backup Frequency.
|
||||
/// </summary>
|
||||
internal static string lblConnectionsBackupFrequency {
|
||||
get {
|
||||
return ResourceManager.GetString("lblConnectionsBackupFrequency", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Maximum number of backups.
|
||||
/// </summary>
|
||||
internal static string lblConnectionsBackupMaxCount {
|
||||
get {
|
||||
return ResourceManager.GetString("lblConnectionsBackupMaxCount", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select location for connection data backup folder.
|
||||
/// </summary>
|
||||
internal static string lblConnectionsBackupPath {
|
||||
get {
|
||||
return ResourceManager.GetString("lblConnectionsBackupPath", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to License.
|
||||
/// </summary>
|
||||
@@ -3188,7 +3334,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Opening Command.
|
||||
/// Looks up a localized string similar to OpeningCommand TODO.
|
||||
/// </summary>
|
||||
internal static string OpeningCommand {
|
||||
get {
|
||||
@@ -3295,6 +3441,15 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Page control in Options menu.
|
||||
/// </summary>
|
||||
internal static string PageСontrolInOptionsMenu {
|
||||
get {
|
||||
return ResourceManager.GetString("PageСontrolInOptionsMenu", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Panel.
|
||||
/// </summary>
|
||||
@@ -3557,7 +3712,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select the colour quality to be used..
|
||||
/// Looks up a localized string similar to Select the color quality to be used..
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionColors {
|
||||
get {
|
||||
@@ -3646,6 +3801,24 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to use this instance id to fetch public ip from aws ec2 instance.
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionEC2InstanceId {
|
||||
get {
|
||||
return ResourceManager.GetString("PropertyDescriptionEC2InstanceId", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to fetch aws instance info from this region.
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionEC2Region {
|
||||
get {
|
||||
return ResourceManager.GetString("PropertyDescriptionEC2Region", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select whether to use desktop composition or not..
|
||||
/// </summary>
|
||||
@@ -3673,6 +3846,24 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to External provider to retrieve host address from.
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionExternalAddressProvider {
|
||||
get {
|
||||
return ResourceManager.GetString("PropertyDescriptionExternalAddressProvider", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to External credential provider / vault to retrieve credentials from.
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionExternalCredentialProvider {
|
||||
get {
|
||||
return ResourceManager.GetString("PropertyDescriptionExternalCredentialProvider", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Select the external tool to be started..
|
||||
/// </summary>
|
||||
@@ -3755,7 +3946,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to A command to run on the remote server after successfully connecting..
|
||||
/// Looks up a localized string similar to Description of OpeningCommand TODO.
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionOpeningCommand {
|
||||
get {
|
||||
@@ -4077,18 +4268,25 @@ namespace mRemoteNG.Resources.Language {
|
||||
return ResourceManager.GetString("PropertyDescriptionUser1", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enter your username..
|
||||
/// Looks up a localized string similar to Use Remote Credential Guard to tunnel authentication on target back to source through the RDP channel..
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionUserViaAPI
|
||||
{
|
||||
get
|
||||
{
|
||||
return ResourceManager.GetString("PropertyDescriptionUserViaAPI", resourceCulture);
|
||||
internal static string PropertyDescriptionUseRCG {
|
||||
get {
|
||||
return ResourceManager.GetString("PropertyDescriptionUseRCG", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use restricted admin mode on the target host (local system context)..
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionUseRestrictedAdmin {
|
||||
get {
|
||||
return ResourceManager.GetString("PropertyDescriptionUseRestrictedAdmin", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enter your username..
|
||||
/// </summary>
|
||||
@@ -4098,6 +4296,15 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enter the ID of user data in external API (e.g. secret server). when used, leave username/password/domain fields empty.
|
||||
/// </summary>
|
||||
internal static string PropertyDescriptionUserViaAPI {
|
||||
get {
|
||||
return ResourceManager.GetString("PropertyDescriptionUserViaAPI", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use VM ID to connect to VM running on Hyper-V..
|
||||
/// </summary>
|
||||
@@ -4487,7 +4694,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 16777216 Colours (24-bit).
|
||||
/// Looks up a localized string similar to 16777216 Colors (24-bit).
|
||||
/// </summary>
|
||||
internal static string Rdp16777216Colors {
|
||||
get {
|
||||
@@ -4505,7 +4712,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 32768 Colours (15-bit).
|
||||
/// Looks up a localized string similar to 32768 Colors (15-bit).
|
||||
/// </summary>
|
||||
internal static string Rdp32768Colors {
|
||||
get {
|
||||
@@ -4514,7 +4721,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 16777216 Colours (32-bit).
|
||||
/// Looks up a localized string similar to 16777216 Colors (32-bit).
|
||||
/// </summary>
|
||||
internal static string Rdp4294967296Colors {
|
||||
get {
|
||||
@@ -4523,7 +4730,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 65536 Colours (16-bit).
|
||||
/// Looks up a localized string similar to 65536 Colors (16-bit).
|
||||
/// </summary>
|
||||
internal static string Rdp65536Colors {
|
||||
get {
|
||||
@@ -4649,7 +4856,16 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Gateway Domain.
|
||||
/// Looks up a localized string similar to RDP-Gateway.
|
||||
/// </summary>
|
||||
internal static string RDPGateway {
|
||||
get {
|
||||
return ResourceManager.GetString("RDPGateway", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to RDP-Gateway Domain.
|
||||
/// </summary>
|
||||
internal static string RdpGatewayDomain {
|
||||
get {
|
||||
@@ -4658,7 +4874,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Gateway Hostname.
|
||||
/// Looks up a localized string similar to RDP-Gateway Hostname.
|
||||
/// </summary>
|
||||
internal static string RdpGatewayHostname {
|
||||
get {
|
||||
@@ -4685,7 +4901,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Remote Desktop Gateway Password.
|
||||
/// Looks up a localized string similar to RDP-Gateway Password.
|
||||
/// </summary>
|
||||
internal static string RdpGatewayPassword {
|
||||
get {
|
||||
@@ -4694,7 +4910,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use Gateway.
|
||||
/// Looks up a localized string similar to Use RDP Gateway.
|
||||
/// </summary>
|
||||
internal static string RdpGatewayUsageMethod {
|
||||
get {
|
||||
@@ -4703,7 +4919,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Gateway Credentials.
|
||||
/// Looks up a localized string similar to RDP-Gateway Credentials.
|
||||
/// </summary>
|
||||
internal static string RdpGatewayUseConnectionCredentials {
|
||||
get {
|
||||
@@ -4712,7 +4928,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Gateway Username.
|
||||
/// Looks up a localized string similar to RDP-Gateway Username.
|
||||
/// </summary>
|
||||
internal static string RdpGatewayUsername {
|
||||
get {
|
||||
@@ -4990,15 +5206,6 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Refresh.
|
||||
/// </summary>
|
||||
internal static string Refresh {
|
||||
get {
|
||||
return ResourceManager.GetString("Refresh", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Refresh Screen (VNC).
|
||||
/// </summary>
|
||||
@@ -5316,6 +5523,15 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Show for user.
|
||||
/// </summary>
|
||||
internal static string ShowForUser {
|
||||
get {
|
||||
return ResourceManager.GetString("ShowForUser", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Show full connections file path in window title.
|
||||
/// </summary>
|
||||
@@ -6109,6 +6325,15 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use External Credential Provider.
|
||||
/// </summary>
|
||||
internal static string UseExternalCredentialProvider {
|
||||
get {
|
||||
return ResourceManager.GetString("UseExternalCredentialProvider", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to User.
|
||||
/// </summary>
|
||||
@@ -6118,6 +6343,24 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use Remote Credential Guard.
|
||||
/// </summary>
|
||||
internal static string UseRCG {
|
||||
get {
|
||||
return ResourceManager.GetString("UseRCG", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use Restricted Admin.
|
||||
/// </summary>
|
||||
internal static string UseRestrictedAdmin {
|
||||
get {
|
||||
return ResourceManager.GetString("UseRestrictedAdmin", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to User Field.
|
||||
/// </summary>
|
||||
@@ -6126,18 +6369,7 @@ namespace mRemoteNG.Resources.Language {
|
||||
return ResourceManager.GetString("UserField", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Username.
|
||||
/// </summary>
|
||||
internal static string UserViaAPI
|
||||
{
|
||||
get
|
||||
{
|
||||
return ResourceManager.GetString("UserViaAPI", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Username.
|
||||
/// </summary>
|
||||
@@ -6147,6 +6379,15 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to API User ID.
|
||||
/// </summary>
|
||||
internal static string UserViaAPI {
|
||||
get {
|
||||
return ResourceManager.GetString("UserViaAPI", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use the same username and password.
|
||||
/// </summary>
|
||||
@@ -6327,15 +6568,6 @@ namespace mRemoteNG.Resources.Language {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to WebView2 creation failed with exception.
|
||||
/// </summary>
|
||||
internal static string WebView2InitializationFailed {
|
||||
get {
|
||||
return ResourceManager.GetString("WebView2InitializationFailed", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Weekly.
|
||||
/// </summary>
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
<value>Poměr stran</value>
|
||||
</data>
|
||||
<data name="AutoSaveEvery" xml:space="preserve">
|
||||
<value>Automaticky ukládat každých:</value>
|
||||
<value>Automatické uložení v minutách (0 znamená vypnuto):</value>
|
||||
</data>
|
||||
<data name="AvailableVersion" xml:space="preserve">
|
||||
<value>Poslední verze</value>
|
||||
@@ -265,7 +265,7 @@
|
||||
<value>Pro spojení použít proxy server</value>
|
||||
</data>
|
||||
<data name="Username" xml:space="preserve">
|
||||
<value>Login</value>
|
||||
<value>Přihlašovací jméno</value>
|
||||
</data>
|
||||
<data name="WaitForExit" xml:space="preserve">
|
||||
<value>Čekat na logout</value>
|
||||
@@ -376,7 +376,7 @@
|
||||
<value>Protokol událostí připojen</value>
|
||||
</data>
|
||||
<data name="ConnectionEventConnectedDetail" xml:space="preserve">
|
||||
<value>Připojení k "{0}" přes "{1}" bylo provedeno uživatelem "{2}" (Popis: "{3}"; Login: "{4}")</value>
|
||||
<value>Připojení k "{0}" přes "{1}" bylo provedeno uživatelem "{2}" (Popis: "{3}"; Přihlašovací jméno: "{4}")</value>
|
||||
</data>
|
||||
<data name="ConnectionFailed" xml:space="preserve">
|
||||
<value>Připojení selhalo!</value>
|
||||
@@ -410,7 +410,7 @@ Otevírám nový prázdný soubor seznamu spojení.</value>
|
||||
<value>Nepovedlo se uložit soubor seznamu spojení "{0}"!</value>
|
||||
</data>
|
||||
<data name="ConnectNoCredentials" xml:space="preserve">
|
||||
<value>Připojit bez loginu</value>
|
||||
<value>Připojit bez přihlašovacích údajů</value>
|
||||
</data>
|
||||
<data name="ConnectToConsoleSession" xml:space="preserve">
|
||||
<value>Připojit k otevřenému sezení konzole</value>
|
||||
@@ -455,7 +455,7 @@ Otevírám nový prázdný soubor seznamu spojení.</value>
|
||||
<value>Přejete si pokračovat bez hesla?</value>
|
||||
</data>
|
||||
<data name="EmptyUsernamePasswordDomainFields" xml:space="preserve">
|
||||
<value>Pro prázdná políčka Login, Heslo nebo Doména použít:</value>
|
||||
<value>Pro prázdná políčka Přihlašovací jméno, Heslo nebo Doména použít:</value>
|
||||
</data>
|
||||
<data name="EncryptCompleteConnectionFile" xml:space="preserve">
|
||||
<value>Zakódovat celý soubor seznamu připojení</value>
|
||||
@@ -593,7 +593,7 @@ Otevírám nový prázdný soubor seznamu spojení.</value>
|
||||
<value>Spojení HTTP selhalo!</value>
|
||||
</data>
|
||||
<data name="HttpConnectionFailed" xml:space="preserve">
|
||||
<value>Nezdařilo se vytvoření noebého spojení HTTP!</value>
|
||||
<value>Nezdařilo se vytvoření nového spojení HTTP!</value>
|
||||
</data>
|
||||
<data name="HttpDocumentTileChangeFailed" xml:space="preserve">
|
||||
<value>Změna nadpisu dokumentu HTTP selhala!</value>
|
||||
@@ -740,7 +740,7 @@ Otevírám nový prázdný soubor seznamu spojení.</value>
|
||||
<value>Klonovat záložku tabu</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Exit</value>
|
||||
<value>Ukončit</value>
|
||||
</data>
|
||||
<data name="ExternalToolsToolbar" xml:space="preserve">
|
||||
<value>Nástrojová lišta externích nástrojů</value>
|
||||
@@ -1002,7 +1002,7 @@ Pokud k takové chybě dojde, prosím vytvořte nový soubor se seznamem spojen
|
||||
<value>Pokud se využívá v externím nástroji, zadejte sem MAC adresu vzdáleného hostitele.</value>
|
||||
</data>
|
||||
<data name="PropertyDescriptionName" xml:space="preserve">
|
||||
<value>Toto jméno bude zobrazeno ve stromě seznamu spojení a jejich složek.</value>
|
||||
<value>Toto jméno bude zobrazeno v seznamu spojení a jejich složek.</value>
|
||||
</data>
|
||||
<data name="PropertyDescriptionPanel" xml:space="preserve">
|
||||
<value>Zadaný název určí panel, ve kterém se má spojení otevřít.</value>
|
||||
@@ -1149,7 +1149,7 @@ Pokud k takové chybě dojde, prosím vytvořte nový soubor se seznamem spojen
|
||||
<value>Adresa MAC</value>
|
||||
</data>
|
||||
<data name="Name" xml:space="preserve">
|
||||
<value>Jméno</value>
|
||||
<value>Název</value>
|
||||
</data>
|
||||
<data name="Panel" xml:space="preserve">
|
||||
<value>Panel</value>
|
||||
@@ -1179,7 +1179,7 @@ Pokud k takové chybě dojde, prosím vytvořte nový soubor se seznamem spojen
|
||||
<value>Přihl. údaje brány</value>
|
||||
</data>
|
||||
<data name="RdpGatewayUsername" xml:space="preserve">
|
||||
<value>Login brány</value>
|
||||
<value>Přihlašovací jméno brány</value>
|
||||
</data>
|
||||
<data name="DiskDrives" xml:space="preserve">
|
||||
<value>Připojit lok. disky</value>
|
||||
@@ -1227,7 +1227,7 @@ Pokud k takové chybě dojde, prosím vytvořte nový soubor se seznamem spojen
|
||||
<value>Typ proxy</value>
|
||||
</data>
|
||||
<data name="ProxyUsername" xml:space="preserve">
|
||||
<value>Login k proxy</value>
|
||||
<value>Přihlašovací jméno k proxy</value>
|
||||
</data>
|
||||
<data name="ProtocolEventDisconnected" xml:space="preserve">
|
||||
<value>Událost prokolu Odpojeno.
|
||||
@@ -1497,7 +1497,7 @@ Zpráva:
|
||||
<value>V názvu okna zobrazovat úplnou cestu k souboru seznamu spojení</value>
|
||||
</data>
|
||||
<data name="ShowLogonInfoOnTabs" xml:space="preserve">
|
||||
<value>Zobrazovat v názvu záložek (tabech) informace o loginu</value>
|
||||
<value>Zobrazovat v názvu záložek (tabech) informace o uživateli</value>
|
||||
</data>
|
||||
<data name="ShowProtocolOnTabs" xml:space="preserve">
|
||||
<value>Zobrazovat v názvu záložek (tabech) protokol (typ spojení)</value>
|
||||
@@ -1648,7 +1648,7 @@ mRemoteNG se nyní ukončí a zahájí instalaci.</value>
|
||||
<value>Použít čipovou kartu</value>
|
||||
</data>
|
||||
<data name="UseSQLServer" xml:space="preserve">
|
||||
<value>Použít SQL Server ke stažení && uloženho seznamu spojení</value>
|
||||
<value>Použít SQL Server ke stažení && uloženého seznamu spojení</value>
|
||||
</data>
|
||||
<data name="Version" xml:space="preserve">
|
||||
<value>Verze</value>
|
||||
@@ -1804,4 +1804,81 @@ mRemoteNG se nyní ukončí a zahájí instalaci.</value>
|
||||
+
|
||||
+ <data name="AssignedCredential" xml:space="preserve">
|
||||
<value>Přiřazené přihlašovací informace</value>
|
||||
</data></root>
|
||||
</data>
|
||||
<data name="StartMinimized" xml:space="preserve">
|
||||
<value>Po spuštění minimalizovat</value>
|
||||
</data><data name="CreateEmptyPanelOnStartUp" xml:space="preserve">
|
||||
<value>Otevřít prázdný panel při startu aplikace</value>
|
||||
</data>
|
||||
<data name="IdentifyQuickConnectTabs" xml:space="preserve">
|
||||
<value>Zavřít záložku dvojklikem na ní</value>
|
||||
</data>
|
||||
<data name="CloseToSysTray" xml:space="preserve">
|
||||
<value>Zavřít do oznamovací oblasti</value>
|
||||
</data>
|
||||
<data name="OptionsThemeNewThemeCaption" xml:space="preserve">
|
||||
<value>Nový název šablony</value>
|
||||
</data>
|
||||
<data name="OptionsThemeNewThemeText" xml:space="preserve">
|
||||
<value>Zadejte nový název šablony</value>
|
||||
</data>
|
||||
<data name="OptionsThemeNewThemeError" xml:space="preserve">
|
||||
<value>Nepodařilo se vytvořit šablonu, buď již existuje šablona se stejným názvem nebo vámi zadaný název obsahuje speciální znaky.</value>
|
||||
</data>
|
||||
<data name="SetHostnameLikeDisplayNameNewConnection" xml:space="preserve">
|
||||
<value>Při vytváření nového připojení nastaví stejný název zobrazení jako je název počítače</value>
|
||||
</data>
|
||||
<data name="RdpReconnectionCount" xml:space="preserve">
|
||||
<value>Počet opětovných připojení k RDP</value>
|
||||
</data>
|
||||
<data name="RdpConnectionTimeout" xml:space="preserve">
|
||||
<value>Časová prodleva připojení k RDP</value>
|
||||
</data>
|
||||
<data name="WhenClosingConnections" xml:space="preserve">
|
||||
<value>Když se ukončí připojení:</value>
|
||||
</data>
|
||||
<data name="WarnMeWhenClosingConnections" xml:space="preserve">
|
||||
<value>Upozornit mě na ukončení připojení</value>
|
||||
</data>
|
||||
<data name="WarnMeOnlyWhenClosingMultipleConnections" xml:space="preserve">
|
||||
<value>Upozornit mě pouze při ukončení několika připojení</value>
|
||||
</data>
|
||||
<data name="WarnMeOnlyWhenExitingProgram" xml:space="preserve">
|
||||
<value>Upozornit mě pouze při ukončení programu</value>
|
||||
</data>
|
||||
<data name="DoNotWarnMeWhenClosingConnections" xml:space="preserve">
|
||||
<value>Neupozorňovat na ukončení připojení</value>
|
||||
</data>
|
||||
<data name="SaveConnectionsAfterEveryEdit" xml:space="preserve">
|
||||
<value>Uložit připojení při každé úpravě</value>
|
||||
</data>
|
||||
<data name="StartFullScreen" xml:space="preserve">
|
||||
<value>Při spuštění zobrazit na celou obrazovku</value>
|
||||
</data>
|
||||
<data name="FilterSearchMatchesInConnectionTree" xml:space="preserve">
|
||||
<value>Filtrovat shody vyhledávání v seznamu připojení</value>
|
||||
</data>
|
||||
<data name="ReconnectToPreviouslyOpenedSessionsOnStartup" xml:space="preserve">
|
||||
<value>Obnovit dříve spuštěná připojení po startu</value>
|
||||
</data>
|
||||
<data name="SaveConnectionsOnExit" xml:space="preserve">
|
||||
<value>Uložit připojení při ukončení programu</value>
|
||||
</data>
|
||||
<data name="PlaceSearchBarAboveConnectionTree" xml:space="preserve">
|
||||
<value>Umístit vyhledávací pole nad seznam připojení</value>
|
||||
</data>
|
||||
<data name="TrackActiveConnectionInTheConnectionTree" xml:space="preserve">
|
||||
<value>Označovat aktivní připojení v seznamu</value>
|
||||
</data>
|
||||
<data name="DoNotTrimUsername" xml:space="preserve">
|
||||
<value>Nezkracovat uživatelské jméno</value>
|
||||
</data>
|
||||
<data name="AutoSaveInMinutes" xml:space="preserve">
|
||||
<value>Kliknutím na již otevřené připojení v seznamu otevře jeho záložku</value>
|
||||
</data>
|
||||
<data name="LoadBalanceInfoUseUtf8" xml:space="preserve">
|
||||
<value>Použít kódování UTF8 pro vlastnost RDP "Load Balance Info"</value>
|
||||
</data>
|
||||
<data name="TestConnection" xml:space="preserve">
|
||||
<value>Test spojení</value>
|
||||
</data></root>
|
||||
|
||||
@@ -112,10 +112,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="About" xml:space="preserve">
|
||||
<value>About</value>
|
||||
@@ -231,8 +231,8 @@
|
||||
<data name="Display" xml:space="preserve">
|
||||
<value>Display</value>
|
||||
</data>
|
||||
<data name="Gateway" xml:space="preserve">
|
||||
<value>Gateway</value>
|
||||
<data name="RDPGateway" xml:space="preserve">
|
||||
<value>RDP-Gateway</value>
|
||||
</data>
|
||||
<data name="Miscellaneous" xml:space="preserve">
|
||||
<value>Miscellaneous</value>
|
||||
@@ -247,7 +247,7 @@
|
||||
<value>Check failed!</value>
|
||||
</data>
|
||||
<data name="CheckboxAutomaticReconnect" xml:space="preserve">
|
||||
<value>Automatically try to reconnect when disconnected from server (RDP && ICA only)</value>
|
||||
<value>Display reconnection dialog when disconnected from server (RDP && ICA only)</value>
|
||||
</data>
|
||||
<data name="CheckboxDoNotShowThisMessageAgain" xml:space="preserve">
|
||||
<value>Do not show this message again.</value>
|
||||
@@ -1086,6 +1086,12 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<data name="PropertyDescriptionUseCredSsp" xml:space="preserve">
|
||||
<value>Use the Credential Security Support Provider (CredSSP) for authentication if it is available.</value>
|
||||
</data>
|
||||
<data name="PropertyDescriptionUseRestrictedAdmin" xml:space="preserve">
|
||||
<value>Use restricted admin mode on the target host (local system context).</value>
|
||||
</data>
|
||||
<data name="PropertyDescriptionUseRCG" xml:space="preserve">
|
||||
<value>Use Remote Credential Guard to tunnel authentication on target back to source through the RDP channel.</value>
|
||||
</data>
|
||||
<data name="PropertyDescriptionUser1" xml:space="preserve">
|
||||
<value>Feel free to enter any information you need here.</value>
|
||||
</data>
|
||||
@@ -1186,22 +1192,22 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<value>PuTTY Session</value>
|
||||
</data>
|
||||
<data name="RdpGatewayDomain" xml:space="preserve">
|
||||
<value>Gateway Domain</value>
|
||||
<value>RDP-Gateway Domain</value>
|
||||
</data>
|
||||
<data name="RdpGatewayHostname" xml:space="preserve">
|
||||
<value>Gateway Hostname</value>
|
||||
<value>RDP-Gateway Hostname</value>
|
||||
</data>
|
||||
<data name="RdpGatewayPassword" xml:space="preserve">
|
||||
<value>Remote Desktop Gateway Password</value>
|
||||
<value>RDP-Gateway Password</value>
|
||||
</data>
|
||||
<data name="RdpGatewayUsageMethod" xml:space="preserve">
|
||||
<value>Use Gateway</value>
|
||||
<value>Use RDP Gateway</value>
|
||||
</data>
|
||||
<data name="RdpGatewayUseConnectionCredentials" xml:space="preserve">
|
||||
<value>Gateway Credentials</value>
|
||||
<value>RDP-Gateway Credentials</value>
|
||||
</data>
|
||||
<data name="RdpGatewayUsername" xml:space="preserve">
|
||||
<value>Gateway Username</value>
|
||||
<value>RDP-Gateway Username</value>
|
||||
</data>
|
||||
<data name="DiskDrives" xml:space="preserve">
|
||||
<value>Disk Drives</value>
|
||||
@@ -1239,6 +1245,12 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<data name="UseCredSsp" xml:space="preserve">
|
||||
<value>Use CredSSP</value>
|
||||
</data>
|
||||
<data name="UseRestrictedAdmin" xml:space="preserve">
|
||||
<value>Use Restricted Admin</value>
|
||||
</data>
|
||||
<data name="UseRCG" xml:space="preserve">
|
||||
<value>Use Remote Credential Guard</value>
|
||||
</data>
|
||||
<data name="UserField" xml:space="preserve">
|
||||
<value>User Field</value>
|
||||
</data>
|
||||
@@ -1355,7 +1367,7 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<value>Couldn't create RDP control, please check mRemoteNG requirements.</value>
|
||||
</data>
|
||||
<data name="DisableCursorBlinking" xml:space="preserve">
|
||||
<value>Disable Cursor blinking</value>
|
||||
<value>Disable Cursor Blinking</value>
|
||||
</data>
|
||||
<data name="DisableCursorShadow" xml:space="preserve">
|
||||
<value>Disable Cursor Shadow</value>
|
||||
@@ -2188,10 +2200,10 @@ Nightly Channel includes Alphas, Betas & Release Candidates.</value>
|
||||
<comment>https://docs.microsoft.com/en-us/windows/win32/termserv/imstscsecuredsettings-workdir</comment>
|
||||
</data>
|
||||
<data name="OpeningCommand" xml:space="preserve">
|
||||
<value>TODO</value>
|
||||
<value>OpeningCommand TODO</value>
|
||||
</data>
|
||||
<data name="PropertyDescriptionOpeningCommand" xml:space="preserve">
|
||||
<value>TODO</value>
|
||||
<value>Description of OpeningCommand TODO</value>
|
||||
</data>
|
||||
<data name="RedirectDrives" xml:space="preserve">
|
||||
<value>Disk Drives</value>
|
||||
@@ -2223,4 +2235,85 @@ Nightly Channel includes Alphas, Betas & Release Candidates.</value>
|
||||
<data name="PropertyDescriptionEC2Region" xml:space="preserve">
|
||||
<value>fetch aws instance info from this region</value>
|
||||
</data>
|
||||
<data name="ACLPermissionsHidden" xml:space="preserve">
|
||||
<value>Hidden</value>
|
||||
<comment>Permission then option will be hide completly from user</comment>
|
||||
</data>
|
||||
<data name="ACLPermissionsReadOnly" xml:space="preserve">
|
||||
<value>ReadOnly</value>
|
||||
<comment>Permission then option is visible but user can't modify it</comment>
|
||||
</data>
|
||||
<data name="ACLPermissionsWriteAllow" xml:space="preserve">
|
||||
<value>WriteAllow</value>
|
||||
<comment>Permission then user could modify an option value</comment>
|
||||
</data>
|
||||
<data name="lblConnectionsBackupPath" xml:space="preserve">
|
||||
<value>Select location for connection data backup folder</value>
|
||||
</data>
|
||||
<data name="btnBrowsePath" xml:space="preserve">
|
||||
<value>Browse</value>
|
||||
</data>
|
||||
<data name="lblACL" xml:space="preserve">
|
||||
<value>ACL for user</value>
|
||||
</data>
|
||||
<data name="lblBackupEnable" xml:space="preserve">
|
||||
<value>Backups for connection data</value>
|
||||
</data>
|
||||
<data name="lblBackupNameFormat" xml:space="preserve">
|
||||
<value>Backup file name format</value>
|
||||
</data>
|
||||
<data name="lblBackupType" xml:space="preserve">
|
||||
<value>Backup type</value>
|
||||
</data>
|
||||
<data name="lblConnectionsBackupFrequency" xml:space="preserve">
|
||||
<value>Connection Backup Frequency</value>
|
||||
</data>
|
||||
<data name="lblConnectionsBackupMaxCount" xml:space="preserve">
|
||||
<value>Maximum number of backups</value>
|
||||
</data>
|
||||
<data name="PageСontrolInOptionsMenu" xml:space="preserve">
|
||||
<value>Page control in Options menu</value>
|
||||
</data>
|
||||
<data name="ShowForUser" xml:space="preserve">
|
||||
<value>Show for user</value>
|
||||
</data>
|
||||
<data name="FiltermRemoteRemoteDesktopManagerCSV" xml:space="preserve">
|
||||
<value>Remote Desktop Manager Files (*.csv)</value>
|
||||
</data>
|
||||
<data name="FileMenu" xml:space="preserve">
|
||||
<value>File menu</value>
|
||||
</data>
|
||||
<data name="FileMenuWillBeHiddenNow" xml:space="preserve">
|
||||
<value>File menu is hidded now. Press Alt button to peek</value>
|
||||
</data>
|
||||
<data name="ECPDelineaSecretServer" xml:space="preserve">
|
||||
<value>Delinea Secret Server</value>
|
||||
</data>
|
||||
<data name="ECPNone" xml:space="preserve">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="EAPAmazonWebServices" xml:space="preserve">
|
||||
<value>AmazonEC2</value>
|
||||
</data>
|
||||
<data name="EAPNone" xml:space="preserve">
|
||||
<value>None</value>
|
||||
</data>
|
||||
<data name="ExternalCredentialProvider" xml:space="preserve">
|
||||
<value>External Credential Provider</value>
|
||||
</data>
|
||||
<data name="PropertyDescriptionExternalCredentialProvider" xml:space="preserve">
|
||||
<value>External credential provider / vault to retrieve credentials from</value>
|
||||
</data>
|
||||
<data name="PropertyDescriptionExternalAddressProvider" xml:space="preserve">
|
||||
<value>External provider to retrieve host address from</value>
|
||||
</data>
|
||||
<data name="ExternalAddressProvider" xml:space="preserve">
|
||||
<value>External Address Provider</value>
|
||||
</data>
|
||||
<data name="UseExternalCredentialProvider" xml:space="preserve">
|
||||
<value>Use External Credential Provider</value>
|
||||
</data>
|
||||
<data name="CheckboxNoReconnect" xml:space="preserve">
|
||||
<value>Automatically try to reconnect when disconnected from server (RDP && ICA only)</value>
|
||||
</data>
|
||||
</root>
|
||||
2175
mRemoteNG/Language/Language.sv-SE.resx
Normal file
2175
mRemoteNG/Language/Language.sv-SE.resx
Normal file
File diff suppressed because it is too large
Load Diff
@@ -6,26 +6,26 @@ namespace mRemoteNG.Messages.MessageFilteringOptions
|
||||
{
|
||||
public bool AllowDebugMessages
|
||||
{
|
||||
get => Settings.Default.TextLogMessageWriterWriteDebugMsgs;
|
||||
set => Settings.Default.TextLogMessageWriterWriteDebugMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.TextLogMessageWriterWriteDebugMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.TextLogMessageWriterWriteDebugMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowInfoMessages
|
||||
{
|
||||
get => Settings.Default.TextLogMessageWriterWriteInfoMsgs;
|
||||
set => Settings.Default.TextLogMessageWriterWriteInfoMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.TextLogMessageWriterWriteInfoMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.TextLogMessageWriterWriteInfoMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowWarningMessages
|
||||
{
|
||||
get => Settings.Default.TextLogMessageWriterWriteWarningMsgs;
|
||||
set => Settings.Default.TextLogMessageWriterWriteWarningMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.TextLogMessageWriterWriteWarningMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.TextLogMessageWriterWriteWarningMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowErrorMessages
|
||||
{
|
||||
get => Settings.Default.TextLogMessageWriterWriteErrorMsgs;
|
||||
set => Settings.Default.TextLogMessageWriterWriteErrorMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.TextLogMessageWriterWriteErrorMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.TextLogMessageWriterWriteErrorMsgs = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,26 +6,26 @@ namespace mRemoteNG.Messages.MessageFilteringOptions
|
||||
{
|
||||
public bool AllowDebugMessages
|
||||
{
|
||||
get => Settings.Default.NotificationPanelWriterWriteDebugMsgs;
|
||||
set => Settings.Default.NotificationPanelWriterWriteDebugMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.NotificationPanelWriterWriteDebugMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.NotificationPanelWriterWriteDebugMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowInfoMessages
|
||||
{
|
||||
get => Settings.Default.NotificationPanelWriterWriteInfoMsgs;
|
||||
set => Settings.Default.NotificationPanelWriterWriteInfoMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.NotificationPanelWriterWriteInfoMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.NotificationPanelWriterWriteInfoMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowWarningMessages
|
||||
{
|
||||
get => Settings.Default.NotificationPanelWriterWriteWarningMsgs;
|
||||
set => Settings.Default.NotificationPanelWriterWriteWarningMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.NotificationPanelWriterWriteWarningMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.NotificationPanelWriterWriteWarningMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowErrorMessages
|
||||
{
|
||||
get => Settings.Default.NotificationPanelWriterWriteErrorMsgs;
|
||||
set => Settings.Default.NotificationPanelWriterWriteErrorMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.NotificationPanelWriterWriteErrorMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.NotificationPanelWriterWriteErrorMsgs = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,20 +12,20 @@ namespace mRemoteNG.Messages.MessageFilteringOptions
|
||||
|
||||
public bool AllowInfoMessages
|
||||
{
|
||||
get => Settings.Default.SwitchToMCOnInformation;
|
||||
set => Settings.Default.SwitchToMCOnInformation = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.SwitchToMCOnInformation;
|
||||
set => Properties.OptionsNotificationsPage.Default.SwitchToMCOnInformation = value;
|
||||
}
|
||||
|
||||
public bool AllowWarningMessages
|
||||
{
|
||||
get => Settings.Default.SwitchToMCOnWarning;
|
||||
set => Settings.Default.SwitchToMCOnWarning = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.SwitchToMCOnWarning;
|
||||
set => Properties.OptionsNotificationsPage.Default.SwitchToMCOnWarning = value;
|
||||
}
|
||||
|
||||
public bool AllowErrorMessages
|
||||
{
|
||||
get => Settings.Default.SwitchToMCOnError;
|
||||
set => Settings.Default.SwitchToMCOnError = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.SwitchToMCOnError;
|
||||
set => Properties.OptionsNotificationsPage.Default.SwitchToMCOnError = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,26 +6,26 @@ namespace mRemoteNG.Messages.MessageFilteringOptions
|
||||
{
|
||||
public bool AllowDebugMessages
|
||||
{
|
||||
get => Settings.Default.PopupMessageWriterWriteDebugMsgs;
|
||||
set => Settings.Default.PopupMessageWriterWriteDebugMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.PopupMessageWriterWriteDebugMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.PopupMessageWriterWriteDebugMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowInfoMessages
|
||||
{
|
||||
get => Settings.Default.PopupMessageWriterWriteInfoMsgs;
|
||||
set => Settings.Default.PopupMessageWriterWriteInfoMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.PopupMessageWriterWriteInfoMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.PopupMessageWriterWriteInfoMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowWarningMessages
|
||||
{
|
||||
get => Settings.Default.PopupMessageWriterWriteWarningMsgs;
|
||||
set => Settings.Default.PopupMessageWriterWriteWarningMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.PopupMessageWriterWriteWarningMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.PopupMessageWriterWriteWarningMsgs = value;
|
||||
}
|
||||
|
||||
public bool AllowErrorMessages
|
||||
{
|
||||
get => Settings.Default.PopupMessageWriterWriteErrorMsgs;
|
||||
set => Settings.Default.PopupMessageWriterWriteErrorMsgs = value;
|
||||
get => Properties.OptionsNotificationsPage.Default.PopupMessageWriterWriteErrorMsgs;
|
||||
set => Properties.OptionsNotificationsPage.Default.PopupMessageWriterWriteErrorMsgs = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
158
mRemoteNG/Properties/App.Designer.cs
generated
Normal file
158
mRemoteNG/Properties/App.Designer.cs
generated
Normal file
@@ -0,0 +1,158 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
|
||||
internal sealed partial class App : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static App defaultInstance = ((App)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new App())));
|
||||
|
||||
public static App Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
|
||||
public global::System.Drawing.Point MainFormLocation {
|
||||
get {
|
||||
return ((global::System.Drawing.Point)(this["MainFormLocation"]));
|
||||
}
|
||||
set {
|
||||
this["MainFormLocation"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
|
||||
public global::System.Drawing.Size MainFormSize {
|
||||
get {
|
||||
return ((global::System.Drawing.Size)(this["MainFormSize"]));
|
||||
}
|
||||
set {
|
||||
this["MainFormSize"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("Normal")]
|
||||
public global::System.Windows.Forms.FormWindowState MainFormState {
|
||||
get {
|
||||
return ((global::System.Windows.Forms.FormWindowState)(this["MainFormState"]));
|
||||
}
|
||||
set {
|
||||
this["MainFormState"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
|
||||
public global::System.Drawing.Size MainFormRestoreSize {
|
||||
get {
|
||||
return ((global::System.Drawing.Size)(this["MainFormRestoreSize"]));
|
||||
}
|
||||
set {
|
||||
this["MainFormRestoreSize"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
|
||||
public global::System.Drawing.Point MainFormRestoreLocation {
|
||||
get {
|
||||
return ((global::System.Drawing.Point)(this["MainFormRestoreLocation"]));
|
||||
}
|
||||
set {
|
||||
this["MainFormRestoreLocation"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool MainFormKiosk {
|
||||
get {
|
||||
return ((bool)(this["MainFormKiosk"]));
|
||||
}
|
||||
set {
|
||||
this["MainFormKiosk"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("1")]
|
||||
public string StartOnScreen {
|
||||
get {
|
||||
return ((string)(this["StartOnScreen"]));
|
||||
}
|
||||
set {
|
||||
this["StartOnScreen"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool FirstStart {
|
||||
get {
|
||||
return ((bool)(this["FirstStart"]));
|
||||
}
|
||||
set {
|
||||
this["FirstStart"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool ResetPanels {
|
||||
get {
|
||||
return ((bool)(this["ResetPanels"]));
|
||||
}
|
||||
set {
|
||||
this["ResetPanels"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool ResetToolbars {
|
||||
get {
|
||||
return ((bool)(this["ResetToolbars"]));
|
||||
}
|
||||
set {
|
||||
this["ResetToolbars"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool DoUpgrade {
|
||||
get {
|
||||
return ((bool)(this["DoUpgrade"]));
|
||||
}
|
||||
set {
|
||||
this["DoUpgrade"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
39
mRemoteNG/Properties/App.settings
Normal file
39
mRemoteNG/Properties/App.settings
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="App">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="MainFormLocation" Type="System.Drawing.Point" Scope="User">
|
||||
<Value Profile="(Default)">0, 0</Value>
|
||||
</Setting>
|
||||
<Setting Name="MainFormSize" Type="System.Drawing.Size" Scope="User">
|
||||
<Value Profile="(Default)">0, 0</Value>
|
||||
</Setting>
|
||||
<Setting Name="MainFormState" Type="System.Windows.Forms.FormWindowState" Scope="User">
|
||||
<Value Profile="(Default)">Normal</Value>
|
||||
</Setting>
|
||||
<Setting Name="MainFormRestoreSize" Type="System.Drawing.Size" Scope="User">
|
||||
<Value Profile="(Default)">0, 0</Value>
|
||||
</Setting>
|
||||
<Setting Name="MainFormRestoreLocation" Type="System.Drawing.Point" Scope="User">
|
||||
<Value Profile="(Default)">0, 0</Value>
|
||||
</Setting>
|
||||
<Setting Name="MainFormKiosk" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="StartOnScreen" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">1</Value>
|
||||
</Setting>
|
||||
<Setting Name="FirstStart" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="ResetPanels" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ResetToolbars" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="DoUpgrade" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
36
mRemoteNG/Properties/AppUI.Designer.cs
generated
Normal file
36
mRemoteNG/Properties/AppUI.Designer.cs
generated
Normal file
@@ -0,0 +1,36 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class AppUI : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static AppUI defaultInstance = ((AppUI)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new AppUI())));
|
||||
|
||||
public static AppUI Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("cs-CZ,de,el,en,en-US,es-AR,es,fr,hu,it,lt,ja-JP,ko-KR,nb-NO,nl,pt,pt-BR,pl,ru,uk," +
|
||||
"tr-TR,zh-CN,zh-TW")]
|
||||
public string SupportedUICultures {
|
||||
get {
|
||||
return ((string)(this["SupportedUICultures"]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
9
mRemoteNG/Properties/AppUI.settings
Normal file
9
mRemoteNG/Properties/AppUI.settings
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="AppUI">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="SupportedUICultures" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">cs-CZ,de,el,en,en-US,es-AR,es,fr,hu,it,lt,ja-JP,ko-KR,nb-NO,nl,pt,pt-BR,pl,ru,uk,tr-TR,zh-CN,zh-TW</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
22
mRemoteNG/Properties/AssemblyInfo.cs
Normal file
22
mRemoteNG/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Resources;
|
||||
|
||||
// General Information
|
||||
[assembly: AssemblyTitle("mRemoteNG")]
|
||||
[assembly: AssemblyDescription("Multi-Remote Next Generation Connection Manager")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("mRemoteNG")]
|
||||
[assembly: AssemblyProduct("mRemoteNG Connection Manager")]
|
||||
[assembly: AssemblyCopyright("(c) 2023 mRemoteNG")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Version information
|
||||
[assembly: AssemblyVersion("1.77.3.1782")]
|
||||
[assembly: AssemblyFileVersion("1.77.3.1782")]
|
||||
[assembly: NeutralResourcesLanguageAttribute("en-US")]
|
||||
[assembly: AssemblyInformationalVersion("1.77.3 (Nightly Build: 1782)")]
|
||||
|
||||
47
mRemoteNG/Properties/AssemblyInfo.tt
Normal file
47
mRemoteNG/Properties/AssemblyInfo.tt
Normal file
@@ -0,0 +1,47 @@
|
||||
<#@ template debug="true" hostspecific="true" language="C#" #>
|
||||
<#@ output extension=".cs" #>
|
||||
<#@ import namespace="System.IO" #>
|
||||
<#@ import namespace="System.Text.RegularExpressions" #>
|
||||
<#
|
||||
string output = File.ReadAllText(this.Host.ResolvePath("AssemblyInfo.cs"));
|
||||
Regex pattern = new Regex("AssemblyVersion\\(\"(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<revision>\\d+)\\.(?<build>\\d+)\"\\)");
|
||||
MatchCollection matches = pattern.Matches(output);
|
||||
if( matches.Count == 1 )
|
||||
{
|
||||
major = Convert.ToInt32(matches[0].Groups["major"].Value);
|
||||
minor = Convert.ToInt32(matches[0].Groups["minor"].Value);
|
||||
revision = Convert.ToInt32(matches[0].Groups["revision"].Value);
|
||||
build = Convert.ToInt32(matches[0].Groups["build"].Value);
|
||||
if( this.Host.ResolveParameterValue("-","-","BuildConfiguration") == "Release" )
|
||||
build++;
|
||||
}
|
||||
#>
|
||||
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Resources;
|
||||
|
||||
// General Information
|
||||
[assembly: AssemblyTitle("mRemoteNG")]
|
||||
[assembly: AssemblyDescription("Multi-Remote Next Generation Connection Manager")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("mRemoteNG")]
|
||||
[assembly: AssemblyProduct("mRemoteNG Connection Manager")]
|
||||
[assembly: AssemblyCopyright("(c) 2023 mRemoteNG")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Version information
|
||||
[assembly: AssemblyVersion("<#= this.major #>.<#= this.minor #>.<#= this.revision #>.<#= this.build #>")]
|
||||
[assembly: AssemblyFileVersion("<#= this.major #>.<#= this.minor #>.<#= this.revision #>.<#= this.build #>")]
|
||||
[assembly: NeutralResourcesLanguageAttribute("en-US")]
|
||||
[assembly: AssemblyInformationalVersion("<#= this.major #>.<#= this.minor #>.<#= this.revision #> (<#= this.channel #>: <#= this.build #>)")]
|
||||
|
||||
<#+
|
||||
int major = 1;
|
||||
int minor = 77;
|
||||
int revision = 3;
|
||||
int build = 0;
|
||||
string channel = "Nightly Build";
|
||||
#>
|
||||
122
mRemoteNG/Properties/OptionsAdvancedPage.Designer.cs
generated
Normal file
122
mRemoteNG/Properties/OptionsAdvancedPage.Designer.cs
generated
Normal file
@@ -0,0 +1,122 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
|
||||
internal sealed partial class OptionsAdvancedPage : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static OptionsAdvancedPage defaultInstance = ((OptionsAdvancedPage)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new OptionsAdvancedPage())));
|
||||
|
||||
public static OptionsAdvancedPage Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool ReconnectOnDisconnect {
|
||||
get {
|
||||
return ((bool)(this["ReconnectOnDisconnect"]));
|
||||
}
|
||||
set {
|
||||
this["ReconnectOnDisconnect"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string CustomPuttyPath {
|
||||
get {
|
||||
return ((string)(this["CustomPuttyPath"]));
|
||||
}
|
||||
set {
|
||||
this["CustomPuttyPath"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool UseCustomPuttyPath {
|
||||
get {
|
||||
return ((bool)(this["UseCustomPuttyPath"]));
|
||||
}
|
||||
set {
|
||||
this["UseCustomPuttyPath"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("2")]
|
||||
public int MaxPuttyWaitTime {
|
||||
get {
|
||||
return ((int)(this["MaxPuttyWaitTime"]));
|
||||
}
|
||||
set {
|
||||
this["MaxPuttyWaitTime"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("5500")]
|
||||
public int UVNCSCPort {
|
||||
get {
|
||||
return ((int)(this["UVNCSCPort"]));
|
||||
}
|
||||
set {
|
||||
this["UVNCSCPort"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool RdpLoadBalanceInfoUseUtf8 {
|
||||
get {
|
||||
return ((bool)(this["RdpLoadBalanceInfoUseUtf8"]));
|
||||
}
|
||||
set {
|
||||
this["RdpLoadBalanceInfoUseUtf8"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool cbAdvancedPageInOptionMenu {
|
||||
get {
|
||||
return ((bool)(this["cbAdvancedPageInOptionMenu"]));
|
||||
}
|
||||
set {
|
||||
this["cbAdvancedPageInOptionMenu"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool NoReconnect {
|
||||
get {
|
||||
return ((bool)(this["NoReconnect"]));
|
||||
}
|
||||
set {
|
||||
this["NoReconnect"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
mRemoteNG/Properties/OptionsAdvancedPage.settings
Normal file
30
mRemoteNG/Properties/OptionsAdvancedPage.settings
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="OptionsAdvancedPage">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="ReconnectOnDisconnect" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="CustomPuttyPath" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="UseCustomPuttyPath" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="MaxPuttyWaitTime" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">2</Value>
|
||||
</Setting>
|
||||
<Setting Name="UVNCSCPort" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">5500</Value>
|
||||
</Setting>
|
||||
<Setting Name="RdpLoadBalanceInfoUseUtf8" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbAdvancedPageInOptionMenu" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="NoReconnect" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
98
mRemoteNG/Properties/OptionsAppearancePage.Designer.cs
generated
Normal file
98
mRemoteNG/Properties/OptionsAppearancePage.Designer.cs
generated
Normal file
@@ -0,0 +1,98 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class OptionsAppearancePage : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static OptionsAppearancePage defaultInstance = ((OptionsAppearancePage)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new OptionsAppearancePage())));
|
||||
|
||||
public static OptionsAppearancePage Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool ShowSystemTrayIcon {
|
||||
get {
|
||||
return ((bool)(this["ShowSystemTrayIcon"]));
|
||||
}
|
||||
set {
|
||||
this["ShowSystemTrayIcon"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool MinimizeToTray {
|
||||
get {
|
||||
return ((bool)(this["MinimizeToTray"]));
|
||||
}
|
||||
set {
|
||||
this["MinimizeToTray"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool CloseToTray {
|
||||
get {
|
||||
return ((bool)(this["CloseToTray"]));
|
||||
}
|
||||
set {
|
||||
this["CloseToTray"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool ShowDescriptionTooltipsInTree {
|
||||
get {
|
||||
return ((bool)(this["ShowDescriptionTooltipsInTree"]));
|
||||
}
|
||||
set {
|
||||
this["ShowDescriptionTooltipsInTree"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool ShowCompleteConsPathInTitle {
|
||||
get {
|
||||
return ((bool)(this["ShowCompleteConsPathInTitle"]));
|
||||
}
|
||||
set {
|
||||
this["ShowCompleteConsPathInTitle"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool cbAppearancePageInOptionMenu {
|
||||
get {
|
||||
return ((bool)(this["cbAppearancePageInOptionMenu"]));
|
||||
}
|
||||
set {
|
||||
this["cbAppearancePageInOptionMenu"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
24
mRemoteNG/Properties/OptionsAppearancePage.settings
Normal file
24
mRemoteNG/Properties/OptionsAppearancePage.settings
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="OptionsAppearancePage">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="ShowSystemTrayIcon" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="MinimizeToTray" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="CloseToTray" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ShowDescriptionTooltipsInTree" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ShowCompleteConsPathInTitle" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbAppearancePageInOptionMenu" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
254
mRemoteNG/Properties/OptionsBackupPage.Designer.cs
generated
Normal file
254
mRemoteNG/Properties/OptionsBackupPage.Designer.cs
generated
Normal file
@@ -0,0 +1,254 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class OptionsBackupPage : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static OptionsBackupPage defaultInstance = ((OptionsBackupPage)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new OptionsBackupPage())));
|
||||
|
||||
public static OptionsBackupPage Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("10")]
|
||||
public int BackupFileKeepCount {
|
||||
get {
|
||||
return ((int)(this["BackupFileKeepCount"]));
|
||||
}
|
||||
set {
|
||||
this["BackupFileKeepCount"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("{0}.{1:yyyyMMdd-HHmmssffff}.backup")]
|
||||
public string BackupFileNameFormat {
|
||||
get {
|
||||
return ((string)(this["BackupFileNameFormat"]));
|
||||
}
|
||||
set {
|
||||
this["BackupFileNameFormat"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string BackupLocation {
|
||||
get {
|
||||
return ((string)(this["BackupLocation"]));
|
||||
}
|
||||
set {
|
||||
this["BackupLocation"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool SaveConsOnExit {
|
||||
get {
|
||||
return ((bool)(this["SaveConsOnExit"]));
|
||||
}
|
||||
set {
|
||||
this["SaveConsOnExit"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int SaveConnectionsFrequency {
|
||||
get {
|
||||
return ((int)(this["SaveConnectionsFrequency"]));
|
||||
}
|
||||
set {
|
||||
this["SaveConnectionsFrequency"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string CustomConsPath {
|
||||
get {
|
||||
return ((string)(this["CustomConsPath"]));
|
||||
}
|
||||
set {
|
||||
this["CustomConsPath"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool SaveConnectionsAfterEveryEdit {
|
||||
get {
|
||||
return ((bool)(this["SaveConnectionsAfterEveryEdit"]));
|
||||
}
|
||||
set {
|
||||
this["SaveConnectionsAfterEveryEdit"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("50")]
|
||||
public int AutoSaveEveryMinutes {
|
||||
get {
|
||||
return ((int)(this["AutoSaveEveryMinutes"]));
|
||||
}
|
||||
set {
|
||||
this["AutoSaveEveryMinutes"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool LoadConsFromCustomLocation {
|
||||
get {
|
||||
return ((bool)(this["LoadConsFromCustomLocation"]));
|
||||
}
|
||||
set {
|
||||
this["LoadConsFromCustomLocation"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int cbBackupEnableACL {
|
||||
get {
|
||||
return ((int)(this["cbBackupEnableACL"]));
|
||||
}
|
||||
set {
|
||||
this["cbBackupEnableACL"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int cbBackupTypeACL {
|
||||
get {
|
||||
return ((int)(this["cbBackupTypeACL"]));
|
||||
}
|
||||
set {
|
||||
this["cbBackupTypeACL"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int cbBackupFrequencyACL {
|
||||
get {
|
||||
return ((int)(this["cbBackupFrequencyACL"]));
|
||||
}
|
||||
set {
|
||||
this["cbBackupFrequencyACL"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int cbBackupNumberACL {
|
||||
get {
|
||||
return ((int)(this["cbBackupNumberACL"]));
|
||||
}
|
||||
set {
|
||||
this["cbBackupNumberACL"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int cbBackupNameFormatACL {
|
||||
get {
|
||||
return ((int)(this["cbBackupNameFormatACL"]));
|
||||
}
|
||||
set {
|
||||
this["cbBackupNameFormatACL"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int cbBackupLocationACL {
|
||||
get {
|
||||
return ((int)(this["cbBackupLocationACL"]));
|
||||
}
|
||||
set {
|
||||
this["cbBackupLocationACL"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool cbBacupPageInOptionMenu {
|
||||
get {
|
||||
return ((bool)(this["cbBacupPageInOptionMenu"]));
|
||||
}
|
||||
set {
|
||||
this["cbBacupPageInOptionMenu"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool BackupConnectionsOnExit {
|
||||
get {
|
||||
return ((bool)(this["BackupConnectionsOnExit"]));
|
||||
}
|
||||
set {
|
||||
this["BackupConnectionsOnExit"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool BackupConnectionsOnEdit {
|
||||
get {
|
||||
return ((bool)(this["BackupConnectionsOnEdit"]));
|
||||
}
|
||||
set {
|
||||
this["BackupConnectionsOnEdit"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool BackupConnectionsOnSave {
|
||||
get {
|
||||
return ((bool)(this["BackupConnectionsOnSave"]));
|
||||
}
|
||||
set {
|
||||
this["BackupConnectionsOnSave"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
63
mRemoteNG/Properties/OptionsBackupPage.settings
Normal file
63
mRemoteNG/Properties/OptionsBackupPage.settings
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="OptionsBackupPage">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="BackupFileKeepCount" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">10</Value>
|
||||
</Setting>
|
||||
<Setting Name="BackupFileNameFormat" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">{0}.{1:yyyyMMdd-HHmmssffff}.backup</Value>
|
||||
</Setting>
|
||||
<Setting Name="BackupLocation" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="SaveConsOnExit" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="SaveConnectionsFrequency" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="CustomConsPath" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="SaveConnectionsAfterEveryEdit" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="AutoSaveEveryMinutes" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">50</Value>
|
||||
</Setting>
|
||||
<Setting Name="LoadConsFromCustomLocation" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbBackupEnableACL" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbBackupTypeACL" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbBackupFrequencyACL" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbBackupNumberACL" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbBackupNameFormatACL" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbBackupLocationACL" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbBacupPageInOptionMenu" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="BackupConnectionsOnExit" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="BackupConnectionsOnEdit" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="BackupConnectionsOnSave" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
62
mRemoteNG/Properties/OptionsConnectionsPage.Designer.cs
generated
Normal file
62
mRemoteNG/Properties/OptionsConnectionsPage.Designer.cs
generated
Normal file
@@ -0,0 +1,62 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class OptionsConnectionsPage : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static OptionsConnectionsPage defaultInstance = ((OptionsConnectionsPage)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new OptionsConnectionsPage())));
|
||||
|
||||
public static OptionsConnectionsPage Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public int AutoSaveEveryMinutes {
|
||||
get {
|
||||
return ((int)(this["AutoSaveEveryMinutes"]));
|
||||
}
|
||||
set {
|
||||
this["AutoSaveEveryMinutes"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string ConnectrionFilePath {
|
||||
get {
|
||||
return ((string)(this["ConnectrionFilePath"]));
|
||||
}
|
||||
set {
|
||||
this["ConnectrionFilePath"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool cbConnectionsPageInOptionMenu {
|
||||
get {
|
||||
return ((bool)(this["cbConnectionsPageInOptionMenu"]));
|
||||
}
|
||||
set {
|
||||
this["cbConnectionsPageInOptionMenu"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
15
mRemoteNG/Properties/OptionsConnectionsPage.settings
Normal file
15
mRemoteNG/Properties/OptionsConnectionsPage.settings
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="OptionsConnectionsPage">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="AutoSaveEveryMinutes" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="ConnectrionFilePath" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="cbConnectionsPageInOptionMenu" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
116
mRemoteNG/Properties/OptionsCredentialsPage.Designer.cs
generated
Normal file
116
mRemoteNG/Properties/OptionsCredentialsPage.Designer.cs
generated
Normal file
@@ -0,0 +1,116 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using mRemoteNG.Connection;
|
||||
|
||||
namespace mRemoteNG.Properties
|
||||
{
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class OptionsCredentialsPage : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static OptionsCredentialsPage defaultInstance = ((OptionsCredentialsPage)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new OptionsCredentialsPage())));
|
||||
|
||||
public static OptionsCredentialsPage Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string DefaultUsername {
|
||||
get {
|
||||
return ((string)(this["DefaultUsername"]));
|
||||
}
|
||||
set {
|
||||
this["DefaultUsername"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string DefaultPassword {
|
||||
get {
|
||||
return ((string)(this["DefaultPassword"]));
|
||||
}
|
||||
set {
|
||||
this["DefaultPassword"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string DefaultDomain {
|
||||
get {
|
||||
return ((string)(this["DefaultDomain"]));
|
||||
}
|
||||
set {
|
||||
this["DefaultDomain"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public ExternalCredentialProvider ExternalCredentialProviderDefault
|
||||
{
|
||||
get
|
||||
{
|
||||
return ((ExternalCredentialProvider)(this["ExternalCredentialProviderDefault"]));
|
||||
}
|
||||
set
|
||||
{
|
||||
this["ExternalCredentialProviderDefault"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string UserViaAPIDefault {
|
||||
get {
|
||||
return ((string)(this["UserViaAPIDefault"]));
|
||||
}
|
||||
set {
|
||||
this["UserViaAPIDefault"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("noinfo")]
|
||||
public string EmptyCredentials {
|
||||
get {
|
||||
return ((string)(this["EmptyCredentials"]));
|
||||
}
|
||||
set {
|
||||
this["EmptyCredentials"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool cbCredentialsPageInOptionMenu {
|
||||
get {
|
||||
return ((bool)(this["cbCredentialsPageInOptionMenu"]));
|
||||
}
|
||||
set {
|
||||
this["cbCredentialsPageInOptionMenu"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
24
mRemoteNG/Properties/OptionsCredentialsPage.settings
Normal file
24
mRemoteNG/Properties/OptionsCredentialsPage.settings
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="OptionsCredentialsPage">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="DefaultUsername" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="DefaultPassword" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="DefaultDomain" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="UserViaAPDefault" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="EmptyCredentials" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">noinfo</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbCredentialsPageInOptionMenu" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
122
mRemoteNG/Properties/OptionsDBsPage.Designer.cs
generated
Normal file
122
mRemoteNG/Properties/OptionsDBsPage.Designer.cs
generated
Normal file
@@ -0,0 +1,122 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class OptionsDBsPage : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static OptionsDBsPage defaultInstance = ((OptionsDBsPage)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new OptionsDBsPage())));
|
||||
|
||||
public static OptionsDBsPage Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool UseSQLServer {
|
||||
get {
|
||||
return ((bool)(this["UseSQLServer"]));
|
||||
}
|
||||
set {
|
||||
this["UseSQLServer"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("mssql")]
|
||||
public string SQLServerType {
|
||||
get {
|
||||
return ((string)(this["SQLServerType"]));
|
||||
}
|
||||
set {
|
||||
this["SQLServerType"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string SQLHost {
|
||||
get {
|
||||
return ((string)(this["SQLHost"]));
|
||||
}
|
||||
set {
|
||||
this["SQLHost"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool SQLReadOnly {
|
||||
get {
|
||||
return ((bool)(this["SQLReadOnly"]));
|
||||
}
|
||||
set {
|
||||
this["SQLReadOnly"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string SQLDatabaseName {
|
||||
get {
|
||||
return ((string)(this["SQLDatabaseName"]));
|
||||
}
|
||||
set {
|
||||
this["SQLDatabaseName"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string SQLUser {
|
||||
get {
|
||||
return ((string)(this["SQLUser"]));
|
||||
}
|
||||
set {
|
||||
this["SQLUser"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string SQLPass {
|
||||
get {
|
||||
return ((string)(this["SQLPass"]));
|
||||
}
|
||||
set {
|
||||
this["SQLPass"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool cbDBsPageInOptionMenu {
|
||||
get {
|
||||
return ((bool)(this["cbDBsPageInOptionMenu"]));
|
||||
}
|
||||
set {
|
||||
this["cbDBsPageInOptionMenu"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
mRemoteNG/Properties/OptionsDBsPage.settings
Normal file
30
mRemoteNG/Properties/OptionsDBsPage.settings
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="OptionsDBsPage">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="UseSQLServer" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="SQLServerType" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">mssql</Value>
|
||||
</Setting>
|
||||
<Setting Name="SQLHost" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="SQLReadOnly" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="SQLDatabaseName" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="SQLUser" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="SQLPass" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="cbDBsPageInOptionMenu" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
242
mRemoteNG/Properties/OptionsNotificationsPage.Designer.cs
generated
Normal file
242
mRemoteNG/Properties/OptionsNotificationsPage.Designer.cs
generated
Normal file
@@ -0,0 +1,242 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class OptionsNotificationsPage : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static OptionsNotificationsPage defaultInstance = ((OptionsNotificationsPage)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new OptionsNotificationsPage())));
|
||||
|
||||
public static OptionsNotificationsPage Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool NotificationPanelWriterWriteDebugMsgs {
|
||||
get {
|
||||
return ((bool)(this["NotificationPanelWriterWriteDebugMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["NotificationPanelWriterWriteDebugMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool NotificationPanelWriterWriteInfoMsgs {
|
||||
get {
|
||||
return ((bool)(this["NotificationPanelWriterWriteInfoMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["NotificationPanelWriterWriteInfoMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool NotificationPanelWriterWriteWarningMsgs {
|
||||
get {
|
||||
return ((bool)(this["NotificationPanelWriterWriteWarningMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["NotificationPanelWriterWriteWarningMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool NotificationPanelWriterWriteErrorMsgs {
|
||||
get {
|
||||
return ((bool)(this["NotificationPanelWriterWriteErrorMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["NotificationPanelWriterWriteErrorMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool SwitchToMCOnInformation {
|
||||
get {
|
||||
return ((bool)(this["SwitchToMCOnInformation"]));
|
||||
}
|
||||
set {
|
||||
this["SwitchToMCOnInformation"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool SwitchToMCOnWarning {
|
||||
get {
|
||||
return ((bool)(this["SwitchToMCOnWarning"]));
|
||||
}
|
||||
set {
|
||||
this["SwitchToMCOnWarning"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool SwitchToMCOnError {
|
||||
get {
|
||||
return ((bool)(this["SwitchToMCOnError"]));
|
||||
}
|
||||
set {
|
||||
this["SwitchToMCOnError"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool PopupMessageWriterWriteDebugMsgs {
|
||||
get {
|
||||
return ((bool)(this["PopupMessageWriterWriteDebugMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["PopupMessageWriterWriteDebugMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool PopupMessageWriterWriteInfoMsgs {
|
||||
get {
|
||||
return ((bool)(this["PopupMessageWriterWriteInfoMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["PopupMessageWriterWriteInfoMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool PopupMessageWriterWriteWarningMsgs {
|
||||
get {
|
||||
return ((bool)(this["PopupMessageWriterWriteWarningMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["PopupMessageWriterWriteWarningMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool PopupMessageWriterWriteErrorMsgs {
|
||||
get {
|
||||
return ((bool)(this["PopupMessageWriterWriteErrorMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["PopupMessageWriterWriteErrorMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool LogToApplicationDirectory {
|
||||
get {
|
||||
return ((bool)(this["LogToApplicationDirectory"]));
|
||||
}
|
||||
set {
|
||||
this["LogToApplicationDirectory"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string LogFilePath {
|
||||
get {
|
||||
return ((string)(this["LogFilePath"]));
|
||||
}
|
||||
set {
|
||||
this["LogFilePath"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool TextLogMessageWriterWriteDebugMsgs {
|
||||
get {
|
||||
return ((bool)(this["TextLogMessageWriterWriteDebugMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["TextLogMessageWriterWriteDebugMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool TextLogMessageWriterWriteErrorMsgs {
|
||||
get {
|
||||
return ((bool)(this["TextLogMessageWriterWriteErrorMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["TextLogMessageWriterWriteErrorMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool TextLogMessageWriterWriteInfoMsgs {
|
||||
get {
|
||||
return ((bool)(this["TextLogMessageWriterWriteInfoMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["TextLogMessageWriterWriteInfoMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool TextLogMessageWriterWriteWarningMsgs {
|
||||
get {
|
||||
return ((bool)(this["TextLogMessageWriterWriteWarningMsgs"]));
|
||||
}
|
||||
set {
|
||||
this["TextLogMessageWriterWriteWarningMsgs"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool cbNotificationsPageInOptionMenu {
|
||||
get {
|
||||
return ((bool)(this["cbNotificationsPageInOptionMenu"]));
|
||||
}
|
||||
set {
|
||||
this["cbNotificationsPageInOptionMenu"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
60
mRemoteNG/Properties/OptionsNotificationsPage.settings
Normal file
60
mRemoteNG/Properties/OptionsNotificationsPage.settings
Normal file
@@ -0,0 +1,60 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="mRemoteNG.Properties" GeneratedClassName="OptionsNotificationsPage">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="NotificationPanelWriterWriteDebugMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="NotificationPanelWriterWriteInfoMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="NotificationPanelWriterWriteWarningMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="NotificationPanelWriterWriteErrorMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="SwitchToMCOnInformation" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="SwitchToMCOnWarning" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="SwitchToMCOnError" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="PopupMessageWriterWriteDebugMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="PopupMessageWriterWriteInfoMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="PopupMessageWriterWriteWarningMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="PopupMessageWriterWriteErrorMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="LogToApplicationDirectory" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="LogFilePath" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="TextLogMessageWriterWriteDebugMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="TextLogMessageWriterWriteErrorMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="TextLogMessageWriterWriteInfoMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="TextLogMessageWriterWriteWarningMsgs" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="cbNotificationsPageInOptionMenu" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
86
mRemoteNG/Properties/OptionsSecurityPage.Designer.cs
generated
Normal file
86
mRemoteNG/Properties/OptionsSecurityPage.Designer.cs
generated
Normal file
@@ -0,0 +1,86 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace mRemoteNG.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class OptionsSecurityPage : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static OptionsSecurityPage defaultInstance = ((OptionsSecurityPage)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new OptionsSecurityPage())));
|
||||
|
||||
public static OptionsSecurityPage Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool EncryptCompleteConnectionsFile {
|
||||
get {
|
||||
return ((bool)(this["EncryptCompleteConnectionsFile"]));
|
||||
}
|
||||
set {
|
||||
this["EncryptCompleteConnectionsFile"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("AES")]
|
||||
public global::mRemoteNG.Security.BlockCipherEngines EncryptionEngine {
|
||||
get {
|
||||
return ((global::mRemoteNG.Security.BlockCipherEngines)(this["EncryptionEngine"]));
|
||||
}
|
||||
set {
|
||||
this["EncryptionEngine"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("GCM")]
|
||||
public global::mRemoteNG.Security.BlockCipherModes EncryptionBlockCipherMode {
|
||||
get {
|
||||
return ((global::mRemoteNG.Security.BlockCipherModes)(this["EncryptionBlockCipherMode"]));
|
||||
}
|
||||
set {
|
||||
this["EncryptionBlockCipherMode"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("10000")]
|
||||
public int EncryptionKeyDerivationIterations {
|
||||
get {
|
||||
return ((int)(this["EncryptionKeyDerivationIterations"]));
|
||||
}
|
||||
set {
|
||||
this["EncryptionKeyDerivationIterations"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool cbSecurityPageInOptionMenu {
|
||||
get {
|
||||
return ((bool)(this["cbSecurityPageInOptionMenu"]));
|
||||
}
|
||||
set {
|
||||
this["cbSecurityPageInOptionMenu"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user