From ecaadc8eadc6c9f3d7bbdf80f0f5c64ffe28de8b Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Tue, 14 Mar 2023 19:49:44 +0100 Subject: [PATCH] Mare 0.8 (#13) * get rid of file handling through grpc and signalr * make non empty uri for serialization * adjust api DataHash calc into their respective classes * Revert "adapt api extensions" This reverts commit 5fb78ba3675844104bae57d8150376832c72141c. * Revert "adapt userpermissions" This reverts commit 28dd123ca6d1db9aaa0c646ff1dfc5baf0e651e3. * Revert "Revert "adapt api extensions"" This reverts commit 12c9bc3c53566532e2984ace0b3d2e0a8b7facc0. * Revert "Revert "adapt userpermissions"" This reverts commit 4193ac008cccf2f5b42e9cdf50b2a084877cbf9a. * update flags * add upload status to server --------- Co-authored-by: rootdarkarchon --- MareSynchronosAPI/Data/CharacterData.cs | 21 ++- .../Data/Enum/UserPermissions.cs | 8 +- MareSynchronosAPI/Data/FileReplacementData.cs | 21 ++- MareSynchronosAPI/Data/HashableDataBase.cs | 22 --- MareSynchronosAPI/Dto/ConnectionDto.cs | 2 + MareSynchronosAPI/Dto/Files/FilesSendDto.cs | 13 ++ .../Dto/Files/ForbiddenUploadsDto.cs | 10 -- MareSynchronosAPI/MareSynchronos.API.csproj | 3 +- MareSynchronosAPI/Routes/MareFiles.cs | 8 ++ MareSynchronosAPI/SignalR/IMareHub.cs | 129 +++++++++++------- MareSynchronosAPI/SignalR/IMareHubClient.cs | 48 ++++--- 11 files changed, 181 insertions(+), 104 deletions(-) delete mode 100644 MareSynchronosAPI/Data/HashableDataBase.cs create mode 100644 MareSynchronosAPI/Dto/Files/FilesSendDto.cs delete mode 100644 MareSynchronosAPI/Dto/Files/ForbiddenUploadsDto.cs diff --git a/MareSynchronosAPI/Data/CharacterData.cs b/MareSynchronosAPI/Data/CharacterData.cs index 2ed8e65..add4b1b 100644 --- a/MareSynchronosAPI/Data/CharacterData.cs +++ b/MareSynchronosAPI/Data/CharacterData.cs @@ -1,11 +1,30 @@ using MareSynchronos.API.Data.Enum; using MessagePack; +using System.Text.Json.Serialization; +using System.Text.Json; +using System.Text; +using System.Security.Cryptography; namespace MareSynchronos.API.Data; [MessagePackObject(keyAsPropertyName: true)] -public class CharacterData : HashableDataBase +public class CharacterData { + public CharacterData() + { + DataHash = new(() => + { + var json = JsonSerializer.Serialize(this); +#pragma warning disable SYSLIB0021 // Type or member is obsolete + using SHA256CryptoServiceProvider cryptoProvider = new(); +#pragma warning restore SYSLIB0021 // Type or member is obsolete + return BitConverter.ToString(cryptoProvider.ComputeHash(Encoding.UTF8.GetBytes(json))).Replace("-", "", StringComparison.Ordinal); + }); + } + + [JsonIgnore] + public Lazy DataHash { get; } + public Dictionary> FileReplacements { get; set; } = new(); public Dictionary GlamourerData { get; set; } = new(); public string ManipulationData { get; set; } = string.Empty; diff --git a/MareSynchronosAPI/Data/Enum/UserPermissions.cs b/MareSynchronosAPI/Data/Enum/UserPermissions.cs index 8050f27..7cbd9e3 100644 --- a/MareSynchronosAPI/Data/Enum/UserPermissions.cs +++ b/MareSynchronosAPI/Data/Enum/UserPermissions.cs @@ -3,7 +3,9 @@ [Flags] public enum UserPermissions { - NoneSet, - Paired, - Paused + NoneSet = 0, + Paired = 1, + Paused = 2, + DisableAnimations = 4, + DisableSounds = 8 } \ No newline at end of file diff --git a/MareSynchronosAPI/Data/FileReplacementData.cs b/MareSynchronosAPI/Data/FileReplacementData.cs index 5856f45..82161a5 100644 --- a/MareSynchronosAPI/Data/FileReplacementData.cs +++ b/MareSynchronosAPI/Data/FileReplacementData.cs @@ -1,10 +1,29 @@ using MessagePack; +using System.Text.Json.Serialization; +using System.Text.Json; +using System.Text; +using System.Security.Cryptography; + namespace MareSynchronos.API.Data; [MessagePackObject(keyAsPropertyName: true)] -public class FileReplacementData : HashableDataBase +public class FileReplacementData { + public FileReplacementData() + { + DataHash = new(() => + { + var json = JsonSerializer.Serialize(this); +#pragma warning disable SYSLIB0021 // Type or member is obsolete + using SHA256CryptoServiceProvider cryptoProvider = new(); +#pragma warning restore SYSLIB0021 // Type or member is obsolete + return BitConverter.ToString(cryptoProvider.ComputeHash(Encoding.UTF8.GetBytes(json))).Replace("-", "", StringComparison.Ordinal); + }); + } + + [JsonIgnore] + public Lazy DataHash { get; } public string[] GamePaths { get; set; } = Array.Empty(); public string Hash { get; set; } = string.Empty; public string FileSwapPath { get; set; } = string.Empty; diff --git a/MareSynchronosAPI/Data/HashableDataBase.cs b/MareSynchronosAPI/Data/HashableDataBase.cs deleted file mode 100644 index 1ebb85b..0000000 --- a/MareSynchronosAPI/Data/HashableDataBase.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Security.Cryptography; -using System.Text; -using MessagePack; -using Newtonsoft.Json; - -namespace MareSynchronos.API.Data; - -public abstract class HashableDataBase -{ - protected HashableDataBase() - { - DataHash = new(() => - { - var json = JsonConvert.SerializeObject(this, Formatting.None); - using SHA256CryptoServiceProvider cryptoProvider = new(); - return BitConverter.ToString(cryptoProvider.ComputeHash(Encoding.UTF8.GetBytes(json))).Replace("-", "", StringComparison.Ordinal); - }); - } - - [JsonIgnore] - public Lazy DataHash { get; } -} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/ConnectionDto.cs b/MareSynchronosAPI/Dto/ConnectionDto.cs index aeca3d6..ad19b99 100644 --- a/MareSynchronosAPI/Dto/ConnectionDto.cs +++ b/MareSynchronosAPI/Dto/ConnectionDto.cs @@ -6,6 +6,7 @@ namespace MareSynchronos.API.Dto; [MessagePackObject(keyAsPropertyName: true)] public record ConnectionDto(UserData User) { + public Version CurrentClientVersion { get; set; } = new(0, 0, 0); public int ServerVersion { get; set; } public bool IsAdmin { get; set; } public bool IsModerator { get; set; } @@ -19,4 +20,5 @@ public record ServerInfo public int MaxGroupUserCount { get; set; } public int MaxGroupsCreatedByUser { get; set; } public int MaxGroupsJoinedByUser { get; set; } + public Uri FileServerAddress { get; set; } = new Uri("http://nonemptyuri"); } \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Files/FilesSendDto.cs b/MareSynchronosAPI/Dto/Files/FilesSendDto.cs new file mode 100644 index 0000000..b7a6735 --- /dev/null +++ b/MareSynchronosAPI/Dto/Files/FilesSendDto.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MareSynchronos.API.Dto.Files; + +public class FilesSendDto +{ + public List FileHashes { get; set; } = new(); + public List UIDs { get; set; } = new(); +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Files/ForbiddenUploadsDto.cs b/MareSynchronosAPI/Dto/Files/ForbiddenUploadsDto.cs deleted file mode 100644 index edaa226..0000000 --- a/MareSynchronosAPI/Dto/Files/ForbiddenUploadsDto.cs +++ /dev/null @@ -1,10 +0,0 @@ -using MessagePack; - -namespace MareSynchronos.API.Dto.Files; - -[MessagePackObject(keyAsPropertyName: true)] -public record ForbiddenFileDto -{ - public string Hash { get; set; } = string.Empty; - public string ForbiddenBy { get; set; } = string.Empty; -} \ No newline at end of file diff --git a/MareSynchronosAPI/MareSynchronos.API.csproj b/MareSynchronosAPI/MareSynchronos.API.csproj index 04d7472..ae7fd5b 100644 --- a/MareSynchronosAPI/MareSynchronos.API.csproj +++ b/MareSynchronosAPI/MareSynchronos.API.csproj @@ -7,8 +7,7 @@ - - + diff --git a/MareSynchronosAPI/Routes/MareFiles.cs b/MareSynchronosAPI/Routes/MareFiles.cs index c08ec38..fcd8875 100644 --- a/MareSynchronosAPI/Routes/MareFiles.cs +++ b/MareSynchronosAPI/Routes/MareFiles.cs @@ -8,7 +8,15 @@ public class MareFiles public const string ServerFiles = "/files"; public const string ServerFiles_Get = "get"; + public const string ServerFiles_Upload = "upload"; + public const string ServerFiles_GetSizes = "getFileSizes"; + public const string ServerFiles_FilesSend = "filesSend"; + public const string ServerFiles_DeleteAll = "deleteAll"; public static Uri ServerFilesGetFullPath(Uri baseUri, string hash) => new(baseUri, ServerFiles + "/" + ServerFiles_Get + "/" + hash); + public static Uri ServerFilesUploadFullPath(Uri baseUri, string hash) => new(baseUri, ServerFiles + "/" + ServerFiles_Upload + "/" + hash); + public static Uri ServerFilesGetSizesFullPath(Uri baseUri) => new(baseUri, ServerFiles + "/" + ServerFiles_GetSizes); + public static Uri ServerFilesFilesSendFullPath(Uri baseUri) => new(baseUri, ServerFiles + "/" + ServerFiles_FilesSend); + public static Uri ServerFilesDeleteAllFullPath(Uri baseUri) => new(baseUri, ServerFiles + "/" + ServerFiles_DeleteAll); public const string Request = "/request"; public const string Request_Enqueue = "enqueue"; diff --git a/MareSynchronosAPI/SignalR/IMareHub.cs b/MareSynchronosAPI/SignalR/IMareHub.cs index 8ce380a..d276c67 100644 --- a/MareSynchronosAPI/SignalR/IMareHub.cs +++ b/MareSynchronosAPI/SignalR/IMareHub.cs @@ -2,70 +2,101 @@ using MareSynchronos.API.Dto; using MareSynchronos.API.Dto.Group; using MareSynchronos.API.Dto.User; -using MareSynchronos.API.Dto.Files; namespace MareSynchronos.API.SignalR; public interface IMareHub { - const int ApiVersion = 22; + const int ApiVersion = 23; const string Path = "/mare"; - Task GetConnectionDto(); Task CheckClientHealth(); - Task> FilesGetSizes(List hashes); - Task FilesAbortUpload(); - Task FilesDeleteAll(); - Task FilesIsUploadFinished(); - Task> FilesSend(List fileListHashes); - Task FilesUploadStreamAsync(string hash, IAsyncEnumerable fileContent); + Task Client_DownloadReady(Guid requestId); + + Task Client_GroupChangePermissions(GroupPermissionDto groupPermission); + + Task Client_GroupDelete(GroupDto groupDto); + + Task Client_GroupPairChangePermissions(GroupPairUserPermissionDto permissionDto); + + Task Client_GroupPairChangeUserInfo(GroupPairUserInfoDto userInfo); + + Task Client_GroupPairJoined(GroupPairFullInfoDto groupPairInfoDto); + + Task Client_GroupPairLeft(GroupPairDto groupPairDto); + + Task Client_GroupSendFullInfo(GroupFullInfoDto groupInfo); + + Task Client_GroupSendInfo(GroupInfoDto groupInfo); + + Task Client_ReceiveServerMessage(MessageSeverity messageSeverity, string message); + + Task Client_UpdateSystemInfo(SystemInfoDto systemInfo); + + Task Client_UserAddClientPair(UserPairDto dto); + + Task Client_UserReceiveCharacterData(OnlineUserCharaDataDto dataDto); + + Task Client_UserReceiveUploadStatus(UserDto dto); + + Task Client_UserRemoveClientPair(UserDto dto); + + Task Client_UserSendOffline(UserDto dto); + + Task Client_UserSendOnline(OnlineUserIdentDto dto); + + Task Client_UserUpdateOtherPairPermissions(UserPermissionsDto dto); + + Task Client_UserUpdateSelfPairPermissions(UserPermissionsDto dto); + + Task GetConnectionDto(); + + Task GroupBanUser(GroupPairDto dto, string reason); + + Task GroupChangeGroupPermissionState(GroupPermissionDto dto); + + Task GroupChangeIndividualPermissionState(GroupPairUserPermissionDto dto); + + Task GroupChangeOwnership(GroupPairDto groupPair); + + Task GroupChangePassword(GroupPasswordDto groupPassword); + + Task GroupClear(GroupDto group); + + Task GroupCreate(); + + Task> GroupCreateTempInvite(GroupDto group, int amount); + + Task GroupDelete(GroupDto group); + + Task> GroupGetBannedUsers(GroupDto group); + + Task GroupJoin(GroupPasswordDto passwordedGroup); + + Task GroupLeave(GroupDto group); + + Task GroupRemoveUser(GroupPairDto groupPair); + + Task GroupSetUserInfo(GroupPairUserInfoDto groupPair); + + Task> GroupsGetAll(); + + Task> GroupsGetUsersInGroup(GroupDto group); + + Task GroupUnbanUser(GroupPairDto groupPair); - Task> UserGetPairedClients(); Task UserAddPair(UserDto user); - Task UserRemovePair(UserDto userDto); - Task UserSetPairPermissions(UserPermissionsDto userPermissions); - Task> UserGetOnlinePairs(); - Task UserPushData(UserCharaDataMessageDto dto); Task UserDelete(); - Task> GroupGetBannedUsers(GroupDto group); - Task GroupClear(GroupDto group); - Task GroupChangeOwnership(GroupPairDto groupPair); - Task GroupChangePassword(GroupPasswordDto groupPassword); - Task GroupCreate(); - Task> GroupsGetAll(); - Task> GroupsGetUsersInGroup(GroupDto group); - Task GroupBanUser(GroupPairDto dto, string reason); - Task GroupChangeGroupPermissionState(GroupPermissionDto dto); - Task GroupChangeIndividualPermissionState(GroupPairUserPermissionDto dto); - Task GroupDelete(GroupDto group); - Task GroupJoin(GroupPasswordDto passwordedGroup); - Task GroupLeave(GroupDto group); - Task GroupRemoveUser(GroupPairDto groupPair); - Task GroupUnbanUser(GroupPairDto groupPair); - Task GroupSetUserInfo(GroupPairUserInfoDto groupPair); - Task> GroupCreateTempInvite(GroupDto group, int amount); + Task> UserGetOnlinePairs(); - Task Client_UpdateSystemInfo(SystemInfoDto systemInfo); - Task Client_ReceiveServerMessage(MessageSeverity messageSeverity, string message); - Task Client_DownloadReady(Guid requestId); + Task> UserGetPairedClients(); - Task Client_UserSendOnline(OnlineUserIdentDto dto); - Task Client_UserSendOffline(UserDto dto); - Task Client_UserAddClientPair(UserPairDto dto); - Task Client_UserRemoveClientPair(UserDto dto); - Task Client_UserUpdateSelfPairPermissions(UserPermissionsDto dto); - Task Client_UserUpdateOtherPairPermissions(UserPermissionsDto dto); - Task Client_UserReceiveCharacterData(OnlineUserCharaDataDto dataDto); + Task UserPushData(UserCharaDataMessageDto dto); - Task Client_GroupSendFullInfo(GroupFullInfoDto groupInfo); - Task Client_GroupSendInfo(GroupInfoDto groupInfo); - Task Client_GroupDelete(GroupDto groupDto); - Task Client_GroupPairJoined(GroupPairFullInfoDto groupPairInfoDto); - Task Client_GroupPairLeft(GroupPairDto groupPairDto); - Task Client_GroupChangePermissions(GroupPermissionDto groupPermission); - Task Client_GroupPairChangePermissions(GroupPairUserPermissionDto permissionDto); - Task Client_GroupPairChangeUserInfo(GroupPairUserInfoDto userInfo); + Task UserRemovePair(UserDto userDto); + + Task UserSetPairPermissions(UserPermissionsDto userPermissions); } \ No newline at end of file diff --git a/MareSynchronosAPI/SignalR/IMareHubClient.cs b/MareSynchronosAPI/SignalR/IMareHubClient.cs index cb083a8..f0fd19c 100644 --- a/MareSynchronosAPI/SignalR/IMareHubClient.cs +++ b/MareSynchronosAPI/SignalR/IMareHubClient.cs @@ -1,6 +1,5 @@ using MareSynchronos.API.Data.Enum; using MareSynchronos.API.Dto; -using MareSynchronos.API.Dto.Files; using MareSynchronos.API.Dto.Group; using MareSynchronos.API.Dto.User; @@ -8,24 +7,41 @@ namespace MareSynchronos.API.SignalR; public interface IMareHubClient : IMareHub { - void OnUpdateSystemInfo(Action act); - void OnReceiveServerMessage(Action act); void OnDownloadReady(Action act); - void OnUserSendOnline(Action act); - void OnUserSendOffline(Action act); - void OnUserAddClientPair(Action act); - void OnUserRemoveClientPair(Action act); - void OnUserUpdateSelfPairPermissions(Action act); - void OnUserUpdateOtherPairPermissions(Action act); - void OnUserReceiveCharacterData(Action act); + void OnGroupChangePermissions(Action act); + + void OnGroupDelete(Action act); + + void OnGroupPairChangePermissions(Action act); + + void OnGroupPairChangeUserInfo(Action act); + + void OnGroupPairJoined(Action act); + + void OnGroupPairLeft(Action act); void OnGroupSendFullInfo(Action act); + void OnGroupSendInfo(Action act); - void OnGroupDelete(Action act); - void OnGroupPairJoined(Action act); - void OnGroupPairLeft(Action act); - void OnGroupChangePermissions(Action act); - void OnGroupPairChangePermissions(Action act); - void OnGroupPairChangeUserInfo(Action act); + + void OnReceiveServerMessage(Action act); + + void OnUpdateSystemInfo(Action act); + + void OnUserAddClientPair(Action act); + + void OnUserReceiveCharacterData(Action act); + + void OnUserReceiveUploadStatus(Action act); + + void OnUserRemoveClientPair(Action act); + + void OnUserSendOffline(Action act); + + void OnUserSendOnline(Action act); + + void OnUserUpdateOtherPairPermissions(Action act); + + void OnUserUpdateSelfPairPermissions(Action act); } \ No newline at end of file