use provided API vom server

This commit is contained in:
Stanley Dimant
2022-07-04 13:16:43 +02:00
parent f0531035fc
commit 90ec056a11
5 changed files with 49 additions and 60 deletions

View File

@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
@@ -23,19 +22,19 @@ namespace MareSynchronos.WebAPI
{ {
Logger.Warn("Cancelling upload"); Logger.Warn("Cancelling upload");
_uploadCancellationTokenSource?.Cancel(); _uploadCancellationTokenSource?.Cancel();
_fileHub!.SendAsync("AbortUpload"); _fileHub!.SendAsync(FilesHubAPI.SendAbortUpload);
CurrentUploads.Clear(); CurrentUploads.Clear();
} }
} }
public async Task DeleteAllMyFiles() public async Task DeleteAllMyFiles()
{ {
await _fileHub!.SendAsync("DeleteAllFiles"); await _fileHub!.SendAsync(FilesHubAPI.SendDeleteAllFiles);
} }
public async Task<string> DownloadFile(string hash, CancellationToken ct) public async Task<string> DownloadFile(string hash, CancellationToken ct)
{ {
var reader = _fileHub!.StreamAsync<byte[]>("DownloadFileAsync", hash, ct); var reader = _fileHub!.StreamAsync<byte[]>(FilesHubAPI.StreamDownloadFileAsync, hash, ct);
string fileName = Path.GetTempFileName(); string fileName = Path.GetTempFileName();
await using var fs = File.OpenWrite(fileName); await using var fs = File.OpenWrite(fileName);
await foreach (var data in reader.WithCancellation(ct)) await foreach (var data in reader.WithCancellation(ct))
@@ -43,7 +42,6 @@ namespace MareSynchronos.WebAPI
//Logger.Debug("Getting chunk of " + hash); //Logger.Debug("Getting chunk of " + hash);
CurrentDownloads.Single(f => f.Hash == hash).Transferred += data.Length; CurrentDownloads.Single(f => f.Hash == hash).Transferred += data.Length;
await fs.WriteAsync(data, ct); await fs.WriteAsync(data, ct);
Debug.WriteLine("Wrote chunk " + data.Length + " into " + fileName);
} }
return fileName; return fileName;
} }
@@ -55,7 +53,7 @@ namespace MareSynchronos.WebAPI
List<DownloadFileDto> downloadFiles = new List<DownloadFileDto>(); List<DownloadFileDto> downloadFiles = new List<DownloadFileDto>();
foreach (var file in fileReplacementDto) foreach (var file in fileReplacementDto)
{ {
downloadFiles.Add(await _fileHub!.InvokeAsync<DownloadFileDto>("GetFileSize", file.Hash, ct)); downloadFiles.Add(await _fileHub!.InvokeAsync<DownloadFileDto>(FilesHubAPI.InvokeGetFileSize, file.Hash, ct));
} }
downloadFiles = downloadFiles.Distinct().ToList(); downloadFiles = downloadFiles.Distinct().ToList();
@@ -133,7 +131,7 @@ namespace MareSynchronos.WebAPI
var uploadToken = _uploadCancellationTokenSource.Token; var uploadToken = _uploadCancellationTokenSource.Token;
Logger.Verbose("New Token Created"); Logger.Verbose("New Token Created");
var filesToUpload = await _fileHub!.InvokeAsync<List<UploadFileDto>>("SendFiles", character.FileReplacements.Select(c => c.Hash).Distinct(), uploadToken); var filesToUpload = await _fileHub!.InvokeAsync<List<UploadFileDto>>(FilesHubAPI.InvokeSendFiles, character.FileReplacements.Select(c => c.Hash).Distinct(), uploadToken);
foreach (var file in filesToUpload.Where(f => !f.IsForbidden)) 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"); Logger.Verbose("Upload tasks complete, waiting for server to confirm");
var anyUploadsOpen = await _fileHub!.InvokeAsync<bool>("IsUploadFinished", uploadToken); var anyUploadsOpen = await _fileHub!.InvokeAsync<bool>(FilesHubAPI.InvokeIsUploadFinished, uploadToken);
Logger.Verbose("Uploads open: " + anyUploadsOpen); Logger.Verbose("Uploads open: " + anyUploadsOpen);
while (anyUploadsOpen && !uploadToken.IsCancellationRequested) while (anyUploadsOpen && !uploadToken.IsCancellationRequested)
{ {
anyUploadsOpen = await _fileHub!.InvokeAsync<bool>("IsUploadFinished", uploadToken); anyUploadsOpen = await _fileHub!.InvokeAsync<bool>(FilesHubAPI.InvokeIsUploadFinished, uploadToken);
await Task.Delay(TimeSpan.FromSeconds(0.5), uploadToken); await Task.Delay(TimeSpan.FromSeconds(0.5), uploadToken);
Logger.Verbose("Waiting for uploads to finish"); Logger.Verbose("Waiting for uploads to finish");
} }
@@ -202,7 +200,7 @@ namespace MareSynchronos.WebAPI
if (!uploadToken.IsCancellationRequested) if (!uploadToken.IsCancellationRequested)
{ {
Logger.Verbose("=== Pushing character data ==="); Logger.Verbose("=== Pushing character data ===");
await _userHub!.InvokeAsync("PushCharacterDataToVisibleClients", character, visibleCharacterIds, uploadToken); await _userHub!.InvokeAsync(UserHubAPI.InvokePushCharacterDataToVisibleClients, character, visibleCharacterIds, uploadToken);
} }
else 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);
} }
} }

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using MareSynchronos.API;
using MareSynchronos.Utils; using MareSynchronos.Utils;
using Microsoft.AspNetCore.SignalR.Client; using Microsoft.AspNetCore.SignalR.Client;
@@ -12,8 +13,8 @@ namespace MareSynchronos.WebAPI
{ {
_pluginConfiguration.ClientSecret.Remove(ApiUri); _pluginConfiguration.ClientSecret.Remove(ApiUri);
_pluginConfiguration.Save(); _pluginConfiguration.Save();
await _fileHub!.SendAsync("DeleteAllFiles"); await _fileHub!.SendAsync(FilesHubAPI.SendDeleteAllFiles);
await _userHub!.SendAsync("DeleteAccount"); await _userHub!.SendAsync(UserHubAPI.SendDeleteAccount);
await CreateConnections(); await CreateConnections();
} }
@@ -21,7 +22,7 @@ namespace MareSynchronos.WebAPI
{ {
if (!ServerAlive) return; if (!ServerAlive) return;
Logger.Debug("Registering at service " + ApiUri); Logger.Debug("Registering at service " + ApiUri);
var response = await _userHub!.InvokeAsync<string>("Register"); var response = await _userHub!.InvokeAsync<string>(UserHubAPI.InvokeRegister);
_pluginConfiguration.ClientSecret[ApiUri] = response; _pluginConfiguration.ClientSecret[ApiUri] = response;
_pluginConfiguration.Save(); _pluginConfiguration.Save();
RegisterFinalized?.Invoke(); RegisterFinalized?.Invoke();
@@ -30,25 +31,25 @@ namespace MareSynchronos.WebAPI
public async Task<List<string>> GetOnlineCharacters() public async Task<List<string>> GetOnlineCharacters()
{ {
return await _userHub!.InvokeAsync<List<string>>("GetOnlineCharacters"); return await _userHub!.InvokeAsync<List<string>>(UserHubAPI.InvokeGetOnlineCharacters);
} }
public async Task SendPairedClientAddition(string uid) public async Task SendPairedClientAddition(string uid)
{ {
if (!IsConnected || SecretKey == "-") return; if (!IsConnected || SecretKey == "-") return;
await _userHub!.SendAsync("SendPairedClientAddition", uid); await _userHub!.SendAsync(UserHubAPI.SendPairedClientAddition, uid);
} }
public async Task SendPairedClientPauseChange(string uid, bool paused) public async Task SendPairedClientPauseChange(string uid, bool paused)
{ {
if (!IsConnected || SecretKey == "-") return; if (!IsConnected || SecretKey == "-") return;
await _userHub!.SendAsync("SendPairedClientPauseChange", uid, paused); await _userHub!.SendAsync(UserHubAPI.SendPairedClientPauseChange, uid, paused);
} }
public async Task SendPairedClientRemoval(string uid) public async Task SendPairedClientRemoval(string uid)
{ {
if (!IsConnected || SecretKey == "-") return; if (!IsConnected || SecretKey == "-") return;
await _userHub!.SendAsync("SendPairedClientRemoval", uid); await _userHub!.SendAsync(UserHubAPI.SendPairedClientRemoval, uid);
} }
} }

View File

@@ -25,14 +25,10 @@ namespace MareSynchronos.WebAPI
public partial class ApiController : IDisposable public partial class ApiController : IDisposable
{ {
#if DEBUG
public const string MainServer = "Lunae Crescere Incipientis (Central Server EU)"; public const string MainServer = "Lunae Crescere Incipientis (Central Server EU)";
public const string MainServiceUri = "wss://v2202207178628194299.powersrv.de:6871"; public const string MainServiceUri = "wss://v2202207178628194299.powersrv.de:6871";
#else
public const string MainServer = "Lunae Crescere Incipientis (Central Server EU)"; public readonly int[] SupportedServerVersions = { API.API.Version };
public const string MainServiceUri = "wss://v2202207178628194299.powersrv.de:6871";
#endif
public readonly int[] SupportedServerVersions = { 1 };
private readonly Configuration _pluginConfiguration; private readonly Configuration _pluginConfiguration;
private readonly DalamudUtil _dalamudUtil; private readonly DalamudUtil _dalamudUtil;
@@ -163,18 +159,18 @@ namespace MareSynchronos.WebAPI
{ {
if (_dalamudUtil.PlayerCharacter == null) throw new ArgumentException("Player not initialized"); if (_dalamudUtil.PlayerCharacter == null) throw new ArgumentException("Player not initialized");
Logger.Debug("Building connection"); Logger.Debug("Building connection");
_heartbeatHub = BuildHubConnection("heartbeat"); _heartbeatHub = BuildHubConnection(ConnectionHubAPI.Path);
_userHub = BuildHubConnection("user"); _userHub = BuildHubConnection(UserHubAPI.Path);
_fileHub = BuildHubConnection("files"); _fileHub = BuildHubConnection(FilesHubAPI.Path);
_adminHub = BuildHubConnection("admin"); _adminHub = BuildHubConnection(AdminHubAPI.Path);
await _heartbeatHub.StartAsync(token); await _heartbeatHub.StartAsync(token);
await _userHub.StartAsync(token); await _userHub.StartAsync(token);
await _fileHub.StartAsync(token); await _fileHub.StartAsync(token);
await _adminHub.StartAsync(token); await _adminHub.StartAsync(token);
OnlineUsers = await _userHub.InvokeAsync<int>("GetOnlineUsers", token); OnlineUsers = await _userHub.InvokeAsync<int>(UserHubAPI.InvokeGetOnlineUsers, token);
_userHub.On<int>("UsersOnline", (count) => OnlineUsers = count); _userHub.On<int>(UserHubAPI.OnUsersOnline, (count) => OnlineUsers = count);
if (_pluginConfiguration.FullPause) if (_pluginConfiguration.FullPause)
{ {
@@ -182,19 +178,19 @@ namespace MareSynchronos.WebAPI
return; return;
} }
_connectionDto = await _heartbeatHub.InvokeAsync<ConnectionDto>("Heartbeat", token); _connectionDto = await _heartbeatHub.InvokeAsync<ConnectionDto>(ConnectionHubAPI.InvokeHeartbeat, token);
if (ServerState is ServerState.Connected) // user is authorized && server is legit if (ServerState is ServerState.Connected) // user is authorized && server is legit
{ {
Logger.Debug("Initializing data"); Logger.Debug("Initializing data");
_userHub.On<ClientPairDto, string>("UpdateClientPairs", UpdateLocalClientPairsCallback); _userHub.On<ClientPairDto, string>(UserHubAPI.OnUpdateClientPairs, UpdateLocalClientPairsCallback);
_userHub.On<CharacterCacheDto, string>("ReceiveCharacterData", ReceiveCharacterDataCallback); _userHub.On<CharacterCacheDto, string>(UserHubAPI.OnReceiveCharacterData, ReceiveCharacterDataCallback);
_userHub.On<string>("RemoveOnlinePairedPlayer", _userHub.On<string>(UserHubAPI.OnRemoveOnlinePairedPlayer,
(s) => PairedClientOffline?.Invoke(s)); (s) => PairedClientOffline?.Invoke(s));
_userHub.On<string>("AddOnlinePairedPlayer", _userHub.On<string>(UserHubAPI.OnAddOnlinePairedPlayer,
(s) => PairedClientOnline?.Invoke(s)); (s) => PairedClientOnline?.Invoke(s));
_adminHub.On("ForcedReconnect", UserForcedReconnectCallback); _adminHub.On(AdminHubAPI.OnForcedReconnect, UserForcedReconnectCallback);
PairedClients = await _userHub!.InvokeAsync<List<ClientPairDto>>("GetPairedClients", token); PairedClients = await _userHub!.InvokeAsync<List<ClientPairDto>>(UserHubAPI.InvokeGetPairedClients, token);
_heartbeatHub.Closed += HeartbeatHubOnClosed; _heartbeatHub.Closed += HeartbeatHubOnClosed;
_heartbeatHub.Reconnected += HeartbeatHubOnReconnected; _heartbeatHub.Reconnected += HeartbeatHubOnReconnected;
@@ -202,12 +198,12 @@ namespace MareSynchronos.WebAPI
if (IsModerator) if (IsModerator)
{ {
AdminForbiddenFiles = await _adminHub.InvokeAsync<List<ForbiddenFileDto>>("GetForbiddenFiles", token); AdminForbiddenFiles = await _adminHub.InvokeAsync<List<ForbiddenFileDto>>(AdminHubAPI.InvokeGetForbiddenFiles, token);
AdminBannedUsers = await _adminHub.InvokeAsync<List<BannedUserDto>>("GetBannedUsers", token); AdminBannedUsers = await _adminHub.InvokeAsync<List<BannedUserDto>>(AdminHubAPI.InvokeGetBannedUsers, token);
_adminHub.On<BannedUserDto>("UpdateOrAddBannedUser", UpdateOrAddBannedUserCallback); _adminHub.On<BannedUserDto>(AdminHubAPI.OnUpdateOrAddBannedUser, UpdateOrAddBannedUserCallback);
_adminHub.On<BannedUserDto>("DeleteBannedUser", DeleteBannedUserCallback); _adminHub.On<BannedUserDto>(AdminHubAPI.OnDeleteBannedUser, DeleteBannedUserCallback);
_adminHub.On<ForbiddenFileDto>("UpdateOrAddForbiddenFile", UpdateOrAddForbiddenFileCallback); _adminHub.On<ForbiddenFileDto>(AdminHubAPI.OnUpdateOrAddForbiddenFile, UpdateOrAddForbiddenFileCallback);
_adminHub.On<ForbiddenFileDto>("DeleteForbiddenFile", DeleteForbiddenFileCallback); _adminHub.On<ForbiddenFileDto>(AdminHubAPI.OnDeleteForbiddenFile, DeleteForbiddenFileCallback);
} }
Connected?.Invoke(); Connected?.Invoke();
@@ -237,7 +233,7 @@ namespace MareSynchronos.WebAPI
private HubConnection BuildHubConnection(string hubName) private HubConnection BuildHubConnection(string hubName)
{ {
return new HubConnectionBuilder() return new HubConnectionBuilder()
.WithUrl(ApiUri + "/" + hubName, options => .WithUrl(ApiUri + hubName, options =>
{ {
if (!string.IsNullOrEmpty(SecretKey) && !_pluginConfiguration.FullPause) if (!string.IsNullOrEmpty(SecretKey) && !_pluginConfiguration.FullPause)
{ {
@@ -246,12 +242,6 @@ namespace MareSynchronos.WebAPI
} }
options.Transports = HttpTransportType.WebSockets; options.Transports = HttpTransportType.WebSockets;
#if DEBUG
options.HttpMessageHandlerFactory = (message) => new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
#endif
}) })
.WithAutomaticReconnect(new ForeverRetryPolicy()) .WithAutomaticReconnect(new ForeverRetryPolicy())
.Build(); .Build();
@@ -270,8 +260,8 @@ namespace MareSynchronos.WebAPI
private Task HeartbeatHubOnReconnected(string? arg) private Task HeartbeatHubOnReconnected(string? arg)
{ {
Logger.Debug("Connection restored"); Logger.Debug("Connection restored");
OnlineUsers = _userHub!.InvokeAsync<int>("GetOnlineUsers").Result; OnlineUsers = _userHub!.InvokeAsync<int>(UserHubAPI.InvokeGetOnlineUsers).Result;
_connectionDto = _heartbeatHub!.InvokeAsync<ConnectionDto>("Heartbeat").Result; _connectionDto = _heartbeatHub!.InvokeAsync<ConnectionDto>(ConnectionHubAPI.InvokeHeartbeat).Result;
Connected?.Invoke(); Connected?.Invoke();
return Task.CompletedTask; return Task.CompletedTask;
} }

View File

@@ -9,39 +9,39 @@ namespace MareSynchronos.WebAPI
{ {
public async Task AddOrUpdateForbiddenFileEntry(ForbiddenFileDto forbiddenFile) public async Task AddOrUpdateForbiddenFileEntry(ForbiddenFileDto forbiddenFile)
{ {
await _adminHub!.SendAsync("UpdateOrAddForbiddenFile", forbiddenFile); await _adminHub!.SendAsync(AdminHubAPI.SendUpdateOrAddForbiddenFile, forbiddenFile);
} }
public async Task DeleteForbiddenFileEntry(ForbiddenFileDto forbiddenFile) public async Task DeleteForbiddenFileEntry(ForbiddenFileDto forbiddenFile)
{ {
await _adminHub!.SendAsync("DeleteForbiddenFile", forbiddenFile); await _adminHub!.SendAsync(AdminHubAPI.SendDeleteForbiddenFile, forbiddenFile);
} }
public async Task AddOrUpdateBannedUserEntry(BannedUserDto bannedUser) public async Task AddOrUpdateBannedUserEntry(BannedUserDto bannedUser)
{ {
await _adminHub!.SendAsync("UpdateOrAddBannedUser", bannedUser); await _adminHub!.SendAsync(AdminHubAPI.SendUpdateOrAddBannedUser, bannedUser);
} }
public async Task DeleteBannedUserEntry(BannedUserDto bannedUser) public async Task DeleteBannedUserEntry(BannedUserDto bannedUser)
{ {
await _adminHub!.SendAsync("DeleteBannedUser", bannedUser); await _adminHub!.SendAsync(AdminHubAPI.SendDeleteBannedUser, bannedUser);
} }
public async Task RefreshOnlineUsers() public async Task RefreshOnlineUsers()
{ {
AdminOnlineUsers = await _adminHub!.InvokeAsync<List<OnlineUserDto>>("GetOnlineUsers"); AdminOnlineUsers = await _adminHub!.InvokeAsync<List<OnlineUserDto>>(AdminHubAPI.InvokeGetOnlineUsers);
} }
public List<OnlineUserDto> AdminOnlineUsers { get; set; } = new List<OnlineUserDto>(); public List<OnlineUserDto> AdminOnlineUsers { get; set; } = new List<OnlineUserDto>();
public void PromoteToModerator(string onlineUserUID) public void PromoteToModerator(string onlineUserUID)
{ {
_adminHub!.SendAsync("ChangeModeratorStatus", onlineUserUID, true); _adminHub!.SendAsync(AdminHubAPI.SendChangeModeratorStatus, onlineUserUID, true);
} }
public void DemoteFromModerator(string onlineUserUID) public void DemoteFromModerator(string onlineUserUID)
{ {
_adminHub!.SendAsync("ChangeModeratorStatus", onlineUserUID, false); _adminHub!.SendAsync(AdminHubAPI.SendChangeModeratorStatus, onlineUserUID, false);
} }
} }
} }

View File

@@ -17,7 +17,7 @@ public abstract class FileTransfer
public string Hash => TransferDto.Hash; public string Hash => TransferDto.Hash;
public bool IsInTransfer => Transferred != Total && Transferred > 0; public bool IsInTransfer => Transferred != Total && Transferred > 0;
public bool IsTransferred => Transferred == Total; 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; public bool IsForbidden => TransferDto.IsForbidden;
} }