dev #1
@ -107,7 +107,7 @@ public class API
|
|||||||
{
|
{
|
||||||
IEnumerable<PublicServer> isl = InternalServers.Where(a => (a.Domain == Domain && a.ApiVersion == Version));
|
IEnumerable<PublicServer> isl = InternalServers.Where(a => (a.Domain == Domain && a.ApiVersion == Version));
|
||||||
if (isl.Any()) return isl.First();
|
if (isl.Any()) return isl.First();
|
||||||
s = await PublicServer.GetServer(Domain, Version, Secure);
|
s = await PublicServer.GetServer(Domain, Version, Secure, GenerateEncryption, LogConsole);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -13,11 +13,11 @@
|
|||||||
<RepositoryUrl>https://github.com/JacobTech-com/Luski.net</RepositoryUrl>
|
<RepositoryUrl>https://github.com/JacobTech-com/Luski.net</RepositoryUrl>
|
||||||
<IncludeSymbols>True</IncludeSymbols>
|
<IncludeSymbols>True</IncludeSymbols>
|
||||||
<FileVersion>1.0.0</FileVersion>
|
<FileVersion>1.0.0</FileVersion>
|
||||||
<Version>2.0.0-alpha65</Version>
|
<Version>2.0.0-alpha76</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Luski.Shared" Version="1.1.0-alpha19" />
|
<PackageReference Include="Luski.Shared" Version="1.1.0-alpha21" />
|
||||||
<PackageReference Include="websocketsharp.core" Version="1.0.0" />
|
<PackageReference Include="websocketsharp.core" Version="1.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
@ -203,6 +203,17 @@ public partial class PublicServer
|
|||||||
FailedSystems.Add(new("Auto Status", "Failed to set status on the server", e));
|
FailedSystems.Add(new("Auto Status", "Failed to set status on the server", e));
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region GetRoles
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_ = await GetRoles();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
FailedSystems.Add(new("Get Roles", "Failed to get roles on the server", e));
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Local Storage Cleanup
|
#region Local Storage Cleanup
|
||||||
try
|
try
|
||||||
|
@ -29,6 +29,7 @@ public partial class PublicServer : Server
|
|||||||
public List<SocketChannel> chans { get; } = new();
|
public List<SocketChannel> chans { get; } = new();
|
||||||
public List<SocketCategory> cats { get; } = new();
|
public List<SocketCategory> cats { get; } = new();
|
||||||
public List<Role> roles { get; } = new();
|
public List<Role> roles { get; } = new();
|
||||||
|
public List<RoleOverride> roleso { get; } = new();
|
||||||
|
|
||||||
public SocketAppUser User { get; private set; } = null!;
|
public SocketAppUser User { get; private set; } = null!;
|
||||||
|
|
||||||
@ -210,6 +211,47 @@ public partial class PublicServer : Server
|
|||||||
roles.Add(role);
|
roles.Add(role);
|
||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<RoleOverride> GetRoleOverride(long id)
|
||||||
|
{
|
||||||
|
RoleOverride[] r = roleso.Where(s => s.ID == id).ToArray();
|
||||||
|
if (r.Length > 0) return r[0];
|
||||||
|
UserRoleOverrideSTC s = await GetFromServer("SocketOverrides/RoleOverride/" + id.ToString(), UserRoleOverrideSTCContext.Default.UserRoleOverrideSTC, CancellationToken.None);
|
||||||
|
|
||||||
|
RoleOverride role = new()
|
||||||
|
{
|
||||||
|
ID = s.Id,
|
||||||
|
BadPermissions = s.BadPermissions,
|
||||||
|
GoodPermissions = s.GoodPermissions,
|
||||||
|
ParentRoleID = s.RoleID,
|
||||||
|
Server = this
|
||||||
|
};
|
||||||
|
roleso.Add(role);
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Role[]> GetRoles()
|
||||||
|
{
|
||||||
|
RolesSTC s = await GetFromServer("SocketRole/GetAll", RolesSTCContext.Default.RolesSTC, CancellationToken.None);
|
||||||
|
roles.Clear();
|
||||||
|
foreach (var ServerRole in s.Roles)
|
||||||
|
{
|
||||||
|
roles.Add(new Role()
|
||||||
|
{
|
||||||
|
Server = this,
|
||||||
|
ID = ServerRole.ID,
|
||||||
|
Color = new(ServerRole.Color),
|
||||||
|
Description = ServerRole.Description,
|
||||||
|
DisplayName = ServerRole.DisplayName,
|
||||||
|
MembersListID = ServerRole.Members,
|
||||||
|
Name = ServerRole.Name,
|
||||||
|
Index = ServerRole.Index,
|
||||||
|
ServerPermissions = ServerRole.ServerPermissions
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return roles.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<SocketMessage> SendMessage<TChannel>(TChannel channel, string msg, SocketMessage? ReplyTo = null,
|
public async Task<SocketMessage> SendMessage<TChannel>(TChannel channel, string msg, SocketMessage? ReplyTo = null,
|
||||||
SocketChannelProfile? FakeProfile = null) where TChannel : SocketChannel, new()
|
SocketChannelProfile? FakeProfile = null) where TChannel : SocketChannel, new()
|
||||||
@ -344,6 +386,7 @@ public partial class PublicServer : Server
|
|||||||
Server = this,
|
Server = this,
|
||||||
Color = new(request.Color)
|
Color = new(request.Color)
|
||||||
};
|
};
|
||||||
|
|
||||||
chans.Add(bob);
|
chans.Add(bob);
|
||||||
return bob;
|
return bob;
|
||||||
}
|
}
|
||||||
@ -364,7 +407,7 @@ public partial class PublicServer : Server
|
|||||||
new ChannelPostCTS()
|
new ChannelPostCTS()
|
||||||
{
|
{
|
||||||
Name = Convert.ToBase64String(Encoding.UTF8.GetBytes(Name)),
|
Name = Convert.ToBase64String(Encoding.UTF8.GetBytes(Name)),
|
||||||
Description = Convert.ToBase64String(Encoding.UTF8.GetBytes(Description)),
|
Description = Convert.ToBase64String(Encoding.UTF8.GetBytes(Decription)),
|
||||||
EncoderTypes = new[] { EncoderType.UTF16 },
|
EncoderTypes = new[] { EncoderType.UTF16 },
|
||||||
EncryptionKeys = new long[] { 0 },
|
EncryptionKeys = new long[] { 0 },
|
||||||
DescriptionEncoderType = EncoderType.UTF8,
|
DescriptionEncoderType = EncoderType.UTF8,
|
||||||
@ -385,7 +428,7 @@ public partial class PublicServer : Server
|
|||||||
{
|
{
|
||||||
ID = res.ID,
|
ID = res.ID,
|
||||||
CategoryID = res.Parent,
|
CategoryID = res.Parent,
|
||||||
Description = Description,
|
Description = Decription,
|
||||||
DescriptionEncoderType = res.DescriptionEncoderType,
|
DescriptionEncoderType = res.DescriptionEncoderType,
|
||||||
DescriptionEncryptionKey = res.DescriptionEncryptionKey,
|
DescriptionEncryptionKey = res.DescriptionEncryptionKey,
|
||||||
EncoderTypes = res.EncoderTypes,
|
EncoderTypes = res.EncoderTypes,
|
||||||
@ -439,7 +482,7 @@ public partial class PublicServer : Server
|
|||||||
}
|
}
|
||||||
|
|
||||||
Tuser u = new();
|
Tuser u = new();
|
||||||
if (u is SocketUser)
|
if (typeof(Tuser).FullName == typeof(SocketUser).FullName)
|
||||||
{
|
{
|
||||||
u = new()
|
u = new()
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Luski.Shared.PublicServers.V1.Enums;
|
using Luski.Shared.PublicServers.V1.Enums;
|
||||||
|
|
||||||
@ -17,13 +18,17 @@ public class Role
|
|||||||
public required long[] MembersListID { get; init; } = default!;
|
public required long[] MembersListID { get; init; } = default!;
|
||||||
private List<SocketUser>? RawUsers = null;
|
private List<SocketUser>? RawUsers = null;
|
||||||
|
|
||||||
public Task<SocketUser[]> GetMembers()
|
public async Task<SocketUser[]> GetMembers()
|
||||||
{
|
{
|
||||||
if (RawUsers is null)
|
if (RawUsers is null)
|
||||||
{
|
{
|
||||||
|
RawUsers = new();
|
||||||
|
foreach (long m in MembersListID)
|
||||||
|
{
|
||||||
|
RawUsers.Add(await Server.GetUser<SocketUser>(m, CancellationToken.None));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.FromResult(RawUsers!.ToArray());
|
return RawUsers!.ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ using Luski.Shared.PublicServers.V1.Shared;
|
|||||||
|
|
||||||
namespace Luski.net.Structures.Public;
|
namespace Luski.net.Structures.Public;
|
||||||
|
|
||||||
public class RoleOveride
|
public class RoleOverride
|
||||||
{
|
{
|
||||||
public long ID { get; init; }
|
public long ID { get; init; }
|
||||||
public long ParentRoleID { get; init; }
|
public long ParentRoleID { get; init; }
|
||||||
@ -12,15 +12,11 @@ public class RoleOveride
|
|||||||
public ServerPermission GoodPermissions { get; set; }
|
public ServerPermission GoodPermissions { get; set; }
|
||||||
|
|
||||||
public ServerPermission BadPermissions { get; set; }
|
public ServerPermission BadPermissions { get; set; }
|
||||||
private Role? Parent = null;
|
|
||||||
|
public required PublicServer Server { get; init; }
|
||||||
|
|
||||||
public Task<Role> GetRole()
|
public async Task<Role> GetRole()
|
||||||
{
|
{
|
||||||
if (Parent is null)
|
return await Server.GetRole(ParentRoleID);
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return Task.FromResult(Parent)!;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,7 +16,7 @@ public class SocketAppUser : SocketUser
|
|||||||
return await Server.GetChannel<SocketChannel>(SelectedChannel, Token);
|
return await Server.GetChannel<SocketChannel>(SelectedChannel, Token);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> HasAccessToCategory(SocketCategory Category, ServerPermission RequiredPerms)
|
public async Task<bool> HasAccessToCategory(SocketCategory Category, ServerPermission RequiredPerms = ServerPermission.ViewThis)
|
||||||
{
|
{
|
||||||
if (Category.Server != Server) return false;
|
if (Category.Server != Server) return false;
|
||||||
if (Server.OwnerID == Id) return true;
|
if (Server.OwnerID == Id) return true;
|
||||||
@ -33,18 +33,29 @@ public class SocketAppUser : SocketUser
|
|||||||
|
|
||||||
GoodPerms |= CatUserOveride.GoodPermissions;
|
GoodPerms |= CatUserOveride.GoodPermissions;
|
||||||
}
|
}
|
||||||
RoleOveride[] CatRoleOverides = await Category.GetRoleOverrides();
|
|
||||||
foreach (RoleOveride CatRoleOveride in CatRoleOverides)
|
RoleOverride[] CatRoleOverides = await Category.GetRoleOverrides();
|
||||||
|
int bad_index = -1;
|
||||||
|
int good_index = -1;
|
||||||
|
|
||||||
|
foreach (RoleOverride CatRoleOveride in CatRoleOverides)
|
||||||
{
|
{
|
||||||
if (!RoleIds.Contains(CatRoleOveride.ParentRoleID)) continue;
|
if (!RoleIds.Contains(CatRoleOveride.ParentRoleID)) continue;
|
||||||
if ((CatRoleOveride.BadPermissions & RequiredPerms) > ServerPermission.None) return false;
|
var index = (await CatRoleOveride.GetRole()).Index;
|
||||||
|
if ((CatRoleOveride.BadPermissions & RequiredPerms) > ServerPermission.None)
|
||||||
|
{
|
||||||
|
if (bad_index < index)
|
||||||
|
bad_index = index;
|
||||||
|
}
|
||||||
|
else good_index = index;
|
||||||
|
|
||||||
GoodPerms |= CatRoleOveride.GoodPermissions;
|
GoodPerms |= CatRoleOveride.GoodPermissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bad_index > good_index) return false;
|
||||||
|
|
||||||
foreach (Role RoleID in UserRoleIDList)
|
foreach (Role RoleID in UserRoleIDList)
|
||||||
{
|
{
|
||||||
if (((RoleID.ServerPermissions & RequiredPerms) ^ GoodPerms) > ServerPermission.None) return false;
|
|
||||||
GoodPerms |= RoleID.ServerPermissions;
|
GoodPerms |= RoleID.ServerPermissions;
|
||||||
}
|
}
|
||||||
return GoodPerms.HasPermission(RequiredPerms);
|
return GoodPerms.HasPermission(RequiredPerms);
|
||||||
|
@ -17,7 +17,7 @@ public class SocketCategory
|
|||||||
internal long[] Channels { get; set; }
|
internal long[] Channels { get; set; }
|
||||||
internal long[] Categories { get; set; }
|
internal long[] Categories { get; set; }
|
||||||
SocketCategory? RawParent = null;
|
SocketCategory? RawParent = null;
|
||||||
List<RoleOveride>? RawRoleOverides = null;
|
List<RoleOverride>? RawRoleOverides = null;
|
||||||
List<UserOverride>? RawUserOverides = null;
|
List<UserOverride>? RawUserOverides = null;
|
||||||
List<SocketChannel>? RawChan = null;
|
List<SocketChannel>? RawChan = null;
|
||||||
List<SocketCategory>? RawCat = null;
|
List<SocketCategory>? RawCat = null;
|
||||||
@ -79,7 +79,7 @@ public class SocketCategory
|
|||||||
public string Name { get; internal set; }
|
public string Name { get; internal set; }
|
||||||
public string Description { get; internal set; }
|
public string Description { get; internal set; }
|
||||||
|
|
||||||
public Task<RoleOveride[]> GetRoleOverrides()
|
public Task<RoleOverride[]> GetRoleOverrides()
|
||||||
{
|
{
|
||||||
if (RawRoleOverides is null)
|
if (RawRoleOverides is null)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using JacobTechEncryption;
|
using JacobTechEncryption;
|
||||||
@ -20,7 +21,7 @@ public class SocketChannel
|
|||||||
internal long[] RoleOverrides { get; set; }
|
internal long[] RoleOverrides { get; set; }
|
||||||
internal long[] UserOverrides { get; set; }
|
internal long[] UserOverrides { get; set; }
|
||||||
SocketCategory? RawParent = null;
|
SocketCategory? RawParent = null;
|
||||||
List<RoleOveride>? RawRoleOverides = null;
|
List<RoleOverride>? RawRoleOverides = null;
|
||||||
List<UserOverride>? RawUserOverides = null;
|
List<UserOverride>? RawUserOverides = null;
|
||||||
public PictureType PictureType { get; internal set; }
|
public PictureType PictureType { get; internal set; }
|
||||||
|
|
||||||
@ -336,16 +337,20 @@ public class SocketChannel
|
|||||||
public DateTime Epoch { get; internal set; }
|
public DateTime Epoch { get; internal set; }
|
||||||
public string Name { get; internal set; }
|
public string Name { get; internal set; }
|
||||||
public string Description { get; internal set; }
|
public string Description { get; internal set; }
|
||||||
public Task<RoleOveride[]> GetRoleOverides()
|
public async Task<RoleOverride[]> GetRoleOverrides()
|
||||||
{
|
{
|
||||||
if (RawRoleOverides is null)
|
if (RawRoleOverides is null)
|
||||||
{
|
{
|
||||||
RawRoleOverides = new();
|
RawRoleOverides = new();
|
||||||
|
foreach (long ro in RoleOverrides)
|
||||||
|
{
|
||||||
|
RawRoleOverides.Add(await Server.GetRoleOverride(ro));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.FromResult(RawRoleOverides!.ToArray());
|
return RawRoleOverides!.ToArray();
|
||||||
}
|
}
|
||||||
public Task<UserOverride[]> GetUserOveride()
|
public Task<UserOverride[]> GetUserOverride()
|
||||||
{
|
{
|
||||||
if (RawUserOverides is null)
|
if (RawUserOverides is null)
|
||||||
{
|
{
|
||||||
@ -354,6 +359,65 @@ public class SocketChannel
|
|||||||
|
|
||||||
return Task.FromResult(RawUserOverides!.ToArray());
|
return Task.FromResult(RawUserOverides!.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<SocketUser[]> GetMembers()
|
||||||
|
{
|
||||||
|
ServerPermission req = ServerPermission.ViewThis;
|
||||||
|
List<long> GoodMembers = new();
|
||||||
|
List<long> GoodRoles = new();
|
||||||
|
List<long> BadRoles = new();
|
||||||
|
List<SocketUser> GoodPeople = new();
|
||||||
|
|
||||||
|
foreach (UserOverride cro in await GetUserOverride())
|
||||||
|
{
|
||||||
|
if ((cro.GoodPermissions & req) == req) GoodMembers.Add(cro.UserID);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (RoleOverride ro in (await GetRoleOverrides()))
|
||||||
|
{
|
||||||
|
if ((ro.GoodPermissions & req) == req)
|
||||||
|
{
|
||||||
|
GoodRoles.Add(ro.ParentRoleID);
|
||||||
|
}
|
||||||
|
else if ((ro.BadPermissions & req) == req)
|
||||||
|
{
|
||||||
|
BadRoles.Add(ro.ParentRoleID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool bad = false;
|
||||||
|
|
||||||
|
foreach (Role Role in Server.roles.OrderBy(s => s.Index))
|
||||||
|
{
|
||||||
|
if (BadRoles.Contains(Role.ID))
|
||||||
|
{
|
||||||
|
bad = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bad && GoodRoles.Contains(Role.ID))
|
||||||
|
{
|
||||||
|
bad = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bad)
|
||||||
|
{
|
||||||
|
foreach (var m in await Role.GetMembers())
|
||||||
|
{
|
||||||
|
var t = GoodPeople.Where(s => s.Id == m.Id);
|
||||||
|
if (t.Count() == 0) GoodPeople.Add(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (long m in GoodMembers)
|
||||||
|
{
|
||||||
|
var t = GoodPeople.Where(s => s.Id == m);
|
||||||
|
if (t.Count() == 0) GoodPeople.Add(await Server.GetUser<SocketUser>(m, CancellationToken.None));
|
||||||
|
}
|
||||||
|
|
||||||
|
return GoodPeople.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
public long TitleEncryptionKey { get; internal set; }
|
public long TitleEncryptionKey { get; internal set; }
|
||||||
public long DescriptionEncryptionKey { get; internal set; }
|
public long DescriptionEncryptionKey { get; internal set; }
|
||||||
public long[] EncryptionKeys { get; internal set; }
|
public long[] EncryptionKeys { get; internal set; }
|
||||||
|
Loading…
Reference in New Issue
Block a user