From e1164c281e515d08c0b0d76f7e1f368d4bff39db Mon Sep 17 00:00:00 2001 From: Parthasarathy Dharmalingam Date: Mon, 27 Apr 2020 21:57:13 +0530 Subject: [PATCH] SecurdenRDP related changes added, --- Myrtille.Services/Myrtille.Services.csproj | 5 +- Myrtille.Services/Program.cs | 3 +- Myrtille.Services/ServicesInstaller.cs | 4 +- Myrtille.Services/app.config | 14 +- Myrtille.Setup/Myrtille.Setup.vdproj | 419 +++++++++++++-------- Myrtille.Web/Default.aspx | 48 +-- Myrtille.Web/Default.aspx.cs | 101 ++++- Myrtille.Web/Web.Base.config | 10 +- Myrtille.Web/Web.config | 10 +- Myrtille.Web/favicon.ico | Bin 27198 -> 27496 bytes 10 files changed, 420 insertions(+), 194 deletions(-) diff --git a/Myrtille.Services/Myrtille.Services.csproj b/Myrtille.Services/Myrtille.Services.csproj index aca47f0..4d37c51 100644 --- a/Myrtille.Services/Myrtille.Services.csproj +++ b/Myrtille.Services/Myrtille.Services.csproj @@ -9,7 +9,7 @@ Exe Properties Myrtille.Services - Myrtille.Services + SecurdenRDP v4.5 @@ -31,7 +31,8 @@ true - myrtille.ico + + x64 diff --git a/Myrtille.Services/Program.cs b/Myrtille.Services/Program.cs index 591f0d1..a943733 100644 --- a/Myrtille.Services/Program.cs +++ b/Myrtille.Services/Program.cs @@ -94,11 +94,12 @@ private static void Main(string[] args) // database (enterprise mode) ConfigureEnterpriseDatabase(); + /* if (!Environment.UserInteractive) { Run(new Program()); } - else + else*/ { var consoleTraceListener = new ConsoleTraceListener(); consoleTraceListener.Filter = new EventTypeFilter(SourceLevels.Information); diff --git a/Myrtille.Services/ServicesInstaller.cs b/Myrtille.Services/ServicesInstaller.cs index 2e100a9..7fec48e 100644 --- a/Myrtille.Services/ServicesInstaller.cs +++ b/Myrtille.Services/ServicesInstaller.cs @@ -71,7 +71,7 @@ public override void Install( process.StartInfo.FileName = string.Format(@"{0}\WindowsPowerShell\v1.0\powershell.exe", Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess ? Environment.SystemDirectory.ToLower().Replace("system32", "sysnative") : Environment.SystemDirectory); process.StartInfo.Arguments = "-ExecutionPolicy Bypass" + " -Command \"& '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.Install.ps1") + "'" + - " -BinaryPath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.exe") + "'" + + " -BinaryPath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "SecurdenRDP.exe") + "'" + " -DebugMode " + (debug ? "1" : "0") + " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Install.log") + "'" + "\""; @@ -86,7 +86,7 @@ public override void Install( // load config var config = new XmlDocument(); - var configPath = Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.exe.config"); + var configPath = Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "SecurdenRDP.exe.config"); config.Load(configPath); var navigator = config.CreateNavigator(); diff --git a/Myrtille.Services/app.config b/Myrtille.Services/app.config index 1c47d68..0aa5e40 100644 --- a/Myrtille.Services/app.config +++ b/Myrtille.Services/app.config @@ -28,7 +28,7 @@ - + @@ -111,7 +111,7 @@ - + @@ -119,7 +119,7 @@ - + @@ -127,7 +127,7 @@ - + @@ -135,7 +135,7 @@ - + @@ -143,7 +143,7 @@ - + @@ -151,7 +151,7 @@ - + diff --git a/Myrtille.Setup/Myrtille.Setup.vdproj b/Myrtille.Setup/Myrtille.Setup.vdproj index b945fcf..ab89e9a 100644 --- a/Myrtille.Setup/Myrtille.Setup.vdproj +++ b/Myrtille.Setup/Myrtille.Setup.vdproj @@ -27,6 +27,12 @@ } "Entry" { + "MsmKey" = "8:_038EA8FC1D324EB8B2BA820F7807D39F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_06A629560B9B7DC987AA665FD1B828B6" "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" "MsmSig" = "8:_UNDEFINED" @@ -58,13 +64,13 @@ "Entry" { "MsmKey" = "8:_1D10D2BE39B9B310B83DE676E67E5EF6" - "OwnerKey" = "8:_00B33221B95C9FFA8E5BE92EDB034E4B" + "OwnerKey" = "8:_D7163F580847147A643E938A4D2D20CD" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_1D10D2BE39B9B310B83DE676E67E5EF6" - "OwnerKey" = "8:_D7163F580847147A643E938A4D2D20CD" + "OwnerKey" = "8:_00B33221B95C9FFA8E5BE92EDB034E4B" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -82,13 +88,13 @@ "Entry" { "MsmKey" = "8:_4347044EBE9C10A0AD17D8B9DF286340" - "OwnerKey" = "8:_653D6FBBA167416D9037981F1E63EC6A" + "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_4347044EBE9C10A0AD17D8B9DF286340" - "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" + "OwnerKey" = "8:_653D6FBBA167416D9037981F1E63EC6A" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -100,7 +106,7 @@ "Entry" { "MsmKey" = "8:_4514C44EF37C5557F7F2189AA626E7BA" - "OwnerKey" = "8:_959494E7D2296ABCCAC1B8CAB5C08F7D" + "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -112,7 +118,7 @@ "Entry" { "MsmKey" = "8:_4514C44EF37C5557F7F2189AA626E7BA" - "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" + "OwnerKey" = "8:_959494E7D2296ABCCAC1B8CAB5C08F7D" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -124,13 +130,13 @@ "Entry" { "MsmKey" = "8:_49CD41B96497F58A97BFBC1E16DF98E9" - "OwnerKey" = "8:_E4132899F6CC2559E79841DCD84FC8D7" + "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_49CD41B96497F58A97BFBC1E16DF98E9" - "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" + "OwnerKey" = "8:_E4132899F6CC2559E79841DCD84FC8D7" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -219,13 +225,13 @@ } "Entry" { - "MsmKey" = "8:_7EB427F5003C403ABD724E7222C110DF" + "MsmKey" = "8:_7CACC34CC765445AB7F4D22E12400FAA" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_834D326341414391AEB31737C93F4178" + "MsmKey" = "8:_7EB427F5003C403ABD724E7222C110DF" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } @@ -238,13 +244,13 @@ "Entry" { "MsmKey" = "8:_83A15477F512314BC17E6D4FAEDDDF13" - "OwnerKey" = "8:_1D10D2BE39B9B310B83DE676E67E5EF6" + "OwnerKey" = "8:_8EAC6B5FFE0A267E4A04CF0D01C6802D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_83A15477F512314BC17E6D4FAEDDDF13" - "OwnerKey" = "8:_00B33221B95C9FFA8E5BE92EDB034E4B" + "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -256,13 +262,13 @@ "Entry" { "MsmKey" = "8:_83A15477F512314BC17E6D4FAEDDDF13" - "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" + "OwnerKey" = "8:_00B33221B95C9FFA8E5BE92EDB034E4B" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_83A15477F512314BC17E6D4FAEDDDF13" - "OwnerKey" = "8:_8EAC6B5FFE0A267E4A04CF0D01C6802D" + "OwnerKey" = "8:_1D10D2BE39B9B310B83DE676E67E5EF6" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -291,6 +297,12 @@ } "Entry" { + "MsmKey" = "8:_8EC8B4CCB21E43CEBFEB52A4288E56A1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_9186723DB4B94643BE0E7976C34CADE0" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -303,6 +315,12 @@ } "Entry" { + "MsmKey" = "8:_971C51014FA44C66A4D3ED71CEDF8970" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_A2387236827B85F792CC12E14F254A33" "OwnerKey" = "8:_959494E7D2296ABCCAC1B8CAB5C08F7D" "MsmSig" = "8:_UNDEFINED" @@ -310,7 +328,7 @@ "Entry" { "MsmKey" = "8:_A2387236827B85F792CC12E14F254A33" - "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" + "OwnerKey" = "8:_B97171D34C04794AF829836FD31AFEF8" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -322,18 +340,18 @@ "Entry" { "MsmKey" = "8:_A2387236827B85F792CC12E14F254A33" - "OwnerKey" = "8:_B97171D34C04794AF829836FD31AFEF8" + "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_A2B13A6B800941088742F64E3ACCF607" + "MsmKey" = "8:_A490591BEB0F433F8F7017269A180690" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_A490591BEB0F433F8F7017269A180690" + "MsmKey" = "8:_A6A88A28C9F14F71A21B3C68E5BB3FA9" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } @@ -406,19 +424,13 @@ "Entry" { "MsmKey" = "8:_C9ECCD86C0C15BB6DA825FE0194F2275" - "OwnerKey" = "8:_E4132899F6CC2559E79841DCD84FC8D7" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_C9ECCD86C0C15BB6DA825FE0194F2275" "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" "MsmSig" = "8:_UNDEFINED" } "Entry" { - "MsmKey" = "8:_CB82298260A444B7B29CE5A388263FE4" - "OwnerKey" = "8:_UNDEFINED" + "MsmKey" = "8:_C9ECCD86C0C15BB6DA825FE0194F2275" + "OwnerKey" = "8:_E4132899F6CC2559E79841DCD84FC8D7" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -429,18 +441,6 @@ } "Entry" { - "MsmKey" = "8:_D2BD47CF9D8541A7920CEB2ACD15F818" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_D67552EDCF414571848D175A04F06C7C" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { "MsmKey" = "8:_D7163F580847147A643E938A4D2D20CD" "OwnerKey" = "8:_653D6FBBA167416D9037981F1E63EC6A" "MsmSig" = "8:_UNDEFINED" @@ -472,13 +472,13 @@ "Entry" { "MsmKey" = "8:_E4132899F6CC2559E79841DCD84FC8D7" - "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" + "OwnerKey" = "8:_959494E7D2296ABCCAC1B8CAB5C08F7D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_E4132899F6CC2559E79841DCD84FC8D7" - "OwnerKey" = "8:_959494E7D2296ABCCAC1B8CAB5C08F7D" + "OwnerKey" = "8:_6A00A4B5E0C64F48AF08EC529C41D062" "MsmSig" = "8:_UNDEFINED" } "Entry" @@ -526,157 +526,157 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_83A15477F512314BC17E6D4FAEDDDF13" + "OwnerKey" = "8:_B97171D34C04794AF829836FD31AFEF8" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_C9ECCD86C0C15BB6DA825FE0194F2275" + "OwnerKey" = "8:_E0C4678202339E96FDE2102DC9B902B8" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_49CD41B96497F58A97BFBC1E16DF98E9" + "OwnerKey" = "8:_D235B956D89B25CBE9E7A4A18D913DCC" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_4347044EBE9C10A0AD17D8B9DF286340" + "OwnerKey" = "8:_BEE545F23EE0469A8193EE7AE954BF3D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_E4132899F6CC2559E79841DCD84FC8D7" + "OwnerKey" = "8:_8EAC6B5FFE0A267E4A04CF0D01C6802D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_4514C44EF37C5557F7F2189AA626E7BA" + "OwnerKey" = "8:_959494E7D2296ABCCAC1B8CAB5C08F7D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_EB3D288BC1ABB92E80CBBDBC8243CD7A" + "OwnerKey" = "8:_A2387236827B85F792CC12E14F254A33" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_B9CF645D75510FD233C6D6FC0571D082" + "OwnerKey" = "8:_653D6FBBA167416D9037981F1E63EC6A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_B7BCCA46FC4781E0CC09C5FF5B0C4ACF" + "OwnerKey" = "8:_229882A1E8C4609D4F72ACCBD3578620" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_1D10D2BE39B9B310B83DE676E67E5EF6" + "OwnerKey" = "8:_BBD2441433942D8A251A9417B3C419A6" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_00B33221B95C9FFA8E5BE92EDB034E4B" + "OwnerKey" = "8:_747A0EEC580A1287CAC0C6614CBCB2D7" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_D7163F580847147A643E938A4D2D20CD" + "OwnerKey" = "8:_6C00FD3B5ABE75432E8304496D81957D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_89CA178907957E98DE0B33D6A93C65AE" + "OwnerKey" = "8:_D72151FF05C96A55F9FBF886FBA4D3F8" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_D72151FF05C96A55F9FBF886FBA4D3F8" + "OwnerKey" = "8:_89CA178907957E98DE0B33D6A93C65AE" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_6C00FD3B5ABE75432E8304496D81957D" + "OwnerKey" = "8:_D7163F580847147A643E938A4D2D20CD" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_747A0EEC580A1287CAC0C6614CBCB2D7" + "OwnerKey" = "8:_00B33221B95C9FFA8E5BE92EDB034E4B" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_BBD2441433942D8A251A9417B3C419A6" + "OwnerKey" = "8:_1D10D2BE39B9B310B83DE676E67E5EF6" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_229882A1E8C4609D4F72ACCBD3578620" + "OwnerKey" = "8:_B7BCCA46FC4781E0CC09C5FF5B0C4ACF" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_653D6FBBA167416D9037981F1E63EC6A" + "OwnerKey" = "8:_B9CF645D75510FD233C6D6FC0571D082" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_A2387236827B85F792CC12E14F254A33" + "OwnerKey" = "8:_EB3D288BC1ABB92E80CBBDBC8243CD7A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_959494E7D2296ABCCAC1B8CAB5C08F7D" + "OwnerKey" = "8:_4514C44EF37C5557F7F2189AA626E7BA" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_8EAC6B5FFE0A267E4A04CF0D01C6802D" + "OwnerKey" = "8:_E4132899F6CC2559E79841DCD84FC8D7" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_BEE545F23EE0469A8193EE7AE954BF3D" + "OwnerKey" = "8:_4347044EBE9C10A0AD17D8B9DF286340" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_D235B956D89B25CBE9E7A4A18D913DCC" + "OwnerKey" = "8:_49CD41B96497F58A97BFBC1E16DF98E9" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_E0C4678202339E96FDE2102DC9B902B8" + "OwnerKey" = "8:_C9ECCD86C0C15BB6DA825FE0194F2275" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_B97171D34C04794AF829836FD31AFEF8" + "OwnerKey" = "8:_83A15477F512314BC17E6D4FAEDDDF13" "MsmSig" = "8:_UNDEFINED" } } @@ -901,6 +901,11 @@ "AssemblyAsmDisplayName" = "8:System.Web.Http, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" "ScatterAssemblies" { + "_00B33221B95C9FFA8E5BE92EDB034E4B" + { + "Name" = "8:System.Web.Http.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:System.Web.Http.dll" "TargetName" = "8:" @@ -920,6 +925,26 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_038EA8FC1D324EB8B2BA820F7807D39F" + { + "SourcePath" = "8:..\\..\\FreeRDP-Exe\\wfreerdp.exe" + "TargetName" = "8:wfreerdp.exe" + "Tag" = "8:" + "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_06A629560B9B7DC987AA665FD1B828B6" { "AssemblyRegister" = "3:1" @@ -998,6 +1023,11 @@ "AssemblyAsmDisplayName" = "8:System.Net.Http.Formatting, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" "ScatterAssemblies" { + "_1D10D2BE39B9B310B83DE676E67E5EF6" + { + "Name" = "8:System.Net.Http.Formatting.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:System.Net.Http.Formatting.dll" "TargetName" = "8:" @@ -1024,6 +1054,11 @@ "AssemblyAsmDisplayName" = "8:WebGrease, Version=1.5.2.14234, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" "ScatterAssemblies" { + "_229882A1E8C4609D4F72ACCBD3578620" + { + "Name" = "8:WebGrease.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:WebGrease.dll" "TargetName" = "8:" @@ -1050,6 +1085,11 @@ "AssemblyAsmDisplayName" = "8:log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL" "ScatterAssemblies" { + "_4347044EBE9C10A0AD17D8B9DF286340" + { + "Name" = "8:log4net.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:log4net.dll" "TargetName" = "8:" @@ -1073,9 +1113,14 @@ { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Myrtille.Services.Contracts, Version=2.8.0.0, Culture=neutral, processorArchitecture=AMD64" + "AssemblyAsmDisplayName" = "8:Myrtille.Services.Contracts, Version=2.8.1.0, Culture=neutral, processorArchitecture=AMD64" "ScatterAssemblies" { + "_4514C44EF37C5557F7F2189AA626E7BA" + { + "Name" = "8:Myrtille.Services.Contracts.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Myrtille.Services.Contracts.dll" "TargetName" = "8:" @@ -1102,6 +1147,11 @@ "AssemblyAsmDisplayName" = "8:Microsoft.Web.Administration, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" "ScatterAssemblies" { + "_49CD41B96497F58A97BFBC1E16DF98E9" + { + "Name" = "8:Microsoft.Web.Administration.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Microsoft.Web.Administration.dll" "TargetName" = "8:" @@ -1208,6 +1258,11 @@ "AssemblyAsmDisplayName" = "8:NAudio.Lame, Version=1.0.9.26885, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { + "_6C00FD3B5ABE75432E8304496D81957D" + { + "Name" = "8:NAudio.Lame.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:NAudio.Lame.dll" "TargetName" = "8:" @@ -1354,6 +1409,11 @@ "AssemblyAsmDisplayName" = "8:Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" "ScatterAssemblies" { + "_747A0EEC580A1287CAC0C6614CBCB2D7" + { + "Name" = "8:Newtonsoft.Json.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Newtonsoft.Json.dll" "TargetName" = "8:" @@ -1373,12 +1433,12 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7EB427F5003C403ABD724E7222C110DF" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7CACC34CC765445AB7F4D22E12400FAA" { - "SourcePath" = "8:..\\packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\NativeBinaries\\amd64\\sqlceer40EN.dll" - "TargetName" = "8:sqlceer40EN.dll" + "SourcePath" = "8:..\\..\\FreeRDP-Exe\\freerdp2.dll" + "TargetName" = "8:freerdp2.dll" "Tag" = "8:" - "Folder" = "8:_365BE1E5F7B842AFA09E271D4575F53D" + "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -1393,12 +1453,12 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_834D326341414391AEB31737C93F4178" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7EB427F5003C403ABD724E7222C110DF" { - "SourcePath" = "8:..\\..\\FreeRDP\\Release\\winpr2.dll" - "TargetName" = "8:winpr2.dll" + "SourcePath" = "8:..\\packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\NativeBinaries\\amd64\\sqlceer40EN.dll" + "TargetName" = "8:sqlceer40EN.dll" "Tag" = "8:" - "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" + "Folder" = "8:_365BE1E5F7B842AFA09E271D4575F53D" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" @@ -1420,6 +1480,11 @@ "AssemblyAsmDisplayName" = "8:System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" "ScatterAssemblies" { + "_83A15477F512314BC17E6D4FAEDDDF13" + { + "Name" = "8:System.Net.Http.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:System.Net.Http.dll" "TargetName" = "8:" @@ -1446,6 +1511,11 @@ "AssemblyAsmDisplayName" = "8:Microsoft.WebSockets, Version=0.2.3.0, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { + "_89CA178907957E98DE0B33D6A93C65AE" + { + "Name" = "8:Microsoft.WebSockets.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Microsoft.WebSockets.dll" "TargetName" = "8:" @@ -1492,6 +1562,11 @@ "AssemblyAsmDisplayName" = "8:OASIS.Integration, Version=1.7.0.0, Culture=neutral, PublicKeyToken=bf7fa19775bc8b36, processorArchitecture=MSIL" "ScatterAssemblies" { + "_8EAC6B5FFE0A267E4A04CF0D01C6802D" + { + "Name" = "8:OASIS.Integration.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:OASIS.Integration.dll" "TargetName" = "8:" @@ -1511,6 +1586,26 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8EC8B4CCB21E43CEBFEB52A4288E56A1" + { + "SourcePath" = "8:..\\..\\FreeRDP-Exe\\freerdp-client2.dll" + "TargetName" = "8:freerdp-client2.dll" + "Tag" = "8:" + "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9186723DB4B94643BE0E7976C34CADE0" { "SourcePath" = "8:..\\packages\\Microsoft.SqlServer.Compact.4.0.8876.1\\NativeBinaries\\x86\\Microsoft.VC90.CRT\\msvcr90.dll" @@ -1535,9 +1630,14 @@ { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Myrtille.Enterprise, Version=2.8.0.0, Culture=neutral, processorArchitecture=AMD64" + "AssemblyAsmDisplayName" = "8:Myrtille.Enterprise, Version=2.8.1.0, Culture=neutral, processorArchitecture=AMD64" "ScatterAssemblies" { + "_959494E7D2296ABCCAC1B8CAB5C08F7D" + { + "Name" = "8:Myrtille.Enterprise.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Myrtille.Enterprise.dll" "TargetName" = "8:" @@ -1557,6 +1657,26 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_971C51014FA44C66A4D3ED71CEDF8970" + { + "SourcePath" = "8:..\\..\\FreeRDP-Exe\\winpr-tools2.dll" + "TargetName" = "8:winpr-tools2.dll" + "Tag" = "8:" + "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A2387236827B85F792CC12E14F254A33" { "AssemblyRegister" = "3:1" @@ -1564,6 +1684,11 @@ "AssemblyAsmDisplayName" = "8:EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" "ScatterAssemblies" { + "_A2387236827B85F792CC12E14F254A33" + { + "Name" = "8:EntityFramework.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:EntityFramework.dll" "TargetName" = "8:" @@ -1583,10 +1708,10 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A2B13A6B800941088742F64E3ACCF607" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A490591BEB0F433F8F7017269A180690" { - "SourcePath" = "8:..\\..\\FreeRDP\\Release\\wfreerdp.exe" - "TargetName" = "8:wfreerdp.exe" + "SourcePath" = "8:..\\packages\\openssl-vc141-static-x86_64.1.1.0\\build\\native\\lib\\Win32\\dynamic\\msvcr120.dll" + "TargetName" = "8:msvcr120.dll" "Tag" = "8:" "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" "Condition" = "8:" @@ -1603,10 +1728,10 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A490591BEB0F433F8F7017269A180690" + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A6A88A28C9F14F71A21B3C68E5BB3FA9" { - "SourcePath" = "8:..\\packages\\openssl-vc141-static-x86_64.1.1.0\\build\\native\\lib\\Win32\\dynamic\\msvcr120.dll" - "TargetName" = "8:msvcr120.dll" + "SourcePath" = "8:..\\..\\FreeRDP-Exe\\winpr2.dll" + "TargetName" = "8:winpr2.dll" "Tag" = "8:" "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" "Condition" = "8:" @@ -1670,6 +1795,11 @@ "AssemblyAsmDisplayName" = "8:System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" "ScatterAssemblies" { + "_B7BCCA46FC4781E0CC09C5FF5B0C4ACF" + { + "Name" = "8:System.Web.Optimization.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:System.Web.Optimization.dll" "TargetName" = "8:" @@ -1696,6 +1826,11 @@ "AssemblyAsmDisplayName" = "8:EntityFramework.SqlServerCompact, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" "ScatterAssemblies" { + "_B97171D34C04794AF829836FD31AFEF8" + { + "Name" = "8:EntityFramework.SqlServerCompact.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:EntityFramework.SqlServerCompact.dll" "TargetName" = "8:" @@ -1722,6 +1857,11 @@ "AssemblyAsmDisplayName" = "8:Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" "ScatterAssemblies" { + "_B9CF645D75510FD233C6D6FC0571D082" + { + "Name" = "8:Microsoft.Web.Infrastructure.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Microsoft.Web.Infrastructure.dll" "TargetName" = "8:" @@ -1748,6 +1888,11 @@ "AssemblyAsmDisplayName" = "8:RestSharp, Version=105.0.0.0, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { + "_BBD2441433942D8A251A9417B3C419A6" + { + "Name" = "8:RestSharp.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:RestSharp.dll" "TargetName" = "8:" @@ -1771,9 +1916,14 @@ { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Myrtille.MFAProviders, Version=2.8.0.0, Culture=neutral, processorArchitecture=AMD64" + "AssemblyAsmDisplayName" = "8:Myrtille.MFAProviders, Version=2.8.1.0, Culture=neutral, processorArchitecture=AMD64" "ScatterAssemblies" { + "_BEE545F23EE0469A8193EE7AE954BF3D" + { + "Name" = "8:Myrtille.MFAProviders.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Myrtille.MFAProviders.dll" "TargetName" = "8:" @@ -1840,6 +1990,11 @@ "AssemblyAsmDisplayName" = "8:CertEnroll_Interop, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { + "_C9ECCD86C0C15BB6DA825FE0194F2275" + { + "Name" = "8:CertEnroll_Interop.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:CertEnroll_Interop.dll" "TargetName" = "8:" @@ -1859,26 +2014,6 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CB82298260A444B7B29CE5A388263FE4" - { - "SourcePath" = "8:..\\..\\FreeRDP\\Release\\freerdp-client2.dll" - "TargetName" = "8:freerdp-client2.dll" - "Tag" = "8:" - "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D235B956D89B25CBE9E7A4A18D913DCC" { "AssemblyRegister" = "3:1" @@ -1886,6 +2021,11 @@ "AssemblyAsmDisplayName" = "8:Cassia, Version=2.0.0.60, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { + "_D235B956D89B25CBE9E7A4A18D913DCC" + { + "Name" = "8:Cassia.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Cassia.dll" "TargetName" = "8:" @@ -1905,46 +2045,6 @@ "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D2BD47CF9D8541A7920CEB2ACD15F818" - { - "SourcePath" = "8:..\\..\\FreeRDP\\Release\\winpr-tools2.dll" - "TargetName" = "8:winpr-tools2.dll" - "Tag" = "8:" - "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D67552EDCF414571848D175A04F06C7C" - { - "SourcePath" = "8:..\\..\\FreeRDP\\Release\\freerdp2.dll" - "TargetName" = "8:freerdp2.dll" - "Tag" = "8:" - "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D7163F580847147A643E938A4D2D20CD" { "AssemblyRegister" = "3:1" @@ -1952,6 +2052,11 @@ "AssemblyAsmDisplayName" = "8:System.Web.Http.WebHost, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" "ScatterAssemblies" { + "_D7163F580847147A643E938A4D2D20CD" + { + "Name" = "8:System.Web.Http.WebHost.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:System.Web.Http.WebHost.dll" "TargetName" = "8:" @@ -1978,6 +2083,11 @@ "AssemblyAsmDisplayName" = "8:NAudio, Version=1.8.5.0, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { + "_D72151FF05C96A55F9FBF886FBA4D3F8" + { + "Name" = "8:NAudio.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:NAudio.dll" "TargetName" = "8:" @@ -2024,6 +2134,11 @@ "AssemblyAsmDisplayName" = "8:EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" "ScatterAssemblies" { + "_E0C4678202339E96FDE2102DC9B902B8" + { + "Name" = "8:EntityFramework.SqlServer.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:EntityFramework.SqlServer.dll" "TargetName" = "8:" @@ -2047,9 +2162,14 @@ { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Myrtille.Common, Version=2.8.0.0, Culture=neutral, processorArchitecture=AMD64" + "AssemblyAsmDisplayName" = "8:Myrtille.Common, Version=2.8.1.0, Culture=neutral, processorArchitecture=AMD64" "ScatterAssemblies" { + "_E4132899F6CC2559E79841DCD84FC8D7" + { + "Name" = "8:Myrtille.Common.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Myrtille.Common.dll" "TargetName" = "8:" @@ -2136,6 +2256,11 @@ "AssemblyAsmDisplayName" = "8:Antlr3.Runtime, Version=3.4.1.9004, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL" "ScatterAssemblies" { + "_EB3D288BC1ABB92E80CBBDBC8243CD7A" + { + "Name" = "8:Antlr3.Runtime.dll" + "Attributes" = "3:512" + } } "SourcePath" = "8:Antlr3.Runtime.dll" "TargetName" = "8:" @@ -2278,7 +2403,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Myrtille" "ProductCode" = "8:{692B49E2-ACC7-4765-B7ED-2742700DB77E}" - "PackageCode" = "8:{F2BEC730-7D66-4CB2-A614-35D1A17840CB}" + "PackageCode" = "8:{8DCA5EF0-AC0B-4702-AD5D-16F218915043}" "UpgradeCode" = "8:{86A6145E-11DB-4EE7-9CE0-53F997050716}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" @@ -3367,7 +3492,7 @@ "ContextData" = "8:Unchecked=;Checked=1" "Attributes" = "3:0" "Setting" = "3:2" - "Value" = "8:1" + "Value" = "8:" "DefaultValue" = "8:" "UsePlugInResources" = "11:TRUE" } @@ -3879,7 +4004,7 @@ } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_6A00A4B5E0C64F48AF08EC529C41D062" { - "SourcePath" = "8:..\\Myrtille.Services\\obj\\x64\\Release\\Myrtille.Services.exe" + "SourcePath" = "8:..\\Myrtille.Services\\obj\\x64\\Release\\SecurdenRDP.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_FA146EB9AE2B44E2AB4B01E26999CAB2" diff --git a/Myrtille.Web/Default.aspx b/Myrtille.Web/Default.aspx index 7cfffe3..b38e08e 100644 --- a/Myrtille.Web/Default.aspx +++ b/Myrtille.Web/Default.aspx @@ -35,7 +35,7 @@ - Myrtille<%=RemoteSession != null && !RemoteSession.ConnectionService && (RemoteSession.State == RemoteSessionState.Connecting || RemoteSession.State == RemoteSessionState.Connected) && !string.IsNullOrEmpty(RemoteSession.ServerAddress) ? " - " + RemoteSession.ServerAddress.ToString() : ""%> + RDP Session<%=RemoteSession != null && !RemoteSession.ConnectionService && (RemoteSession.State == RemoteSessionState.Connecting || RemoteSession.State == RemoteSessionState.Connected) && !string.IsNullOrEmpty(RemoteSession.ServerAddress) ? " - " + RemoteSession.ServerAddress.ToString() : ""%> "/> @@ -257,43 +257,43 @@ - + + --> + + --> + - - + + + --> + - + + --> + - + + --> + @@ -362,12 +362,12 @@ } // in addition to having their states also saved into a cookie, stat, debug and compatibility buttons are always available into the toolbar (even for guest(s) if the remote session is shared) - document.getElementById('stat').value = getToggleCookie((parent != null && window.name != '' ? window.name + '_' : '') + 'stat') ? 'Stat ON' : 'Stat OFF'; - document.getElementById('debug').value = getToggleCookie((parent != null && window.name != '' ? window.name + '_' : '') + 'debug') ? 'Debug ON' : 'Debug OFF'; - document.getElementById('browser').value = getToggleCookie((parent != null && window.name != '' ? window.name + '_' : '') + 'browser') ? 'HTML5 OFF' : 'HTML5 ON'; + //document.getElementById('stat').value = getToggleCookie((parent != null && window.name != '' ? window.name + '_' : '') + 'stat') ? 'Stat ON' : 'Stat OFF'; + //document.getElementById('debug').value = getToggleCookie((parent != null && window.name != '' ? window.name + '_' : '') + 'debug') ? 'Debug ON' : 'Debug OFF'; + //document.getElementById('browser').value = getToggleCookie((parent != null && window.name != '' ? window.name + '_' : '') + 'browser') ? 'HTML5 OFF' : 'HTML5 ON'; // swipe is disabled on IE/Edge because it emulates mouse events by default (experimental) - document.getElementById('<%=vswipe.ClientID%>').disabled = document.getElementById('<%=vswipe.ClientID%>').disabled || display.isIEBrowser(); + //document.getElementById('<%=vswipe.ClientID%>').disabled = document.getElementById('<%=vswipe.ClientID%>').disabled || display.isIEBrowser(); } } } diff --git a/Myrtille.Web/Default.aspx.cs b/Myrtille.Web/Default.aspx.cs index 7bd3e34..029330b 100644 --- a/Myrtille.Web/Default.aspx.cs +++ b/Myrtille.Web/Default.aspx.cs @@ -20,6 +20,9 @@ limitations under the License. using System.Collections.Generic; using System.Configuration; using System.IO; +using System.Net; +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; using System.Text; using System.Text.RegularExpressions; using System.Threading; @@ -31,6 +34,7 @@ limitations under the License. using Myrtille.Helpers; using Myrtille.Services.Contracts; using Myrtille.Web.Properties; +using Newtonsoft.Json.Linq; namespace Myrtille.Web { @@ -110,7 +114,7 @@ protected void Page_Init( } // connect from a login page or url - if (!bool.TryParse(ConfigurationManager.AppSettings["LoginEnabled"], out _loginEnabled)) + if (!bool.TryParse(ConfigurationManager.AppSettings["LoginEnabled"], out _loginEnabled) || Request.RawUrl.Contains("auth_key")) { _loginEnabled = true; } @@ -498,6 +502,80 @@ protected void ConnectButtonClick( } } + private static bool TrustCertificate(object sender, X509Certificate x509Certificate, X509Chain x509Chain, SslPolicyErrors sslPolicyErrors) + { + return true; + } + + private static JObject SecurdenWebRequest(string serverUrl, string requestUrl, string requestMethod, JObject requestParams) + { + requestUrl = serverUrl + requestUrl; + JObject result = null; + try + { + if (requestMethod == "GET" && requestParams != null) + { + requestUrl += '?'; + requestUrl += "LAUNCHER_INPUT=" + requestParams.ToString(); + } + + ServicePointManager.ServerCertificateValidationCallback = TrustCertificate; + var uri = new Uri(requestUrl); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); + request.Method = requestMethod; + request.UserAgent = "-SECURDEN-LAUNCHER-"; + if (requestMethod == "POST" && requestParams != null) + { + var postData = "LAUNCHER_INPUT=" + requestParams.ToString(); + var data = Encoding.UTF8.GetBytes(postData); + request.ContentType = "application/x-www-form-urlencoded"; + request.ContentLength = data.Length; + using (var stream = request.GetRequestStream()) + { + stream.Write(data, 0, data.Length); + } + } + var response = (HttpWebResponse)request.GetResponse(); + var responseString = string.Empty; + using (var stream = new StreamReader(response.GetResponseStream())) + { + responseString = stream.ReadToEnd(); + } + result = JObject.Parse(responseString); + response.Close(); + } + catch (Exception) + { } + return result; + } + + private JObject ProcessLaunchRequest(string serverUrl, string authKey) + { + JObject returnObj = null; + JObject paramObj = new JObject(new JProperty("AUTH_KEY", authKey)); + JObject response = SecurdenWebRequest(serverUrl, "/launcher/verify_launch_info", "POST", paramObj); + if (response == null) + { + Response.Write(""); + } + else if (response.ContainsKey("type")) + { + if ((string)response["type"] == "WEB_RDP") + { + returnObj = (JObject)response["details"]; + } + else + { + Response.Write(""); + } + } + else + { + Response.Write(""); + } + return returnObj; + } + /// /// connect the remote server /// @@ -519,6 +597,27 @@ private bool ConnectRemoteServer() var loginPassword = string.IsNullOrEmpty(passwordHash.Value) ? password.Value : CryptoHelper.RDP_Decrypt(passwordHash.Value); var startProgram = program.Value; + if (RemoteSession == null && (Request["auth_key"] == null || Request["auth_key"].Trim() == "" || Request["referrer"] == null || Request["referrer"].Trim() == "")) + { + Response.Write(""); + return false; + } + else if (RemoteSession == null) + { + JObject connectionDetails = ProcessLaunchRequest(Request["referrer"], Request["auth_key"]); + if (connectionDetails == null) + { + return false; + } + else + { + loginServer = (string)connectionDetails["address"]; + loginDomain = ""; + loginUser = (string)connectionDetails["username"]; + loginPassword = (string)connectionDetails["password"]; + } + } + // allowed features var allowRemoteClipboard = _allowRemoteClipboard; var allowFileTransfer = _allowFileTransfer; diff --git a/Myrtille.Web/Web.Base.config b/Myrtille.Web/Web.Base.config index 33786a5..eed0d2d 100644 --- a/Myrtille.Web/Web.Base.config +++ b/Myrtille.Web/Web.Base.config @@ -32,7 +32,7 @@ - + @@ -171,15 +171,15 @@ - + - + - + @@ -187,7 +187,7 @@ - + diff --git a/Myrtille.Web/Web.config b/Myrtille.Web/Web.config index 6806f20..26f0842 100644 --- a/Myrtille.Web/Web.config +++ b/Myrtille.Web/Web.config @@ -32,7 +32,7 @@ - + @@ -171,15 +171,15 @@ - + - + - + @@ -187,7 +187,7 @@ - + diff --git a/Myrtille.Web/favicon.ico b/Myrtille.Web/favicon.ico index 1ac6cc9ba31ed92f45f4fa20a933e9111c2c23fa..eb157809933fd7a8abd5dfe948365222326f2cf3 100644 GIT binary patch literal 27496 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 PtA@!C6eMEAbT9vZR7!Gh literal 27198 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