From 0d04aaafac59b20f35715b0e5d00fce93c1838af Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sun, 29 Jan 2023 15:14:33 +0100 Subject: [PATCH] Major API rework for paradigm change (#10) * start with group permissions implementation * refactor group dto stuff * adjustments to api as necessary from client * more api refactor for UserData * use implicit usings and file scoped namespaces * fix userpermissionsextensions * fix extenions * add more comparers * adjust comparers * remove admin stuff (tbd migration to discord bot) * adjust extensions * code style for api --------- Co-authored-by: rootdarkarchon --- MareSynchronosAPI/BannedGroupUserDto.cs | 16 ---- MareSynchronosAPI/BannedUserDto.cs | 8 -- MareSynchronosAPI/CharacterCacheDto.cs | 54 ----------- MareSynchronosAPI/ClientPairDto.cs | 13 --- MareSynchronosAPI/ConnectionDto.cs | 19 ---- MareSynchronosAPI/Data/CharacterData.cs | 12 +++ .../Data/Comparer/GroupDataComparer.cs | 19 ++++ .../Data/Comparer/GroupDtoComparer.cs | 23 +++++ .../Data/Comparer/GroupPairDtoComparer.cs | 20 +++++ .../Data/Comparer/UserDataComparer.cs | 20 +++++ .../Data/Comparer/UserDtoComparer.cs | 20 +++++ .../Data/Enum/GroupPermissions.cs | 10 +++ MareSynchronosAPI/Data/Enum/GroupUserInfo.cs | 9 ++ .../Data/Enum/GroupUserPermissions.cs | 10 +++ .../Data/Enum/MessageSeverity.cs | 8 ++ MareSynchronosAPI/Data/Enum/ObjectKind.cs | 9 ++ .../Data/Enum/UserPermissions.cs | 9 ++ .../Extensions/GroupPermissionsExtensions.cs | 39 ++++++++ .../Extensions/GroupUserInfoExtensions.cs | 28 ++++++ .../GroupUserPermissionsExtensions.cs | 39 ++++++++ .../Extensions/UserPermissionsExtensions.cs | 28 ++++++ MareSynchronosAPI/Data/FileReplacementData.cs | 8 ++ MareSynchronosAPI/Data/GroupData.cs | 6 ++ MareSynchronosAPI/Data/HashableDataBase.cs | 20 +++++ MareSynchronosAPI/Data/UserData.cs | 6 ++ MareSynchronosAPI/DownloadFileDto.cs | 12 --- MareSynchronosAPI/Dto/ConnectionDto.cs | 19 ++++ .../Dto/Files/DownloadFileDto.cs | 11 +++ .../Dto/Files/ForbiddenUploadsDto.cs | 7 ++ .../Dto/Files/ITransferFileDto.cs | 8 ++ MareSynchronosAPI/Dto/Files/UploadFileDto.cs | 8 ++ .../Dto/Group/BannedGroupUserDto.cs | 17 ++++ MareSynchronosAPI/Dto/Group/GroupDto.cs | 11 +++ .../Dto/Group/GroupFullInfoDto.cs | 10 +++ MareSynchronosAPI/Dto/Group/GroupInfoDto.cs | 14 +++ MareSynchronosAPI/Dto/Group/GroupPairDto.cs | 10 +++ .../Dto/Group/GroupPairFullInfoDto.cs | 10 +++ .../Dto/Group/GroupPairUserInfoDto.cs | 6 ++ .../Dto/Group/GroupPairUserPermissionDto.cs | 6 ++ .../Dto/Group/GroupPasswordDto.cs | 5 ++ .../Dto/Group/GroupPermissionDto.cs | 6 ++ MareSynchronosAPI/Dto/SystemInfoDto.cs | 6 ++ .../Dto/User/OnlineUserCharaDataDto.cs | 5 ++ .../Dto/User/OnlineUserIdentDto.cs | 5 ++ .../Dto/User/UserCharaDataMessageDto.cs | 5 ++ MareSynchronosAPI/Dto/User/UserDto.cs | 5 ++ MareSynchronosAPI/Dto/User/UserPairDto.cs | 10 +++ .../Dto/User/UserPermissionsDto.cs | 6 ++ MareSynchronosAPI/FileReplacementDto.cs | 41 --------- MareSynchronosAPI/ForbiddenUploadsDto.cs | 8 -- MareSynchronosAPI/GroupCreatedDto.cs | 8 -- MareSynchronosAPI/GroupDto.cs | 13 --- MareSynchronosAPI/GroupPairDto.cs | 13 --- MareSynchronosAPI/IMareHub.cs | 90 ------------------- MareSynchronosAPI/ITransferFileDto.cs | 9 -- MareSynchronosAPI/MareAuth.cs | 12 --- MareSynchronosAPI/MareFiles.cs | 26 ------ MareSynchronosAPI/MareSynchronos.API.csproj | 2 + MareSynchronosAPI/ObjectKind.cs | 10 --- MareSynchronosAPI/OnlineUserDto.cs | 10 --- MareSynchronosAPI/Routes/MareAuth.cs | 9 ++ MareSynchronosAPI/Routes/MareFiles.cs | 23 +++++ MareSynchronosAPI/SignalR/IMareHub.cs | 71 +++++++++++++++ MareSynchronosAPI/SignalR/IMareHubClient.cs | 31 +++++++ MareSynchronosAPI/SystemInfoDto.cs | 7 -- MareSynchronosAPI/UploadFileDto.cs | 9 -- 66 files changed, 669 insertions(+), 378 deletions(-) delete mode 100644 MareSynchronosAPI/BannedGroupUserDto.cs delete mode 100644 MareSynchronosAPI/BannedUserDto.cs delete mode 100644 MareSynchronosAPI/CharacterCacheDto.cs delete mode 100644 MareSynchronosAPI/ClientPairDto.cs delete mode 100644 MareSynchronosAPI/ConnectionDto.cs create mode 100644 MareSynchronosAPI/Data/CharacterData.cs create mode 100644 MareSynchronosAPI/Data/Comparer/GroupDataComparer.cs create mode 100644 MareSynchronosAPI/Data/Comparer/GroupDtoComparer.cs create mode 100644 MareSynchronosAPI/Data/Comparer/GroupPairDtoComparer.cs create mode 100644 MareSynchronosAPI/Data/Comparer/UserDataComparer.cs create mode 100644 MareSynchronosAPI/Data/Comparer/UserDtoComparer.cs create mode 100644 MareSynchronosAPI/Data/Enum/GroupPermissions.cs create mode 100644 MareSynchronosAPI/Data/Enum/GroupUserInfo.cs create mode 100644 MareSynchronosAPI/Data/Enum/GroupUserPermissions.cs create mode 100644 MareSynchronosAPI/Data/Enum/MessageSeverity.cs create mode 100644 MareSynchronosAPI/Data/Enum/ObjectKind.cs create mode 100644 MareSynchronosAPI/Data/Enum/UserPermissions.cs create mode 100644 MareSynchronosAPI/Data/Extensions/GroupPermissionsExtensions.cs create mode 100644 MareSynchronosAPI/Data/Extensions/GroupUserInfoExtensions.cs create mode 100644 MareSynchronosAPI/Data/Extensions/GroupUserPermissionsExtensions.cs create mode 100644 MareSynchronosAPI/Data/Extensions/UserPermissionsExtensions.cs create mode 100644 MareSynchronosAPI/Data/FileReplacementData.cs create mode 100644 MareSynchronosAPI/Data/GroupData.cs create mode 100644 MareSynchronosAPI/Data/HashableDataBase.cs create mode 100644 MareSynchronosAPI/Data/UserData.cs delete mode 100644 MareSynchronosAPI/DownloadFileDto.cs create mode 100644 MareSynchronosAPI/Dto/ConnectionDto.cs create mode 100644 MareSynchronosAPI/Dto/Files/DownloadFileDto.cs create mode 100644 MareSynchronosAPI/Dto/Files/ForbiddenUploadsDto.cs create mode 100644 MareSynchronosAPI/Dto/Files/ITransferFileDto.cs create mode 100644 MareSynchronosAPI/Dto/Files/UploadFileDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/BannedGroupUserDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupFullInfoDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupInfoDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupPairDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupPairFullInfoDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupPairUserInfoDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupPairUserPermissionDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupPasswordDto.cs create mode 100644 MareSynchronosAPI/Dto/Group/GroupPermissionDto.cs create mode 100644 MareSynchronosAPI/Dto/SystemInfoDto.cs create mode 100644 MareSynchronosAPI/Dto/User/OnlineUserCharaDataDto.cs create mode 100644 MareSynchronosAPI/Dto/User/OnlineUserIdentDto.cs create mode 100644 MareSynchronosAPI/Dto/User/UserCharaDataMessageDto.cs create mode 100644 MareSynchronosAPI/Dto/User/UserDto.cs create mode 100644 MareSynchronosAPI/Dto/User/UserPairDto.cs create mode 100644 MareSynchronosAPI/Dto/User/UserPermissionsDto.cs delete mode 100644 MareSynchronosAPI/FileReplacementDto.cs delete mode 100644 MareSynchronosAPI/ForbiddenUploadsDto.cs delete mode 100644 MareSynchronosAPI/GroupCreatedDto.cs delete mode 100644 MareSynchronosAPI/GroupDto.cs delete mode 100644 MareSynchronosAPI/GroupPairDto.cs delete mode 100644 MareSynchronosAPI/IMareHub.cs delete mode 100644 MareSynchronosAPI/ITransferFileDto.cs delete mode 100644 MareSynchronosAPI/MareAuth.cs delete mode 100644 MareSynchronosAPI/MareFiles.cs delete mode 100644 MareSynchronosAPI/ObjectKind.cs delete mode 100644 MareSynchronosAPI/OnlineUserDto.cs create mode 100644 MareSynchronosAPI/Routes/MareAuth.cs create mode 100644 MareSynchronosAPI/Routes/MareFiles.cs create mode 100644 MareSynchronosAPI/SignalR/IMareHub.cs create mode 100644 MareSynchronosAPI/SignalR/IMareHubClient.cs delete mode 100644 MareSynchronosAPI/SystemInfoDto.cs delete mode 100644 MareSynchronosAPI/UploadFileDto.cs diff --git a/MareSynchronosAPI/BannedGroupUserDto.cs b/MareSynchronosAPI/BannedGroupUserDto.cs deleted file mode 100644 index b9058dd..0000000 --- a/MareSynchronosAPI/BannedGroupUserDto.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MareSynchronos.API -{ - public record BannedGroupUserDto - { - public string UID { get; set; } - public string Reason { get; set; } - public DateTime BannedOn { get; set; } - public string BannedBy { get; set; } - } -} diff --git a/MareSynchronosAPI/BannedUserDto.cs b/MareSynchronosAPI/BannedUserDto.cs deleted file mode 100644 index 0f58c5c..0000000 --- a/MareSynchronosAPI/BannedUserDto.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace MareSynchronos.API -{ - public record BannedUserDto - { - public string CharacterHash { get; set; } - public string Reason { get; set; } - } -} diff --git a/MareSynchronosAPI/CharacterCacheDto.cs b/MareSynchronosAPI/CharacterCacheDto.cs deleted file mode 100644 index f435443..0000000 --- a/MareSynchronosAPI/CharacterCacheDto.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace MareSynchronos.API -{ - public class CharacterCacheDto - { - public Dictionary> FileReplacements { get; set; } = new(); - public Dictionary GlamourerData { get; set; } = new(); - public string ManipulationData { get; set; } = string.Empty; - public string CustomizePlusData { get; set; } = string.Empty; - public override string ToString() - { - return GetHashCode() + Environment.NewLine + "Manip:" + ManipulationData + Environment.NewLine - + string.Join(Environment.NewLine, GlamourerData.Select(g => g.Key + ":" + g.Value)) + Environment.NewLine - + string.Join(Environment.NewLine, FileReplacements.Select(g => g.Key + Environment.NewLine + string.Join(Environment.NewLine, g.Value))) - + Environment.NewLine + "CustomizePlus:" + CustomizePlusData; - } - - public float HeelsOffset { get; set; } = 0.0f; - - public static int GetOrderIndependentHashCode(IEnumerable source) - { - int hash = 0; - foreach (T element in source) - { - hash = unchecked(hash + - EqualityComparer.Default.GetHashCode(element)); - } - return hash; - } - - public override int GetHashCode() - { - int fileReplacementsHash = 0; - foreach (var item in FileReplacements) - { - foreach (var values in item.Value) - { - fileReplacementsHash = unchecked(fileReplacementsHash + values.GetHashCode()); - } - } - - int glamourerHash = 0; - foreach (var item in GlamourerData) - { - glamourerHash = unchecked(glamourerHash + item.Value.GetHashCode()); - } - - return HashCode.Combine(fileReplacementsHash, glamourerHash, ManipulationData, HeelsOffset, CustomizePlusData); - } - } -} diff --git a/MareSynchronosAPI/ClientPairDto.cs b/MareSynchronosAPI/ClientPairDto.cs deleted file mode 100644 index b987e36..0000000 --- a/MareSynchronosAPI/ClientPairDto.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MareSynchronos.API -{ - public record ClientPairDto - { - public string OtherUID { get; set; } - public string VanityUID { get; set; } - public bool IsPaused { get; set; } - public bool IsSynced { get; set; } - public bool IsPausedFromOthers { get; set; } - public bool IsRemoved { get; set; } - public bool AllowReceiveMessages { get; set; } - } -} \ No newline at end of file diff --git a/MareSynchronosAPI/ConnectionDto.cs b/MareSynchronosAPI/ConnectionDto.cs deleted file mode 100644 index bb5459e..0000000 --- a/MareSynchronosAPI/ConnectionDto.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace MareSynchronos.API -{ - public record ConnectionDto - { - public int ServerVersion { get; set; } - public bool IsAdmin { get; set; } - public bool IsModerator { get; set; } - public string UID { get; set; } - public ServerInfoDto ServerInfo { get; set; } - } - - public record ServerInfoDto - { - public string ShardName { get; set; } - public int MaxGroupUserCount { get; set; } - public int MaxGroupsCreatedByUser { get; set; } - public int MaxGroupsJoinedByUser { get; set; } - } -} diff --git a/MareSynchronosAPI/Data/CharacterData.cs b/MareSynchronosAPI/Data/CharacterData.cs new file mode 100644 index 0000000..0b1c51a --- /dev/null +++ b/MareSynchronosAPI/Data/CharacterData.cs @@ -0,0 +1,12 @@ +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Data; + +public class CharacterData : HashableDataBase +{ + public Dictionary> FileReplacements { get; set; } = new(); + public Dictionary GlamourerData { get; set; } = new(); + public string ManipulationData { get; set; } = string.Empty; + public string CustomizePlusData { get; set; } = string.Empty; + public float HeelsOffset { get; set; } = 0.0f; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Comparer/GroupDataComparer.cs b/MareSynchronosAPI/Data/Comparer/GroupDataComparer.cs new file mode 100644 index 0000000..dfd0456 --- /dev/null +++ b/MareSynchronosAPI/Data/Comparer/GroupDataComparer.cs @@ -0,0 +1,19 @@ +namespace MareSynchronos.API.Data.Comparer; + +public class GroupDataComparer : IEqualityComparer +{ + public static GroupDataComparer Instance => _instance; + private static GroupDataComparer _instance = new GroupDataComparer(); + + private GroupDataComparer() { } + public bool Equals(GroupData? x, GroupData? y) + { + if (x == null || y == null) return false; + return x.GID.Equals(y.GID, StringComparison.Ordinal); + } + + public int GetHashCode(GroupData obj) + { + return obj.GID.GetHashCode(); + } +} diff --git a/MareSynchronosAPI/Data/Comparer/GroupDtoComparer.cs b/MareSynchronosAPI/Data/Comparer/GroupDtoComparer.cs new file mode 100644 index 0000000..3814c6f --- /dev/null +++ b/MareSynchronosAPI/Data/Comparer/GroupDtoComparer.cs @@ -0,0 +1,23 @@ +using MareSynchronos.API.Dto.Group; + +namespace MareSynchronos.API.Data.Comparer; + + +public class GroupDtoComparer : IEqualityComparer +{ + public static GroupDtoComparer Instance => _instance; + private static GroupDtoComparer _instance = new GroupDtoComparer(); + + private GroupDtoComparer() { } + + public bool Equals(GroupDto? x, GroupDto? y) + { + if (x == null || y == null) return false; + return x.GID.Equals(y.GID, StringComparison.Ordinal); + } + + public int GetHashCode(GroupDto obj) + { + return obj.Group.GID.GetHashCode(); + } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Comparer/GroupPairDtoComparer.cs b/MareSynchronosAPI/Data/Comparer/GroupPairDtoComparer.cs new file mode 100644 index 0000000..c1dde50 --- /dev/null +++ b/MareSynchronosAPI/Data/Comparer/GroupPairDtoComparer.cs @@ -0,0 +1,20 @@ +using MareSynchronos.API.Dto.Group; + +namespace MareSynchronos.API.Data.Comparer; + +public class GroupPairDtoComparer : IEqualityComparer +{ + public static GroupPairDtoComparer Instance => _instance; + private static GroupPairDtoComparer _instance = new(); + private GroupPairDtoComparer() { } + public bool Equals(GroupPairDto? x, GroupPairDto? y) + { + if (x == null || y == null) return false; + return x.GID.Equals(y.GID, StringComparison.Ordinal) && x.UID.Equals(y.UID, StringComparison.Ordinal); + } + + public int GetHashCode(GroupPairDto obj) + { + return HashCode.Combine(obj.Group.GID.GetHashCode(), obj.User.UID.GetHashCode()); + } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Comparer/UserDataComparer.cs b/MareSynchronosAPI/Data/Comparer/UserDataComparer.cs new file mode 100644 index 0000000..68aa227 --- /dev/null +++ b/MareSynchronosAPI/Data/Comparer/UserDataComparer.cs @@ -0,0 +1,20 @@ +namespace MareSynchronos.API.Data.Comparer; + +public class UserDataComparer : IEqualityComparer +{ + public static UserDataComparer Instance => _instance; + private static UserDataComparer _instance = new(); + + private UserDataComparer() { } + + public bool Equals(UserData? x, UserData? y) + { + if (x == null || y == null) return false; + return x.UID.Equals(y.UID, StringComparison.Ordinal); + } + + public int GetHashCode(UserData obj) + { + return obj.UID.GetHashCode(); + } +} diff --git a/MareSynchronosAPI/Data/Comparer/UserDtoComparer.cs b/MareSynchronosAPI/Data/Comparer/UserDtoComparer.cs new file mode 100644 index 0000000..9c8451c --- /dev/null +++ b/MareSynchronosAPI/Data/Comparer/UserDtoComparer.cs @@ -0,0 +1,20 @@ +using MareSynchronos.API.Dto.User; + +namespace MareSynchronos.API.Data.Comparer; + +public class UserDtoComparer : IEqualityComparer +{ + public static UserDtoComparer Instance => _instance; + private static UserDtoComparer _instance = new(); + private UserDtoComparer() { } + public bool Equals(UserDto? x, UserDto? y) + { + if (x == null || y == null) return false; + return x.User.UID.Equals(y.User.UID, StringComparison.Ordinal); + } + + public int GetHashCode(UserDto obj) + { + return obj.User.UID.GetHashCode(); + } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Enum/GroupPermissions.cs b/MareSynchronosAPI/Data/Enum/GroupPermissions.cs new file mode 100644 index 0000000..ed6f40b --- /dev/null +++ b/MareSynchronosAPI/Data/Enum/GroupPermissions.cs @@ -0,0 +1,10 @@ +namespace MareSynchronos.API.Data.Enum; + +[Flags] +public enum GroupPermissions +{ + NoneSet = 0x0, + DisableAnimations = 0x1, + DisableSounds = 0x2, + DisableInvites = 0x4 +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Enum/GroupUserInfo.cs b/MareSynchronosAPI/Data/Enum/GroupUserInfo.cs new file mode 100644 index 0000000..ed1b3bb --- /dev/null +++ b/MareSynchronosAPI/Data/Enum/GroupUserInfo.cs @@ -0,0 +1,9 @@ +namespace MareSynchronos.API.Data.Enum; + +[Flags] +public enum GroupUserInfo +{ + None = 0x0, + IsModerator = 0x2, + IsPinned = 0x4 +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Enum/GroupUserPermissions.cs b/MareSynchronosAPI/Data/Enum/GroupUserPermissions.cs new file mode 100644 index 0000000..06962f5 --- /dev/null +++ b/MareSynchronosAPI/Data/Enum/GroupUserPermissions.cs @@ -0,0 +1,10 @@ +namespace MareSynchronos.API.Data.Enum; + +[Flags] +public enum GroupUserPermissions +{ + NoneSet = 0x0, + Paused = 0x1, + DisableAnimations = 0x2, + DisableSounds = 0x4, +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Enum/MessageSeverity.cs b/MareSynchronosAPI/Data/Enum/MessageSeverity.cs new file mode 100644 index 0000000..b0ace02 --- /dev/null +++ b/MareSynchronosAPI/Data/Enum/MessageSeverity.cs @@ -0,0 +1,8 @@ +namespace MareSynchronos.API.Data.Enum; + +public enum MessageSeverity +{ + Information, + Warning, + Error +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Enum/ObjectKind.cs b/MareSynchronosAPI/Data/Enum/ObjectKind.cs new file mode 100644 index 0000000..47396c4 --- /dev/null +++ b/MareSynchronosAPI/Data/Enum/ObjectKind.cs @@ -0,0 +1,9 @@ +namespace MareSynchronos.API.Data.Enum; + +public enum ObjectKind +{ + Player = 0, + MinionOrMount = 1, + Companion = 2, + Pet = 3, +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Enum/UserPermissions.cs b/MareSynchronosAPI/Data/Enum/UserPermissions.cs new file mode 100644 index 0000000..8050f27 --- /dev/null +++ b/MareSynchronosAPI/Data/Enum/UserPermissions.cs @@ -0,0 +1,9 @@ +namespace MareSynchronos.API.Data.Enum; + +[Flags] +public enum UserPermissions +{ + NoneSet, + Paired, + Paused +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Extensions/GroupPermissionsExtensions.cs b/MareSynchronosAPI/Data/Extensions/GroupPermissionsExtensions.cs new file mode 100644 index 0000000..d4db75b --- /dev/null +++ b/MareSynchronosAPI/Data/Extensions/GroupPermissionsExtensions.cs @@ -0,0 +1,39 @@ +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Data.Extensions; + +public static class GroupPermissionsExtensions +{ + public static bool IsDisableAnimations(this GroupPermissions perm) + { + return perm.HasFlag(GroupPermissions.DisableAnimations); + } + + public static bool IsDisableSounds(this GroupPermissions perm) + { + return perm.HasFlag(GroupPermissions.DisableSounds); + } + + public static bool IsDisableInvites(this GroupPermissions perm) + { + return perm.HasFlag(GroupPermissions.DisableInvites); + } + + public static void SetDisableAnimations(this ref GroupPermissions perm, bool set) + { + if (set) perm |= GroupPermissions.DisableAnimations; + else perm &= ~GroupPermissions.DisableAnimations; + } + + public static void SetDisableSounds(this ref GroupPermissions perm, bool set) + { + if (set) perm |= GroupPermissions.DisableSounds; + else perm &= ~GroupPermissions.DisableSounds; + } + + public static void SetDisableInvites(this ref GroupPermissions perm, bool set) + { + if (set) perm |= GroupPermissions.DisableInvites; + else perm &= ~GroupPermissions.DisableInvites; + } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Extensions/GroupUserInfoExtensions.cs b/MareSynchronosAPI/Data/Extensions/GroupUserInfoExtensions.cs new file mode 100644 index 0000000..a4608e8 --- /dev/null +++ b/MareSynchronosAPI/Data/Extensions/GroupUserInfoExtensions.cs @@ -0,0 +1,28 @@ +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Data.Extensions; + +public static class GroupUserInfoExtensions +{ + public static bool IsModerator(this GroupUserInfo info) + { + return info.HasFlag(GroupUserInfo.IsModerator); + } + + public static bool IsPinned(this GroupUserInfo info) + { + return info.HasFlag(GroupUserInfo.IsPinned); + } + + public static void SetModerator(this ref GroupUserInfo info, bool isModerator) + { + if (isModerator) info |= GroupUserInfo.IsModerator; + else info &= ~GroupUserInfo.IsModerator; + } + + public static void SetPinned(this ref GroupUserInfo info, bool isPinned) + { + if (isPinned) info |= GroupUserInfo.IsPinned; + else info &= ~GroupUserInfo.IsPinned; + } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Extensions/GroupUserPermissionsExtensions.cs b/MareSynchronosAPI/Data/Extensions/GroupUserPermissionsExtensions.cs new file mode 100644 index 0000000..d3b38ef --- /dev/null +++ b/MareSynchronosAPI/Data/Extensions/GroupUserPermissionsExtensions.cs @@ -0,0 +1,39 @@ +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Data.Extensions; + +public static class GroupUserPermissionsExtensions +{ + public static bool IsDisableAnimations(this GroupUserPermissions perm) + { + return perm.HasFlag(GroupUserPermissions.DisableAnimations); + } + + public static bool IsDisableSounds(this GroupUserPermissions perm) + { + return perm.HasFlag(GroupUserPermissions.DisableSounds); + } + + public static bool IsPaused(this GroupUserPermissions perm) + { + return perm.HasFlag(GroupUserPermissions.Paused); + } + + public static void SetDisableAnimations(this ref GroupUserPermissions perm, bool set) + { + if (set) perm |= GroupUserPermissions.DisableAnimations; + else perm &= ~GroupUserPermissions.DisableAnimations; + } + + public static void SetDisableSounds(this ref GroupUserPermissions perm, bool set) + { + if (set) perm |= GroupUserPermissions.DisableSounds; + else perm &= ~GroupUserPermissions.DisableSounds; + } + + public static void SetPaused(this ref GroupUserPermissions perm, bool set) + { + if (set) perm |= GroupUserPermissions.Paused; + else perm &= ~GroupUserPermissions.Paused; + } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/Extensions/UserPermissionsExtensions.cs b/MareSynchronosAPI/Data/Extensions/UserPermissionsExtensions.cs new file mode 100644 index 0000000..37ec5b3 --- /dev/null +++ b/MareSynchronosAPI/Data/Extensions/UserPermissionsExtensions.cs @@ -0,0 +1,28 @@ +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Data.Extensions; + +public static class UserPermissionsExtensions +{ + public static bool IsPaired(this UserPermissions perm) + { + return perm.HasFlag(UserPermissions.Paired); + } + + public static bool IsPaused(this UserPermissions perm) + { + return perm.HasFlag(UserPermissions.Paused); + } + + public static void SetPaired(this ref UserPermissions perm, bool paired) + { + if (paired) perm |= UserPermissions.Paired; + else perm &= ~UserPermissions.Paired; + } + + public static void SetPaused(this ref UserPermissions perm, bool paused) + { + if (paused) perm |= UserPermissions.Paused; + else perm &= ~UserPermissions.Paused; + } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/FileReplacementData.cs b/MareSynchronosAPI/Data/FileReplacementData.cs new file mode 100644 index 0000000..81586c5 --- /dev/null +++ b/MareSynchronosAPI/Data/FileReplacementData.cs @@ -0,0 +1,8 @@ +namespace MareSynchronos.API.Data; + +public class FileReplacementData : HashableDataBase +{ + public string[] GamePaths { get; set; } = Array.Empty(); + public string Hash { get; set; } = string.Empty; + public string FileSwapPath { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/GroupData.cs b/MareSynchronosAPI/Data/GroupData.cs new file mode 100644 index 0000000..c7771ca --- /dev/null +++ b/MareSynchronosAPI/Data/GroupData.cs @@ -0,0 +1,6 @@ +namespace MareSynchronos.API.Data; + +public record GroupData(string GID, string? Alias = null) +{ + public string AliasOrGID => Alias ?? GID; +} diff --git a/MareSynchronosAPI/Data/HashableDataBase.cs b/MareSynchronosAPI/Data/HashableDataBase.cs new file mode 100644 index 0000000..44e199e --- /dev/null +++ b/MareSynchronosAPI/Data/HashableDataBase.cs @@ -0,0 +1,20 @@ +using System.Security.Cryptography; +using Newtonsoft.Json; + +namespace MareSynchronos.API.Data; + +public abstract class HashableDataBase +{ + protected HashableDataBase() + { + DataHash = new(() => + { + var json = JsonConvert.SerializeObject(this, Formatting.None); + var hash = SHA256.HashData(System.Text.Encoding.UTF8.GetBytes(json)); + return BitConverter.ToString(hash).ToUpperInvariant().Replace("-", "", StringComparison.OrdinalIgnoreCase); + }); + } + + [JsonIgnore] + public Lazy DataHash { get; } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/UserData.cs b/MareSynchronosAPI/Data/UserData.cs new file mode 100644 index 0000000..a530ae5 --- /dev/null +++ b/MareSynchronosAPI/Data/UserData.cs @@ -0,0 +1,6 @@ +namespace MareSynchronos.API.Data; + +public record UserData(string UID, string? Alias = null) +{ + public string AliasOrUID => Alias ?? UID; +} \ No newline at end of file diff --git a/MareSynchronosAPI/DownloadFileDto.cs b/MareSynchronosAPI/DownloadFileDto.cs deleted file mode 100644 index a907eab..0000000 --- a/MareSynchronosAPI/DownloadFileDto.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace MareSynchronos.API -{ - public record DownloadFileDto : ITransferFileDto - { - public bool FileExists { get; set; } = true; - public string Hash { get; set; } = string.Empty; - public string Url { get; set; } - public long Size { get; set; } = 0; - public bool IsForbidden { get; set; } = false; - public string ForbiddenBy { get; set; } = string.Empty; - } -} diff --git a/MareSynchronosAPI/Dto/ConnectionDto.cs b/MareSynchronosAPI/Dto/ConnectionDto.cs new file mode 100644 index 0000000..f582e3b --- /dev/null +++ b/MareSynchronosAPI/Dto/ConnectionDto.cs @@ -0,0 +1,19 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto; + +public record ConnectionDto(UserData User) +{ + public int ServerVersion { get; set; } + public bool IsAdmin { get; set; } + public bool IsModerator { get; set; } + public ServerInfo ServerInfo { get; set; } = new(); +} + +public record ServerInfo +{ + public string ShardName { get; set; } = string.Empty; + public int MaxGroupUserCount { get; set; } + public int MaxGroupsCreatedByUser { get; set; } + public int MaxGroupsJoinedByUser { get; set; } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Files/DownloadFileDto.cs b/MareSynchronosAPI/Dto/Files/DownloadFileDto.cs new file mode 100644 index 0000000..0775339 --- /dev/null +++ b/MareSynchronosAPI/Dto/Files/DownloadFileDto.cs @@ -0,0 +1,11 @@ +namespace MareSynchronos.API.Dto.Files; + +public record DownloadFileDto : ITransferFileDto +{ + public bool FileExists { get; set; } = true; + public string Hash { get; set; } = string.Empty; + public string Url { get; set; } = string.Empty; + public long Size { get; set; } = 0; + public bool IsForbidden { get; set; } = false; + public string ForbiddenBy { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Files/ForbiddenUploadsDto.cs b/MareSynchronosAPI/Dto/Files/ForbiddenUploadsDto.cs new file mode 100644 index 0000000..b601a82 --- /dev/null +++ b/MareSynchronosAPI/Dto/Files/ForbiddenUploadsDto.cs @@ -0,0 +1,7 @@ +namespace MareSynchronos.API.Dto.Files; + +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/Dto/Files/ITransferFileDto.cs b/MareSynchronosAPI/Dto/Files/ITransferFileDto.cs new file mode 100644 index 0000000..fb20e5a --- /dev/null +++ b/MareSynchronosAPI/Dto/Files/ITransferFileDto.cs @@ -0,0 +1,8 @@ +namespace MareSynchronos.API.Dto.Files; + +public interface ITransferFileDto +{ + string Hash { get; set; } + bool IsForbidden { get; set; } + string ForbiddenBy { get; set; } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Files/UploadFileDto.cs b/MareSynchronosAPI/Dto/Files/UploadFileDto.cs new file mode 100644 index 0000000..a7c4dad --- /dev/null +++ b/MareSynchronosAPI/Dto/Files/UploadFileDto.cs @@ -0,0 +1,8 @@ +namespace MareSynchronos.API.Dto.Files; + +public record UploadFileDto : ITransferFileDto +{ + public string Hash { get; set; } = string.Empty; + public bool IsForbidden { get; set; } = false; + public string ForbiddenBy { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Group/BannedGroupUserDto.cs b/MareSynchronosAPI/Dto/Group/BannedGroupUserDto.cs new file mode 100644 index 0000000..f6d5c33 --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/BannedGroupUserDto.cs @@ -0,0 +1,17 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.Group; + +public record BannedGroupUserDto : GroupPairDto +{ + public BannedGroupUserDto(GroupData group, UserData user, string reason, DateTime bannedOn, string bannedBy) : base(group, user) + { + Reason = reason; + BannedOn = bannedOn; + BannedBy = bannedBy; + } + + public string Reason { get; set; } + public DateTime BannedOn { get; set; } + public string BannedBy { get; set; } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Group/GroupDto.cs b/MareSynchronosAPI/Dto/Group/GroupDto.cs new file mode 100644 index 0000000..cfba14c --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupDto.cs @@ -0,0 +1,11 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupDto(GroupData Group) +{ + public GroupData Group { get; set; } = Group; + public string GID => Group.GID; + public string? GroupAlias => Group.Alias; + public string GroupAliasOrGID => Group.AliasOrGID; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Group/GroupFullInfoDto.cs b/MareSynchronosAPI/Dto/Group/GroupFullInfoDto.cs new file mode 100644 index 0000000..f63dc38 --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupFullInfoDto.cs @@ -0,0 +1,10 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupFullInfoDto(GroupData Group, UserData Owner, GroupPermissions GroupPermissions, GroupUserPermissions GroupUserPermissions, GroupUserInfo GroupUserInfo) : GroupInfoDto(Group, Owner, GroupPermissions) +{ + public GroupUserPermissions GroupUserPermissions { get; set; } = GroupUserPermissions; + public GroupUserInfo GroupUserInfo { get; set; } = GroupUserInfo; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Group/GroupInfoDto.cs b/MareSynchronosAPI/Dto/Group/GroupInfoDto.cs new file mode 100644 index 0000000..4818658 --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupInfoDto.cs @@ -0,0 +1,14 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupInfoDto(GroupData Group, UserData Owner, GroupPermissions GroupPermissions) : GroupDto(Group) +{ + public GroupPermissions GroupPermissions { get; set; } = GroupPermissions; + public UserData Owner { get; set; } = Owner; + + public string OwnerUID => Owner.UID; + public string? OwnerAlias => Owner.Alias; + public string OwnerAliasOrUID => Owner.AliasOrUID; +} diff --git a/MareSynchronosAPI/Dto/Group/GroupPairDto.cs b/MareSynchronosAPI/Dto/Group/GroupPairDto.cs new file mode 100644 index 0000000..e0e7909 --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupPairDto.cs @@ -0,0 +1,10 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupPairDto(GroupData Group, UserData User) : GroupDto(Group) +{ + public string UID => User.UID; + public string? UserAlias => User.Alias; + public string UserAliasOrUID => User.AliasOrUID; +} diff --git a/MareSynchronosAPI/Dto/Group/GroupPairFullInfoDto.cs b/MareSynchronosAPI/Dto/Group/GroupPairFullInfoDto.cs new file mode 100644 index 0000000..8eed1f4 --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupPairFullInfoDto.cs @@ -0,0 +1,10 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupPairFullInfoDto(GroupData Group, UserData User, GroupUserInfo GroupPairStatusInfo, GroupUserPermissions GroupUserPermissions) : GroupPairDto(Group, User) +{ + public GroupUserInfo GroupPairStatusInfo { get; set; } = GroupPairStatusInfo; + public GroupUserPermissions GroupUserPermissions { get; set; } = GroupUserPermissions; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Group/GroupPairUserInfoDto.cs b/MareSynchronosAPI/Dto/Group/GroupPairUserInfoDto.cs new file mode 100644 index 0000000..389663d --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupPairUserInfoDto.cs @@ -0,0 +1,6 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupPairUserInfoDto(GroupData Group, UserData User, GroupUserInfo GroupUserInfo) : GroupPairDto(Group, User); diff --git a/MareSynchronosAPI/Dto/Group/GroupPairUserPermissionDto.cs b/MareSynchronosAPI/Dto/Group/GroupPairUserPermissionDto.cs new file mode 100644 index 0000000..432a6ba --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupPairUserPermissionDto.cs @@ -0,0 +1,6 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupPairUserPermissionDto(GroupData Group, UserData User, GroupUserPermissions GroupPairPermissions) : GroupPairDto(Group, User); diff --git a/MareSynchronosAPI/Dto/Group/GroupPasswordDto.cs b/MareSynchronosAPI/Dto/Group/GroupPasswordDto.cs new file mode 100644 index 0000000..98c2f81 --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupPasswordDto.cs @@ -0,0 +1,5 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupPasswordDto(GroupData Group, string Password) : GroupDto(Group); diff --git a/MareSynchronosAPI/Dto/Group/GroupPermissionDto.cs b/MareSynchronosAPI/Dto/Group/GroupPermissionDto.cs new file mode 100644 index 0000000..a3fefda --- /dev/null +++ b/MareSynchronosAPI/Dto/Group/GroupPermissionDto.cs @@ -0,0 +1,6 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Dto.Group; + +public record GroupPermissionDto(GroupData Group, GroupPermissions Permissions) : GroupDto(Group); diff --git a/MareSynchronosAPI/Dto/SystemInfoDto.cs b/MareSynchronosAPI/Dto/SystemInfoDto.cs new file mode 100644 index 0000000..6802ad4 --- /dev/null +++ b/MareSynchronosAPI/Dto/SystemInfoDto.cs @@ -0,0 +1,6 @@ +namespace MareSynchronos.API.Dto; + +public record SystemInfoDto +{ + public int OnlineUsers { get; set; } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/User/OnlineUserCharaDataDto.cs b/MareSynchronosAPI/Dto/User/OnlineUserCharaDataDto.cs new file mode 100644 index 0000000..39e44b7 --- /dev/null +++ b/MareSynchronosAPI/Dto/User/OnlineUserCharaDataDto.cs @@ -0,0 +1,5 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.User; + +public record OnlineUserCharaDataDto(UserData User, CharacterData CharaData) : UserDto(User); \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/User/OnlineUserIdentDto.cs b/MareSynchronosAPI/Dto/User/OnlineUserIdentDto.cs new file mode 100644 index 0000000..592fbe2 --- /dev/null +++ b/MareSynchronosAPI/Dto/User/OnlineUserIdentDto.cs @@ -0,0 +1,5 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.User; + +public record OnlineUserIdentDto(UserData User, string Ident) : UserDto(User); \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/User/UserCharaDataMessageDto.cs b/MareSynchronosAPI/Dto/User/UserCharaDataMessageDto.cs new file mode 100644 index 0000000..9f93231 --- /dev/null +++ b/MareSynchronosAPI/Dto/User/UserCharaDataMessageDto.cs @@ -0,0 +1,5 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.User; + +public record UserCharaDataMessageDto(List Recipients, CharacterData CharaData); \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/User/UserDto.cs b/MareSynchronosAPI/Dto/User/UserDto.cs new file mode 100644 index 0000000..114ff60 --- /dev/null +++ b/MareSynchronosAPI/Dto/User/UserDto.cs @@ -0,0 +1,5 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.User; + +public record UserDto(UserData User); \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/User/UserPairDto.cs b/MareSynchronosAPI/Dto/User/UserPairDto.cs new file mode 100644 index 0000000..44fbfe0 --- /dev/null +++ b/MareSynchronosAPI/Dto/User/UserPairDto.cs @@ -0,0 +1,10 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Dto.User; + +public record UserPairDto(UserData User, UserPermissions OwnPermissions, UserPermissions OtherPermissions) : UserDto(User) +{ + public UserPermissions OwnPermissions { get; set; } = OwnPermissions; + public UserPermissions OtherPermissions { get; set; } = OtherPermissions; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/User/UserPermissionsDto.cs b/MareSynchronosAPI/Dto/User/UserPermissionsDto.cs new file mode 100644 index 0000000..07bec2b --- /dev/null +++ b/MareSynchronosAPI/Dto/User/UserPermissionsDto.cs @@ -0,0 +1,6 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; + +namespace MareSynchronos.API.Dto.User; + +public record UserPermissionsDto(UserData User, UserPermissions Permissions) : UserDto(User); \ No newline at end of file diff --git a/MareSynchronosAPI/FileReplacementDto.cs b/MareSynchronosAPI/FileReplacementDto.cs deleted file mode 100644 index 44af60a..0000000 --- a/MareSynchronosAPI/FileReplacementDto.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace MareSynchronos.API -{ - public class FileReplacementDto - { - public string[] GamePaths { get; set; } = Array.Empty(); - public string Hash { get; set; } - - public string FileSwapPath { get; set; } = string.Empty; - - public override bool Equals(object? otherObj) - { - if (otherObj == null || otherObj is not FileReplacementDto other) return false; - return Hash == other.Hash && Enumerable.SequenceEqual(GamePaths, other.GamePaths) && FileSwapPath == other.FileSwapPath; - } - - public override int GetHashCode() - { - return HashCode.Combine(GetOrderIndependentHashCode(GamePaths), Hash, FileSwapPath); - } - - public static int GetOrderIndependentHashCode(IEnumerable source) - { - int hash = 0; - foreach (T element in source) - { - hash = unchecked(hash + - EqualityComparer.Default.GetHashCode(element)); - } - return hash; - } - - public override string ToString() - { - return Hash + ":" + string.Join(",", GamePaths) + "(" + FileSwapPath + ")"; - } - } -} \ No newline at end of file diff --git a/MareSynchronosAPI/ForbiddenUploadsDto.cs b/MareSynchronosAPI/ForbiddenUploadsDto.cs deleted file mode 100644 index d5bfa5c..0000000 --- a/MareSynchronosAPI/ForbiddenUploadsDto.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace MareSynchronos.API -{ - public record ForbiddenFileDto - { - public string Hash { get; set; } - public string ForbiddenBy { get; set; } - } -} diff --git a/MareSynchronosAPI/GroupCreatedDto.cs b/MareSynchronosAPI/GroupCreatedDto.cs deleted file mode 100644 index d67373e..0000000 --- a/MareSynchronosAPI/GroupCreatedDto.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace MareSynchronos.API -{ - public record GroupCreatedDto - { - public string GID { get; set; } - public string Password { get; set; } - } -} diff --git a/MareSynchronosAPI/GroupDto.cs b/MareSynchronosAPI/GroupDto.cs deleted file mode 100644 index 638b12a..0000000 --- a/MareSynchronosAPI/GroupDto.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MareSynchronos.API -{ - public record GroupDto - { - public string GID { get; set; } - public string? OwnedBy { get; set; } - public bool? InvitesEnabled { get; set; } - public bool? IsPaused { get; set; } - public bool? IsDeleted { get; set; } - public string? Alias { get; set; } - public bool? IsModerator { get; set; } - } -} diff --git a/MareSynchronosAPI/GroupPairDto.cs b/MareSynchronosAPI/GroupPairDto.cs deleted file mode 100644 index e8b9c9f..0000000 --- a/MareSynchronosAPI/GroupPairDto.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MareSynchronos.API -{ - public record GroupPairDto - { - public string GroupGID { get; set; } - public string UserUID { get; set; } - public string? UserAlias { get; set; } - public bool? IsPaused { get; set; } - public bool? IsRemoved { get; set; } - public bool? IsPinned { get; set; } - public bool? IsModerator { get; set; } - } -} \ No newline at end of file diff --git a/MareSynchronosAPI/IMareHub.cs b/MareSynchronosAPI/IMareHub.cs deleted file mode 100644 index 381c5cc..0000000 --- a/MareSynchronosAPI/IMareHub.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; - -namespace MareSynchronos.API -{ - public enum MessageSeverity - { - Information, - Warning, - Error - } - public interface IMareHub - { - const int ApiVersion = 20; - const string Path = "/mare"; - - Task FilesAbortUpload(); - Task> AdminGetOnlineUsers(); - Task GroupChangePassword(string gid, string password); - Task AdminChangeModeratorStatus(string uid, bool isModerator); - Task GroupChangeOwnership(string gid, string uid); - Task GroupChangePinned(string gid, string uid, bool isPinned); - Task CheckClientHealth(); - Task GroupClear(string gid); - Task GroupCreate(); - Task UserDelete(); - Task FilesDeleteAll(); - Task AdminDeleteBannedUser(BannedUserDto dto); - Task AdminDeleteForbiddenFile(ForbiddenFileDto dto); - Task> AdminGetBannedUsers(); - Task> FilesGetSizes(List hashes); - Task> AdminGetForbiddenFiles(); - Task> GroupGetBannedUsers(string gid); - Task> GroupsGetAll(); - Task> UserGetOnlineCharacters(); - Task> UserGetPairedClients(); - Task> GroupsGetUsersInGroup(string gid); - Task GroupBanUser(string gid, string uid, string reason); - Task GroupChangeInviteState(string gid, bool enabled); - Task GroupChangePauseState(string gid, bool isPaused); - Task GroupDelete(string gid); - Task GroupJoin(string gid, string password); - Task GroupLeave(string gid); - Task GroupRemoveUser(string gid, string uid); - Task GroupUnbanUser(string gid, string uid); - Task> GroupCreateTempInvite(string gid, int amount); - Task GetConnectionDto(); - Task FilesIsUploadFinished(); - Task UserPushData(CharacterCacheDto characterCache, List visibleCharacterIds); - Task> FilesSend(List fileListHashes); - Task UserAddPair(string uid); - Task UserChangePairPauseStatus(string otherUserUid, bool isPaused); - Task UserRemovePair(string otherUserUid); - Task GroupSetModerator(string gid, string uid, bool isModerator); - Task AdminUpdateOrAddBannedUser(BannedUserDto dto); - Task AdminUpdateOrAddForbiddenFile(ForbiddenFileDto dto); - Task FilesUploadStreamAsync(string hash, IAsyncEnumerable fileContent); - Task Client_UserUpdateClientPairs(ClientPairDto clientPairDto); - Task Client_UpdateSystemInfo(SystemInfoDto systemInfo); - Task Client_UserReceiveCharacterData(CharacterCacheDto clientPairDto, string characterIdent); - Task Client_UserChangePairedPlayer(string characterIdent, bool isOnline); - Task Client_GroupChange(GroupDto groupDto); - Task Client_GroupUserChange(GroupPairDto groupPairDto); - Task Client_AdminForcedReconnect(); - Task Client_AdminDeleteBannedUser(BannedUserDto dto); - Task Client_AdminDeleteForbiddenFile(ForbiddenFileDto dto); - Task Client_AdminUpdateOrAddBannedUser(BannedUserDto dto); - Task Client_AdminUpdateOrAddForbiddenFile(ForbiddenFileDto dto); - Task Client_ReceiveServerMessage(MessageSeverity messageSeverity, string message); - Task Client_DownloadReady(Guid requestId); - } - - public interface IMareHubClient : IMareHub - { - void OnUserUpdateClientPairs(Action act); - void OnUpdateSystemInfo(Action act); - void OnUserReceiveCharacterData(Action act); - void OnUserChangePairedPlayer(Action act); - void OnGroupChange(Action act); - void OnGroupUserChange(Action act); - void OnAdminForcedReconnect(Action act); - void OnAdminDeleteBannedUser(Action dto); - void OnAdminDeleteForbiddenFile(Action act); - void OnAdminUpdateOrAddBannedUser(Action dto); - void OnAdminUpdateOrAddForbiddenFile(Action dto); - void OnReceiveServerMessage(Action act); - void OnDownloadReady(Action act); - } -} \ No newline at end of file diff --git a/MareSynchronosAPI/ITransferFileDto.cs b/MareSynchronosAPI/ITransferFileDto.cs deleted file mode 100644 index 4ff8561..0000000 --- a/MareSynchronosAPI/ITransferFileDto.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MareSynchronos.API -{ - public interface ITransferFileDto - { - string Hash { get; set; } - bool IsForbidden { get; set; } - string ForbiddenBy { get; set; } - } -} \ No newline at end of file diff --git a/MareSynchronosAPI/MareAuth.cs b/MareSynchronosAPI/MareAuth.cs deleted file mode 100644 index e228a9d..0000000 --- a/MareSynchronosAPI/MareAuth.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace MareSynchronos.API -{ - public class MareAuth - { - - public const string Auth = "/auth"; - public const string Auth_CreateIdent = "createWithIdent"; - public static Uri AuthFullPath(Uri baseUri) => new Uri(baseUri, Auth + "/" + Auth_CreateIdent); - } -} \ No newline at end of file diff --git a/MareSynchronosAPI/MareFiles.cs b/MareSynchronosAPI/MareFiles.cs deleted file mode 100644 index 3d3efe9..0000000 --- a/MareSynchronosAPI/MareFiles.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; - -namespace MareSynchronos.API -{ - public class MareFiles - { - public const string Cache = "/cache"; - public const string Cache_Get = "get"; - public static Uri CacheGetFullPath(Uri baseUri, Guid requestId) => new(baseUri, Cache + "/" + Cache_Get + "?requestId=" + requestId.ToString()); - - public const string ServerFiles = "/files"; - public const string ServerFiles_Get = "get"; - public static Uri ServerFilesGetFullPath(Uri baseUri, string hash) => new(baseUri, ServerFiles + "/" + ServerFiles_Get + "/" + hash); - - public const string Request = "/request"; - public const string Request_Enqueue = "enqueue"; - public const string Request_RequestFile = "file"; - public const string Request_Cancel = "cancel"; - public const string Request_Check = "check"; - - public static Uri RequestEnqueueFullPath(Uri baseUri) => new(baseUri, Request + "/" + Request_Enqueue); - public static Uri RequestRequestFileFullPath(Uri baseUri, string hash) => new(baseUri, Request + "/" + Request_RequestFile + "?file=" + hash); - public static Uri RequestCancelFullPath(Uri baseUri, Guid guid) => new Uri(baseUri, Request + "/" + Request_Cancel + "?requestId=" + guid.ToString()); - public static Uri RequestCheckQueueFullPath(Uri baseUri, Guid guid, string hash) => new Uri(baseUri, Request + "/" + Request_Check + "?requestId=" + guid.ToString() + "&file=" + hash); - } -} \ No newline at end of file diff --git a/MareSynchronosAPI/MareSynchronos.API.csproj b/MareSynchronosAPI/MareSynchronos.API.csproj index acf7461..4f57cb9 100644 --- a/MareSynchronosAPI/MareSynchronos.API.csproj +++ b/MareSynchronosAPI/MareSynchronos.API.csproj @@ -2,6 +2,8 @@ net7.0 + enable + enable diff --git a/MareSynchronosAPI/ObjectKind.cs b/MareSynchronosAPI/ObjectKind.cs deleted file mode 100644 index d2612f2..0000000 --- a/MareSynchronosAPI/ObjectKind.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MareSynchronos.API -{ - public enum ObjectKind - { - Player = 0, - MinionOrMount = 1, - Companion = 2, - Pet = 3, - } -} diff --git a/MareSynchronosAPI/OnlineUserDto.cs b/MareSynchronosAPI/OnlineUserDto.cs deleted file mode 100644 index 78da994..0000000 --- a/MareSynchronosAPI/OnlineUserDto.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace MareSynchronos.API -{ - public record OnlineUserDto - { - public string UID { get; set; } - public string CharacterNameHash { get; set; } - public bool IsModerator { get; set; } - public bool IsAdmin { get; set; } - } -} diff --git a/MareSynchronosAPI/Routes/MareAuth.cs b/MareSynchronosAPI/Routes/MareAuth.cs new file mode 100644 index 0000000..291e5d3 --- /dev/null +++ b/MareSynchronosAPI/Routes/MareAuth.cs @@ -0,0 +1,9 @@ +namespace MareSynchronos.API.Routes; + +public class MareAuth +{ + + public const string Auth = "/auth"; + public const string Auth_CreateIdent = "createWithIdent"; + public static Uri AuthFullPath(Uri baseUri) => new Uri(baseUri, Auth + "/" + Auth_CreateIdent); +} \ No newline at end of file diff --git a/MareSynchronosAPI/Routes/MareFiles.cs b/MareSynchronosAPI/Routes/MareFiles.cs new file mode 100644 index 0000000..c08ec38 --- /dev/null +++ b/MareSynchronosAPI/Routes/MareFiles.cs @@ -0,0 +1,23 @@ +namespace MareSynchronos.API.Routes; + +public class MareFiles +{ + public const string Cache = "/cache"; + public const string Cache_Get = "get"; + public static Uri CacheGetFullPath(Uri baseUri, Guid requestId) => new(baseUri, Cache + "/" + Cache_Get + "?requestId=" + requestId.ToString()); + + public const string ServerFiles = "/files"; + public const string ServerFiles_Get = "get"; + public static Uri ServerFilesGetFullPath(Uri baseUri, string hash) => new(baseUri, ServerFiles + "/" + ServerFiles_Get + "/" + hash); + + public const string Request = "/request"; + public const string Request_Enqueue = "enqueue"; + public const string Request_RequestFile = "file"; + public const string Request_Cancel = "cancel"; + public const string Request_Check = "check"; + + public static Uri RequestEnqueueFullPath(Uri baseUri) => new(baseUri, Request + "/" + Request_Enqueue); + public static Uri RequestRequestFileFullPath(Uri baseUri, string hash) => new(baseUri, Request + "/" + Request_RequestFile + "?file=" + hash); + public static Uri RequestCancelFullPath(Uri baseUri, Guid guid) => new Uri(baseUri, Request + "/" + Request_Cancel + "?requestId=" + guid.ToString()); + public static Uri RequestCheckQueueFullPath(Uri baseUri, Guid guid, string hash) => new Uri(baseUri, Request + "/" + Request_Check + "?requestId=" + guid.ToString() + "&file=" + hash); +} \ No newline at end of file diff --git a/MareSynchronosAPI/SignalR/IMareHub.cs b/MareSynchronosAPI/SignalR/IMareHub.cs new file mode 100644 index 0000000..a4e3669 --- /dev/null +++ b/MareSynchronosAPI/SignalR/IMareHub.cs @@ -0,0 +1,71 @@ +using MareSynchronos.API.Data.Enum; +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 = 21; + 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> 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 Client_UpdateSystemInfo(SystemInfoDto systemInfo); + Task Client_ReceiveServerMessage(MessageSeverity messageSeverity, string message); + Task Client_DownloadReady(Guid requestId); + + 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 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); +} \ No newline at end of file diff --git a/MareSynchronosAPI/SignalR/IMareHubClient.cs b/MareSynchronosAPI/SignalR/IMareHubClient.cs new file mode 100644 index 0000000..cb083a8 --- /dev/null +++ b/MareSynchronosAPI/SignalR/IMareHubClient.cs @@ -0,0 +1,31 @@ +using MareSynchronos.API.Data.Enum; +using MareSynchronos.API.Dto; +using MareSynchronos.API.Dto.Files; +using MareSynchronos.API.Dto.Group; +using MareSynchronos.API.Dto.User; + +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 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); +} \ No newline at end of file diff --git a/MareSynchronosAPI/SystemInfoDto.cs b/MareSynchronosAPI/SystemInfoDto.cs deleted file mode 100644 index de10f6c..0000000 --- a/MareSynchronosAPI/SystemInfoDto.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MareSynchronos.API -{ - public record SystemInfoDto - { - public int OnlineUsers { get; set; } - } -} diff --git a/MareSynchronosAPI/UploadFileDto.cs b/MareSynchronosAPI/UploadFileDto.cs deleted file mode 100644 index 07ad783..0000000 --- a/MareSynchronosAPI/UploadFileDto.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MareSynchronos.API -{ - public record UploadFileDto : ITransferFileDto - { - public string Hash { get; set; } = string.Empty; - public bool IsForbidden { get; set; } = false; - public string ForbiddenBy { get; set; } = string.Empty; - } -}