update server lol
This commit is contained in:
@@ -63,88 +63,6 @@ public partial class MareHub
|
||||
await Clients.Users(groupPairs).Client_GroupChangePermissions(new GroupPermissionDto(dto.Group, dto.Permissions)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[Authorize(Policy = "Identified")]
|
||||
public async Task GroupChangeIndividualPermissionState(GroupPairUserPermissionDto dto)
|
||||
{
|
||||
_logger.LogCallInfo(MareHubLogger.Args(dto));
|
||||
|
||||
var (inGroup, groupPair) = await TryValidateUserInGroup(dto.Group.GID).ConfigureAwait(false);
|
||||
if (!inGroup) return;
|
||||
|
||||
var groupPreferredPermissions = await _dbContext.GroupPairPreferredPermissions
|
||||
.SingleAsync(u => u.UserUID == UserUID && u.GroupGID == dto.Group.GID).ConfigureAwait(false);
|
||||
|
||||
var wasPaused = groupPreferredPermissions.IsPaused;
|
||||
groupPreferredPermissions.DisableSounds = dto.GroupPairPermissions.IsDisableSounds();
|
||||
groupPreferredPermissions.DisableAnimations = dto.GroupPairPermissions.IsDisableAnimations();
|
||||
groupPreferredPermissions.IsPaused = dto.GroupPairPermissions.IsPaused();
|
||||
groupPreferredPermissions.DisableVFX = dto.GroupPairPermissions.IsDisableVFX();
|
||||
|
||||
// set the permissions for every group pair that is not sticky
|
||||
var allPairs = (await GetAllPairInfo(UserUID).ConfigureAwait(false))
|
||||
.Where(u => !u.Value.OwnPermissions.Sticky)
|
||||
.ToDictionary(d => d.Key, d => d.Value, StringComparer.Ordinal);
|
||||
|
||||
var affectedGroupPairs = allPairs.Where(u => u.Value.GIDs.Contains(dto.GID, StringComparer.Ordinal)).ToList();
|
||||
var groupUserUids = affectedGroupPairs.Select(g => g.Key).ToList();
|
||||
var affectedPerms = await _dbContext.Permissions.Where(u => u.UserUID == UserUID
|
||||
&& groupUserUids.Any(c => c == u.OtherUserUID))
|
||||
.ToListAsync().ConfigureAwait(false);
|
||||
|
||||
foreach (var perm in affectedPerms)
|
||||
{
|
||||
perm.DisableSounds = groupPreferredPermissions.DisableSounds;
|
||||
perm.DisableAnimations = groupPreferredPermissions.DisableAnimations;
|
||||
perm.IsPaused = groupPreferredPermissions.IsPaused;
|
||||
perm.DisableVFX = groupPreferredPermissions.DisableVFX;
|
||||
}
|
||||
await _dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
|
||||
// send messages
|
||||
UserPermissions permissions = UserPermissions.NoneSet;
|
||||
permissions.SetPaused(groupPreferredPermissions.IsPaused);
|
||||
permissions.SetDisableAnimations(groupPreferredPermissions.DisableAnimations);
|
||||
permissions.SetDisableSounds(groupPreferredPermissions.DisableSounds);
|
||||
permissions.SetDisableVFX(groupPreferredPermissions.DisableVFX);
|
||||
|
||||
// send apporpriate permission set to each user
|
||||
await Clients.Users(affectedGroupPairs
|
||||
.Select(k => k.Key))
|
||||
.Client_UserUpdateOtherPairPermissions(new(new(UserUID), permissions)).ConfigureAwait(false);
|
||||
|
||||
await Clients.User(UserUID).Client_GroupChangeUserPairPermissions(dto).ConfigureAwait(false);
|
||||
foreach (var item in affectedGroupPairs.Select(k => k.Key))
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserUpdateSelfPairPermissions(new(new(item), permissions)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
var self = await _dbContext.Users.SingleAsync(u => u.UID == UserUID).ConfigureAwait(false);
|
||||
|
||||
if (wasPaused == groupPreferredPermissions.IsPaused) return;
|
||||
|
||||
foreach (var groupUserPair in affectedGroupPairs)
|
||||
{
|
||||
var groupUserIdent = await GetUserIdent(groupUserPair.Key).ConfigureAwait(false);
|
||||
if (!string.IsNullOrEmpty(groupUserIdent))
|
||||
{
|
||||
// if we changed to paused and other was not paused before, we send offline
|
||||
if (groupPreferredPermissions.IsPaused && !groupUserPair.Value.OtherPermissions.IsPaused)
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserSendOffline(new(new(groupUserPair.Key, groupUserPair.Value.Alias))).ConfigureAwait(false);
|
||||
await Clients.User(groupUserPair.Key)
|
||||
.Client_UserSendOffline(new(self.ToUserData())).ConfigureAwait(false);
|
||||
}
|
||||
// if we changed to unpaused and other was not paused either we send online
|
||||
else if (!groupPreferredPermissions.IsPaused && !groupUserPair.Value.OtherPermissions.IsPaused)
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserSendOnline(new(new(groupUserPair.Key, groupUserPair.Value.Alias), groupUserIdent)).ConfigureAwait(false);
|
||||
await Clients.User(groupUserPair.Key)
|
||||
.Client_UserSendOnline(new(self.ToUserData(), UserCharaIdent)).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Authorize(Policy = "Identified")]
|
||||
public async Task GroupChangeOwnership(GroupPairDto dto)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
using MareSynchronos.API.Data.Enum;
|
||||
using MareSynchronos.API.Dto;
|
||||
using MareSynchronos.API.Dto.Group;
|
||||
using MareSynchronos.API.Dto.User;
|
||||
using MareSynchronos.API.Data.Extensions;
|
||||
using MareSynchronosServer.Utils;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace MareSynchronosServer.Hubs;
|
||||
|
||||
public partial class MareHub
|
||||
{
|
||||
[Authorize(Policy = "Authenticated")]
|
||||
public async Task UserUpdateDefaultPermissions(DefaultPermissionsDto defaultPermissions)
|
||||
{
|
||||
_logger.LogCallInfo(MareHubLogger.Args(defaultPermissions));
|
||||
|
||||
var permissions = await _dbContext.UserDefaultPreferredPermissions.SingleAsync(u => u.UserUID == UserUID).ConfigureAwait(false);
|
||||
|
||||
permissions.DisableGroupAnimations = defaultPermissions.DisableGroupAnimations;
|
||||
permissions.DisableGroupSounds = defaultPermissions.DisableGroupSounds;
|
||||
permissions.DisableGroupVFX = defaultPermissions.DisableGroupVFX;
|
||||
permissions.DisableIndividualAnimations = defaultPermissions.DisableIndividualAnimations;
|
||||
permissions.DisableIndividualSounds = defaultPermissions.DisableIndividualSounds;
|
||||
permissions.DisableIndividualVFX = defaultPermissions.DisableIndividualVFX;
|
||||
permissions.IndividualIsSticky = defaultPermissions.IndividualIsSticky;
|
||||
|
||||
_dbContext.Update(permissions);
|
||||
await _dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
|
||||
await Clients.Caller.Client_UserUpdateDefaultPermissions(defaultPermissions).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[Authorize(Policy = "Identified")]
|
||||
public async Task SetBulkPermissions(BulkPermissionsDto dto)
|
||||
{
|
||||
_logger.LogCallInfo(MareHubLogger.Args(
|
||||
"Individual", string.Join(';', dto.AffectedUsers.Select(g => g.Key + ":" + g.Value)),
|
||||
"Group", string.Join(';', dto.AffectedGroups.Select(g => g.Key + ":" + g.Value))));
|
||||
|
||||
// remove self
|
||||
dto.AffectedUsers.Remove(UserUID, out _);
|
||||
if (!dto.AffectedUsers.Any() && !dto.AffectedGroups.Any()) return;
|
||||
|
||||
// get all current pairs in any form
|
||||
var allUsers = await GetAllPairInfo(UserUID).ConfigureAwait(false);
|
||||
var ownDefaultPerms = await _dbContext.UserDefaultPreferredPermissions.SingleAsync(u => u.UserUID == UserUID).ConfigureAwait(false);
|
||||
|
||||
foreach (var user in dto.AffectedUsers)
|
||||
{
|
||||
bool setSticky = false;
|
||||
var newPerm = user.Value;
|
||||
if (!allUsers.TryGetValue(user.Key, out var pairData)) continue;
|
||||
if (!pairData.OwnPermissions.Sticky && !newPerm.IsSticky())
|
||||
{
|
||||
setSticky = ownDefaultPerms.IndividualIsSticky;
|
||||
}
|
||||
|
||||
var pauseChange = pairData.OwnPermissions.IsPaused != newPerm.IsPaused();
|
||||
var prevPermissions = await _dbContext.Permissions.SingleAsync(u => u.UserUID == UserUID && u.OtherUserUID == user.Key).ConfigureAwait(false);
|
||||
|
||||
prevPermissions.IsPaused = newPerm.IsPaused();
|
||||
prevPermissions.DisableAnimations = newPerm.IsDisableAnimations();
|
||||
prevPermissions.DisableSounds = newPerm.IsDisableSounds();
|
||||
prevPermissions.DisableVFX = newPerm.IsDisableVFX();
|
||||
prevPermissions.Sticky = newPerm.IsSticky() || setSticky;
|
||||
_dbContext.Update(prevPermissions);
|
||||
|
||||
// send updated data to pair
|
||||
var permCopy = newPerm;
|
||||
permCopy.SetSticky(newPerm.IsSticky() || setSticky);
|
||||
var permToOther = permCopy;
|
||||
permToOther.SetSticky(false);
|
||||
|
||||
await Clients.User(UserUID).Client_UserUpdateSelfPairPermissions(new(new(user.Key), permCopy)).ConfigureAwait(false);
|
||||
if (pairData.OtherPermissions == null) continue;
|
||||
|
||||
await Clients.User(user.Key).Client_UserUpdateOtherPairPermissions(new(new(UserUID), permToOther)).ConfigureAwait(false);
|
||||
|
||||
// check if pause change and send online or offline respectively
|
||||
if (pauseChange && !pairData.OtherPermissions.IsPaused)
|
||||
{
|
||||
var otherCharaIdent = await GetUserIdent(user.Key).ConfigureAwait(false);
|
||||
|
||||
if (UserCharaIdent == null || otherCharaIdent == null) continue;
|
||||
|
||||
if (newPerm.IsPaused())
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserSendOffline(new(new(user.Key))).ConfigureAwait(false);
|
||||
await Clients.User(user.Key).Client_UserSendOffline(new(new(UserUID))).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserSendOnline(new(new(user.Key), otherCharaIdent)).ConfigureAwait(false);
|
||||
await Clients.User(user.Key).Client_UserSendOnline(new(new(UserUID), UserCharaIdent)).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var group in dto.AffectedGroups)
|
||||
{
|
||||
var (inGroup, groupPair) = await TryValidateUserInGroup(group.Key).ConfigureAwait(false);
|
||||
if (!inGroup) continue;
|
||||
|
||||
var groupPreferredPermissions = await _dbContext.GroupPairPreferredPermissions
|
||||
.SingleAsync(u => u.UserUID == UserUID && u.GroupGID == group.Key).ConfigureAwait(false);
|
||||
|
||||
var wasPaused = groupPreferredPermissions.IsPaused;
|
||||
groupPreferredPermissions.DisableSounds = group.Value.IsDisableSounds();
|
||||
groupPreferredPermissions.DisableAnimations = group.Value.IsDisableAnimations();
|
||||
groupPreferredPermissions.IsPaused = group.Value.IsPaused();
|
||||
groupPreferredPermissions.DisableVFX = group.Value.IsDisableVFX();
|
||||
|
||||
var nonStickyPairs = allUsers.Where(u => !u.Value.OwnPermissions.Sticky).ToList();
|
||||
var affectedGroupPairs = nonStickyPairs.Where(u => u.Value.GIDs.Contains(group.Key, StringComparer.Ordinal)).ToList();
|
||||
var groupUserUids = affectedGroupPairs.Select(g => g.Key).ToList();
|
||||
var affectedPerms = await _dbContext.Permissions.Where(u => u.UserUID == UserUID
|
||||
&& groupUserUids.Any(c => c == u.OtherUserUID))
|
||||
.ToListAsync().ConfigureAwait(false);
|
||||
|
||||
foreach (var perm in affectedPerms)
|
||||
{
|
||||
perm.DisableSounds = groupPreferredPermissions.DisableSounds;
|
||||
perm.DisableAnimations = groupPreferredPermissions.DisableAnimations;
|
||||
perm.IsPaused = groupPreferredPermissions.IsPaused;
|
||||
perm.DisableVFX = groupPreferredPermissions.DisableVFX;
|
||||
}
|
||||
|
||||
UserPermissions permissions = UserPermissions.NoneSet;
|
||||
permissions.SetPaused(groupPreferredPermissions.IsPaused);
|
||||
permissions.SetDisableAnimations(groupPreferredPermissions.DisableAnimations);
|
||||
permissions.SetDisableSounds(groupPreferredPermissions.DisableSounds);
|
||||
permissions.SetDisableVFX(groupPreferredPermissions.DisableVFX);
|
||||
|
||||
await Clients.Users(affectedGroupPairs
|
||||
.Select(k => k.Key))
|
||||
.Client_UserUpdateOtherPairPermissions(new(new(UserUID), permissions)).ConfigureAwait(false);
|
||||
|
||||
await Clients.User(UserUID).Client_GroupChangeUserPairPermissions(new GroupPairUserPermissionDto(new(group.Key), new(UserUID), group.Value)).ConfigureAwait(false);
|
||||
foreach (var item in affectedGroupPairs.Select(k => k.Key))
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserUpdateSelfPairPermissions(new(new(item), permissions)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
if (wasPaused == groupPreferredPermissions.IsPaused) continue;
|
||||
|
||||
foreach (var groupUserPair in affectedGroupPairs)
|
||||
{
|
||||
var groupUserIdent = await GetUserIdent(groupUserPair.Key).ConfigureAwait(false);
|
||||
if (!string.IsNullOrEmpty(groupUserIdent) && !groupUserPair.Value.OtherPermissions.IsPaused)
|
||||
{
|
||||
// if we changed to paused and other was not paused before, we send offline
|
||||
if (groupPreferredPermissions.IsPaused)
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserSendOffline(new(new(groupUserPair.Key, groupUserPair.Value.Alias))).ConfigureAwait(false);
|
||||
await Clients.User(groupUserPair.Key).Client_UserSendOffline(new(new(UserUID))).ConfigureAwait(false);
|
||||
}
|
||||
// if we changed to unpaused and other was not paused either we send online
|
||||
else
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserSendOnline(new(new(groupUserPair.Key, groupUserPair.Value.Alias), groupUserIdent)).ConfigureAwait(false);
|
||||
await Clients.User(groupUserPair.Key).Client_UserSendOnline(new(new(UserUID), UserCharaIdent)).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await _dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
@@ -372,66 +372,6 @@ public partial class MareHub
|
||||
await Clients.Users(dto.User.UID).Client_UserUpdateProfile(new(dto.User)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[Authorize(Policy = "Identified")]
|
||||
public async Task UserSetPairPermissions(UserPermissionsDto dto)
|
||||
{
|
||||
_logger.LogCallInfo(MareHubLogger.Args(dto));
|
||||
|
||||
if (string.Equals(dto.User.UID, UserUID, StringComparison.Ordinal)) return;
|
||||
UserPermissionSet prevPermissions = await _dbContext.Permissions.SingleOrDefaultAsync(w => w.UserUID == UserUID && w.OtherUserUID == dto.User.UID).ConfigureAwait(false);
|
||||
if (prevPermissions == null) return; // you always should have permissions to another user
|
||||
|
||||
var oldPairData = await GetPairInfo(UserUID, dto.User.UID).ConfigureAwait(false);
|
||||
bool setSticky = false;
|
||||
if (!oldPairData.GIDs.Contains(Constants.IndividualKeyword, StringComparer.Ordinal))
|
||||
{
|
||||
if (!oldPairData.OwnPermissions.Sticky && !dto.Permissions.IsSticky())
|
||||
{
|
||||
var defaultPermissions = await _dbContext.UserDefaultPreferredPermissions.SingleAsync(u => u.UserUID == UserUID).ConfigureAwait(false);
|
||||
setSticky = defaultPermissions.IndividualIsSticky;
|
||||
}
|
||||
}
|
||||
|
||||
var pauseChange = prevPermissions.IsPaused != dto.Permissions.IsPaused();
|
||||
|
||||
prevPermissions.IsPaused = dto.Permissions.IsPaused();
|
||||
prevPermissions.DisableAnimations = dto.Permissions.IsDisableAnimations();
|
||||
prevPermissions.DisableSounds = dto.Permissions.IsDisableSounds();
|
||||
prevPermissions.DisableVFX = dto.Permissions.IsDisableVFX();
|
||||
prevPermissions.Sticky = dto.Permissions.IsSticky() || setSticky;
|
||||
_dbContext.Update(prevPermissions);
|
||||
await _dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
|
||||
_logger.LogCallInfo(MareHubLogger.Args(dto, "Success"));
|
||||
|
||||
var permCopy = dto.Permissions;
|
||||
permCopy.SetSticky(dto.Permissions.IsSticky() || setSticky);
|
||||
|
||||
await Clients.User(UserUID).Client_UserUpdateSelfPairPermissions(new UserPermissionsDto(dto.User, permCopy)).ConfigureAwait(false);
|
||||
await Clients.User(dto.User.UID).Client_UserUpdateOtherPairPermissions(new UserPermissionsDto(new UserData(UserUID), dto.Permissions)).ConfigureAwait(false);
|
||||
|
||||
var newPairData = await GetPairInfo(UserUID, dto.User.UID).ConfigureAwait(false);
|
||||
|
||||
if (newPairData.OwnPermissions.IsPaused != oldPairData.OwnPermissions.IsPaused)
|
||||
{
|
||||
var otherCharaIdent = await GetUserIdent(dto.User.UID).ConfigureAwait(false);
|
||||
var otherPermissions = newPairData.OtherPermissions;
|
||||
|
||||
if (UserCharaIdent == null || otherCharaIdent == null || (otherPermissions?.IsPaused ?? true)) return;
|
||||
|
||||
if (newPairData.OwnPermissions.IsPaused)
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserSendOffline(dto).ConfigureAwait(false);
|
||||
await Clients.User(dto.User.UID).Client_UserSendOffline(new(new(UserUID))).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await Clients.User(UserUID).Client_UserSendOnline(new(dto.User, otherCharaIdent)).ConfigureAwait(false);
|
||||
await Clients.User(dto.User.UID).Client_UserSendOnline(new(new(UserUID), UserCharaIdent)).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Authorize(Policy = "Identified")]
|
||||
public async Task UserSetProfile(UserProfileDto dto)
|
||||
{
|
||||
@@ -515,27 +455,6 @@ public partial class MareHub
|
||||
await Clients.Caller.Client_UserUpdateProfile(new(dto.User)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[Authorize(Policy = "Authenticated")]
|
||||
public async Task UserUpdateDefaultPermissions(DefaultPermissionsDto defaultPermissions)
|
||||
{
|
||||
_logger.LogCallInfo(MareHubLogger.Args(defaultPermissions));
|
||||
|
||||
var permissions = await _dbContext.UserDefaultPreferredPermissions.SingleAsync(u => u.UserUID == UserUID).ConfigureAwait(false);
|
||||
|
||||
permissions.DisableGroupAnimations = defaultPermissions.DisableGroupAnimations;
|
||||
permissions.DisableGroupSounds = defaultPermissions.DisableGroupSounds;
|
||||
permissions.DisableGroupVFX = defaultPermissions.DisableGroupVFX;
|
||||
permissions.DisableIndividualAnimations = defaultPermissions.DisableIndividualAnimations;
|
||||
permissions.DisableIndividualSounds = defaultPermissions.DisableIndividualSounds;
|
||||
permissions.DisableIndividualVFX = defaultPermissions.DisableIndividualVFX;
|
||||
permissions.IndividualIsSticky = defaultPermissions.IndividualIsSticky;
|
||||
|
||||
_dbContext.Update(permissions);
|
||||
await _dbContext.SaveChangesAsync().ConfigureAwait(false);
|
||||
|
||||
await Clients.Caller.Client_UserUpdateDefaultPermissions(defaultPermissions).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[GeneratedRegex(@"^([a-z0-9_ '+&,\.\-\{\}]+\/)+([a-z0-9_ '+&,\.\-\{\}]+\.[a-z]{3,4})$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.ECMAScript)]
|
||||
private static partial Regex GamePathRegex();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user