From 918c5e7d5d4b5ccc3f0164af893c1e8beab0807d Mon Sep 17 00:00:00 2001 From: cake Date: Sun, 7 Dec 2025 21:53:01 +0100 Subject: [PATCH] Added disabled in the group profile dto. --- .../Hubs/LightlessHub.Groups.cs | 157 +++++++++--------- .../LightlessSyncServer/Utils/Extensions.cs | 1 + 2 files changed, 80 insertions(+), 78 deletions(-) diff --git a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs index a24442e..d371e65 100644 --- a/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs +++ b/LightlessSyncServer/LightlessSyncServer/Hubs/LightlessHub.Groups.cs @@ -802,90 +802,91 @@ public partial class LightlessHub [Authorize(Policy = "Identified")] public async Task GroupSetProfile(GroupProfileDto dto) { - _logger.LogCallInfo(LightlessHubLogger.Args(dto)); + _logger.LogCallInfo(LightlessHubLogger.Args(dto)); - var cancellationToken = RequestAbortedToken; + var cancellationToken = RequestAbortedToken; - if (dto.Group == null) return; + if (dto.Group == null) return; - var (hasRights, group) = await TryValidateGroupModeratorOrOwner(dto.Group.GID).ConfigureAwait(false); - if (!hasRights) return; + var (hasRights, group) = await TryValidateGroupModeratorOrOwner(dto.Group.GID).ConfigureAwait(false); + if (!hasRights) return; - var groupProfileDb = await DbContext.GroupProfiles - .Include(g => g.Group) - .FirstOrDefaultAsync(g => g.GroupGID == dto.Group.GID, cancellationToken) - .ConfigureAwait(false); - - ImageCheckService.ImageLoadResult profileResult = new(); - ImageCheckService.ImageLoadResult bannerResult = new(); - - //Avatar image validation - if (!string.IsNullOrEmpty(dto.PictureBase64)) - { - profileResult = await ImageCheckService.ValidateImageAsync(dto.PictureBase64, banner: false, RequestAbortedToken).ConfigureAwait(false); - - if (!profileResult.Success) - { - await Clients.Caller.Client_ReceiveServerMessage(MessageSeverity.Error, profileResult.ErrorMessage).ConfigureAwait(false); - return; - } - } - - //Banner image validation - if (!string.IsNullOrEmpty(dto.BannerBase64)) - { - bannerResult = await ImageCheckService.ValidateImageAsync(dto.BannerBase64, banner: true, RequestAbortedToken).ConfigureAwait(false); - - if (!bannerResult.Success) - { - await Clients.Caller.Client_ReceiveServerMessage(MessageSeverity.Error, bannerResult.ErrorMessage).ConfigureAwait(false); - return; - } - } - - var sanitizedProfileImage = profileResult?.Base64Image; - var sanitizedBannerImage = bannerResult?.Base64Image; - - if (groupProfileDb == null) - { - groupProfileDb = new GroupProfile - { - GroupGID = dto.Group.GID, - Group = group, - ProfileDisabled = false, - IsNSFW = dto.IsNsfw ?? false, - }; - - groupProfileDb.UpdateProfileFromDto(dto, sanitizedProfileImage, sanitizedBannerImage); - await DbContext.GroupProfiles.AddAsync(groupProfileDb, cancellationToken).ConfigureAwait(false); - } - else - { - groupProfileDb.Group ??= group; - - if (groupProfileDb?.ProfileDisabled ?? false) - { - await Clients.Caller.Client_ReceiveServerMessage(MessageSeverity.Error, "Your profile was permanently disabled and cannot be edited").ConfigureAwait(false); - return; - } - - groupProfileDb.UpdateProfileFromDto(dto, sanitizedProfileImage, sanitizedBannerImage); - } - - var userIds = await DbContext.GroupPairs - .Where(p => p.GroupGID == groupProfileDb.GroupGID) - .Select(p => p.GroupUserUID) - .ToListAsync(cancellationToken) - .ConfigureAwait(false); - - if (userIds.Count > 0) - { - var profileDto = groupProfileDb.ToDTO(); - await Clients.Users(userIds).Client_GroupSendProfile(profileDto) + var groupProfileDb = await DbContext.GroupProfiles + .Include(g => g.Group) + .FirstOrDefaultAsync(g => g.GroupGID == dto.Group.GID, cancellationToken) .ConfigureAwait(false); - } - await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + ImageCheckService.ImageLoadResult profileResult = new(); + ImageCheckService.ImageLoadResult bannerResult = new(); + + //Avatar image validation + if (!string.IsNullOrEmpty(dto.PictureBase64)) + { + profileResult = await ImageCheckService.ValidateImageAsync(dto.PictureBase64, banner: false, RequestAbortedToken).ConfigureAwait(false); + + if (!profileResult.Success) + { + await Clients.Caller.Client_ReceiveServerMessage(MessageSeverity.Error, profileResult.ErrorMessage).ConfigureAwait(false); + return; + } + } + + //Banner image validation + if (!string.IsNullOrEmpty(dto.BannerBase64)) + { + bannerResult = await ImageCheckService.ValidateImageAsync(dto.BannerBase64, banner: true, RequestAbortedToken).ConfigureAwait(false); + + if (!bannerResult.Success) + { + await Clients.Caller.Client_ReceiveServerMessage(MessageSeverity.Error, bannerResult.ErrorMessage).ConfigureAwait(false); + return; + } + } + + var sanitizedProfileImage = profileResult?.Base64Image; + var sanitizedBannerImage = bannerResult?.Base64Image; + + if (groupProfileDb == null) + { + groupProfileDb = new GroupProfile + { + GroupGID = dto.Group.GID, + Group = group, + ProfileDisabled = dto.IsDisabled ?? false, + IsNSFW = dto.IsNsfw ?? false, + + }; + + groupProfileDb.UpdateProfileFromDto(dto, sanitizedProfileImage, sanitizedBannerImage); + await DbContext.GroupProfiles.AddAsync(groupProfileDb, cancellationToken).ConfigureAwait(false); + } + else + { + groupProfileDb.Group ??= group; + + if (groupProfileDb?.ProfileDisabled ?? false) + { + await Clients.Caller.Client_ReceiveServerMessage(MessageSeverity.Error, "Your profile was permanently disabled and cannot be edited").ConfigureAwait(false); + return; + } + + groupProfileDb.UpdateProfileFromDto(dto, sanitizedProfileImage, sanitizedBannerImage); + } + + var userIds = await DbContext.GroupPairs + .Where(p => p.GroupGID == groupProfileDb.GroupGID) + .Select(p => p.GroupUserUID) + .ToListAsync(cancellationToken) + .ConfigureAwait(false); + + if (userIds.Count > 0) + { + var profileDto = groupProfileDb.ToDTO(); + await Clients.Users(userIds).Client_GroupSendProfile(profileDto) + .ConfigureAwait(false); + } + + await DbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false); } [Authorize(Policy = "Identified")] diff --git a/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs b/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs index 3911ff0..8a39f4e 100644 --- a/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs +++ b/LightlessSyncServer/LightlessSyncServer/Utils/Extensions.cs @@ -22,6 +22,7 @@ public static class Extensions if (dto.Tags != null) profile.Tags = dto.Tags; if (dto.Description != null) profile.Description = dto.Description; if (dto.IsNsfw.HasValue) profile.IsNSFW = dto.IsNsfw.Value; + if (dto.IsDisabled.HasValue) profile.ProfileDisabled = dto.IsDisabled.Value; } public static void UpdateProfileFromDto(this UserProfileData profile, UserProfileDto dto, string? base64PictureString = null, string? base64BannerString = null)