From 90ec056a110eab72c7a73386649e93a4b4099d23 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Mon, 4 Jul 2022 13:16:43 +0200 Subject: [PATCH] use provided API vom server --- .../WebAPI/ApIController.Functions.Files.cs | 20 +++---- .../WebAPI/ApIController.Functions.Users.cs | 15 ++--- .../WebAPI/ApiController.Connectivity.cs | 58 ++++++++----------- .../WebAPI/ApiController.Functions.Admin.cs | 14 ++--- MareSynchronos/WebAPI/Utils/FileTransfer.cs | 2 +- 5 files changed, 49 insertions(+), 60 deletions(-) diff --git a/MareSynchronos/WebAPI/ApIController.Functions.Files.cs b/MareSynchronos/WebAPI/ApIController.Functions.Files.cs index 0e8a7b3..1df37ac 100644 --- a/MareSynchronos/WebAPI/ApIController.Functions.Files.cs +++ b/MareSynchronos/WebAPI/ApIController.Functions.Files.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime.CompilerServices; @@ -23,19 +22,19 @@ namespace MareSynchronos.WebAPI { Logger.Warn("Cancelling upload"); _uploadCancellationTokenSource?.Cancel(); - _fileHub!.SendAsync("AbortUpload"); + _fileHub!.SendAsync(FilesHubAPI.SendAbortUpload); CurrentUploads.Clear(); } } public async Task DeleteAllMyFiles() { - await _fileHub!.SendAsync("DeleteAllFiles"); + await _fileHub!.SendAsync(FilesHubAPI.SendDeleteAllFiles); } public async Task DownloadFile(string hash, CancellationToken ct) { - var reader = _fileHub!.StreamAsync("DownloadFileAsync", hash, ct); + var reader = _fileHub!.StreamAsync(FilesHubAPI.StreamDownloadFileAsync, hash, ct); string fileName = Path.GetTempFileName(); await using var fs = File.OpenWrite(fileName); await foreach (var data in reader.WithCancellation(ct)) @@ -43,7 +42,6 @@ namespace MareSynchronos.WebAPI //Logger.Debug("Getting chunk of " + hash); CurrentDownloads.Single(f => f.Hash == hash).Transferred += data.Length; await fs.WriteAsync(data, ct); - Debug.WriteLine("Wrote chunk " + data.Length + " into " + fileName); } return fileName; } @@ -55,7 +53,7 @@ namespace MareSynchronos.WebAPI List downloadFiles = new List(); foreach (var file in fileReplacementDto) { - downloadFiles.Add(await _fileHub!.InvokeAsync("GetFileSize", file.Hash, ct)); + downloadFiles.Add(await _fileHub!.InvokeAsync(FilesHubAPI.InvokeGetFileSize, file.Hash, ct)); } downloadFiles = downloadFiles.Distinct().ToList(); @@ -133,7 +131,7 @@ namespace MareSynchronos.WebAPI var uploadToken = _uploadCancellationTokenSource.Token; Logger.Verbose("New Token Created"); - var filesToUpload = await _fileHub!.InvokeAsync>("SendFiles", character.FileReplacements.Select(c => c.Hash).Distinct(), uploadToken); + var filesToUpload = await _fileHub!.InvokeAsync>(FilesHubAPI.InvokeSendFiles, character.FileReplacements.Select(c => c.Hash).Distinct(), uploadToken); foreach (var file in filesToUpload.Where(f => !f.IsForbidden)) { @@ -188,11 +186,11 @@ namespace MareSynchronos.WebAPI } Logger.Verbose("Upload tasks complete, waiting for server to confirm"); - var anyUploadsOpen = await _fileHub!.InvokeAsync("IsUploadFinished", uploadToken); + var anyUploadsOpen = await _fileHub!.InvokeAsync(FilesHubAPI.InvokeIsUploadFinished, uploadToken); Logger.Verbose("Uploads open: " + anyUploadsOpen); while (anyUploadsOpen && !uploadToken.IsCancellationRequested) { - anyUploadsOpen = await _fileHub!.InvokeAsync("IsUploadFinished", uploadToken); + anyUploadsOpen = await _fileHub!.InvokeAsync(FilesHubAPI.InvokeIsUploadFinished, uploadToken); await Task.Delay(TimeSpan.FromSeconds(0.5), uploadToken); Logger.Verbose("Waiting for uploads to finish"); } @@ -202,7 +200,7 @@ namespace MareSynchronos.WebAPI if (!uploadToken.IsCancellationRequested) { Logger.Verbose("=== Pushing character data ==="); - await _userHub!.InvokeAsync("PushCharacterDataToVisibleClients", character, visibleCharacterIds, uploadToken); + await _userHub!.InvokeAsync(UserHubAPI.InvokePushCharacterDataToVisibleClients, character, visibleCharacterIds, uploadToken); } else { @@ -239,7 +237,7 @@ namespace MareSynchronos.WebAPI } } - await _fileHub!.SendAsync("UploadFileStreamAsync", fileHash, AsyncFileData(uploadToken), uploadToken); + await _fileHub!.SendAsync(FilesHubAPI.SendUploadFileStreamAsync, fileHash, AsyncFileData(uploadToken), uploadToken); } } diff --git a/MareSynchronos/WebAPI/ApIController.Functions.Users.cs b/MareSynchronos/WebAPI/ApIController.Functions.Users.cs index 4976003..de6a8d2 100644 --- a/MareSynchronos/WebAPI/ApIController.Functions.Users.cs +++ b/MareSynchronos/WebAPI/ApIController.Functions.Users.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using MareSynchronos.API; using MareSynchronos.Utils; using Microsoft.AspNetCore.SignalR.Client; @@ -12,8 +13,8 @@ namespace MareSynchronos.WebAPI { _pluginConfiguration.ClientSecret.Remove(ApiUri); _pluginConfiguration.Save(); - await _fileHub!.SendAsync("DeleteAllFiles"); - await _userHub!.SendAsync("DeleteAccount"); + await _fileHub!.SendAsync(FilesHubAPI.SendDeleteAllFiles); + await _userHub!.SendAsync(UserHubAPI.SendDeleteAccount); await CreateConnections(); } @@ -21,7 +22,7 @@ namespace MareSynchronos.WebAPI { if (!ServerAlive) return; Logger.Debug("Registering at service " + ApiUri); - var response = await _userHub!.InvokeAsync("Register"); + var response = await _userHub!.InvokeAsync(UserHubAPI.InvokeRegister); _pluginConfiguration.ClientSecret[ApiUri] = response; _pluginConfiguration.Save(); RegisterFinalized?.Invoke(); @@ -30,25 +31,25 @@ namespace MareSynchronos.WebAPI public async Task> GetOnlineCharacters() { - return await _userHub!.InvokeAsync>("GetOnlineCharacters"); + return await _userHub!.InvokeAsync>(UserHubAPI.InvokeGetOnlineCharacters); } public async Task SendPairedClientAddition(string uid) { if (!IsConnected || SecretKey == "-") return; - await _userHub!.SendAsync("SendPairedClientAddition", uid); + await _userHub!.SendAsync(UserHubAPI.SendPairedClientAddition, uid); } public async Task SendPairedClientPauseChange(string uid, bool paused) { if (!IsConnected || SecretKey == "-") return; - await _userHub!.SendAsync("SendPairedClientPauseChange", uid, paused); + await _userHub!.SendAsync(UserHubAPI.SendPairedClientPauseChange, uid, paused); } public async Task SendPairedClientRemoval(string uid) { if (!IsConnected || SecretKey == "-") return; - await _userHub!.SendAsync("SendPairedClientRemoval", uid); + await _userHub!.SendAsync(UserHubAPI.SendPairedClientRemoval, uid); } } diff --git a/MareSynchronos/WebAPI/ApiController.Connectivity.cs b/MareSynchronos/WebAPI/ApiController.Connectivity.cs index 3b4a17c..1302ee7 100644 --- a/MareSynchronos/WebAPI/ApiController.Connectivity.cs +++ b/MareSynchronos/WebAPI/ApiController.Connectivity.cs @@ -25,14 +25,10 @@ namespace MareSynchronos.WebAPI public partial class ApiController : IDisposable { -#if DEBUG public const string MainServer = "Lunae Crescere Incipientis (Central Server EU)"; public const string MainServiceUri = "wss://v2202207178628194299.powersrv.de:6871"; -#else - public const string MainServer = "Lunae Crescere Incipientis (Central Server EU)"; - public const string MainServiceUri = "wss://v2202207178628194299.powersrv.de:6871"; -#endif - public readonly int[] SupportedServerVersions = { 1 }; + + public readonly int[] SupportedServerVersions = { API.API.Version }; private readonly Configuration _pluginConfiguration; private readonly DalamudUtil _dalamudUtil; @@ -163,18 +159,18 @@ namespace MareSynchronos.WebAPI { if (_dalamudUtil.PlayerCharacter == null) throw new ArgumentException("Player not initialized"); Logger.Debug("Building connection"); - _heartbeatHub = BuildHubConnection("heartbeat"); - _userHub = BuildHubConnection("user"); - _fileHub = BuildHubConnection("files"); - _adminHub = BuildHubConnection("admin"); + _heartbeatHub = BuildHubConnection(ConnectionHubAPI.Path); + _userHub = BuildHubConnection(UserHubAPI.Path); + _fileHub = BuildHubConnection(FilesHubAPI.Path); + _adminHub = BuildHubConnection(AdminHubAPI.Path); await _heartbeatHub.StartAsync(token); await _userHub.StartAsync(token); await _fileHub.StartAsync(token); await _adminHub.StartAsync(token); - OnlineUsers = await _userHub.InvokeAsync("GetOnlineUsers", token); - _userHub.On("UsersOnline", (count) => OnlineUsers = count); + OnlineUsers = await _userHub.InvokeAsync(UserHubAPI.InvokeGetOnlineUsers, token); + _userHub.On(UserHubAPI.OnUsersOnline, (count) => OnlineUsers = count); if (_pluginConfiguration.FullPause) { @@ -182,19 +178,19 @@ namespace MareSynchronos.WebAPI return; } - _connectionDto = await _heartbeatHub.InvokeAsync("Heartbeat", token); + _connectionDto = await _heartbeatHub.InvokeAsync(ConnectionHubAPI.InvokeHeartbeat, token); if (ServerState is ServerState.Connected) // user is authorized && server is legit { Logger.Debug("Initializing data"); - _userHub.On("UpdateClientPairs", UpdateLocalClientPairsCallback); - _userHub.On("ReceiveCharacterData", ReceiveCharacterDataCallback); - _userHub.On("RemoveOnlinePairedPlayer", + _userHub.On(UserHubAPI.OnUpdateClientPairs, UpdateLocalClientPairsCallback); + _userHub.On(UserHubAPI.OnReceiveCharacterData, ReceiveCharacterDataCallback); + _userHub.On(UserHubAPI.OnRemoveOnlinePairedPlayer, (s) => PairedClientOffline?.Invoke(s)); - _userHub.On("AddOnlinePairedPlayer", + _userHub.On(UserHubAPI.OnAddOnlinePairedPlayer, (s) => PairedClientOnline?.Invoke(s)); - _adminHub.On("ForcedReconnect", UserForcedReconnectCallback); + _adminHub.On(AdminHubAPI.OnForcedReconnect, UserForcedReconnectCallback); - PairedClients = await _userHub!.InvokeAsync>("GetPairedClients", token); + PairedClients = await _userHub!.InvokeAsync>(UserHubAPI.InvokeGetPairedClients, token); _heartbeatHub.Closed += HeartbeatHubOnClosed; _heartbeatHub.Reconnected += HeartbeatHubOnReconnected; @@ -202,12 +198,12 @@ namespace MareSynchronos.WebAPI if (IsModerator) { - AdminForbiddenFiles = await _adminHub.InvokeAsync>("GetForbiddenFiles", token); - AdminBannedUsers = await _adminHub.InvokeAsync>("GetBannedUsers", token); - _adminHub.On("UpdateOrAddBannedUser", UpdateOrAddBannedUserCallback); - _adminHub.On("DeleteBannedUser", DeleteBannedUserCallback); - _adminHub.On("UpdateOrAddForbiddenFile", UpdateOrAddForbiddenFileCallback); - _adminHub.On("DeleteForbiddenFile", DeleteForbiddenFileCallback); + AdminForbiddenFiles = await _adminHub.InvokeAsync>(AdminHubAPI.InvokeGetForbiddenFiles, token); + AdminBannedUsers = await _adminHub.InvokeAsync>(AdminHubAPI.InvokeGetBannedUsers, token); + _adminHub.On(AdminHubAPI.OnUpdateOrAddBannedUser, UpdateOrAddBannedUserCallback); + _adminHub.On(AdminHubAPI.OnDeleteBannedUser, DeleteBannedUserCallback); + _adminHub.On(AdminHubAPI.OnUpdateOrAddForbiddenFile, UpdateOrAddForbiddenFileCallback); + _adminHub.On(AdminHubAPI.OnDeleteForbiddenFile, DeleteForbiddenFileCallback); } Connected?.Invoke(); @@ -237,7 +233,7 @@ namespace MareSynchronos.WebAPI private HubConnection BuildHubConnection(string hubName) { return new HubConnectionBuilder() - .WithUrl(ApiUri + "/" + hubName, options => + .WithUrl(ApiUri + hubName, options => { if (!string.IsNullOrEmpty(SecretKey) && !_pluginConfiguration.FullPause) { @@ -246,12 +242,6 @@ namespace MareSynchronos.WebAPI } options.Transports = HttpTransportType.WebSockets; -#if DEBUG - options.HttpMessageHandlerFactory = (message) => new HttpClientHandler() - { - ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator - }; -#endif }) .WithAutomaticReconnect(new ForeverRetryPolicy()) .Build(); @@ -270,8 +260,8 @@ namespace MareSynchronos.WebAPI private Task HeartbeatHubOnReconnected(string? arg) { Logger.Debug("Connection restored"); - OnlineUsers = _userHub!.InvokeAsync("GetOnlineUsers").Result; - _connectionDto = _heartbeatHub!.InvokeAsync("Heartbeat").Result; + OnlineUsers = _userHub!.InvokeAsync(UserHubAPI.InvokeGetOnlineUsers).Result; + _connectionDto = _heartbeatHub!.InvokeAsync(ConnectionHubAPI.InvokeHeartbeat).Result; Connected?.Invoke(); return Task.CompletedTask; } diff --git a/MareSynchronos/WebAPI/ApiController.Functions.Admin.cs b/MareSynchronos/WebAPI/ApiController.Functions.Admin.cs index 218c695..2c71fbc 100644 --- a/MareSynchronos/WebAPI/ApiController.Functions.Admin.cs +++ b/MareSynchronos/WebAPI/ApiController.Functions.Admin.cs @@ -9,39 +9,39 @@ namespace MareSynchronos.WebAPI { public async Task AddOrUpdateForbiddenFileEntry(ForbiddenFileDto forbiddenFile) { - await _adminHub!.SendAsync("UpdateOrAddForbiddenFile", forbiddenFile); + await _adminHub!.SendAsync(AdminHubAPI.SendUpdateOrAddForbiddenFile, forbiddenFile); } public async Task DeleteForbiddenFileEntry(ForbiddenFileDto forbiddenFile) { - await _adminHub!.SendAsync("DeleteForbiddenFile", forbiddenFile); + await _adminHub!.SendAsync(AdminHubAPI.SendDeleteForbiddenFile, forbiddenFile); } public async Task AddOrUpdateBannedUserEntry(BannedUserDto bannedUser) { - await _adminHub!.SendAsync("UpdateOrAddBannedUser", bannedUser); + await _adminHub!.SendAsync(AdminHubAPI.SendUpdateOrAddBannedUser, bannedUser); } public async Task DeleteBannedUserEntry(BannedUserDto bannedUser) { - await _adminHub!.SendAsync("DeleteBannedUser", bannedUser); + await _adminHub!.SendAsync(AdminHubAPI.SendDeleteBannedUser, bannedUser); } public async Task RefreshOnlineUsers() { - AdminOnlineUsers = await _adminHub!.InvokeAsync>("GetOnlineUsers"); + AdminOnlineUsers = await _adminHub!.InvokeAsync>(AdminHubAPI.InvokeGetOnlineUsers); } public List AdminOnlineUsers { get; set; } = new List(); public void PromoteToModerator(string onlineUserUID) { - _adminHub!.SendAsync("ChangeModeratorStatus", onlineUserUID, true); + _adminHub!.SendAsync(AdminHubAPI.SendChangeModeratorStatus, onlineUserUID, true); } public void DemoteFromModerator(string onlineUserUID) { - _adminHub!.SendAsync("ChangeModeratorStatus", onlineUserUID, false); + _adminHub!.SendAsync(AdminHubAPI.SendChangeModeratorStatus, onlineUserUID, false); } } } diff --git a/MareSynchronos/WebAPI/Utils/FileTransfer.cs b/MareSynchronos/WebAPI/Utils/FileTransfer.cs index 02cb3e2..e7941a1 100644 --- a/MareSynchronos/WebAPI/Utils/FileTransfer.cs +++ b/MareSynchronos/WebAPI/Utils/FileTransfer.cs @@ -17,7 +17,7 @@ public abstract class FileTransfer public string Hash => TransferDto.Hash; public bool IsInTransfer => Transferred != Total && Transferred > 0; public bool IsTransferred => Transferred == Total; - public virtual bool CanBeTransferred => !TransferDto.IsForbidden; + public virtual bool CanBeTransferred => !TransferDto.IsForbidden && (((DownloadFileDto)TransferDto)?.FileExists ?? true); public bool IsForbidden => TransferDto.IsForbidden; }