From 653ceb01897622bd6ff409e2064eac6eb3c1e6fd Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Mon, 4 Nov 2024 11:28:08 +0100 Subject: [PATCH] Fixes --- .gitignore | 5 + .idea/.idea.PSCHelpdesk/.idea/avalonia.xml | 24 + .idea/.idea.PSCHelpdesk/.idea/encodings.xml | 4 + .idea/.idea.PSCHelpdesk/.idea/indexLayout.xml | 8 + .../.idea/projectSettingsUpdater.xml | 7 + .idea/.idea.PSCHelpdesk/.idea/vcs.xml | 6 + .idea/.idea.PSCHelpdesk/.idea/workspace.xml | 324 +++++++++++++ HetznerServer/HetznerServer.cs | 29 ++ HetznerServer/HetznerServer.csproj | 46 ++ HetznerServer/HetznerServerBootstrap.cs | 17 + HetznerServer/Models/Server.cs | 34 ++ HetznerServer/ViewModels/ServerViewModel.cs | 89 ++++ HetznerServer/Views/ServerView.axaml | 80 +++ HetznerServer/Views/ServerView.axaml.cs | 11 + Nextcloud/Nextcloud.csproj | 21 + Nextcloud/ViewModels/NotesViewModel.cs | 13 + Nextcloud/Views/NotesView.axaml | 8 + Nextcloud/Views/NotesView.axaml.cs | 10 + PSCHelpdesk.sln | 68 +++ PSCHelpdesk.sln.DotSettings.user | 48 ++ PSCHelpdesk/.gitignore | 454 ++++++++++++++++++ PSCHelpdesk/Directory.Build.props | 6 + PSCHelpdesk/PSCHelpdesk.Android/Icon.png | Bin 0 -> 14349 bytes .../PSCHelpdesk.Android/MainActivity.cs | 21 + .../PSCHelpdesk.Android.csproj | 28 ++ .../Properties/AndroidManifest.xml | 5 + .../Resources/AboutResources.txt | 44 ++ .../drawable-night-v31/avalonia_anim.xml | 66 +++ .../Resources/drawable-v31/avalonia_anim.xml | 71 +++ .../Resources/drawable/splash_screen.xml | 13 + .../Resources/values-night/colors.xml | 4 + .../Resources/values-v31/styles.xml | 21 + .../Resources/values/colors.xml | 4 + .../Resources/values/styles.xml | 12 + .../PSCHelpdesk.Browser.csproj | 15 + PSCHelpdesk/PSCHelpdesk.Browser/Program.cs | 17 + .../Properties/AssemblyInfo.cs | 1 + .../Properties/launchSettings.json | 13 + .../runtimeconfig.template.json | 10 + .../PSCHelpdesk.Browser/wwwroot/app.css | 58 +++ .../PSCHelpdesk.Browser/wwwroot/favicon.ico | Bin 0 -> 176111 bytes .../PSCHelpdesk.Browser/wwwroot/index.html | 36 ++ .../PSCHelpdesk.Browser/wwwroot/main.js | 13 + .../PSCHelpdesk.Desktop.csproj | 30 ++ PSCHelpdesk/PSCHelpdesk.Desktop/Program.cs | 23 + PSCHelpdesk/PSCHelpdesk.Desktop/app.manifest | 18 + PSCHelpdesk/PSCHelpdesk.iOS/AppDelegate.cs | 23 + .../PSCHelpdesk.iOS/Entitlements.plist | 5 + PSCHelpdesk/PSCHelpdesk.iOS/Info.plist | 43 ++ PSCHelpdesk/PSCHelpdesk.iOS/Main.cs | 14 + .../PSCHelpdesk.iOS/PSCHelpdesk.iOS.csproj | 16 + .../Resources/LaunchScreen.xib | 43 ++ PSCHelpdesk/PSCHelpdesk.sln | 54 +++ PSCHelpdesk/PSCHelpdesk/App.axaml | 17 + PSCHelpdesk/PSCHelpdesk/App.axaml.cs | 40 ++ .../PSCHelpdesk/Assets/avalonia-logo.ico | Bin 0 -> 176111 bytes .../PSCHelpdesk/Models/GlobalSetting.cs | 10 + .../PSCHelpdesk/Models/LocalSetting.cs | 21 + PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj | 52 ++ .../PSCHelpdesk/Services/AppService.cs | 35 ++ .../PSCHelpdesk/Services/MenuService.cs | 88 ++++ .../PSCHelpdesk/Services/PluginService.cs | 91 ++++ PSCHelpdesk/PSCHelpdesk/Startup.cs | 29 ++ PSCHelpdesk/PSCHelpdesk/ViewLocator.cs | 31 ++ .../ViewModels/MainWindowViewModel.cs | 90 ++++ .../ViewModels/PluginListViewModel.cs | 53 ++ .../ViewModels/SettingsViewModel.cs | 70 +++ .../PSCHelpdesk/Views/ContentDisplay.axaml | 23 + .../PSCHelpdesk/Views/ContentDisplay.axaml.cs | 91 ++++ .../PSCHelpdesk/Views/MainWindow.axaml | 38 ++ .../PSCHelpdesk/Views/MainWindow.axaml.cs | 31 ++ PSCHelpdesk/PSCHelpdesk/Views/MenuItem.axaml | 35 ++ .../PSCHelpdesk/Views/MenuItem.axaml.cs | 47 ++ .../PSCHelpdesk/Views/PluginListView.axaml | 32 ++ .../PSCHelpdesk/Views/PluginListView.axaml.cs | 13 + .../PSCHelpdesk/Views/SettingsView.axaml | 39 ++ .../PSCHelpdesk/Views/SettingsView.axaml.cs | 106 ++++ .../PSCHelpdesk/Views/SettingsWindow.axaml | 10 + .../PSCHelpdesk/Views/SettingsWindow.axaml.cs | 13 + Shared/Menu/Item.cs | 15 + Shared/Plugin/Contract.cs | 13 + Shared/Service/IMenuService.cs | 9 + Shared/Shared.csproj | 26 + Shared/ViewModels/ViewModelBase.cs | 25 + 84 files changed, 3226 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.idea.PSCHelpdesk/.idea/avalonia.xml create mode 100644 .idea/.idea.PSCHelpdesk/.idea/encodings.xml create mode 100644 .idea/.idea.PSCHelpdesk/.idea/indexLayout.xml create mode 100644 .idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml create mode 100644 .idea/.idea.PSCHelpdesk/.idea/vcs.xml create mode 100644 .idea/.idea.PSCHelpdesk/.idea/workspace.xml create mode 100644 HetznerServer/HetznerServer.cs create mode 100644 HetznerServer/HetznerServer.csproj create mode 100644 HetznerServer/HetznerServerBootstrap.cs create mode 100644 HetznerServer/Models/Server.cs create mode 100644 HetznerServer/ViewModels/ServerViewModel.cs create mode 100644 HetznerServer/Views/ServerView.axaml create mode 100644 HetznerServer/Views/ServerView.axaml.cs create mode 100644 Nextcloud/Nextcloud.csproj create mode 100644 Nextcloud/ViewModels/NotesViewModel.cs create mode 100644 Nextcloud/Views/NotesView.axaml create mode 100644 Nextcloud/Views/NotesView.axaml.cs create mode 100644 PSCHelpdesk.sln create mode 100644 PSCHelpdesk.sln.DotSettings.user create mode 100644 PSCHelpdesk/.gitignore create mode 100644 PSCHelpdesk/Directory.Build.props create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Icon.png create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/MainActivity.cs create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/PSCHelpdesk.Android.csproj create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Properties/AndroidManifest.xml create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Resources/AboutResources.txt create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Resources/drawable-night-v31/avalonia_anim.xml create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Resources/drawable-v31/avalonia_anim.xml create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Resources/drawable/splash_screen.xml create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Resources/values-night/colors.xml create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Resources/values-v31/styles.xml create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Resources/values/colors.xml create mode 100644 PSCHelpdesk/PSCHelpdesk.Android/Resources/values/styles.xml create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/PSCHelpdesk.Browser.csproj create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/Program.cs create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/Properties/AssemblyInfo.cs create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/Properties/launchSettings.json create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/runtimeconfig.template.json create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/wwwroot/app.css create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/wwwroot/favicon.ico create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/wwwroot/index.html create mode 100644 PSCHelpdesk/PSCHelpdesk.Browser/wwwroot/main.js create mode 100644 PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj create mode 100644 PSCHelpdesk/PSCHelpdesk.Desktop/Program.cs create mode 100644 PSCHelpdesk/PSCHelpdesk.Desktop/app.manifest create mode 100644 PSCHelpdesk/PSCHelpdesk.iOS/AppDelegate.cs create mode 100644 PSCHelpdesk/PSCHelpdesk.iOS/Entitlements.plist create mode 100644 PSCHelpdesk/PSCHelpdesk.iOS/Info.plist create mode 100644 PSCHelpdesk/PSCHelpdesk.iOS/Main.cs create mode 100644 PSCHelpdesk/PSCHelpdesk.iOS/PSCHelpdesk.iOS.csproj create mode 100644 PSCHelpdesk/PSCHelpdesk.iOS/Resources/LaunchScreen.xib create mode 100644 PSCHelpdesk/PSCHelpdesk.sln create mode 100644 PSCHelpdesk/PSCHelpdesk/App.axaml create mode 100644 PSCHelpdesk/PSCHelpdesk/App.axaml.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Assets/avalonia-logo.ico create mode 100644 PSCHelpdesk/PSCHelpdesk/Models/GlobalSetting.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Models/LocalSetting.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj create mode 100644 PSCHelpdesk/PSCHelpdesk/Services/AppService.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Services/MenuService.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Startup.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/ViewLocator.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/ViewModels/PluginListViewModel.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsViewModel.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/MenuItem.axaml create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/MenuItem.axaml.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/PluginListView.axaml create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/PluginListView.axaml.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/SettingsWindow.axaml create mode 100644 PSCHelpdesk/PSCHelpdesk/Views/SettingsWindow.axaml.cs create mode 100644 Shared/Menu/Item.cs create mode 100644 Shared/Plugin/Contract.cs create mode 100644 Shared/Service/IMenuService.cs create mode 100644 Shared/Shared.csproj create mode 100644 Shared/ViewModels/ViewModelBase.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..add57be --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +bin/ +obj/ +/packages/ +riderModule.iml +/_ReSharper.Caches/ \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml b/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml new file mode 100644 index 0000000..3e1f92f --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/encodings.xml b/.idea/.idea.PSCHelpdesk/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/indexLayout.xml b/.idea/.idea.PSCHelpdesk/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml b/.idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml new file mode 100644 index 0000000..64af657 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/vcs.xml b/.idea/.idea.PSCHelpdesk/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml new file mode 100644 index 0000000..c7a52dc --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml @@ -0,0 +1,324 @@ + + + + PSCHelpdesk/PSCHelpdesk.Android/PSCHelpdesk.Android.csproj + PSCHelpdesk/PSCHelpdesk.Browser/PSCHelpdesk.Browser.csproj + PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj + PSCHelpdesk/PSCHelpdesk.iOS/PSCHelpdesk.iOS.csproj + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + "customColor": "", + "associatedIndex": 8 +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1730307678241 + + + + + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs + 86 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs + 83 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs + 84 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs + 71 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs + 37 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs + 48 + + + + + + + + + + + \ No newline at end of file diff --git a/HetznerServer/HetznerServer.cs b/HetznerServer/HetznerServer.cs new file mode 100644 index 0000000..5ede775 --- /dev/null +++ b/HetznerServer/HetznerServer.cs @@ -0,0 +1,29 @@ +using Prise.Plugin; +using PSCHelpdesk.Plugins.HetznerServer.ViewModels; +using PSCHelpdesk.Plugins.HetznerServer.Views; +using PSCHelpdesk.Shared.Menu; +using PSCHelpdesk.Shared.Plugin; + +namespace PSCHelpdesk.Plugins.HetznerServer; + +[Plugin(PluginType = typeof(Contract))] +public class HetznerServer : Contract +{ + public string GetName() + { + return "HetznerServerPlugin"; + } + + public async Task> addMenu() + { + var list = new List(); + var serverTab = new Item() + { + Header = "Server", + CommandParameter = typeof(ServerViewModel), + }; + list.Add(serverTab); + return list; + + } +} \ No newline at end of file diff --git a/HetznerServer/HetznerServer.csproj b/HetznerServer/HetznerServer.csproj new file mode 100644 index 0000000..6180a2f --- /dev/null +++ b/HetznerServer/HetznerServer.csproj @@ -0,0 +1,46 @@ + + + + net9.0 + enable + enable + PSCHelpdesk.Plugins.HetznerServer + + + + portable + + + + + ServerView.axaml + Code + + + + + + + + + + ..\..\..\.nuget\packages\avalonia\11.2.0\ref\net8.0\Avalonia.Controls.dll + + + ..\..\..\.nuget\packages\avalonia.controls.datagrid\11.2.0\lib\net8.0\Avalonia.Controls.DataGrid.dll + + + ..\..\..\.nuget\packages\communitytoolkit.mvvm\8.2.1\lib\net6.0\CommunityToolkit.Mvvm.dll + + + + + + + + + + + + + diff --git a/HetznerServer/HetznerServerBootstrap.cs b/HetznerServer/HetznerServerBootstrap.cs new file mode 100644 index 0000000..85eba2c --- /dev/null +++ b/HetznerServer/HetznerServerBootstrap.cs @@ -0,0 +1,17 @@ +using PSCHelpdesk.Plugins.HetznerServer.ViewModels; + +namespace PSCHelpdesk.Plugins.HetznerServer; + +using Microsoft.Extensions.DependencyInjection; +using Prise.Plugin; + + +[PluginBootstrapper(PluginType = typeof(HetznerServer))] +public class HetznerServerBootstrap : IPluginBootstrapper +{ + public IServiceCollection Bootstrap(IServiceCollection services) + { + services.AddTransient(); + return services; + } +} diff --git a/HetznerServer/Models/Server.cs b/HetznerServer/Models/Server.cs new file mode 100644 index 0000000..12e0867 --- /dev/null +++ b/HetznerServer/Models/Server.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace PSCHelpdesk.Plugins.HetznerServer.Models; + +public class Server: INotifyPropertyChanged +{ + public long Id { get; set; } + public string Name { get; set; } + + public string Status { get; set; } + + public string Type { get; set; } + public string Ipv4 { get; set; } + public string Ipv6 { get; set; } + + public Server(long id, string name, string type, string status, string ipv4, string ipv6) + { + Id = id; + Name = name; + Type = type; + Status = status; + Ipv4 = ipv4; + Ipv6 = ipv6; + } + + public event PropertyChangedEventHandler? PropertyChanged; + + protected virtual void OnPropertyChanged(string propertyName = "") + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } +} \ No newline at end of file diff --git a/HetznerServer/ViewModels/ServerViewModel.cs b/HetznerServer/ViewModels/ServerViewModel.cs new file mode 100644 index 0000000..ad5d5c4 --- /dev/null +++ b/HetznerServer/ViewModels/ServerViewModel.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Threading.Tasks; +using Avalonia.Controls; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using HetznerCloudApi; +using PSCHelpdesk.Plugins.HetznerServer.Models; +using PSCHelpdesk.Plugins.HetznerServer.Views; +using PSCHelpdesk.Shared.ViewModels; + +namespace PSCHelpdesk.Plugins.HetznerServer.ViewModels; + +public partial class ServerViewModel : ViewModelBase +{ + public ServerViewModel() + { + Server = new ObservableCollection(); + SelectedServer = new Server(1,"","","","",""); + loadServers(); + + } + + private bool _isPagePaneOpen = false; + public bool IsPagePaneOpen + { + get => _isPagePaneOpen; + set => SetAndRaisePropertyChanged(ref _isPagePaneOpen, value); + } + + private Server _selectedServer; + public Server SelectedServer + { + get => _selectedServer; + set => SetAndRaisePropertyChanged(ref _selectedServer, value); + } + + private ObservableCollection _server; + public ObservableCollection Server + { + get => _server; + set => SetAndRaisePropertyChanged(ref _server, value); + } + + private async void loadServers() + { + HetznerCloudClient hetznerCloudClient = new HetznerCloudClient("kcsTOjNw7YxiOGVaIrk33gIYIHmLRov9Ap6BgWxQZVJyzSsmeNpClMhpJZUYCL0k"); + + List list = await hetznerCloudClient.Server.Get(); + foreach (var server in list) + { + Server.Add(new Server(server.Id, server.Name, server.ServerType.Name, server.Status, server.PublicNet.Ipv4.Ip, server.PublicNet.Ipv6.Ip)); + } + + SelectedServer = Server[0]; + } + + [RelayCommand] + public void ShowServerDetails(Server server) + { + + } + + [RelayCommand] + public void OpenSCP(Server server) + { + + } + + [RelayCommand] + public void OpenSSH(Server server) + { + /*LocalSetting setting = JsonSettings.Load(); + Process.Start(string.Format(setting.SSHClientExecutable, server.Ipv4));*/ + } + + [RelayCommand] + public void SelectionChanged(SelectionChangedEventArgs args) + { + this.SelectedServer = (args.Source as DataGrid).SelectedItem as Server; + IsPagePaneOpen = true; + } + + public UserControl GetViewControl() + { + return new ServerView(); + } +} \ No newline at end of file diff --git a/HetznerServer/Views/ServerView.axaml b/HetznerServer/Views/ServerView.axaml new file mode 100644 index 0000000..230a89f --- /dev/null +++ b/HetznerServer/Views/ServerView.axaml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + +