pschelpdesk/Nextcloud/Views/NextcloudSettingsView.axaml.cs
2024-11-11 19:08:09 +01:00

85 lines
3.3 KiB
C#

using System.Net.Http.Headers;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.DependencyInjection;
using Newtonsoft.Json.Linq;
using PSCHelpdesk.Plugins.Nextcloud.Models;
using PSCHelpdesk.Plugins.Nextcloud.ViewModels;
using PSCHelpdesk.Shared.Service;
using PSCHelpdesk.Shared.Setting;
namespace PSCHelpdesk.Plugins.Nextcloud.Views;
public partial class NextcloudSettingsView : UserControl
{
private SettingsManager settingsManager;
private Settings settings;
private static readonly HttpClient httpClient = new HttpClient();
public NextcloudSettingsView()
{
InitializeComponent();
settingsManager = (SettingsManager)Ioc.Default.GetService<ISettingsManager>();
settings = new Settings();
settingsManager.LoadPluginSettings("NextcloudSettings", settings);
}
private void SaveSettings_OnClick(object? sender, RoutedEventArgs e)
{
settings.ServerUrl = ((NextcloudSettingsViewModel)this.DataContext).ServerUrl;
settings.Username = ((NextcloudSettingsViewModel)this.DataContext).Username;
settings.AppPassword = ((NextcloudSettingsViewModel)this.DataContext).AppPassword;
settingsManager.SavePluginSettings("NextcloudSettings", settings);
}
private async void Button_OnClick(object? sender, RoutedEventArgs e)
{
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/ld+json"));
httpClient.DefaultRequestHeaders.Add("User-Agent", "PSC Client");
var stringTask = httpClient.PostAsync(settings.ServerUrl + "/index.php/login/v2", new MultipartContent());
var msg = await stringTask;
JObject response = JObject.Parse(msg.Content.ReadAsStringAsync().Result);
Uri? uri = new Uri(response["login"].ToString());
if (uri is not null)
{
Dispatcher.UIThread.Post(async () =>
{
bool success = await TopLevel.GetTopLevel(this)!.Launcher.LaunchUriAsync(uri);
});
}
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/ld+json"));
httpClient.DefaultRequestHeaders.Add("User-Agent", "PSC Client");
while (true)
{
var pollLink = httpClient.PostAsync(
response["poll"]["endpoint"].ToString(),
new FormUrlEncodedContent(new []{new KeyValuePair<string, string>("token", response["poll"]["token"].ToString())}));
var resultPoll = await pollLink;
if (resultPoll.IsSuccessStatusCode)
{
JObject responsePoll = JObject.Parse(resultPoll.Content.ReadAsStringAsync().Result);
settings.Username = responsePoll["loginName"].ToString();
settings.AppPassword = responsePoll["appPassword"].ToString();
((NextcloudSettingsViewModel)this.DataContext).Username = settings.Username;
((NextcloudSettingsViewModel)this.DataContext).AppPassword = settings.AppPassword;
break;
}
Thread.Sleep(1000);
}
}
}