From 5640fe56b5a0fa531d0eaa1022c9a2c96b20d885 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 24 Feb 2024 17:29:21 +0100 Subject: [PATCH 1/3] Created Clipboard interface --- PWManager.Application/Services/Interfaces/IClipboard.cs | 8 ++++++++ PWManager.CLI/Abstractions/Clipboard.cs | 5 +++++ PWManager.CLI/Abstractions/OperatingSystem.cs | 5 +++++ PWManager.CLI/Abstractions/Shell.cs | 5 +++++ 4 files changed, 23 insertions(+) create mode 100644 PWManager.Application/Services/Interfaces/IClipboard.cs create mode 100644 PWManager.CLI/Abstractions/Clipboard.cs create mode 100644 PWManager.CLI/Abstractions/OperatingSystem.cs create mode 100644 PWManager.CLI/Abstractions/Shell.cs diff --git a/PWManager.Application/Services/Interfaces/IClipboard.cs b/PWManager.Application/Services/Interfaces/IClipboard.cs new file mode 100644 index 0000000..335d16d --- /dev/null +++ b/PWManager.Application/Services/Interfaces/IClipboard.cs @@ -0,0 +1,8 @@ +namespace PWManager.Application.Services.Interfaces; + +public interface IClipboard { + + void WriteClipboard(string val); + + void ClearClipboard(); +} \ No newline at end of file diff --git a/PWManager.CLI/Abstractions/Clipboard.cs b/PWManager.CLI/Abstractions/Clipboard.cs new file mode 100644 index 0000000..9b5d644 --- /dev/null +++ b/PWManager.CLI/Abstractions/Clipboard.cs @@ -0,0 +1,5 @@ +namespace PWManager.CLI.Abstractions; + +public class Clipboard { + +} \ No newline at end of file diff --git a/PWManager.CLI/Abstractions/OperatingSystem.cs b/PWManager.CLI/Abstractions/OperatingSystem.cs new file mode 100644 index 0000000..2792cf3 --- /dev/null +++ b/PWManager.CLI/Abstractions/OperatingSystem.cs @@ -0,0 +1,5 @@ +namespace PWManager.CLI.Abstractions; + +public class OperatingSystem { + +} \ No newline at end of file diff --git a/PWManager.CLI/Abstractions/Shell.cs b/PWManager.CLI/Abstractions/Shell.cs new file mode 100644 index 0000000..69ac557 --- /dev/null +++ b/PWManager.CLI/Abstractions/Shell.cs @@ -0,0 +1,5 @@ +namespace PWManager.CLI.Abstractions; + +public class Shell { + +} \ No newline at end of file From c6a4abdd96f8fee668e7931c84e72f1e153cd21e Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 24 Feb 2024 17:29:52 +0100 Subject: [PATCH 2/3] Added clipboard functionality --- PWManager.CLI/Abstractions/Clipboard.cs | 30 +++++++++++++- PWManager.CLI/Abstractions/OperatingSystem.cs | 15 +++++-- PWManager.CLI/Abstractions/Shell.cs | 39 ++++++++++++++++++- 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/PWManager.CLI/Abstractions/Clipboard.cs b/PWManager.CLI/Abstractions/Clipboard.cs index 9b5d644..80b15c6 100644 --- a/PWManager.CLI/Abstractions/Clipboard.cs +++ b/PWManager.CLI/Abstractions/Clipboard.cs @@ -1,5 +1,31 @@ -namespace PWManager.CLI.Abstractions; +using PWManager.Application.Exceptions; +using PWManager.Application.Services.Interfaces; -public class Clipboard { +namespace PWManager.CLI.Abstractions; + +public class Clipboard : IClipboard { + public void WriteClipboard(string val) { + if (OperatingSystem.IsWindows()) { + var escaped = val.Replace("\n", "\\n").Replace("\"", "\"\""); + $"echo \"{escaped}\" | Set-Clipboard" + .PowerShell(); + } + else if(OperatingSystem.IsMacOS()) { + var escaped = val.Replace("\n", "\\n").Replace("\"", "\\\""); + $"echo -n \"{escaped}\" | pbcopy" + .Bash(); + }else if (OperatingSystem.IsLinux()) { + var escaped = val.Replace("\n", "\\n").Replace("\"", "\\\""); + $"echo -n \"{escaped}\" | xclip -selection c" + .Bash(); + } + else { + throw new UserFeedbackException("Your Operating System does not support the clipboard functionality"); + } + } + + public void ClearClipboard() { + WriteClipboard(" "); + } } \ No newline at end of file diff --git a/PWManager.CLI/Abstractions/OperatingSystem.cs b/PWManager.CLI/Abstractions/OperatingSystem.cs index 2792cf3..005cff5 100644 --- a/PWManager.CLI/Abstractions/OperatingSystem.cs +++ b/PWManager.CLI/Abstractions/OperatingSystem.cs @@ -1,5 +1,14 @@ -namespace PWManager.CLI.Abstractions; +using System.Runtime.InteropServices; -public class OperatingSystem { - +namespace PWManager.CLI.Abstractions; + +public static class OperatingSystem { + public static bool IsWindows() => + RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + + public static bool IsMacOS() => + RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + + public static bool IsLinux() => + RuntimeInformation.IsOSPlatform(OSPlatform.Linux); } \ No newline at end of file diff --git a/PWManager.CLI/Abstractions/Shell.cs b/PWManager.CLI/Abstractions/Shell.cs index 69ac557..be5e3b3 100644 --- a/PWManager.CLI/Abstractions/Shell.cs +++ b/PWManager.CLI/Abstractions/Shell.cs @@ -1,5 +1,40 @@ -namespace PWManager.CLI.Abstractions; +using System.Diagnostics; -public class Shell { +namespace PWManager.CLI.Abstractions; + +public static class Shell { + + public static string Bash(this string cmd) { + var escapedArgs = cmd.Replace("\"", "\\\""); + string result = Run("/bin/bash", $"-c \"{escapedArgs}\""); + return result; + } + + public static string Bat(this string cmd) { + var escapedArgs = cmd.Replace("\"", "\\\""); + string result = Run("cmd.exe", $"/c \"{escapedArgs}\""); + return result; + } + public static string PowerShell(this string cmd) { + var escapedArgs = cmd.Replace("\"", "\\\""); + string result = Run("powershell.exe", $"/c \"{escapedArgs}\""); + return result; + } + + private static string Run (string filename, string arguments){ + var process = new Process() { + StartInfo = new ProcessStartInfo { + FileName = filename, + Arguments = arguments, + RedirectStandardOutput = true, + UseShellExecute = false, + CreateNoWindow = false, + } + }; + process.Start(); + string result = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + return result; + } } \ No newline at end of file From f30702b59059c383f346a045010c81b8a3b11a2b Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 24 Feb 2024 17:30:27 +0100 Subject: [PATCH 3/3] Added clipboard to DI --- PWManager.CLI/Program.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PWManager.CLI/Program.cs b/PWManager.CLI/Program.cs index 0c2b374..26bf29b 100644 --- a/PWManager.CLI/Program.cs +++ b/PWManager.CLI/Program.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using PWManager.Application; using PWManager.Application.Context; +using PWManager.Application.Services.Interfaces; using PWManager.CLI; using PWManager.CLI.Abstractions; using PWManager.CLI.ExtensionMethods; @@ -12,6 +13,7 @@ services.AddSingleton(); // Add all services to DI services.AddSingleton(); +services.AddTransient(); // Add Layers services.AddApplicationServices(); services.AddDataServices();