Added disabled in the group profile dto.
This commit is contained in:
@@ -802,90 +802,91 @@ public partial class LightlessHub
|
|||||||
[Authorize(Policy = "Identified")]
|
[Authorize(Policy = "Identified")]
|
||||||
public async Task GroupSetProfile(GroupProfileDto dto)
|
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);
|
var (hasRights, group) = await TryValidateGroupModeratorOrOwner(dto.Group.GID).ConfigureAwait(false);
|
||||||
if (!hasRights) return;
|
if (!hasRights) return;
|
||||||
|
|
||||||
var groupProfileDb = await DbContext.GroupProfiles
|
var groupProfileDb = await DbContext.GroupProfiles
|
||||||
.Include(g => g.Group)
|
.Include(g => g.Group)
|
||||||
.FirstOrDefaultAsync(g => g.GroupGID == dto.Group.GID, cancellationToken)
|
.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)
|
|
||||||
.ConfigureAwait(false);
|
.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")]
|
[Authorize(Policy = "Identified")]
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ public static class Extensions
|
|||||||
if (dto.Tags != null) profile.Tags = dto.Tags;
|
if (dto.Tags != null) profile.Tags = dto.Tags;
|
||||||
if (dto.Description != null) profile.Description = dto.Description;
|
if (dto.Description != null) profile.Description = dto.Description;
|
||||||
if (dto.IsNsfw.HasValue) profile.IsNSFW = dto.IsNsfw.Value;
|
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)
|
public static void UpdateProfileFromDto(this UserProfileData profile, UserProfileDto dto, string? base64PictureString = null, string? base64BannerString = null)
|
||||||
|
|||||||
Reference in New Issue
Block a user