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.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<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();
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<DownloadFileDto> downloadFiles = new List<DownloadFileDto>();
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();
@@ -133,7 +131,7 @@ namespace MareSynchronos.WebAPI
var uploadToken = _uploadCancellationTokenSource.Token;
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))
{
@@ -188,11 +186,11 @@ namespace MareSynchronos.WebAPI
}
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);
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);
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);
}
}

View File

@@ -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<string>("Register");
var response = await _userHub!.InvokeAsync<string>(UserHubAPI.InvokeRegister);
_pluginConfiguration.ClientSecret[ApiUri] = response;
_pluginConfiguration.Save();
RegisterFinalized?.Invoke();
@@ -30,25 +31,25 @@ namespace MareSynchronos.WebAPI
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)
{
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);
}
}

View File

@@ -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<int>("GetOnlineUsers", token);
_userHub.On<int>("UsersOnline", (count) => OnlineUsers = count);
OnlineUsers = await _userHub.InvokeAsync<int>(UserHubAPI.InvokeGetOnlineUsers, token);
_userHub.On<int>(UserHubAPI.OnUsersOnline, (count) => OnlineUsers = count);
if (_pluginConfiguration.FullPause)
{
@@ -182,19 +178,19 @@ namespace MareSynchronos.WebAPI
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
{
Logger.Debug("Initializing data");
_userHub.On<ClientPairDto, string>("UpdateClientPairs", UpdateLocalClientPairsCallback);
_userHub.On<CharacterCacheDto, string>("ReceiveCharacterData", ReceiveCharacterDataCallback);
_userHub.On<string>("RemoveOnlinePairedPlayer",
_userHub.On<ClientPairDto, string>(UserHubAPI.OnUpdateClientPairs, UpdateLocalClientPairsCallback);
_userHub.On<CharacterCacheDto, string>(UserHubAPI.OnReceiveCharacterData, ReceiveCharacterDataCallback);
_userHub.On<string>(UserHubAPI.OnRemoveOnlinePairedPlayer,
(s) => PairedClientOffline?.Invoke(s));
_userHub.On<string>("AddOnlinePairedPlayer",
_userHub.On<string>(UserHubAPI.OnAddOnlinePairedPlayer,
(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.Reconnected += HeartbeatHubOnReconnected;
@@ -202,12 +198,12 @@ namespace MareSynchronos.WebAPI
if (IsModerator)
{
AdminForbiddenFiles = await _adminHub.InvokeAsync<List<ForbiddenFileDto>>("GetForbiddenFiles", token);
AdminBannedUsers = await _adminHub.InvokeAsync<List<BannedUserDto>>("GetBannedUsers", token);
_adminHub.On<BannedUserDto>("UpdateOrAddBannedUser", UpdateOrAddBannedUserCallback);
_adminHub.On<BannedUserDto>("DeleteBannedUser", DeleteBannedUserCallback);
_adminHub.On<ForbiddenFileDto>("UpdateOrAddForbiddenFile", UpdateOrAddForbiddenFileCallback);
_adminHub.On<ForbiddenFileDto>("DeleteForbiddenFile", DeleteForbiddenFileCallback);
AdminForbiddenFiles = await _adminHub.InvokeAsync<List<ForbiddenFileDto>>(AdminHubAPI.InvokeGetForbiddenFiles, token);
AdminBannedUsers = await _adminHub.InvokeAsync<List<BannedUserDto>>(AdminHubAPI.InvokeGetBannedUsers, token);
_adminHub.On<BannedUserDto>(AdminHubAPI.OnUpdateOrAddBannedUser, UpdateOrAddBannedUserCallback);
_adminHub.On<BannedUserDto>(AdminHubAPI.OnDeleteBannedUser, DeleteBannedUserCallback);
_adminHub.On<ForbiddenFileDto>(AdminHubAPI.OnUpdateOrAddForbiddenFile, UpdateOrAddForbiddenFileCallback);
_adminHub.On<ForbiddenFileDto>(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<int>("GetOnlineUsers").Result;
_connectionDto = _heartbeatHub!.InvokeAsync<ConnectionDto>("Heartbeat").Result;
OnlineUsers = _userHub!.InvokeAsync<int>(UserHubAPI.InvokeGetOnlineUsers).Result;
_connectionDto = _heartbeatHub!.InvokeAsync<ConnectionDto>(ConnectionHubAPI.InvokeHeartbeat).Result;
Connected?.Invoke();
return Task.CompletedTask;
}

View File

@@ -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<List<OnlineUserDto>>("GetOnlineUsers");
AdminOnlineUsers = await _adminHub!.InvokeAsync<List<OnlineUserDto>>(AdminHubAPI.InvokeGetOnlineUsers);
}
public List<OnlineUserDto> AdminOnlineUsers { get; set; } = new List<OnlineUserDto>();
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);
}
}
}

View File

@@ -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;
}