├── .gitignore ├── App.config ├── FodyWeavers.xml ├── FodyWeavers.xsd ├── Program.cs ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings ├── README.md ├── Resources ├── banner.png └── icon.ico ├── app.manifest ├── extra ├── banner.ufo └── icon.ufo ├── packages.config ├── rdp-portal.csproj ├── rdp-portal.sln ├── rdp-portal.sln.DotSettings.user └── src ├── About.Designer.cs ├── About.cs ├── About.resx ├── Config.cs ├── MainForm.Designer.cs ├── MainForm.cs ├── MainForm.resx ├── Mstscpw.cs ├── Profile.cs ├── RdpFile.cs └── StringUtil.cs /.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | obj/ 3 | /packages/ 4 | riderModule.iml 5 | /_ReSharper.Caches/ -------------------------------------------------------------------------------- /App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /FodyWeavers.xsd: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks 13 | 14 | 15 | 16 | 17 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. 18 | 19 | 20 | 21 | 22 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks 23 | 24 | 25 | 26 | 27 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. 28 | 29 | 30 | 31 | 32 | A list of unmanaged 32 bit assembly names to include, delimited with line breaks. 33 | 34 | 35 | 36 | 37 | A list of unmanaged 64 bit assembly names to include, delimited with line breaks. 38 | 39 | 40 | 41 | 42 | The order of preloaded assemblies, delimited with line breaks. 43 | 44 | 45 | 46 | 47 | 48 | This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. 49 | 50 | 51 | 52 | 53 | Controls if .pdbs for reference assemblies are also embedded. 54 | 55 | 56 | 57 | 58 | Controls if runtime assemblies are also embedded. 59 | 60 | 61 | 62 | 63 | Controls whether the runtime assemblies are embedded with their full path or only with their assembly name. 64 | 65 | 66 | 67 | 68 | Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. 69 | 70 | 71 | 72 | 73 | As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. 74 | 75 | 76 | 77 | 78 | Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. 79 | 80 | 81 | 82 | 83 | Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. 84 | 85 | 86 | 87 | 88 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | 89 | 90 | 91 | 92 | 93 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. 94 | 95 | 96 | 97 | 98 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with | 99 | 100 | 101 | 102 | 103 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |. 104 | 105 | 106 | 107 | 108 | A list of unmanaged 32 bit assembly names to include, delimited with |. 109 | 110 | 111 | 112 | 113 | A list of unmanaged 64 bit assembly names to include, delimited with |. 114 | 115 | 116 | 117 | 118 | The order of preloaded assemblies, delimited with |. 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. 127 | 128 | 129 | 130 | 131 | A comma-separated list of error codes that can be safely ignored in assembly verification. 132 | 133 | 134 | 135 | 136 | 'false' to turn off automatic generation of the XML Schema file. 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace RDP_Portal { 8 | static class Program { 9 | /// 10 | /// The main entry point for the application. 11 | /// 12 | [STAThread] 13 | static void Main() { 14 | Application.EnableVisualStyles(); 15 | Application.SetCompatibleTextRenderingDefault(false); 16 | Application.Run(new MainForm()); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("RDP Portal")] 9 | [assembly: AssemblyDescription("A slightly smarter and simple Remote Desktop manager for Windows.")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Louis Lam")] 12 | [assembly: AssemblyProduct("RDP Protal")] 13 | [assembly: AssemblyCopyright("Copyright © 2022 Louis Lam")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("6C4D655E-4C37-4E07-87E0-A4EB9DCAA651")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.4.0")] 36 | [assembly: AssemblyFileVersion("1.0.4.0")] 37 | -------------------------------------------------------------------------------- /Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | namespace rdp_portal.Properties { 11 | using System; 12 | 13 | 14 | /// 15 | /// A strongly-typed resource class, for looking up localized strings, etc. 16 | /// 17 | // This class was auto-generated by the StronglyTypedResourceBuilder 18 | // class via a tool like ResGen or Visual Studio. 19 | // To add or remove a member, edit your .ResX file then rerun ResGen 20 | // with the /str option, or rebuild your VS project. 21 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 22 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 23 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 24 | internal class Resources { 25 | 26 | private static global::System.Resources.ResourceManager resourceMan; 27 | 28 | private static global::System.Globalization.CultureInfo resourceCulture; 29 | 30 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 31 | internal Resources() { 32 | } 33 | 34 | /// 35 | /// Returns the cached ResourceManager instance used by this class. 36 | /// 37 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 38 | internal static global::System.Resources.ResourceManager ResourceManager { 39 | get { 40 | if (object.ReferenceEquals(resourceMan, null)) { 41 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RDP_Portal.Properties.Resources", typeof(Resources).Assembly); 42 | resourceMan = temp; 43 | } 44 | return resourceMan; 45 | } 46 | } 47 | 48 | /// 49 | /// Overrides the current thread's CurrentUICulture property for all 50 | /// resource lookups using this strongly typed resource class. 51 | /// 52 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 53 | internal static global::System.Globalization.CultureInfo Culture { 54 | get { 55 | return resourceCulture; 56 | } 57 | set { 58 | resourceCulture = value; 59 | } 60 | } 61 | 62 | /// 63 | /// Looks up a localized resource of type System.Drawing.Bitmap. 64 | /// 65 | internal static System.Drawing.Bitmap banner { 66 | get { 67 | object obj = ResourceManager.GetObject("banner", resourceCulture); 68 | return ((System.Drawing.Bitmap)(obj)); 69 | } 70 | } 71 | 72 | /// 73 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). 74 | /// 75 | internal static System.Drawing.Icon icon { 76 | get { 77 | object obj = ResourceManager.GetObject("icon", resourceCulture); 78 | return ((System.Drawing.Icon)(obj)); 79 | } 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | text/microsoft-resx 51 | 52 | 53 | 2.0 54 | 55 | 56 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 57 | 58 | 59 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 60 | 61 | 62 | 63 | ..\Resources\banner.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 64 | 65 | 66 | ..\Resources\icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 67 | 68 | 69 | -------------------------------------------------------------------------------- /Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace rdp_portal.Properties { 12 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 13 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute( 14 | "Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 15 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 16 | private static Settings defaultInstance = 17 | ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 18 | 19 | public static Settings Default { 20 | get { return defaultInstance; } 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RDP Portal 2 | 3 | A slightly smarter and simple Remote Desktop manager for Windows. 4 | 5 | 6 | 7 | ## Why RDP Portal? 8 | 9 | By default, Remote Desktop Connection (mstsc.exe) is not possible to backup the saved passwords and the connection management is not good. 10 | 11 | With RDP Portal, it is possible to save password and use it on any other Windows PCs. 12 | 13 | ## ⭐ Features 14 | - Portable 15 | - Backup-able Saved Passwords 16 | - Same user experience while connected to your remote desktop. 17 | - The workflow is similar to WinSCP or HeidiSQL 18 | 19 | ## Download 20 | 21 | From GitHub: 22 | https://github.com/louislam/rdp-portal/releases/latest 23 | 24 | ## FAQ 25 | 26 | 1. How to Backup? 27 | 28 | > RDP Portal is a portable application, you just need to backup the folder. 29 | 30 | 2. How to config more settings like screen resolution? 31 | 32 | > You can click `Options` in RDP Portal, it will open the original Remote Desktop Connection application. You can set anything there, but you have to click `Save` at the end. Don't click `Connect`. 33 | 34 | 35 | 36 | ## Credit 37 | 38 | - Computer icons created by Freepik - Flaticon 39 | 40 | 41 | ## Development 42 | 43 | - IDE: Rider 44 | - .NET Framework 4.7.2 45 | - Windows Form 46 | -------------------------------------------------------------------------------- /Resources/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/louislam/rdp-portal/f4eff3abb06c5535193e31bd44c8df0e6df77e74/Resources/banner.png -------------------------------------------------------------------------------- /Resources/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/louislam/rdp-portal/f4eff3abb06c5535193e31bd44c8df0e6df77e74/Resources/icon.ico -------------------------------------------------------------------------------- /app.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | true 6 | PerMonitorV2 7 | 8 | 9 | 10 | 11 | 12 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /extra/banner.ufo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/louislam/rdp-portal/f4eff3abb06c5535193e31bd44c8df0e6df77e74/extra/banner.ufo -------------------------------------------------------------------------------- /extra/icon.ufo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/louislam/rdp-portal/f4eff3abb06c5535193e31bd44c8df0e6df77e74/extra/icon.ufo -------------------------------------------------------------------------------- /packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /rdp-portal.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Debug 7 | AnyCPU 8 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651} 9 | WinExe 10 | RDP_Portal 11 | RDP-Portal 12 | v4.7.2 13 | 512 14 | true 15 | true 16 | 8 17 | enable 18 | Resources\icon.ico 19 | true 20 | ..\visual-studio-sign-key.snk 21 | 22 | 23 | AnyCPU 24 | true 25 | full 26 | false 27 | bin\Debug\ 28 | DEBUG;TRACE 29 | prompt 30 | 4 31 | 32 | 33 | AnyCPU 34 | pdbonly 35 | true 36 | bin\Release\ 37 | TRACE 38 | prompt 39 | 4 40 | 41 | 42 | app.manifest 43 | 44 | 45 | 46 | packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll 47 | 48 | 49 | packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll 50 | 51 | 52 | 53 | packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll 54 | 55 | 56 | 57 | packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll 58 | 59 | 60 | packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll 61 | 62 | 63 | 64 | packages\System.Console.4.3.1\lib\net46\System.Console.dll 65 | 66 | 67 | 68 | packages\System.Diagnostics.DiagnosticSource.7.0.0\lib\net462\System.Diagnostics.DiagnosticSource.dll 69 | 70 | 71 | packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll 72 | 73 | 74 | packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll 75 | 76 | 77 | packages\System.IO.4.3.0\lib\net462\System.IO.dll 78 | 79 | 80 | packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll 81 | 82 | 83 | 84 | packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll 85 | 86 | 87 | packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll 88 | 89 | 90 | packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll 91 | 92 | 93 | packages\System.Linq.4.3.0\lib\net463\System.Linq.dll 94 | 95 | 96 | packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll 97 | 98 | 99 | packages\System.Memory.4.5.5\lib\net461\System.Memory.dll 100 | 101 | 102 | packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll 103 | 104 | 105 | packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll 106 | 107 | 108 | 109 | packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll 110 | 111 | 112 | packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll 113 | 114 | 115 | packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll 116 | 117 | 118 | packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll 119 | 120 | 121 | packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll 122 | 123 | 124 | packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll 125 | 126 | 127 | packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll 128 | 129 | 130 | packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll 131 | 132 | 133 | packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll 134 | 135 | 136 | packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll 137 | 138 | 139 | packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll 140 | 141 | 142 | packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll 154 | 155 | 156 | 157 | 158 | 159 | 160 | Form 161 | 162 | 163 | About.cs 164 | 165 | 166 | 167 | Form 168 | 169 | 170 | MainForm.cs 171 | 172 | 173 | 174 | 175 | 176 | 177 | ResXFileCodeGenerator 178 | Resources.Designer.cs 179 | Designer 180 | 181 | 182 | True 183 | Resources.resx 184 | 185 | 186 | About.cs 187 | 188 | 189 | MainForm.cs 190 | 191 | 192 | visual-studio-sign-key.snk 193 | 194 | 195 | 196 | SettingsSingleFileGenerator 197 | Settings.Designer.cs 198 | 199 | 200 | True 201 | Settings.settings 202 | True 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.The missing file is {0}. 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | -------------------------------------------------------------------------------- /rdp-portal.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rdp-portal", "rdp-portal.csproj", "{6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}" 4 | EndProject 5 | Global 6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 7 | Debug|Any CPU = Debug|Any CPU 8 | Release|Any CPU = Release|Any CPU 9 | EndGlobalSection 10 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 11 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 12 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}.Debug|Any CPU.Build.0 = Debug|Any CPU 13 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}.Release|Any CPU.ActiveCfg = Release|Any CPU 14 | {6C4D655E-4C37-4E07-87E0-A4EB9DCAA651}.Release|Any CPU.Build.0 = Release|Any CPU 15 | EndGlobalSection 16 | EndGlobal 17 | -------------------------------------------------------------------------------- /rdp-portal.sln.DotSettings.user: -------------------------------------------------------------------------------- 1 |  2 | False 3 | True 4 | True 5 | False -------------------------------------------------------------------------------- /src/About.Designer.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | 3 | namespace RDP_Portal { 4 | partial class About { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) { 15 | if (disposing && (components != null)) { 16 | components.Dispose(); 17 | } 18 | 19 | base.Dispose(disposing); 20 | } 21 | 22 | #region Windows Form Designer generated code 23 | 24 | /// 25 | /// Required method for Designer support - do not modify 26 | /// the contents of this method with the code editor. 27 | /// 28 | private void InitializeComponent() { 29 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About)); 30 | this.linkLabel1 = new System.Windows.Forms.LinkLabel(); 31 | this.labelName = new System.Windows.Forms.Label(); 32 | this.label2 = new System.Windows.Forms.Label(); 33 | this.buttonOK = new System.Windows.Forms.Button(); 34 | this.SuspendLayout(); 35 | // 36 | // linkLabel1 37 | // 38 | this.linkLabel1.Location = new System.Drawing.Point(12, 67); 39 | this.linkLabel1.Name = "linkLabel1"; 40 | this.linkLabel1.Size = new System.Drawing.Size(503, 23); 41 | this.linkLabel1.TabIndex = 0; 42 | this.linkLabel1.TabStop = true; 43 | this.linkLabel1.Text = "https://github.com/louislam/rdp-portal"; 44 | this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); 45 | // 46 | // labelName 47 | // 48 | this.labelName.Location = new System.Drawing.Point(12, 21); 49 | this.labelName.Name = "labelName"; 50 | this.labelName.Size = new System.Drawing.Size(301, 23); 51 | this.labelName.TabIndex = 1; 52 | this.labelName.Text = "RDP Portal"; 53 | // 54 | // label2 55 | // 56 | this.label2.Location = new System.Drawing.Point(12, 44); 57 | this.label2.Name = "label2"; 58 | this.label2.Size = new System.Drawing.Size(301, 23); 59 | this.label2.TabIndex = 2; 60 | this.label2.Text = "By Louis Lam"; 61 | // 62 | // buttonOK 63 | // 64 | this.buttonOK.Location = new System.Drawing.Point(238, 110); 65 | this.buttonOK.Name = "buttonOK"; 66 | this.buttonOK.Size = new System.Drawing.Size(75, 23); 67 | this.buttonOK.TabIndex = 3; 68 | this.buttonOK.Text = "OK"; 69 | this.buttonOK.UseVisualStyleBackColor = true; 70 | this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); 71 | // 72 | // About 73 | // 74 | this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); 75 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 76 | this.ClientSize = new System.Drawing.Size(325, 145); 77 | this.Controls.Add(this.buttonOK); 78 | this.Controls.Add(this.label2); 79 | this.Controls.Add(this.labelName); 80 | this.Controls.Add(this.linkLabel1); 81 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 82 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 83 | this.MaximizeBox = false; 84 | this.MinimizeBox = false; 85 | this.Name = "About"; 86 | this.ShowInTaskbar = false; 87 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 88 | this.Text = "About"; 89 | this.Load += new System.EventHandler(this.About_Load); 90 | this.ResumeLayout(false); 91 | } 92 | 93 | private System.Windows.Forms.LinkLabel linkLabel1; 94 | private System.Windows.Forms.Label labelName; 95 | private System.Windows.Forms.Label label2; 96 | private System.Windows.Forms.Button buttonOK; 97 | 98 | #endregion 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/About.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | 5 | namespace RDP_Portal { 6 | public partial class About : Form { 7 | public About() { 8 | InitializeComponent(); 9 | } 10 | 11 | private void About_Load(object sender, EventArgs e) { 12 | 13 | Location = new Point(Owner.Location.X + Owner.Width / 2 - ClientSize.Width / 2, 14 | Owner.Location.Y + Owner.Height / 2 - ClientSize.Height / 2); 15 | 16 | // https://stackoverflow.com/questions/909555/how-can-i-get-the-assembly-file-version 17 | System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); 18 | System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location); 19 | string version = fvi.FileVersion; 20 | 21 | labelName.Text = "RDP Portal v" + version; 22 | } 23 | 24 | private void buttonOK_Click(object sender, EventArgs e) { 25 | this.Close(); 26 | } 27 | 28 | private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { 29 | System.Diagnostics.Process.Start(((LinkLabel)sender).Text); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Config.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.IO; 5 | using Newtonsoft.Json; 6 | 7 | namespace RDP_Portal { 8 | public class Config { 9 | 10 | private static Config? _instance; 11 | public static string filename = "config.json"; 12 | public static string rdpDir = "rdp-files"; 13 | 14 | public static Config GetConfig() { 15 | if (!File.Exists(filename)) { 16 | File.AppendAllText(filename, "{}"); 17 | } 18 | 19 | if (!Directory.Exists(rdpDir)) { 20 | Directory.CreateDirectory(rdpDir); 21 | } 22 | 23 | var json = File.ReadAllText(filename); 24 | 25 | _instance = JsonConvert.DeserializeObject(json); 26 | 27 | if (_instance == null) { 28 | throw new Exception("Cannot read config.json"); 29 | } 30 | 31 | if (_instance.Profiles == null) { 32 | _instance.Profiles = new BindingList(); 33 | _instance.Save(); 34 | } 35 | 36 | return _instance; 37 | } 38 | 39 | public BindingList Profiles { get; set; } 40 | 41 | public bool KeepOpening { get; set; } = true; 42 | 43 | public void Save() { 44 | var json = JsonConvert.SerializeObject(this, Formatting.Indented); 45 | File.WriteAllText(filename, json); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/MainForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace RDP_Portal { 2 | partial class MainForm { 3 | /// 4 | /// Required designer variable. 5 | /// 6 | private System.ComponentModel.IContainer components = null; 7 | 8 | /// 9 | /// Clean up any resources being used. 10 | /// 11 | /// true if managed resources should be disposed; otherwise, false. 12 | protected override void Dispose(bool disposing) { 13 | if (disposing && (components != null)) { 14 | components.Dispose(); 15 | } 16 | 17 | base.Dispose(disposing); 18 | } 19 | 20 | #region Windows Form Designer generated code 21 | 22 | /// 23 | /// Required method for Designer support - do not modify 24 | /// the contents of this method with the code editor. 25 | /// 26 | private void InitializeComponent() { 27 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); 28 | this.checkBoxKeepOpening = new System.Windows.Forms.CheckBox(); 29 | this.buttonAbout = new System.Windows.Forms.Button(); 30 | this.buttonConnect = new System.Windows.Forms.Button(); 31 | this.textBoxComputer = new System.Windows.Forms.TextBox(); 32 | this.label1 = new System.Windows.Forms.Label(); 33 | this.label2 = new System.Windows.Forms.Label(); 34 | this.label3 = new System.Windows.Forms.Label(); 35 | this.label4 = new System.Windows.Forms.Label(); 36 | this.buttonNew = new System.Windows.Forms.Button(); 37 | this.textBoxUsername = new System.Windows.Forms.TextBox(); 38 | this.textBoxPassword = new System.Windows.Forms.TextBox(); 39 | this.textBoxDomain = new System.Windows.Forms.TextBox(); 40 | this.groupBox1 = new System.Windows.Forms.GroupBox(); 41 | this.buttonSave = new System.Windows.Forms.Button(); 42 | this.buttonDelete = new System.Windows.Forms.Button(); 43 | this.buttonOptions = new System.Windows.Forms.Button(); 44 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 45 | this.buttonCancel = new System.Windows.Forms.Button(); 46 | this.buttonEdit = new System.Windows.Forms.Button(); 47 | this.textBoxName = new System.Windows.Forms.TextBox(); 48 | this.listBox = new System.Windows.Forms.ListBox(); 49 | this.groupBox1.SuspendLayout(); 50 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 51 | this.SuspendLayout(); 52 | // 53 | // checkBoxKeepOpening 54 | // 55 | this.checkBoxKeepOpening.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 56 | this.checkBoxKeepOpening.Location = new System.Drawing.Point(13, 432); 57 | this.checkBoxKeepOpening.Margin = new System.Windows.Forms.Padding(4); 58 | this.checkBoxKeepOpening.Name = "checkBoxKeepOpening"; 59 | this.checkBoxKeepOpening.Size = new System.Drawing.Size(367, 30); 60 | this.checkBoxKeepOpening.TabIndex = 1; 61 | this.checkBoxKeepOpening.Text = "Keep opening RDP Portal"; 62 | this.checkBoxKeepOpening.UseVisualStyleBackColor = true; 63 | this.checkBoxKeepOpening.CheckedChanged += new System.EventHandler(this.checkBoxKeepOpening_CheckedChanged); 64 | // 65 | // buttonAbout 66 | // 67 | this.buttonAbout.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 68 | this.buttonAbout.Location = new System.Drawing.Point(487, 432); 69 | this.buttonAbout.Margin = new System.Windows.Forms.Padding(4); 70 | this.buttonAbout.Name = "buttonAbout"; 71 | this.buttonAbout.Size = new System.Drawing.Size(100, 28); 72 | this.buttonAbout.TabIndex = 2; 73 | this.buttonAbout.Text = "About"; 74 | this.buttonAbout.UseVisualStyleBackColor = true; 75 | this.buttonAbout.Click += new System.EventHandler(this.buttonAbout_Click); 76 | // 77 | // buttonConnect 78 | // 79 | this.buttonConnect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 80 | this.buttonConnect.Location = new System.Drawing.Point(358, 432); 81 | this.buttonConnect.Margin = new System.Windows.Forms.Padding(4); 82 | this.buttonConnect.Name = "buttonConnect"; 83 | this.buttonConnect.Size = new System.Drawing.Size(121, 28); 84 | this.buttonConnect.TabIndex = 3; 85 | this.buttonConnect.Text = "Connect"; 86 | this.buttonConnect.UseVisualStyleBackColor = true; 87 | this.buttonConnect.Click += new System.EventHandler(this.buttonConnect_Click); 88 | // 89 | // textBoxComputer 90 | // 91 | this.textBoxComputer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); 92 | this.textBoxComputer.Location = new System.Drawing.Point(123, 32); 93 | this.textBoxComputer.Margin = new System.Windows.Forms.Padding(4); 94 | this.textBoxComputer.Name = "textBoxComputer"; 95 | this.textBoxComputer.Size = new System.Drawing.Size(209, 22); 96 | this.textBoxComputer.TabIndex = 4; 97 | // 98 | // label1 99 | // 100 | this.label1.Location = new System.Drawing.Point(8, 36); 101 | this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 102 | this.label1.Name = "label1"; 103 | this.label1.Size = new System.Drawing.Size(107, 21); 104 | this.label1.TabIndex = 5; 105 | this.label1.Text = "Computer:"; 106 | // 107 | // label2 108 | // 109 | this.label2.Location = new System.Drawing.Point(8, 73); 110 | this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 111 | this.label2.Name = "label2"; 112 | this.label2.Size = new System.Drawing.Size(108, 23); 113 | this.label2.TabIndex = 6; 114 | this.label2.Text = "User name:"; 115 | // 116 | // label3 117 | // 118 | this.label3.Location = new System.Drawing.Point(8, 110); 119 | this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 120 | this.label3.Name = "label3"; 121 | this.label3.Size = new System.Drawing.Size(108, 23); 122 | this.label3.TabIndex = 7; 123 | this.label3.Text = "Password:"; 124 | // 125 | // label4 126 | // 127 | this.label4.Location = new System.Drawing.Point(8, 146); 128 | this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 129 | this.label4.Name = "label4"; 130 | this.label4.Size = new System.Drawing.Size(108, 23); 131 | this.label4.TabIndex = 8; 132 | this.label4.Text = "Domain:"; 133 | // 134 | // buttonNew 135 | // 136 | this.buttonNew.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 137 | this.buttonNew.Location = new System.Drawing.Point(13, 396); 138 | this.buttonNew.Margin = new System.Windows.Forms.Padding(4); 139 | this.buttonNew.Name = "buttonNew"; 140 | this.buttonNew.Size = new System.Drawing.Size(103, 28); 141 | this.buttonNew.TabIndex = 9; 142 | this.buttonNew.Text = "New"; 143 | this.buttonNew.UseVisualStyleBackColor = true; 144 | this.buttonNew.Click += new System.EventHandler(this.buttonNew_Click); 145 | // 146 | // textBoxUsername 147 | // 148 | this.textBoxUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); 149 | this.textBoxUsername.Location = new System.Drawing.Point(123, 69); 150 | this.textBoxUsername.Margin = new System.Windows.Forms.Padding(4); 151 | this.textBoxUsername.Name = "textBoxUsername"; 152 | this.textBoxUsername.Size = new System.Drawing.Size(209, 22); 153 | this.textBoxUsername.TabIndex = 10; 154 | // 155 | // textBoxPassword 156 | // 157 | this.textBoxPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); 158 | this.textBoxPassword.Location = new System.Drawing.Point(124, 106); 159 | this.textBoxPassword.Margin = new System.Windows.Forms.Padding(4); 160 | this.textBoxPassword.Name = "textBoxPassword"; 161 | this.textBoxPassword.Size = new System.Drawing.Size(208, 22); 162 | this.textBoxPassword.TabIndex = 11; 163 | this.textBoxPassword.UseSystemPasswordChar = true; 164 | // 165 | // textBoxDomain 166 | // 167 | this.textBoxDomain.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); 168 | this.textBoxDomain.Location = new System.Drawing.Point(124, 143); 169 | this.textBoxDomain.Margin = new System.Windows.Forms.Padding(4); 170 | this.textBoxDomain.Name = "textBoxDomain"; 171 | this.textBoxDomain.Size = new System.Drawing.Size(208, 22); 172 | this.textBoxDomain.TabIndex = 12; 173 | // 174 | // groupBox1 175 | // 176 | this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); 177 | this.groupBox1.Controls.Add(this.label3); 178 | this.groupBox1.Controls.Add(this.textBoxDomain); 179 | this.groupBox1.Controls.Add(this.textBoxComputer); 180 | this.groupBox1.Controls.Add(this.textBoxPassword); 181 | this.groupBox1.Controls.Add(this.label1); 182 | this.groupBox1.Controls.Add(this.textBoxUsername); 183 | this.groupBox1.Controls.Add(this.label2); 184 | this.groupBox1.Controls.Add(this.label4); 185 | this.groupBox1.Location = new System.Drawing.Point(234, 141); 186 | this.groupBox1.Margin = new System.Windows.Forms.Padding(4); 187 | this.groupBox1.Name = "groupBox1"; 188 | this.groupBox1.Padding = new System.Windows.Forms.Padding(4); 189 | this.groupBox1.Size = new System.Drawing.Size(353, 190); 190 | this.groupBox1.TabIndex = 13; 191 | this.groupBox1.TabStop = false; 192 | this.groupBox1.Text = "Connection"; 193 | // 194 | // buttonSave 195 | // 196 | this.buttonSave.Location = new System.Drawing.Point(232, 339); 197 | this.buttonSave.Margin = new System.Windows.Forms.Padding(4); 198 | this.buttonSave.Name = "buttonSave"; 199 | this.buttonSave.Size = new System.Drawing.Size(100, 28); 200 | this.buttonSave.TabIndex = 14; 201 | this.buttonSave.Text = "Save"; 202 | this.buttonSave.UseVisualStyleBackColor = true; 203 | this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click); 204 | // 205 | // buttonDelete 206 | // 207 | this.buttonDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 208 | this.buttonDelete.Location = new System.Drawing.Point(124, 396); 209 | this.buttonDelete.Margin = new System.Windows.Forms.Padding(4); 210 | this.buttonDelete.Name = "buttonDelete"; 211 | this.buttonDelete.Size = new System.Drawing.Size(100, 28); 212 | this.buttonDelete.TabIndex = 15; 213 | this.buttonDelete.Text = "Delete"; 214 | this.buttonDelete.UseVisualStyleBackColor = true; 215 | this.buttonDelete.Click += new System.EventHandler(this.buttonDelete_Click); 216 | // 217 | // buttonOptions 218 | // 219 | this.buttonOptions.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 220 | this.buttonOptions.Location = new System.Drawing.Point(487, 339); 221 | this.buttonOptions.Margin = new System.Windows.Forms.Padding(4); 222 | this.buttonOptions.Name = "buttonOptions"; 223 | this.buttonOptions.Size = new System.Drawing.Size(100, 28); 224 | this.buttonOptions.TabIndex = 16; 225 | this.buttonOptions.Text = "Options"; 226 | this.buttonOptions.UseVisualStyleBackColor = true; 227 | this.buttonOptions.Click += new System.EventHandler(this.buttonMoreOptions_Click); 228 | // 229 | // pictureBox1 230 | // 231 | this.pictureBox1.Image = global::rdp_portal.Properties.Resources.banner; 232 | this.pictureBox1.Location = new System.Drawing.Point(0, 0); 233 | this.pictureBox1.Margin = new System.Windows.Forms.Padding(0); 234 | this.pictureBox1.Name = "pictureBox1"; 235 | this.pictureBox1.Size = new System.Drawing.Size(600, 90); 236 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 237 | this.pictureBox1.TabIndex = 17; 238 | this.pictureBox1.TabStop = false; 239 | // 240 | // buttonCancel 241 | // 242 | this.buttonCancel.Location = new System.Drawing.Point(340, 339); 243 | this.buttonCancel.Margin = new System.Windows.Forms.Padding(4); 244 | this.buttonCancel.Name = "buttonCancel"; 245 | this.buttonCancel.Size = new System.Drawing.Size(100, 28); 246 | this.buttonCancel.TabIndex = 18; 247 | this.buttonCancel.Text = "Cancel"; 248 | this.buttonCancel.UseVisualStyleBackColor = true; 249 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); 250 | // 251 | // buttonEdit 252 | // 253 | this.buttonEdit.Location = new System.Drawing.Point(232, 339); 254 | this.buttonEdit.Margin = new System.Windows.Forms.Padding(4); 255 | this.buttonEdit.Name = "buttonEdit"; 256 | this.buttonEdit.Size = new System.Drawing.Size(100, 28); 257 | this.buttonEdit.TabIndex = 19; 258 | this.buttonEdit.Text = "Edit"; 259 | this.buttonEdit.UseVisualStyleBackColor = true; 260 | this.buttonEdit.Click += new System.EventHandler(this.buttonEdit_Click); 261 | // 262 | // textBoxName 263 | // 264 | this.textBoxName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); 265 | this.textBoxName.Location = new System.Drawing.Point(234, 107); 266 | this.textBoxName.Margin = new System.Windows.Forms.Padding(4); 267 | this.textBoxName.Name = "textBoxName"; 268 | this.textBoxName.Size = new System.Drawing.Size(353, 22); 269 | this.textBoxName.TabIndex = 13; 270 | // 271 | // listBox 272 | // 273 | this.listBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); 274 | this.listBox.DisplayMember = "Name"; 275 | this.listBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; 276 | this.listBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 277 | this.listBox.FormattingEnabled = true; 278 | this.listBox.ItemHeight = 32; 279 | this.listBox.Location = new System.Drawing.Point(13, 107); 280 | this.listBox.Margin = new System.Windows.Forms.Padding(4); 281 | this.listBox.Name = "listBox"; 282 | this.listBox.Size = new System.Drawing.Size(211, 276); 283 | this.listBox.TabIndex = 0; 284 | this.listBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox_DrawItem); 285 | this.listBox.SelectedValueChanged += new System.EventHandler(this.listBox_SelectedValueChanged); 286 | this.listBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox_MouseDoubleClick); 287 | // 288 | // MainForm 289 | // 290 | this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); 291 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 292 | this.BackColor = System.Drawing.SystemColors.Control; 293 | this.ClientSize = new System.Drawing.Size(600, 473); 294 | this.Controls.Add(this.textBoxName); 295 | this.Controls.Add(this.buttonEdit); 296 | this.Controls.Add(this.buttonCancel); 297 | this.Controls.Add(this.pictureBox1); 298 | this.Controls.Add(this.buttonOptions); 299 | this.Controls.Add(this.buttonDelete); 300 | this.Controls.Add(this.buttonSave); 301 | this.Controls.Add(this.groupBox1); 302 | this.Controls.Add(this.buttonNew); 303 | this.Controls.Add(this.buttonConnect); 304 | this.Controls.Add(this.buttonAbout); 305 | this.Controls.Add(this.checkBoxKeepOpening); 306 | this.Controls.Add(this.listBox); 307 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 308 | this.Location = new System.Drawing.Point(15, 15); 309 | this.Margin = new System.Windows.Forms.Padding(4); 310 | this.MaximizeBox = false; 311 | this.MaximumSize = new System.Drawing.Size(618, 5528); 312 | this.MinimumSize = new System.Drawing.Size(618, 520); 313 | this.Name = "MainForm"; 314 | this.Text = "RDP Portal"; 315 | this.Load += new System.EventHandler(this.MainForm_Load); 316 | this.groupBox1.ResumeLayout(false); 317 | this.groupBox1.PerformLayout(); 318 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 319 | this.ResumeLayout(false); 320 | this.PerformLayout(); 321 | } 322 | 323 | private System.Windows.Forms.TextBox textBoxName; 324 | 325 | private System.Windows.Forms.Button buttonEdit; 326 | 327 | private System.Windows.Forms.ListBox listBox; 328 | 329 | private System.Windows.Forms.Button buttonCancel; 330 | 331 | private System.Windows.Forms.PictureBox pictureBox1; 332 | 333 | private System.Windows.Forms.Button buttonOptions; 334 | 335 | private System.Windows.Forms.Button buttonSave; 336 | private System.Windows.Forms.Button buttonDelete; 337 | 338 | private System.Windows.Forms.GroupBox groupBox1; 339 | 340 | private System.Windows.Forms.TextBox textBoxUsername; 341 | private System.Windows.Forms.TextBox textBoxPassword; 342 | private System.Windows.Forms.TextBox textBoxDomain; 343 | 344 | private System.Windows.Forms.Button buttonNew; 345 | 346 | private System.Windows.Forms.TextBox textBoxComputer; 347 | private System.Windows.Forms.Label label1; 348 | private System.Windows.Forms.Label label2; 349 | private System.Windows.Forms.Label label3; 350 | private System.Windows.Forms.Label label4; 351 | 352 | private System.Windows.Forms.Button buttonConnect; 353 | 354 | private System.Windows.Forms.Button buttonAbout; 355 | 356 | private System.Windows.Forms.CheckBox checkBoxKeepOpening; 357 | 358 | #endregion 359 | } 360 | } 361 | -------------------------------------------------------------------------------- /src/MainForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Diagnostics; 6 | using System.Drawing; 7 | using System.Linq; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | using System.Windows.Forms; 11 | 12 | namespace RDP_Portal { 13 | public partial class MainForm : Form { 14 | 15 | private Config _config; 16 | private bool _editMode = false; 17 | private Profile selectedProfile = null; 18 | 19 | public MainForm() { 20 | InitializeComponent(); 21 | _config = Config.GetConfig(); 22 | } 23 | 24 | private void MainForm_Load(object sender, EventArgs e) { 25 | listBox.DataSource = _config.Profiles; 26 | 27 | if (_config.Profiles.Count == 0) { 28 | AddNewProfile(); 29 | } 30 | 31 | checkBoxKeepOpening.Checked = _config.KeepOpening; 32 | } 33 | 34 | public bool EditMode { 35 | get => _editMode; 36 | set { 37 | buttonEdit.Visible = !value; 38 | buttonSave.Visible = value; 39 | buttonCancel.Visible = value; 40 | buttonOptions.Enabled = !value; 41 | 42 | buttonConnect.Enabled = !value; 43 | 44 | textBoxName.Enabled = value; 45 | textBoxComputer.Enabled = value; 46 | textBoxUsername.Enabled = value; 47 | textBoxPassword.Enabled = value; 48 | textBoxDomain.Enabled = value; 49 | } 50 | } 51 | 52 | private void AddNewProfile() { 53 | var profile = new Profile(); 54 | profile.JustAdded = true; 55 | _config.Profiles.Add(profile); 56 | listBox.SelectedIndex = _config.Profiles.Count - 1; 57 | } 58 | 59 | private void buttonMoreOptions_Click(object sender, EventArgs e) { 60 | ProcessStartInfo startInfo = new ProcessStartInfo { 61 | CreateNoWindow = false, 62 | UseShellExecute = false, 63 | FileName = "mstsc.exe", 64 | Arguments = "/edit " + GetSelectedProfile().Filename, 65 | }; 66 | 67 | try { 68 | var exeProcess = Process.Start(startInfo) ?? throw new InvalidOperationException(); 69 | exeProcess.WaitForExit(); 70 | } catch (Exception ex) { 71 | MessageBox.Show(ex.ToString()); 72 | } 73 | } 74 | 75 | 76 | private void buttonConnect_Click(object sender, EventArgs e) { 77 | var profile = GetSelectedProfile(); 78 | 79 | if (String.IsNullOrWhiteSpace(profile.Computer) || String.IsNullOrWhiteSpace(profile.Computer)) { 80 | MessageBox.Show("Invalid connection"); 81 | return; 82 | } 83 | 84 | profile.PrepareRdpFile(); 85 | 86 | ProcessStartInfo startInfo = new ProcessStartInfo { 87 | CreateNoWindow = false, 88 | UseShellExecute = false, 89 | FileName = "mstsc.exe", 90 | Arguments = profile.Filename, 91 | }; 92 | 93 | try { 94 | var exeProcess = Process.Start(startInfo) ?? throw new InvalidOperationException(); 95 | exeProcess.WaitForExit(); 96 | 97 | if (!_config.KeepOpening) { 98 | this.Close(); 99 | } 100 | 101 | } catch (Exception ex) { 102 | MessageBox.Show(ex.ToString()); 103 | } 104 | } 105 | 106 | private void listBox_SelectedValueChanged(object sender, EventArgs e) { 107 | SelectProfile(); 108 | } 109 | 110 | private Profile GetSelectedProfile() { 111 | return (Profile) listBox.SelectedItem; 112 | } 113 | 114 | private void SelectProfile(bool force = false) { 115 | var profile = (Profile) listBox.SelectedItem; 116 | 117 | // Avoid click empty area reset value 118 | if (profile == selectedProfile && !force) { 119 | return; 120 | } 121 | 122 | selectedProfile = profile; 123 | 124 | EditMode = profile.JustAdded; 125 | 126 | textBoxName.Text = profile.Name ; 127 | textBoxComputer.Text = profile.Computer; 128 | textBoxUsername.Text = profile.Username ; 129 | textBoxPassword.Text = profile.Password; 130 | textBoxDomain.Text = profile.Domain; 131 | } 132 | 133 | private void buttonEdit_Click(object sender, EventArgs e) { 134 | EditMode = true; 135 | } 136 | 137 | private void buttonCancel_Click(object sender, EventArgs e) { 138 | EditMode = false; 139 | 140 | var profile = GetSelectedProfile(); 141 | 142 | if (profile.JustAdded && _config.Profiles.Count > 1) { 143 | buttonDelete_Click(null, null); 144 | } else { 145 | SelectProfile(true); 146 | } 147 | } 148 | 149 | private void buttonNew_Click(object sender, EventArgs e) { 150 | AddNewProfile(); 151 | } 152 | 153 | private void buttonDelete_Click(object sender, EventArgs e) { 154 | // show confirm dialog 155 | var confirmResult = MessageBox.Show( 156 | "Are you sure to delete this profile?", 157 | "Confirm", 158 | MessageBoxButtons.YesNo); 159 | 160 | // if confirm delete 161 | if (confirmResult == DialogResult.Yes) { 162 | var selectedItems = (Profile) listBox.SelectedItem; 163 | selectedItems.Delete(); 164 | _config.Profiles.Remove(selectedItems); 165 | _config.Save(); 166 | 167 | if (_config.Profiles.Count == 0) { 168 | AddNewProfile(); 169 | SelectProfile(true); 170 | } 171 | } 172 | } 173 | 174 | private void buttonSave_Click(object sender, EventArgs e) { 175 | var profile = (Profile) listBox.SelectedItem; 176 | 177 | profile.JustAdded = false; 178 | 179 | profile.Name = textBoxName.Text; 180 | profile.Computer = textBoxComputer.Text; 181 | profile.Username = textBoxUsername.Text; 182 | profile.Password = textBoxPassword.Text; 183 | profile.Domain = textBoxDomain.Text; 184 | 185 | profile.PrepareRdpFile(); 186 | 187 | _config.Save(); 188 | EditMode = false; 189 | 190 | // Refresh the list 191 | listBox.DisplayMember = null; 192 | listBox.DisplayMember = "Name"; 193 | } 194 | 195 | private void checkBoxKeepOpening_CheckedChanged(object sender, EventArgs e) { 196 | _config.KeepOpening = checkBoxKeepOpening.Checked; 197 | _config.Save(); 198 | } 199 | 200 | private void buttonAbout_Click(object sender, EventArgs e) { 201 | About about = new About(); 202 | about.ShowDialog(this); 203 | } 204 | 205 | private void listBox_MouseDoubleClick(object sender, MouseEventArgs e) { 206 | buttonConnect_Click(sender, e); 207 | } 208 | 209 | /** 210 | * From https://stackoverflow.com/questions/8333282/how-can-i-include-icons-in-my-listbox 211 | */ 212 | private void listBox_DrawItem(object sender, DrawItemEventArgs e) { 213 | if (e.Index == -1) 214 | return; 215 | 216 | e.DrawBackground(); 217 | Brush myBrush = Brushes.Black; 218 | 219 | 220 | var iconWidth = listBox.ItemHeight; 221 | var iconMargin = 4; 222 | var textMargin = (iconWidth - 18) / 2; 223 | var rect = new Rectangle(e.Bounds.X + iconMargin, e.Bounds.Y, iconWidth, iconWidth); 224 | //assuming the icon is already added to project resources 225 | 226 | e.Graphics.DrawIcon(rdp_portal.Properties.Resources.icon, rect); 227 | 228 | var profile = (Profile)listBox.Items[e.Index]; 229 | 230 | e.Graphics.DrawString( 231 | profile.Name, 232 | e.Font, 233 | myBrush, 234 | new Rectangle(e.Bounds.X + iconMargin * 2 + iconWidth, e.Bounds.Y + textMargin, e.Bounds.Width, e.Bounds.Height), 235 | StringFormat.GenericDefault 236 | ); 237 | 238 | // If the ListBox has focus, draw a focus rectangle around the selected item. 239 | e.DrawFocusRectangle(); 240 | } 241 | 242 | } 243 | } 244 | -------------------------------------------------------------------------------- /src/MainForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | 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 557 | SUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAACAAAAAgAIBgAAAPR41PoAACAASURBVHhe7L0HYFzFtf8/ 558 | 24tWqy6527IkW3LBgG2MAQOmBkIIpEAaNYSQhPSEvJK8vJf3f7+XhGpTTQshBHgONSTUEGIgBIPpARds 559 | gcG4q3ftavU/Z3avLRvJmr3a2/Z+hyhWmb135jNnd773zJkzHoECAiAAAiAAAiDgOgIe1/UYHQYBEAAB 560 | EAABEBAQADACEAABEAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAA 561 | AhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAABEAABEHAhAQgAFw46ugwCIAACIAACEACw 562 | ARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAAB 563 | EAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQ 564 | cCEBCAAXDjq6DAIgAAIgAAIQALABEAABEAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEI 565 | ABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAABEAABEHAhAQgAFw46 566 | ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIg 567 | AAIgAAIQALABEAABEAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAA 568 | AhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAABEAABEHAhAQgAFw46ugwCIAACIAACEACw 569 | ARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQcCEBCAAXDjq6DAIgAAIgAAIQALABEAAB 570 | EAABEHAhAQgAFw46ugwCIAACIAACEACwARAAARAAARBwIQEIABcOOroMAiAAAiAAAhAAsAEQAAEQAAEQ 571 | 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 1039 | YMBnk+bmEAAAAABJRU5ErkJggg== 1040 | 1041 | 1042 | -------------------------------------------------------------------------------- /src/Mstscpw.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Runtime.InteropServices; 4 | using System.ComponentModel; 5 | using System.Security.Cryptography; 6 | using System.Linq; 7 | using System.Text; 8 | 9 | namespace RDP_Portal { 10 | /** 11 | * By ChipForster 12 | * https://www.remkoweijnen.nl/blog/2007/10/18/how-rdp-passwords-are-encrypted/ 13 | */ 14 | class Mstscpw { 15 | private const int CRYPTPROTECT_UI_FORBIDDEN = 0x1; 16 | 17 | // Wrapper for the NULL handle or pointer. 18 | static private IntPtr NullPtr = ((IntPtr)((int)(0))); 19 | 20 | // Wrapper for DPAPI CryptProtectData function. 21 | [DllImport( "crypt32.dll", SetLastError = true, 22 | CharSet = System.Runtime.InteropServices.CharSet.Auto )] 23 | 24 | private static extern bool CryptProtectData( 25 | ref DATA_BLOB pPlainText, 26 | [MarshalAs(UnmanagedType.LPWStr)] string szDescription, 27 | IntPtr pEntroy, 28 | IntPtr pReserved, 29 | IntPtr pPrompt, 30 | int dwFlags, 31 | ref DATA_BLOB pCipherText); 32 | 33 | // BLOB structure used to pass data to DPAPI functions. 34 | [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 35 | internal struct DATA_BLOB { 36 | public int cbData; 37 | public IntPtr pbData; 38 | } 39 | 40 | private static void InitBLOB(byte[] data, ref DATA_BLOB blob) { 41 | blob.pbData = Marshal.AllocHGlobal(data.Length); 42 | if (blob.pbData == IntPtr.Zero) 43 | throw new Exception( "Unable to allocate buffer for BLOB data." ); 44 | 45 | blob.cbData = data.Length; 46 | Marshal.Copy(data, 0, blob.pbData, data.Length); 47 | } 48 | 49 | public string encryptpw(string pw) { 50 | byte[] pwba = Encoding.Unicode.GetBytes(pw); 51 | DATA_BLOB dataIn = new DATA_BLOB(); 52 | DATA_BLOB dataOut = new DATA_BLOB(); 53 | StringBuilder epwsb = new StringBuilder(); 54 | try { 55 | try { 56 | InitBLOB(pwba, ref dataIn); 57 | } catch (Exception ex) { 58 | throw new Exception( "Cannot initialize dataIn BLOB.", ex ); 59 | } 60 | 61 | bool success = CryptProtectData( 62 | ref dataIn, 63 | "psw", 64 | NullPtr, 65 | NullPtr, 66 | NullPtr, 67 | CRYPTPROTECT_UI_FORBIDDEN, 68 | ref dataOut ); 69 | 70 | if (!success) { 71 | int errCode = Marshal.GetLastWin32Error(); 72 | throw new Exception( "CryptProtectData failed.", new Win32Exception(errCode) ); 73 | } 74 | 75 | byte[] epwba = new byte[dataOut.cbData]; 76 | Marshal.Copy(dataOut.pbData, epwba, 0, dataOut.cbData); 77 | 78 | // Convert hex data to hex characters (suitable for a string) 79 | for (int i = 0; i < dataOut.cbData; i++) { 80 | epwsb.Append(Convert.ToString(epwba[i], 16).PadLeft(2, '0').ToUpper()); 81 | } 82 | 83 | } catch (Exception ex) { 84 | throw new Exception( "unable to encrypt data.", ex ); 85 | } finally { 86 | if (dataIn.pbData != IntPtr.Zero) 87 | Marshal.FreeHGlobal(dataIn.pbData); 88 | 89 | if (dataOut.pbData != IntPtr.Zero) 90 | Marshal.FreeHGlobal(dataOut.pbData); 91 | } 92 | 93 | return epwsb.ToString(); 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/Profile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System.IO; 5 | using System.Windows.Forms; 6 | using Newtonsoft.Json; 7 | 8 | namespace RDP_Portal { 9 | public class Profile { 10 | private string _name = ""; 11 | 12 | public string Name { 13 | get { 14 | if (_name == "") { 15 | return ""; 16 | } 17 | return _name; 18 | } 19 | set => _name = value; 20 | } 21 | 22 | public string Filename { get; set; } = ""; 23 | public string Computer { get; set; } 24 | public string Username { get; set; } 25 | 26 | /** 27 | * Encrypted Password used by mstsc.exe 28 | */ 29 | public string GetRDPEncryptedPassword() { 30 | var mstscpw = new Mstscpw(); 31 | return mstscpw.encryptpw(this.Password); 32 | } 33 | 34 | /** 35 | * Encrypted Password in config.json 36 | */ 37 | public string EncryptedPassword { get; set; } = ""; 38 | 39 | [JsonIgnore] 40 | public string Password { 41 | get { 42 | if (EncryptedPassword == "") { 43 | return EncryptedPassword; 44 | } 45 | return EncryptedPassword.Decrypt(); 46 | } 47 | set => EncryptedPassword = value.Encrypt(); 48 | } 49 | 50 | public string Domain { get; set; } 51 | 52 | public void PrepareRdpFile() { 53 | var justCreated = false; 54 | 55 | if (Filename == null || Filename == "") { 56 | String name; 57 | while (true) { 58 | name = Config.rdpDir + "\\" + StringUtil.GenerateName(8) + ".rdp"; 59 | if (!File.Exists(name)) { 60 | var file = File.Create(name); 61 | file.Close(); 62 | justCreated = true; 63 | break; 64 | } 65 | } 66 | Filename = name; 67 | } 68 | 69 | if (!File.Exists(Filename)) { 70 | var file = File.Create(Filename); 71 | file.Close(); 72 | justCreated = true; 73 | } 74 | 75 | var lines = File.ReadAllLines(Filename); 76 | var removeList = new [] { 77 | "full address:", 78 | "username:", 79 | "password", 80 | "domain:", 81 | "winposstr", 82 | }; 83 | 84 | var result = new List(); 85 | var width = 1280; 86 | var height = 720; 87 | 88 | foreach (var line in lines) { 89 | var ok = true; 90 | 91 | foreach (var startKeyword in removeList) { 92 | if (line.StartsWith(startKeyword)) { 93 | ok = false; 94 | break; 95 | } 96 | } 97 | 98 | // Extract Width & Height 99 | try { 100 | int w = width, h = height; 101 | 102 | if (line.StartsWith("desktopwidth:i:")) { 103 | w = int.Parse(line.Replace("desktopwidth:i:", "")); 104 | } 105 | if (line.StartsWith("desktopheight:i:")) { 106 | h = int.Parse(line.Replace("desktopheight:i:", "")); 107 | } 108 | width = w; 109 | height = h; 110 | } catch (Exception ex) { 111 | 112 | } 113 | 114 | 115 | if (ok) { 116 | result.Add(line); 117 | } 118 | } 119 | 120 | if (Computer != "") { 121 | result.Add("full address:s:" + Computer); 122 | } 123 | 124 | if (Username != "") { 125 | result.Add("username:s:" + Username); 126 | } 127 | 128 | if (Password != "") { 129 | result.Add("password 51:b:" + GetRDPEncryptedPassword()); 130 | } 131 | 132 | if (Domain != "") { 133 | result.Add("domain:s:" + Domain); 134 | } 135 | 136 | // Reset the start position 137 | var xBuffer = 10; 138 | var yBuffer = 25; 139 | 140 | Rectangle resolution = Screen.PrimaryScreen.Bounds; 141 | var left = resolution.Size.Width / 2 - width / 2 - xBuffer; 142 | var top = resolution.Size.Height / 2 - height / 2 - yBuffer; 143 | var right = resolution.Size.Width / 2 + width / 2 + xBuffer; 144 | var bottom = resolution.Size.Height / 2 + height / 2 + yBuffer; 145 | result.Add($"winposstr:s:0,1,{left},{top},{right},{bottom}"); 146 | 147 | if (justCreated) { 148 | result.Add("desktopwidth:i:1280"); 149 | result.Add("desktopheight:i:720"); 150 | result.Add("use multimon:i:0"); 151 | result.Add("screen mode id:i:1"); 152 | result.Add("authentication level:i:0"); 153 | result.Add("prompt for credentials:i:0"); 154 | result.Add("promptcredentialonce:i:0"); 155 | } 156 | 157 | var writer = new StreamWriter(Filename, false); 158 | 159 | foreach (var line in result) { 160 | writer.WriteLine(line); 161 | } 162 | 163 | writer.Close(); 164 | } 165 | 166 | [JsonIgnore] public bool JustAdded { get; set; } = false; 167 | 168 | public void Delete() { 169 | try { 170 | File.Delete(Filename); 171 | } catch (Exception ex) { 172 | 173 | } 174 | } 175 | } 176 | } 177 | -------------------------------------------------------------------------------- /src/RdpFile.cs: -------------------------------------------------------------------------------- 1 | namespace RDP_Portal { 2 | public class RdpFile { 3 | 4 | } 5 | } -------------------------------------------------------------------------------- /src/StringUtil.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Security.Cryptography; 4 | using System.Text; 5 | 6 | public static class StringUtil { 7 | private static byte[] key = new byte[8] {226, 175, 129, 22, 187, 4, 143, 171}; 8 | private static byte[] iv = new byte[8] {181, 239, 77, 174, 238, 148, 206, 164}; 9 | 10 | public static string Encrypt(this string text) { 11 | SymmetricAlgorithm algorithm = DES.Create(); 12 | ICryptoTransform transform = algorithm.CreateEncryptor(key, iv); 13 | byte[] inputbuffer = Encoding.Unicode.GetBytes(text); 14 | byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); 15 | return Convert.ToBase64String(outputBuffer); 16 | } 17 | 18 | public static string Decrypt(this string text) { 19 | SymmetricAlgorithm algorithm = DES.Create(); 20 | ICryptoTransform transform = algorithm.CreateDecryptor(key, iv); 21 | byte[] inputbuffer = Convert.FromBase64String(text); 22 | byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); 23 | return Encoding.Unicode.GetString(outputBuffer); 24 | } 25 | 26 | public static string GenerateName(int len) { 27 | Random random = new Random(); 28 | const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 29 | return new string(Enumerable.Repeat(chars, len) 30 | .Select(s => s[random.Next(s.Length)]).ToArray()); 31 | } 32 | } 33 | --------------------------------------------------------------------------------