Lib Updates
This commit is contained in:
parent
298fdd2ef7
commit
346ef16530
@ -1,3 +1,4 @@
|
||||
using System.Collections.Immutable;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
@ -166,6 +167,18 @@ public static class LuskiFunctions
|
||||
return Members.ToArray();
|
||||
}
|
||||
|
||||
public static long[] GetCategoryChannels(long Category, long User)
|
||||
{
|
||||
List<long> chans = new();
|
||||
long[] channels = Tables.Channels.ReadColumn(Channels.ID, Channels.Parent.CreateParameter(Category));
|
||||
for (int i = 0; i < channels.Length; i++)
|
||||
{
|
||||
if (HasAccessToChannel(User, channels[i])) chans.Add(channels[i]);
|
||||
}
|
||||
|
||||
return chans.ToArray();
|
||||
}
|
||||
|
||||
public static bool HasPermissions(long User, ServerPermission RequiredPerms)
|
||||
{
|
||||
if (User == Tables.Server.Read(Server.Owner, Server.ID.CreateParameter(0))) return true;
|
||||
@ -190,8 +203,10 @@ public static class LuskiFunctions
|
||||
ServerPermission BadPermissions = ServerPermission.None;
|
||||
ServerPermission GoodPerms = ServerPermission.None;
|
||||
|
||||
long[] CatUserOverides = Tables.Categories.Read(Categories.UserOverrides, Categories.ID.CreateParameter(Category));
|
||||
foreach (long CatUserOveride in CatUserOverides)
|
||||
(long[], long[]) crow = Tables.Categories.CreateCommand().WithFilter(Categories.ID, Category)
|
||||
.Read(Categories.UserOverrides, Categories.RoleOverrides);
|
||||
|
||||
foreach (long CatUserOveride in crow.Item1)
|
||||
{
|
||||
if (!Tables.UserRoleOverrides.TryReadRow(out UserRoleOverrideRow row, UserRoleOverrides.ID.CreateParameter(CatUserOveride), UserRoleOverrides.UserID.CreateParameter(User))) continue;
|
||||
if (!row.BadPermissions.HasPermission(ServerPermission.ViewThis))
|
||||
@ -203,39 +218,48 @@ public static class LuskiFunctions
|
||||
BadPermissions |= row.BadPermissions;
|
||||
GoodPerms |= row.GoodPermissions;
|
||||
}
|
||||
long[] CatRoleOverides = Tables.Categories.Read(Categories.RoleOverrides, Categories.ID.CreateParameter(Category));
|
||||
foreach (long CatRoleOveride in CatRoleOverides)
|
||||
|
||||
int bad_index = -1;
|
||||
int good_index = -1;
|
||||
|
||||
foreach (long CatRoleOveride in crow.Item2)
|
||||
{
|
||||
if (!UserRoleIDList.Contains(CatRoleOveride)) continue;
|
||||
ServerRoleOverrideRow row = Tables.ServerRoleOverrides.ReadRow(ServerRoleOverrides.ID.CreateParameter(CatRoleOveride));
|
||||
if (!UserRoleIDList.Contains(row.RoleID)) continue;
|
||||
int i = Tables.Roles.Read(Roles.Index, Roles.ID.CreateParameter(row.RoleID));
|
||||
if (!row.BadPermissions.HasPermission(ServerPermission.ViewThis) && !GoodPerms.HasPermission(ServerPermission.ViewThis))
|
||||
{
|
||||
missing = ServerPermission.ViewThis;
|
||||
return false;
|
||||
if (bad_index < i)
|
||||
bad_index = i;
|
||||
}
|
||||
else good_index = i;
|
||||
|
||||
BadPermissions |= (GoodPerms ^ row.BadPermissions);
|
||||
BadPermissions |= row.BadPermissions;
|
||||
GoodPerms |= row.GoodPermissions;
|
||||
}
|
||||
|
||||
foreach (long RoleID in UserRoleIDList)
|
||||
{
|
||||
ServerPermission pers = Tables.Roles.Read(Roles.ServerPermissions, Roles.ID.CreateParameter(RoleID));
|
||||
if (!pers.HasPermission(ServerPermission.ViewThis) && !GoodPerms.HasPermission(ServerPermission.ViewThis))
|
||||
if (bad_index > good_index)
|
||||
{
|
||||
missing = ServerPermission.ViewThis;
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach (long RoleID in UserRoleIDList)
|
||||
{
|
||||
ServerPermission pers = Tables.Roles.Read(Roles.ServerPermissions, Roles.ID.CreateParameter(RoleID));
|
||||
GoodPerms |= pers;
|
||||
}
|
||||
|
||||
ServerPermission combine = GoodPerms ^ BadPermissions;
|
||||
missing = (combine ^ OptionalPerms) & OptionalPerms;
|
||||
if (!combine.HasPermission(ServerPermission.ViewThis))
|
||||
{
|
||||
missing |= ServerPermission.ViewThis;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool HasAccessToCategory(long User, long Category, ServerPermission RequiredPerms)
|
||||
public static bool HasAccessToCategory(long User, long Category, ServerPermission RequiredPerms = ServerPermission.ViewThis)
|
||||
{
|
||||
if (User == Tables.Server.Read(Server.Owner, Server.ID.CreateParameter(0))) return true;
|
||||
long[] UserRoleIDList = Tables.Users.Read(Users.Roles, Users.ID.CreateParameter(User));
|
||||
@ -244,62 +268,83 @@ public static class LuskiFunctions
|
||||
|
||||
ServerPermission GoodPerms = ServerPermission.None;
|
||||
|
||||
long[] CatUserOverides = Tables.Categories.Read(Categories.UserOverrides, Categories.ID.CreateParameter(Category));
|
||||
foreach (long CatUserOveride in CatUserOverides)
|
||||
(long[], long[]) crow = Tables.Categories.CreateCommand().WithFilter(Categories.ID, Category)
|
||||
.Read(Categories.UserOverrides, Categories.RoleOverrides);
|
||||
|
||||
foreach (long CatUserOveride in crow.Item1)
|
||||
{
|
||||
if (!Tables.UserRoleOverrides.TryReadRow(out UserRoleOverrideRow row, UserRoleOverrides.ID.CreateParameter(CatUserOveride), UserRoleOverrides.UserID.CreateParameter(User))) continue;
|
||||
if ((row.BadPermissions & RequiredPerms) > ServerPermission.None) return false;
|
||||
|
||||
GoodPerms |= row.GoodPermissions;
|
||||
}
|
||||
long[] CatRoleOverides = Tables.Categories.Read(Categories.RoleOverrides, Categories.ID.CreateParameter(Category));
|
||||
foreach (long CatRoleOveride in CatRoleOverides)
|
||||
|
||||
int bad_index = -1;
|
||||
int good_index = -1;
|
||||
|
||||
foreach (long CatRoleOveride in crow.Item2)
|
||||
{
|
||||
if (!UserRoleIDList.Contains(CatRoleOveride)) continue;
|
||||
ServerRoleOverrideRow row = Tables.ServerRoleOverrides.ReadRow(ServerRoleOverrides.ID.CreateParameter(CatRoleOveride));
|
||||
if (((row.BadPermissions & RequiredPerms) ^ GoodPerms) > ServerPermission.None) return false;
|
||||
if (!UserRoleIDList.Contains(row.RoleID)) continue;
|
||||
int i = Tables.Roles.Read(Roles.Index, Roles.ID.CreateParameter(row.RoleID));
|
||||
if (((row.BadPermissions & RequiredPerms) ^ GoodPerms) > ServerPermission.None)
|
||||
{
|
||||
if (bad_index < i)
|
||||
bad_index = i;
|
||||
}
|
||||
else good_index = i;
|
||||
|
||||
GoodPerms |= row.GoodPermissions;
|
||||
}
|
||||
|
||||
if (bad_index > good_index) return false;
|
||||
foreach (long RoleID in UserRoleIDList)
|
||||
{
|
||||
ServerPermission pers = Tables.Roles.Read(Roles.ServerPermissions, Roles.ID.CreateParameter(RoleID));
|
||||
if (((pers & RequiredPerms) ^ GoodPerms) > ServerPermission.None) return false;
|
||||
GoodPerms |= pers;
|
||||
}
|
||||
|
||||
return GoodPerms.HasPermission(RequiredPerms);
|
||||
}
|
||||
|
||||
public static bool HasAccessToChannel(long User, long Channel, ServerPermission RequiredPerms)
|
||||
public static bool HasAccessToChannel(long User, long Channel, ServerPermission RequiredPerms = ServerPermission.ViewThis)
|
||||
{
|
||||
if (User == Tables.Server.Read(Server.Owner, Server.ID.CreateParameter(0))) return true;
|
||||
long[] UserRoleIDList = Tables.Users.Read(Users.Roles, Users.ID.CreateParameter(User));
|
||||
RequiredPerms |= ServerPermission.ViewThis;
|
||||
ServerPermission GoodPerms = ServerPermission.None;
|
||||
|
||||
long[] ChanUserOverides = Tables.Channels.Read(Channels.UserOverrides, Channels.ID.CreateParameter(Channel));
|
||||
long[] ChanRoleOverides = Tables.Channels.Read(Channels.RoleOverrides, Channels.ID.CreateParameter(Channel));
|
||||
(long[], long[]) crow = Tables.Channels.CreateCommand().WithFilter(Channels.ID, Channel)
|
||||
.Read(Channels.UserOverrides, Channels.RoleOverrides);
|
||||
|
||||
foreach (long CatUserOveride in ChanUserOverides)
|
||||
foreach (long CatUserOveride in crow.Item1)
|
||||
{
|
||||
if (!Tables.UserRoleOverrides.TryReadRow(out UserRoleOverrideRow row, UserRoleOverrides.ID.CreateParameter(CatUserOveride), UserRoleOverrides.UserID.CreateParameter(User))) continue;
|
||||
if ((row.BadPermissions & RequiredPerms) > ServerPermission.None) return false;
|
||||
|
||||
GoodPerms |= row.GoodPermissions;
|
||||
}
|
||||
foreach (long CatRoleOveride in ChanRoleOverides)
|
||||
|
||||
int bad_index = -1;
|
||||
int good_index = -1;
|
||||
|
||||
foreach (long CatRoleOveride in crow.Item2)
|
||||
{
|
||||
if (!UserRoleIDList.Contains(CatRoleOveride)) continue;
|
||||
ServerRoleOverrideRow row = Tables.ServerRoleOverrides.ReadRow(ServerRoleOverrides.ID.CreateParameter(CatRoleOveride));
|
||||
if (((row.BadPermissions & RequiredPerms) ^ GoodPerms) > ServerPermission.None) return false;
|
||||
if (!UserRoleIDList.Contains(row.RoleID)) continue;
|
||||
int i = Tables.Roles.Read(Roles.Index, Roles.ID.CreateParameter(row.RoleID));
|
||||
if (((row.BadPermissions & RequiredPerms) ^ GoodPerms) > ServerPermission.None)
|
||||
{
|
||||
if (bad_index < i)
|
||||
bad_index = i;
|
||||
}
|
||||
else good_index = i;
|
||||
|
||||
GoodPerms |= row.GoodPermissions;
|
||||
}
|
||||
if (bad_index > good_index) return false;
|
||||
foreach (long RoleID in UserRoleIDList)
|
||||
{
|
||||
ServerPermission pers = Tables.Roles.Read(Roles.ServerPermissions, Roles.ID.CreateParameter(RoleID));
|
||||
if (((pers & RequiredPerms) ^ GoodPerms) > ServerPermission.None) return false;
|
||||
GoodPerms |= pers;
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,11 @@ public static class WSS
|
||||
string Token = $"{Convert.ToBase64String(Encoding.UTF8.GetBytes(row.User.ToString()))}.{Convert.ToBase64String(Encoding.UTF8.GetBytes(row.ID.ToString()))}.{Convert.ToBase64String(Encoding.UTF8.GetBytes(DateTime.UtcNow.ToString()))}.{Convert.ToBase64String(Encoding.UTF8.GetBytes(new Random().Next(0, 1000000).ToString()))}.{Convert.ToBase64String(Encoding.UTF8.GetBytes(new Random().Next(0, 1000000).ToString()))}";
|
||||
te.Token = Token;
|
||||
te.Type = DataType.Token;
|
||||
Tables.Sessions.Update(TableDef.Sessions.ID, row.ID, TableDef.Sessions.LoginToken.CreateParameter(string.Empty), TableDef.Sessions.Token.CreateParameter(Token), TableDef.Sessions.WSSTCP.CreateParameter(ID));
|
||||
Tables.Sessions.CreateCommand()
|
||||
.WithFilter(TableDef.Sessions.ID, row.ID)
|
||||
.WithValue(TableDef.Sessions.LoginToken, string.Empty)
|
||||
.WithValue(TableDef.Sessions.Token, Token)
|
||||
.WithValue(TableDef.Sessions.WSSTCP, ID).Update();
|
||||
Token = $"{Convert.ToBase64String(Encoding.UTF8.GetBytes(row.User.ToString()))}.{Convert.ToBase64String(Encoding.UTF8.GetBytes(DateTime.UtcNow.ToString()))}.{Convert.ToBase64String(Encoding.UTF8.GetBytes(new Random().Next(0, 1000000).ToString()))}.{Convert.ToBase64String(Encoding.UTF8.GetBytes(new Random().Next(0, 1000000).ToString()))}";
|
||||
te.SessionToken = Token;
|
||||
Tables.SessionTokens.Insert(
|
||||
|
@ -5,9 +5,9 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class AltServers
|
||||
{
|
||||
public static TableColumn<string> Address { get; } = new("address", true);
|
||||
public static TableColumn<bool> Secure { get; }= new("secure");
|
||||
public static TableColumn<byte[]> Key { get; } = new("key");
|
||||
public static TableColumn<AltServerRow, string> Address { get; } = new("address", true);
|
||||
public static TableColumn<AltServerRow, bool> Secure { get; }= new("secure");
|
||||
public static TableColumn<AltServerRow, byte[]> Key { get; } = new("key");
|
||||
}
|
||||
|
||||
[TableRow(typeof(AltServers))]
|
||||
|
@ -7,19 +7,17 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Categories
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<byte[]> Name { get; } = new("name") { DefaultValue = Encoding.UTF8.GetBytes("New Category") };
|
||||
public static TableColumn<byte[]> Color { get; } = new("color") { DefaultValue = new byte[]{255,255,255,255} };
|
||||
public static TableColumn<byte[]> Description { get; } = new("description") { DefaultValue = Encoding.UTF8.GetBytes("Description") };
|
||||
public static TableColumn<long> Parent { get; } = new("parent") { DefaultValue = -1 };
|
||||
public static TableColumn<long[]> InnerCategories { get; } = new("inner_categories") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<long[]> Channels { get; } = new("channels") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<long[]> RoleOverrides { get; } = new("role_overrides") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<long[]> UserOverrides { get; } = new("member_overrides") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<long> TitleEncryptionKey { get; } = new("title_encryption_key") { DefaultValue = 0 };
|
||||
public static TableColumn<long> DescriptionEncryptionKey { get; } = new("description_encryption_key") { DefaultValue = 0 };
|
||||
public static TableColumn<EncoderType> TitleEncoderType { get; } = new("title_encoder_type") { DefaultValue = EncoderType.UTF8 };
|
||||
public static TableColumn<EncoderType> DescriptionEncoderType { get; } = new("description_encoder_type") { DefaultValue = EncoderType.UTF8 };
|
||||
public static TableColumn<CategoryRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<CategoryRow, byte[]> Name { get; } = new("name") { DefaultValue = Encoding.UTF8.GetBytes("New Category") };
|
||||
public static TableColumn<CategoryRow, byte[]> Color { get; } = new("color") { DefaultValue = new byte[]{255,255,255,255} };
|
||||
public static TableColumn<CategoryRow, byte[]> Description { get; } = new("description") { DefaultValue = Encoding.UTF8.GetBytes("Description") };
|
||||
public static TableColumn<CategoryRow, long> Parent { get; } = new("parent") { DefaultValue = -1 };
|
||||
public static TableColumn<CategoryRow, long[]> RoleOverrides { get; } = new("role_overrides") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<CategoryRow, long[]> UserOverrides { get; } = new("member_overrides") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<CategoryRow, long> TitleEncryptionKey { get; } = new("title_encryption_key") { DefaultValue = 0 };
|
||||
public static TableColumn<CategoryRow, long> DescriptionEncryptionKey { get; } = new("description_encryption_key") { DefaultValue = 0 };
|
||||
public static TableColumn<CategoryRow, EncoderType> TitleEncoderType { get; } = new("title_encoder_type") { DefaultValue = EncoderType.UTF8 };
|
||||
public static TableColumn<CategoryRow, EncoderType> DescriptionEncoderType { get; } = new("description_encoder_type") { DefaultValue = EncoderType.UTF8 };
|
||||
}
|
||||
[TableRow(typeof(Categories))]
|
||||
public partial class CategoryRow
|
||||
|
@ -7,12 +7,12 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public class ChannelProfiles
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<string> DisplayName { get; } = new("displayname");
|
||||
public static TableColumn<long[]> Controllers { get; } = new("controllers") {DefaultValue = Array.Empty<long>()};
|
||||
public static TableColumn<PictureType> PictureType { get; } = new("picture_type") {DefaultValue = bob.png };
|
||||
public static TableColumn<byte[]> Picture { get; } = new("picture");
|
||||
public static TableColumn<byte[]> Color { get; } = new("color") { DefaultValue = new byte[]{255,255,255,255}};
|
||||
public static TableColumn<ChannelProfileRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<ChannelProfileRow, string> DisplayName { get; } = new("displayname");
|
||||
public static TableColumn<ChannelProfileRow, long[]> Controllers { get; } = new("controllers") {DefaultValue = Array.Empty<long>()};
|
||||
public static TableColumn<ChannelProfileRow, PictureType> PictureType { get; } = new("picture_type") {DefaultValue = bob.png };
|
||||
public static TableColumn<ChannelProfileRow, byte[]> Picture { get; } = new("picture");
|
||||
public static TableColumn<ChannelProfileRow, byte[]> Color { get; } = new("color") { DefaultValue = new byte[]{255,255,255,255}};
|
||||
}
|
||||
|
||||
[TableRow(typeof(ChannelProfiles))]
|
||||
|
@ -10,30 +10,30 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Channels
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> Parent { get; } = new("parent") { DefaultValue = -1 };
|
||||
public static TableColumn<byte[]> Color { get; } = new("color") {DefaultValue = new byte[]{255,255,255,255} };
|
||||
public static TableColumn<ChannelType> Type { get; } = new("type");
|
||||
public static TableColumn<DateTime> Epoch { get; } = new("epoch");
|
||||
public static TableColumn<byte[]> Name { get; } = new("name") { DefaultValue = Encoding.UTF8.GetBytes("New Channel") };
|
||||
public static TableColumn<byte[]> Description { get; } = new("description") { DefaultValue = Encoding.UTF8.GetBytes("New Channel") };
|
||||
public static TableColumn<long[]> RoleOverrides { get; } = new("role_overrides") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<long[]> UserOverrides { get; } = new("member_overrides") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<long> TitleEncryptionKey { get; } = new("title_encryption_key") { DefaultValue = 0 };
|
||||
public static TableColumn<long> DescriptionEncryptionKey { get; } = new("description_encryption_key") { DefaultValue = 0 };
|
||||
public static TableColumn<long[]> EncryptionKeys { get; } = new("encryption_keys") { DefaultValue = new long[]{0} };
|
||||
public static TableColumn<EncoderType> TitleEncoderType { get; } = new("title_encoder_type") { DefaultValue = EncoderType.UTF8 };
|
||||
public static TableColumn<EncoderType> DescriptionEncoderType { get; } = new("description_encoder_type") { DefaultValue = EncoderType.UTF8 };
|
||||
public static TableColumn<PictureType> PictureType { get; } = new("picture_type") {DefaultValue = bob.png };
|
||||
public static TableColumn<byte[]> Picture { get; } = new("picture");
|
||||
public static TableColumn<EncoderType[]> EncoderTypes { get; } = new("encoder_types") { DefaultValue = new []
|
||||
public static TableColumn<ChannelRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<ChannelRow, long> Parent { get; } = new("parent") { DefaultValue = -1 };
|
||||
public static TableColumn<ChannelRow, byte[]> Color { get; } = new("color") {DefaultValue = new byte[]{255,255,255,255} };
|
||||
public static TableColumn<ChannelRow, ChannelType> Type { get; } = new("type");
|
||||
public static TableColumn<ChannelRow, DateTime> Epoch { get; } = new("epoch");
|
||||
public static TableColumn<ChannelRow, byte[]> Name { get; } = new("name") { DefaultValue = Encoding.UTF8.GetBytes("New Channel") };
|
||||
public static TableColumn<ChannelRow, byte[]> Description { get; } = new("description") { DefaultValue = Encoding.UTF8.GetBytes("New Channel") };
|
||||
public static TableColumn<ChannelRow, long[]> RoleOverrides { get; } = new("role_overrides") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<ChannelRow, long[]> UserOverrides { get; } = new("member_overrides") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<ChannelRow, long> TitleEncryptionKey { get; } = new("title_encryption_key") { DefaultValue = 0 };
|
||||
public static TableColumn<ChannelRow, long> DescriptionEncryptionKey { get; } = new("description_encryption_key") { DefaultValue = 0 };
|
||||
public static TableColumn<ChannelRow, long[]> EncryptionKeys { get; } = new("encryption_keys") { DefaultValue = new long[]{0} };
|
||||
public static TableColumn<ChannelRow, EncoderType> TitleEncoderType { get; } = new("title_encoder_type") { DefaultValue = EncoderType.UTF8 };
|
||||
public static TableColumn<ChannelRow, EncoderType> DescriptionEncoderType { get; } = new("description_encoder_type") { DefaultValue = EncoderType.UTF8 };
|
||||
public static TableColumn<ChannelRow, PictureType> PictureType { get; } = new("picture_type") {DefaultValue = bob.png };
|
||||
public static TableColumn<ChannelRow, byte[]> Picture { get; } = new("picture");
|
||||
public static TableColumn<ChannelRow, EncoderType[]> EncoderTypes { get; } = new("encoder_types") { DefaultValue = new []
|
||||
{
|
||||
EncoderType.UTF8, EncoderType.UTF16,
|
||||
EncoderType.UTF32, EncoderType.ASCII,
|
||||
EncoderType.Latin1, EncoderType.BigEndianUnicode
|
||||
} };
|
||||
|
||||
public static TableColumn<long[]> Profiles { get; } = new("profiles") { DefaultValue = Array.Empty<long>() };
|
||||
public static TableColumn<ChannelRow, long[]> Profiles { get; } = new("profiles") { DefaultValue = Array.Empty<long>() };
|
||||
}
|
||||
|
||||
[TableRow(typeof(Channels))]
|
||||
|
@ -6,18 +6,18 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Files
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> Owner { get; } = new("owner");
|
||||
public static TableColumn<bool> Public { get; } = new("public_download");
|
||||
public static TableColumn<long[]> AllowedChannels { get; } = new("channels");
|
||||
public static TableColumn<long> Size { get; } = new("size");
|
||||
public static TableColumn<byte[]> Name { get; } = new("name");
|
||||
public static TableColumn<byte[]> Hash { get; } = new("hash");
|
||||
public static TableColumn<byte[]> Data { get; } = new("data");
|
||||
public static TableColumn<long> EncryptionKey { get; } = new("encryption_key");
|
||||
public static TableColumn<EncoderType> EncoderType { get; } = new("encoder_type");
|
||||
public static TableColumn<long> NameEncryptionKey { get; } = new("name_encryption_key");
|
||||
public static TableColumn<EncoderType> NameEncoderType { get; } = new("name_encoder_type");
|
||||
public static TableColumn<FileRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<FileRow, long> Owner { get; } = new("owner");
|
||||
public static TableColumn<FileRow, bool> Public { get; } = new("public_download");
|
||||
public static TableColumn<FileRow, long[]> AllowedChannels { get; } = new("channels");
|
||||
public static TableColumn<FileRow, long> Size { get; } = new("size");
|
||||
public static TableColumn<FileRow, byte[]> Name { get; } = new("name");
|
||||
public static TableColumn<FileRow, byte[]> Hash { get; } = new("hash");
|
||||
public static TableColumn<FileRow, byte[]> Data { get; } = new("data");
|
||||
public static TableColumn<FileRow, long> EncryptionKey { get; } = new("encryption_key");
|
||||
public static TableColumn<FileRow, EncoderType> EncoderType { get; } = new("encoder_type");
|
||||
public static TableColumn<FileRow, long> NameEncryptionKey { get; } = new("name_encryption_key");
|
||||
public static TableColumn<FileRow, EncoderType> NameEncoderType { get; } = new("name_encoder_type");
|
||||
}
|
||||
|
||||
[TableRow(typeof(Files))]
|
||||
|
@ -6,10 +6,10 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Keys
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> Owner { get; } = new("owner");
|
||||
public static TableColumn<EncryptionType> EncryptionType { get; } = new("encryption_type");
|
||||
public static TableColumn<byte[]> KeyData { get; } = new("key_data");
|
||||
public static TableColumn<KeyRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<KeyRow, long> Owner { get; } = new("owner");
|
||||
public static TableColumn<KeyRow, EncryptionType> EncryptionType { get; } = new("encryption_type");
|
||||
public static TableColumn<KeyRow, byte[]> KeyData { get; } = new("key_data");
|
||||
}
|
||||
|
||||
[TableRow(typeof(Keys))]
|
||||
|
@ -6,9 +6,9 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Logs
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<LogType> Type { get; } = new("type");
|
||||
public static TableColumn<string> Message { get; } = new("message");
|
||||
public static TableColumn<LogRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<LogRow, LogType> Type { get; } = new("type");
|
||||
public static TableColumn<LogRow, string> Message { get; } = new("message");
|
||||
}
|
||||
|
||||
[TableRow(typeof(Logs))]
|
||||
|
@ -6,15 +6,15 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Messages
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> ChannelID { get; } = new("channel_id", true);
|
||||
public static TableColumn<long> AuthorID { get; } = new("author_id");
|
||||
public static TableColumn<byte[]> Context { get; } = new("context");
|
||||
public static TableColumn<long> EncryptionKey { get; } = new("encryption_key");
|
||||
public static TableColumn<EncoderType> EncoderType { get; } = new("encoder_type");
|
||||
public static TableColumn<long[]> Files { get; } = new("files");
|
||||
public static TableColumn<bool> IsChannelProfile { get; } = new("is_channel_profile") { DefaultValue = false };
|
||||
public static TableColumn<long> ReplyTo { get; } = new("reply_to");
|
||||
public static TableColumn<MessageRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<MessageRow, long> ChannelID { get; } = new("channel_id", true);
|
||||
public static TableColumn<MessageRow, long> AuthorID { get; } = new("author_id");
|
||||
public static TableColumn<MessageRow, byte[]> Context { get; } = new("context");
|
||||
public static TableColumn<MessageRow, long> EncryptionKey { get; } = new("encryption_key");
|
||||
public static TableColumn<MessageRow, EncoderType> EncoderType { get; } = new("encoder_type");
|
||||
public static TableColumn<MessageRow, long[]> Files { get; } = new("files");
|
||||
public static TableColumn<MessageRow, bool> IsChannelProfile { get; } = new("is_channel_profile") { DefaultValue = false };
|
||||
public static TableColumn<MessageRow, long> ReplyTo { get; } = new("reply_to");
|
||||
}
|
||||
|
||||
[TableRow(typeof(Messages))]
|
||||
|
@ -7,14 +7,14 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Roles
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<string> Name { get; } = new("name");
|
||||
public static TableColumn<string> DisplayName { get; } = new("display_name") {DefaultValue = string.Empty};
|
||||
public static TableColumn<int> Index { get; } = new("index") {DefaultValue = 0 };
|
||||
public static TableColumn<byte[]> Color { get; } = new("color") {DefaultValue = new byte[]{255,255,255,255}};
|
||||
public static TableColumn<string> Description { get; } = new("description");
|
||||
public static TableColumn<ServerPermission> ServerPermissions { get; } = new("server_perms");
|
||||
public static TableColumn<long[]> MembersList { get; } = new("members_list") {DefaultValue = Array.Empty<long>()};
|
||||
public static TableColumn<RoleRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<RoleRow, string> Name { get; } = new("name");
|
||||
public static TableColumn<RoleRow, string> DisplayName { get; } = new("display_name") {DefaultValue = string.Empty};
|
||||
public static TableColumn<RoleRow, int> Index { get; } = new("index") {DefaultValue = 0 };
|
||||
public static TableColumn<RoleRow, byte[]> Color { get; } = new("color") {DefaultValue = new byte[]{255,255,255,255}};
|
||||
public static TableColumn<RoleRow, string> Description { get; } = new("description");
|
||||
public static TableColumn<RoleRow, ServerPermission> ServerPermissions { get; } = new("server_perms");
|
||||
public static TableColumn<RoleRow, long[]> MembersList { get; } = new("members_list") {DefaultValue = Array.Empty<long>()};
|
||||
}
|
||||
|
||||
[TableRow(typeof(Roles))]
|
||||
|
@ -9,12 +9,12 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Server
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true) { DefaultValue = 0 };
|
||||
public static TableColumn<PictureType> PictureType { get; } = new("picture_type") {DefaultValue = bob.png };
|
||||
public static TableColumn<byte[]> Picture { get; } = new("picture") { DefaultValue = Array.Empty<byte>() };
|
||||
public static TableColumn<string> Name { get; } = new("name") { DefaultValue = "Luski Server" };
|
||||
public static TableColumn<string> Description { get; } = new("description") { DefaultValue = "description" };
|
||||
public static TableColumn<long> Owner { get; } = new("owner") { DefaultValue = -1 };
|
||||
public static TableColumn<ServerRow, long> ID { get; } = new("id", true) { DefaultValue = 0 };
|
||||
public static TableColumn<ServerRow, PictureType> PictureType { get; } = new("picture_type") {DefaultValue = bob.png };
|
||||
public static TableColumn<ServerRow, byte[]> Picture { get; } = new("picture") { DefaultValue = Array.Empty<byte>() };
|
||||
public static TableColumn<ServerRow, string> Name { get; } = new("name") { DefaultValue = "Luski Server" };
|
||||
public static TableColumn<ServerRow, string> Description { get; } = new("description") { DefaultValue = "description" };
|
||||
public static TableColumn<ServerRow, long> Owner { get; } = new("owner") { DefaultValue = -1 };
|
||||
}
|
||||
|
||||
[TableRow(typeof(Server))]
|
||||
|
@ -6,10 +6,10 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class ServerRoleOverrides
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> RoleID { get; } = new("role_id");
|
||||
public static TableColumn<ServerPermission> BadPermissions { get; } = new("bad_permissions");
|
||||
public static TableColumn<ServerPermission> GoodPermissions { get; } = new("good_permissions");
|
||||
public static TableColumn<ServerRoleOverrideRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<ServerRoleOverrideRow, long> RoleID { get; } = new("role_id");
|
||||
public static TableColumn<ServerRoleOverrideRow, ServerPermission> BadPermissions { get; } = new("bad_permissions");
|
||||
public static TableColumn<ServerRoleOverrideRow, ServerPermission> GoodPermissions { get; } = new("good_permissions");
|
||||
}
|
||||
|
||||
[TableRow(typeof(ServerRoleOverrides))]
|
||||
|
@ -5,11 +5,11 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class SessionTokens
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> AccountID { get; } = new("account_id");
|
||||
public static TableColumn<string> Token { get; } = new("token");
|
||||
public static TableColumn<byte[]> AddressFilter { get; } = new("address_filter");
|
||||
public static TableColumn<DateTime> TimeFilter { get; } = new("date_filter");
|
||||
public static TableColumn<SessionTokenRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<SessionTokenRow, long> AccountID { get; } = new("account_id");
|
||||
public static TableColumn<SessionTokenRow, string> Token { get; } = new("token");
|
||||
public static TableColumn<SessionTokenRow, byte[]> AddressFilter { get; } = new("address_filter");
|
||||
public static TableColumn<SessionTokenRow, DateTime> TimeFilter { get; } = new("date_filter");
|
||||
}
|
||||
|
||||
[TableRow(typeof(SessionTokens))]
|
||||
|
@ -7,16 +7,13 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Sessions
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> User { get; } = new("userid")
|
||||
{ForeignKeys = new IForeignKey[]{ new ForeignKey(){Table = Tables.Users, Column = Users.ID}}};
|
||||
public static TableColumn<string> WSSTCP { get; } = new("wsstcp");
|
||||
public static TableColumn<string> Token { get; } = new("token");
|
||||
public static TableColumn<string> LoginToken { get; } = new("login_token");
|
||||
public static TableColumn<long> SessionKey { get; } = new("session_key")
|
||||
{ForeignKeys = new IForeignKey[]{ new ForeignKey(){Table = Tables.Keys, Column = Keys.ID, OnDelete = ConstraintAction.Cascade}}};
|
||||
|
||||
public static TableColumn<long> StorageID { get; } = new("storage_id");
|
||||
public static TableColumn<SessionsRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<SessionsRow, long> User { get; } = new("userid");
|
||||
public static TableColumn<SessionsRow, string> WSSTCP { get; } = new("wsstcp");
|
||||
public static TableColumn<SessionsRow, string> Token { get; } = new("token");
|
||||
public static TableColumn<SessionsRow, string> LoginToken { get; } = new("login_token");
|
||||
public static TableColumn<SessionsRow, long> SessionKey { get; } = new("session_key");
|
||||
public static TableColumn<SessionsRow, long> StorageID { get; } = new("storage_id");
|
||||
}
|
||||
|
||||
[TableRow(typeof(Sessions))]
|
||||
|
@ -5,11 +5,11 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class Storage
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> AccountID { get; } = new("account_id");
|
||||
public static TableColumn<byte[][]> Data { get; } = new("data");
|
||||
public static TableColumn<byte[]> Password { get; } = new("password");
|
||||
public static TableColumn<long> OffileKey { get; } = new("offline_key");
|
||||
public static TableColumn<StorageRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<StorageRow, long> AccountID { get; } = new("account_id");
|
||||
public static TableColumn<StorageRow, byte[][]> Data { get; } = new("data");
|
||||
public static TableColumn<StorageRow, byte[]> Password { get; } = new("password");
|
||||
public static TableColumn<StorageRow, long> OffileKey { get; } = new("offline_key");
|
||||
}
|
||||
|
||||
[TableRow(typeof(Storage))]
|
||||
|
@ -7,10 +7,10 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public static class UserRoleOverrides
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<long> UserID { get; } = new("user_id");
|
||||
public static TableColumn<ServerPermission> BadPermissions { get; } = new("bad_permissions");
|
||||
public static TableColumn<ServerPermission> GoodPermissions { get; } = new("good_permissions");
|
||||
public static TableColumn<UserRoleOverrideRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<UserRoleOverrideRow, long> UserID { get; } = new("user_id");
|
||||
public static TableColumn<UserRoleOverrideRow, ServerPermission> BadPermissions { get; } = new("bad_permissions");
|
||||
public static TableColumn<UserRoleOverrideRow, ServerPermission> GoodPermissions { get; } = new("good_permissions");
|
||||
}
|
||||
|
||||
[TableRow(typeof(UserRoleOverrides))]
|
||||
|
@ -2,6 +2,7 @@ using Luski.Shared.PublicServers.V1.Enums;
|
||||
using LuskiServer.Enums;
|
||||
using ServerDatabase;
|
||||
using ServerDatabase.SourceGenerator;
|
||||
using ServerDatabase.Utils;
|
||||
using bob = Luski.Shared.PublicServers.V1.Enums.PictureType;
|
||||
|
||||
|
||||
@ -9,16 +10,16 @@ namespace LuskiServer.Classes.TableDef;
|
||||
|
||||
public class Users
|
||||
{
|
||||
public static TableColumn<long> ID { get; } = new("id", true);
|
||||
public static TableColumn<string> DisplayName { get; } = new("displayname");
|
||||
public static TableColumn<long> SelectedChannel { get; } = new("selected_channel");
|
||||
public static TableColumn<UserStatus> Status { get; } = new("status") { DefaultValue = UserStatus.Offline };
|
||||
public static TableColumn<PictureType> PictureType { get; } = new("picture_type") {DefaultValue = bob.png };
|
||||
public static TableColumn<byte[]> Picture { get; } = new("picture");
|
||||
public static TableColumn<long[]> Roles { get; } = new("roles");
|
||||
public static TableColumn<byte[]> Username { get; } = new("username");
|
||||
public static TableColumn<byte[]> Password { get; } = new("password");
|
||||
public static TableColumn<byte[]> Salt { get; } = new("salt");
|
||||
public static TableColumn<UserRow, long> ID { get; } = new("id", true);
|
||||
public static TableColumn<UserRow, string> DisplayName { get; } = new("displayname");
|
||||
public static TableColumn<UserRow, long> SelectedChannel { get; } = new("selected_channel");
|
||||
public static TableColumn<UserRow, UserStatus> Status { get; } = new("status") { DefaultValue = UserStatus.Offline };
|
||||
public static TableColumn<UserRow, PictureType> PictureType { get; } = new("picture_type") {DefaultValue = bob.png };
|
||||
public static TableColumn<UserRow, byte[]> Picture { get; } = new("picture");
|
||||
public static TableColumn<UserRow, long[]> Roles { get; } = new("roles");
|
||||
public static TableColumn<UserRow, byte[]> Username { get; } = new("username");
|
||||
public static TableColumn<UserRow, byte[]> Password { get; } = new("password");
|
||||
public static TableColumn<UserRow, byte[]> Salt { get; } = new("salt");
|
||||
}
|
||||
|
||||
[TableRow(typeof(Users))]
|
||||
|
@ -220,8 +220,7 @@ public class KeysController : ControllerBase
|
||||
Keys.Owner.CreateParameter(ID),
|
||||
Keys.EncryptionType.CreateParameter(keyreq.EncryptionType),
|
||||
Keys.KeyData.CreateParameter(Convert.FromBase64String(keyreq.Data)));
|
||||
Tables.Storage.Update(Storage.ID, StorageID,
|
||||
Storage.OffileKey.CreateParameter(sf.ID));
|
||||
Tables.Storage.CreateCommand().WithFilter(Storage.ID, StorageID).WithValue(Storage.OffileKey, sf.ID);
|
||||
return StatusCode(202);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@ -29,7 +29,7 @@ public class OfflineDataController : ControllerBase
|
||||
{
|
||||
bbb.Add(Convert.ToBase64String(blob));
|
||||
}
|
||||
Tables.Storage.Update(Storage.ID, SID, Storage.Data.CreateParameter(Array.Empty<byte[]>()));
|
||||
Tables.Storage.CreateCommand().WithFilter(Storage.ID, SID).WithValue(Storage.Data, Array.Empty<byte[]>()).Update();
|
||||
return this.ResponseToResult(new OfflineDataBlobSTC()
|
||||
{
|
||||
Data = bbb.ToArray()
|
||||
@ -68,7 +68,7 @@ public class OfflineDataController : ControllerBase
|
||||
{
|
||||
update = true;
|
||||
}
|
||||
Tables.Sessions.Update(Sessions.ID, SSID, Sessions.StorageID.CreateParameter(SID));
|
||||
Tables.Sessions.CreateCommand().WithFilter(Sessions.ID, SID).WithValue(Sessions.StorageID, SID).Update();
|
||||
}
|
||||
return this.ResponseToResult(new StorageInfoSTC()
|
||||
{
|
||||
@ -102,7 +102,7 @@ public class OfflineDataController : ControllerBase
|
||||
if (!Tables.Storage.TryReadRow(out StorageRow row, Storage.ID.CreateParameter(SID)))
|
||||
return this.ResponseCodeToResult(ErrorCode.InvalidHeader);
|
||||
if (row.AccountID != UID) return this.ResponseCodeToResult(ErrorCode.Forbidden);
|
||||
Tables.Storage.Update(Storage.ID, SID, Storage.Password.CreateParameter(Convert.FromBase64String(si.Password)));
|
||||
Tables.Storage.CreateCommand().WithFilter(Storage.ID, SID).WithValue(Storage.Password, Convert.FromBase64String(si.Password)).Update();
|
||||
|
||||
return this.ResponseToResult(new StorageInfoSTC()
|
||||
{
|
||||
@ -132,7 +132,7 @@ public class OfflineDataController : ControllerBase
|
||||
Storage.AccountID.CreateParameter(UID),
|
||||
Storage.Data.CreateParameter(Array.Empty<byte[]>()),
|
||||
Storage.OffileKey.CreateParameter(0));
|
||||
Tables.Sessions.Update(Sessions.StorageID, sf.ID, Sessions.ID.CreateParameter(SSID));
|
||||
Tables.Sessions.CreateCommand().WithFilter(Sessions.ID, sf.ID).WithValue(Sessions.ID, SSID).Update();
|
||||
|
||||
return this.ResponseToResult(new StorageInfoSTC()
|
||||
{
|
||||
|
@ -75,7 +75,7 @@ public class SocketAccountController : Controller
|
||||
|
||||
LuskiFunctions.Snowflake id = LuskiFunctions.Snowflake.GenerateSnowflake(LuskiFunctions.Config.ServerEpoch);
|
||||
long kid = id.ID;
|
||||
Tables.Users.Update(Users.ID, ID, Users.Status.CreateParameter(UserStatus.Invisible));
|
||||
Tables.Users.CreateCommand().WithFilter(Users.ID, ID).WithValue(Users.Status, UserStatus.Invisible).Update();
|
||||
Tables.Keys.Insert(
|
||||
Keys.ID.CreateParameter(kid),
|
||||
Keys.EncryptionType.CreateParameter(EncryptionType.RSA),
|
||||
@ -142,7 +142,7 @@ public class SocketAccountController : Controller
|
||||
Tables.SessionTokens.DeleteRow(SessionTokens.Token.CreateParameter(tok));
|
||||
LuskiFunctions.Snowflake id = LuskiFunctions.Snowflake.GenerateSnowflake(LuskiFunctions.Config.ServerEpoch);
|
||||
long kid = id.ID;
|
||||
Tables.Users.Update(Users.ID, ID, Users.Status.CreateParameter(UserStatus.Invisible));
|
||||
Tables.Users.CreateCommand().WithFilter(Users.ID, ID).WithValue(Users.Status, UserStatus.Invisible).Update();
|
||||
Console.WriteLine("C");
|
||||
Tables.Keys.Insert(
|
||||
Keys.ID.CreateParameter(kid),
|
||||
@ -230,7 +230,7 @@ public class SocketAccountController : Controller
|
||||
if (Tables.Server.Read(Server.Owner, Server.ID.CreateParameter(0)) == -1)
|
||||
{
|
||||
id = new(0);
|
||||
Tables.Server.Update(Server.ID, 0, Server.Owner.CreateParameter(id.ID));
|
||||
Tables.Server.CreateCommand().WithValue(Server.Owner, id.ID).Update();
|
||||
}
|
||||
byte[] ID = Encoding.UTF8.GetBytes(id.ID.ToString());
|
||||
byte[] Timestamp = Encoding.UTF8.GetBytes(DateTime.UtcNow.ToString());
|
||||
@ -254,7 +254,7 @@ public class SocketAccountController : Controller
|
||||
Users.Salt.CreateParameter(salt));
|
||||
List<long> old = Tables.Roles.Read(Roles.MembersList, Roles.ID.CreateParameter(0)).ToList();
|
||||
old.Add(uid);
|
||||
Tables.Roles.Update(Roles.ID, 0, Roles.MembersList.CreateParameter(old.ToArray()));
|
||||
Tables.Roles.CreateCommand().WithFilter(Roles.ID, 0).WithValue(Roles.MembersList,old.ToArray()).Update();
|
||||
Console.WriteLine("A");
|
||||
Tables.Keys.Insert(
|
||||
Keys.ID.CreateParameter(kid),
|
||||
|
@ -64,21 +64,23 @@ public class SocketCategoryController : ControllerBase
|
||||
Categories.TitleEncoderType.CreateParameter(ChanReq.TitleEncoderType),
|
||||
Categories.DescriptionEncoderType.CreateParameter(ChanReq.DescriptionEncoderType));
|
||||
CategoryRow chan = Tables.Categories.ReadRow(Categories.ID.CreateParameter(chanSnowflake.ID));
|
||||
if (opt.HasPermission(ServerPermission.ViewCategories))
|
||||
long[] ic = Array.Empty<long>();
|
||||
long[] c = Array.Empty<long>();
|
||||
if (!opt.HasPermission(ServerPermission.ViewCategories))
|
||||
{
|
||||
chan.InnerCategories = Array.Empty<long>();
|
||||
ic = Tables.Categories.ReadColumn(Categories.ID, Categories.Parent.CreateParameter(chanSnowflake.ID));
|
||||
}
|
||||
if (opt.HasPermission(ServerPermission.ViewChannels))
|
||||
if (!opt.HasPermission(ServerPermission.ViewChannels))
|
||||
{
|
||||
chan.Channels = Array.Empty<long>();
|
||||
c = LuskiFunctions.GetCategoryChannels(chanSnowflake.ID, ID);
|
||||
}
|
||||
return this.ResponseToResult(new CategorySTC()
|
||||
{
|
||||
Name = Convert.ToBase64String(chan.Name),
|
||||
Description = Convert.ToBase64String(chan.Description),
|
||||
ID = chanSnowflake.ID,
|
||||
Channels = chan.Channels,
|
||||
InnerCategories = chan.InnerCategories,
|
||||
Channels = c,
|
||||
InnerCategories = ic,
|
||||
Parent = chan.Parent,
|
||||
TitleEncryptionKey = chan.TitleEncryptionKey,
|
||||
DescriptionEncryptionKey = chan.DescriptionEncryptionKey,
|
||||
@ -129,21 +131,28 @@ public class SocketCategoryController : ControllerBase
|
||||
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
||||
if (!LuskiFunctions.HasAccessToCategory(ID, Channel, out ServerPermission opt, ServerPermission.ViewCategories | ServerPermission.ViewChannels)) return this.ResponseCodeToResult(ErrorCode.Forbidden);
|
||||
CategoryRow chan = Tables.Categories.ReadRow(Categories.ID.CreateParameter(Channel));
|
||||
if (opt.HasPermission(ServerPermission.ViewCategories))
|
||||
List<long> ic = new();
|
||||
long[] c = Array.Empty<long>();
|
||||
if (!opt.HasPermission(ServerPermission.ViewCategories))
|
||||
{
|
||||
chan.InnerCategories = Array.Empty<long>();
|
||||
ic = Tables.Categories.ReadColumn(Categories.ID, Categories.Parent.CreateParameter(Channel)).ToList();
|
||||
}
|
||||
if (opt.HasPermission(ServerPermission.ViewChannels))
|
||||
if (!opt.HasPermission(ServerPermission.ViewChannels))
|
||||
{
|
||||
chan.Channels = Array.Empty<long>();
|
||||
c = LuskiFunctions.GetCategoryChannels(Channel, ID);
|
||||
}
|
||||
|
||||
foreach (long cc in ic)
|
||||
{
|
||||
if (!LuskiFunctions.HasAccessToChannel(ID, cc)) ic.Remove(cc);
|
||||
}
|
||||
return this.ResponseToResult(new CategorySTC()
|
||||
{
|
||||
Name = Convert.ToBase64String(chan.Name),
|
||||
Description = Convert.ToBase64String(chan.Description),
|
||||
ID = Channel,
|
||||
Channels = chan.Channels,
|
||||
InnerCategories = chan.InnerCategories,
|
||||
Channels = c,
|
||||
InnerCategories = ic.ToArray(),
|
||||
Parent = chan.Parent,
|
||||
TitleEncryptionKey = chan.TitleEncryptionKey,
|
||||
DescriptionEncryptionKey = chan.DescriptionEncryptionKey,
|
||||
|
@ -70,10 +70,6 @@ public class SocketChannelController : ControllerBase
|
||||
Channels.Picture.CreateParameter(Array.Empty<byte>()),
|
||||
Channels.EncoderTypes.CreateParameter(ChanReq.EncoderTypes),
|
||||
Channels.Profiles.CreateParameter(Array.Empty<long>()));
|
||||
List<long> lll = Tables.Categories.Read(Categories.Channels, Categories.ID.CreateParameter(ChanReq.Parent))
|
||||
.ToList();
|
||||
lll.Add(chanSnowflake.ID);
|
||||
Tables.Categories.Update(Categories.ID, ChanReq.Parent, Categories.Channels.CreateParameter(lll.ToArray()));
|
||||
|
||||
ChannelRow chan = Tables.Channels.ReadRow(Channels.ID.CreateParameter(chanSnowflake.ID));
|
||||
return this.ResponseToResult(new ChannelSTC()
|
||||
|
@ -51,13 +51,15 @@ public class SocketFileController : ControllerBase
|
||||
{
|
||||
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
||||
if (!Tables.Files.TryRead(Files.Owner, out long raw, Files.ID.CreateParameter(File_id)) || raw != ID) return this.ResponseCodeToResult(ErrorCode.Forbidden);
|
||||
Tables.Files.Update(Files.ID, File_id,
|
||||
Files.Data.CreateParameter(Array.Empty<byte>()),
|
||||
Files.NameEncoderType.CreateParameter(EncoderType.UTF8),
|
||||
Files.NameEncryptionKey.CreateParameter(0),
|
||||
Files.Name.CreateParameter(Encoding.UTF8.GetBytes("Deleted File")),
|
||||
Files.Size.CreateParameter(0),
|
||||
Files.EncryptionKey.CreateParameter(0));
|
||||
Tables.Files.CreateCommand()
|
||||
.WithFilter(Files.ID, File_id)
|
||||
.WithValue(Files.Data, Array.Empty<byte>())
|
||||
.WithValue(Files.NameEncoderType, EncoderType.UTF8)
|
||||
.WithValue(Files.NameEncryptionKey, 0)
|
||||
.WithValue(Files.Name, Encoding.UTF8.GetBytes("Deleted File"))
|
||||
.WithValue(Files.Size, 0)
|
||||
.WithValue(Files.EncryptionKey, 0).Update();
|
||||
|
||||
return StatusCode(StatusCodes.Status202Accepted);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -14,7 +14,7 @@ public class SocketOverridesController : ControllerBase
|
||||
{
|
||||
[HttpGet]
|
||||
[Route(LuskiFunctions.Info.Routes.Default.Base + "/UserOverride/{id:long}")]
|
||||
public IActionResult GetUserOverride([FromQuery(Name = "id")]long id)
|
||||
public IActionResult GetUserOverride([FromRoute(Name = "id")]long id)
|
||||
{
|
||||
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
||||
if (!Tables.UserRoleOverrides.TryReadRow(out UserRoleOverrideRow row, UserRoleOverrides.ID.CreateParameter(id))) return this.ShowError(ErrorCode.Forbidden, "Override does not exist");
|
||||
@ -29,7 +29,7 @@ public class SocketOverridesController : ControllerBase
|
||||
|
||||
[HttpGet]
|
||||
[Route(LuskiFunctions.Info.Routes.Default.Base + "/RoleOverride/{id:long}")]
|
||||
public IActionResult GetRoleOverride([FromQuery(Name = "id")]long id)
|
||||
public IActionResult GetRoleOverride([FromRoute(Name = "id")]long id)
|
||||
{
|
||||
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
||||
if (!Tables.ServerRoleOverrides.TryReadRow(out ServerRoleOverrideRow? row, ServerRoleOverrides.ID.CreateParameter(id))) return this.ShowError(ErrorCode.Forbidden, "Override does not exist");
|
||||
|
@ -16,7 +16,7 @@ public class SocketRoleController : ControllerBase
|
||||
public IActionResult Get([FromQuery(Name = "id")]long id)
|
||||
{
|
||||
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
||||
if (!Tables.Roles.TryReadRow(out RoleRow row, Roles.ID.CreateParameter(id))) return this.ShowError(ErrorCode.Forbidden, "User does not exist");
|
||||
if (!Tables.Roles.TryReadRow(out RoleRow row, Roles.ID.CreateParameter(id))) return this.ShowError(ErrorCode.Forbidden, "Role does not exist");
|
||||
return this.ResponseToResult(new RoleSTC()
|
||||
{
|
||||
ID = row.ID,
|
||||
@ -29,4 +29,32 @@ public class SocketRoleController : ControllerBase
|
||||
Color = Convert.ToHexString(row.Color)
|
||||
});
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route(LuskiFunctions.Info.Routes.Default.Base + "/GetAll")]
|
||||
public IActionResult GetAll()
|
||||
{
|
||||
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
||||
RoleRow[] rows = Tables.Roles.ReadRows();
|
||||
|
||||
List<RoleSTC> r = new();
|
||||
for (int i = 0; i < rows.Length; i++)
|
||||
{
|
||||
r.Add(new()
|
||||
{
|
||||
ID = rows[i].ID,
|
||||
ServerPermissions = rows[i].ServerPermissions,
|
||||
Description = rows[i].Description,
|
||||
DisplayName = rows[i].DisplayName,
|
||||
Index = rows[i].Index,
|
||||
Name = rows[i].Name,
|
||||
Members = rows[i].MembersList,
|
||||
Color = Convert.ToHexString(rows[i].Color)
|
||||
});
|
||||
}
|
||||
return this.ResponseToResult(new RolesSTC()
|
||||
{
|
||||
Roles = r.ToArray()
|
||||
});
|
||||
}
|
||||
}
|
@ -101,7 +101,7 @@ public class SocketUserProfileController : ControllerBase
|
||||
// { "after", (int)NewStatus },
|
||||
// { "type", (int)DataType.Status_Update }
|
||||
// };
|
||||
Tables.Users.Update(Users.ID, ID, Users.Status.CreateParameter(NewStatus));
|
||||
Tables.Users.CreateCommand().WithFilter(Users.ID, ID).WithValue(Users.Status, NewStatus).Update();
|
||||
if (NewStatus == UserStatus.Invisible) NewStatus = UserStatus.Offline;
|
||||
// WSS.SendData(SendType.All, @out);
|
||||
}
|
||||
|
@ -59,24 +59,22 @@ public static class Matrix
|
||||
Tables.ChannelProfiles.DeleteRow(ChannelProfiles.ID.CreateParameter(i));
|
||||
}
|
||||
|
||||
Tables.Channels.Update(Channels.ID, Channel,
|
||||
//Tables.Channels.Insert(
|
||||
Channels.ID.CreateParameter(Channel),
|
||||
Channels.Parent.CreateParameter(0),
|
||||
Channels.Type.CreateParameter(ChannelType.TextAndVoice),
|
||||
Channels.Description.CreateParameter(export.RoomTopic.ToDB(Encoder, Encryption)),
|
||||
Channels.Name.CreateParameter(export.RoomName.ToDB(Encoder, Encryption)),
|
||||
Channels.RoleOverrides.CreateParameter(Array.Empty<long>()),
|
||||
Channels.UserOverrides.CreateParameter(Array.Empty<long>()),
|
||||
Channels.Epoch.CreateParameter(epoch),
|
||||
Channels.TitleEncryptionKey.CreateParameter(Encryption),
|
||||
Channels.DescriptionEncryptionKey.CreateParameter(Encryption),
|
||||
Channels.EncryptionKeys.CreateParameter(new long[] { Encryption }),
|
||||
Channels.TitleEncoderType.CreateParameter(Encoder),
|
||||
Channels.DescriptionEncoderType.CreateParameter(Encoder),
|
||||
//Channels.PictureType.CreateParameter(PictureType.none),
|
||||
//Channels.Picture.CreateParameter(Array.Empty<byte>()),
|
||||
Channels.EncoderTypes.CreateParameter(new[] { Encoder }));
|
||||
Tables.Channels.CreateCommand()
|
||||
.WithFilter(Channels.ID, Channel)
|
||||
.WithValue(Channels.Parent, 0)
|
||||
.WithValue(Channels.Type, ChannelType.TextAndVoice)
|
||||
.WithValue(Channels.Description, export.RoomTopic.ToDB(Encoder, Encryption))
|
||||
.WithValue(Channels.Name, export.RoomName.ToDB(Encoder, Encryption))
|
||||
.WithValue(Channels.RoleOverrides, Array.Empty<long>())
|
||||
.WithValue(Channels.UserOverrides, Array.Empty<long>())
|
||||
.WithValue(Channels.Epoch, epoch)
|
||||
.WithValue(Channels.TitleEncryptionKey, Encryption)
|
||||
.WithValue(Channels.DescriptionEncryptionKey, Encryption)
|
||||
.WithValue(Channels.EncryptionKeys, new long[] { Encryption })
|
||||
.WithValue(Channels.TitleEncoderType, Encoder)
|
||||
.WithValue(Channels.DescriptionEncoderType, Encoder)
|
||||
.WithValue(Channels.EncoderTypes, new[] { Encoder }).Update();
|
||||
|
||||
|
||||
Dictionary<string, long> Events = new();
|
||||
foreach (Message msg in export.Messages)
|
||||
@ -275,7 +273,7 @@ public static class Matrix
|
||||
}
|
||||
}
|
||||
|
||||
Tables.Channels.Update(Channels.ID, Channel, Channels.Profiles.CreateParameter(IdConverter.Values.ToArray()));
|
||||
Tables.Channels.CreateCommand().WithFilter(Channels.ID, Channel).WithValue(Channels.Profiles, IdConverter.Values.ToArray()).Update();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -5,7 +5,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<IncludeBuildOutput>true</IncludeBuildOutput>
|
||||
<FileVersion>1.0.08</FileVersion>
|
||||
<FileVersion>1.0.1.6</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
@ -21,11 +21,13 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="7.0.0" />
|
||||
<PackageReference Include="Luski.Shared" Version="1.1.0-alpha19" />
|
||||
<PackageReference Include="Flurl.Http" Version="2.3.2" />
|
||||
<PackageReference Include="Luski.Shared" Version="1.1.0-alpha21" />
|
||||
<PackageReference Include="Markdig" Version="0.36.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
|
||||
<PackageReference Include="ServerDatabase" Version="2.9.9" />
|
||||
<PackageReference Include="ServerDatabase.SourceGenerator" Version="1.0.2-alpha10" />
|
||||
<PackageReference Include="ServerDatabase" Version="3.0.8-alpha02" />
|
||||
<PackageReference Include="ServerDatabase.SourceGenerator" Version="1.0.2-alpha12" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.5.0" />
|
||||
<PackageReference Include="websocketsharp.core" Version="1.0.0" />
|
||||
|
@ -29,6 +29,22 @@ else
|
||||
tttt.Add(string.Join(";", LuskiFunctions.Config.Addresses));
|
||||
}
|
||||
|
||||
//MatrixChatroomWatcher mcw = new("https://matrix.org", "!EqhzONquTblIjhgyHG:matrix.org", "Luski-Server",
|
||||
// "syt_amFjb2J0ZWNoLWJvdA_mGvmyCvUOGKZXmMOyvTr_1QRrzv");
|
||||
//mcw.NewMessageReceived += McwOnNewMessageReceived;
|
||||
|
||||
void McwOnNewMessageReceived(dynamic message)
|
||||
{
|
||||
Console.WriteLine(message);
|
||||
}
|
||||
|
||||
//await mcw.Start();
|
||||
|
||||
|
||||
|
||||
|
||||
//await mcw.SendMessage("Test Message from Luski Server");
|
||||
|
||||
args = tttt.ToArray();
|
||||
Console.WriteLine($"Server starting with starting epoch of {LuskiFunctions.Config.ServerEpoch.ToLocalTime()} and current time of {DateTime.UtcNow.ToLocalTime()}");
|
||||
LuskiFunctions.Database = new Database(LuskiFunctions.Config.Address,
|
||||
@ -38,6 +54,8 @@ LuskiFunctions.Database = new Database(LuskiFunctions.Config.Address,
|
||||
LuskiFunctions.Config.CustomeName);
|
||||
|
||||
|
||||
|
||||
|
||||
Dictionary<string, List<Message>> fff = new();
|
||||
|
||||
|
||||
@ -65,8 +83,7 @@ foreach (PropertyInfo prop in typeof(Tables).GetProperties())
|
||||
|
||||
LuskiFunctions.Database.RegisterTables();
|
||||
|
||||
bool d = Tables.Storage.TryReadRow(out StorageRow row, Storage.ID.CreateParameter(534144618594309));
|
||||
Console.WriteLine(d);
|
||||
|
||||
//Tables.Channels.Update(Channels.ID, 0, Channels.PictureType.CreateParameter(PictureType.png), Channels.Picture.CreateParameter(File.ReadAllBytes("/home/jacob/Pictures/Logo.png")));
|
||||
/*
|
||||
Dictionary<string, long> AMap = new()
|
||||
@ -125,6 +142,47 @@ if (!Tables.Server.TryRead(Server.ID, out _, Server.ID.CreateParameter(0)))
|
||||
{
|
||||
Tables.Server.Insert();
|
||||
}
|
||||
/*
|
||||
Tables.Roles.Insert(
|
||||
Roles.ID.CreateParameter(2),
|
||||
Roles.Name.CreateParameter("Admins"),
|
||||
Roles.DisplayName.CreateParameter("Admins"),
|
||||
Roles.Index.CreateParameter(2),
|
||||
Roles.Color.CreateParameter(Convert.FromHexString("FF1B1BFF")),
|
||||
Roles.Description.CreateParameter("Admins for the server"),
|
||||
Roles.MembersList.CreateParameter(new long[]{0}),
|
||||
Roles.ServerPermissions.CreateParameter(
|
||||
ServerPermission.ViewChannels |
|
||||
ServerPermission.ViewCategories |
|
||||
ServerPermission.Nickname |
|
||||
ServerPermission.SendMessages |
|
||||
ServerPermission.SendFiles |
|
||||
ServerPermission.ChannelPings |
|
||||
ServerPermission.ServerPings |
|
||||
ServerPermission.PingSomeone |
|
||||
ServerPermission.ReadMessageHistory |
|
||||
ServerPermission.UseServerCommands |
|
||||
ServerPermission.JoinVoice |
|
||||
ServerPermission.SpeakInVoice |
|
||||
ServerPermission.ViewThis |
|
||||
ServerPermission.Kick |
|
||||
ServerPermission.CreateCategories |
|
||||
ServerPermission.CreateChannels |
|
||||
ServerPermission.DeleteCategories |
|
||||
ServerPermission.DeleteChannels |
|
||||
ServerPermission.EditCategories |
|
||||
ServerPermission.EditChannels |
|
||||
ServerPermission.EditCategoryPermissions |
|
||||
ServerPermission.EditChannelPermissions |
|
||||
ServerPermission.Invite |
|
||||
ServerPermission.ManageMessages |
|
||||
ServerPermission.ManageRoles |
|
||||
ServerPermission.ViewLogs |
|
||||
ServerPermission.Ban |
|
||||
ServerPermission.AddServers)
|
||||
);*/
|
||||
|
||||
|
||||
//Tables.Server.Update(Server.ID, 0, Server.Picture.CreateParameter(File.ReadAllBytes("/home/jacob/Downloads/XBsECOXDZIXMVIxxMNxRfGRo.png")));
|
||||
//Tables.Channels.Update(Channels.ID, 1, Channels.PictureType.CreateParameter(PictureType.png), Channels.Picture.CreateParameter(File.ReadAllBytes("/home/jacob/Downloads/zLqHooejmsmKzuMLneUSvjRH.png")));
|
||||
/*
|
||||
@ -282,7 +340,6 @@ if (!Tables.Categories.TryRead(Categories.ID, out _, Categories.ID.CreateParamet
|
||||
Categories.ID.CreateParameter(0),
|
||||
Categories.Name.CreateParameter(Encoding.UTF8.GetBytes("server")),
|
||||
Categories.Parent.CreateParameter(-1),
|
||||
Categories.Channels.CreateParameter(new long[]{0}),
|
||||
Categories.Description.CreateParameter(
|
||||
Encoding.UTF8.GetBytes("The default category for the server. Everybody will see this category.")),
|
||||
Categories.RoleOverrides.CreateParameter(Array.Empty<long>())
|
||||
|
Loading…
Reference in New Issue
Block a user