rdp-portal/Profile.cs

140 lines
3.6 KiB
C#
Raw Normal View History

2022-10-28 16:19:59 +02:00
using System;
2022-10-28 17:30:39 +02:00
using System.Collections.Generic;
2022-10-28 16:19:59 +02:00
using System.IO;
using System.Windows.Forms;
using Newtonsoft.Json;
namespace RDP_Portal {
public class Profile {
private string _name = "";
public string Name {
get {
if (_name == "") {
return "<New Profile>";
}
return _name;
}
set => _name = value;
}
public string Filename { get; set; } = "";
public string Computer { get; set; }
public string Username { get; set; }
2022-10-28 17:30:39 +02:00
/**
* Encrypted Password used by mstsc.exe
*/
public string GetRDPEncryptedPassword() {
var mstscpw = new Mstscpw();
return mstscpw.encryptpw(this.Password);
}
/**
* Encrypted Password in config.json
*/
2022-10-28 16:19:59 +02:00
public string EncryptedPassword { get; set; } = "";
[JsonIgnore]
public string Password {
get {
if (EncryptedPassword == "") {
return EncryptedPassword;
}
return EncryptedPassword.Decrypt();
}
set => EncryptedPassword = value.Encrypt();
}
public string Domain { get; set; }
public void PrepareRdpFile() {
var justCreated = false;
if (Filename == null || Filename == "") {
String name;
while (true) {
name = Config.rdpDir + "\\" + StringUtil.GenerateName(8) + ".rdp";
if (!File.Exists(name)) {
var file = File.Create(name);
file.Close();
justCreated = true;
break;
}
}
Filename = name;
}
if (!File.Exists(Filename)) {
var file = File.Create(Filename);
file.Close();
justCreated = true;
}
2022-10-28 17:30:39 +02:00
var lines = File.ReadAllLines(Filename);
var removeList = new [] {
"full address:",
"username:",
"password",
"domain:",
};
var result = new List<string>();
foreach (var line in lines) {
var ok = true;
foreach (var startKeyword in removeList) {
if (line.StartsWith(startKeyword)) {
ok = false;
break;
}
}
if (ok) {
result.Add(line);
}
}
2022-10-28 16:19:59 +02:00
if (Computer != "") {
2022-10-28 17:30:39 +02:00
result.Add("full address:s:" + Computer);
2022-10-28 16:19:59 +02:00
}
if (Username != "") {
2022-10-28 17:30:39 +02:00
result.Add("username:s:" + Username);
2022-10-28 16:19:59 +02:00
}
if (Password != "") {
2022-10-28 17:30:39 +02:00
result.Add("password 51:b:" + GetRDPEncryptedPassword());
2022-10-28 16:19:59 +02:00
}
if (Domain != "") {
2022-10-28 17:30:39 +02:00
result.Add("domain:s:" + Domain);
2022-10-28 16:19:59 +02:00
}
if (justCreated) {
2022-10-28 17:30:39 +02:00
result.Add("authentication level:i:0");
result.Add("prompt for credentials:i:0");
}
var writer = new StreamWriter(Filename, false);
foreach (var line in result) {
writer.WriteLine(line);
2022-10-28 16:19:59 +02:00
}
writer.Close();
}
[JsonIgnore] public bool JustAdded { get; set; } = false;
public void Delete() {
try {
File.Delete(Filename);
} catch (Exception ex) {
}
}
}
}