Alt Servers.
Started work on code for a server to list alternate servers to the client.
This commit is contained in:
parent
e7fbda0cfb
commit
073deb3b00
@ -14,6 +14,14 @@ public static class Luski
|
|||||||
{
|
{
|
||||||
public static Database Database = null!;
|
public static Database Database = null!;
|
||||||
|
|
||||||
|
public static HttpResponseMessage GetFromServer(string Domain, bool Secure, string ApiVersion, string Path, CancellationToken CancellationToken, params KeyValuePair<string, string?>[] Headers)
|
||||||
|
{
|
||||||
|
using HttpClient web = new();
|
||||||
|
web.Timeout = TimeSpan.FromSeconds(10);
|
||||||
|
if (Headers is not null && Headers.Length > 0) foreach (KeyValuePair<string, string?> header in Headers) web.DefaultRequestHeaders.Add(header.Key, header.Value);
|
||||||
|
return web.GetAsync($"{(Secure ? "https" : "http" )}://{Domain}/{ApiVersion}/{Path}", cancellationToken: CancellationToken).Result;
|
||||||
|
}
|
||||||
|
|
||||||
public static byte[] ToDB(this string s, EncoderType Encoder, long Encryption)
|
public static byte[] ToDB(this string s, EncoderType Encoder, long Encryption)
|
||||||
{
|
{
|
||||||
if (!Tables.Keys.TryReadRow(out KeyRow row, Keys.ID.CreateParameter(Encryption))) throw new Exception("No a key");
|
if (!Tables.Keys.TryReadRow(out KeyRow row, Keys.ID.CreateParameter(Encryption))) throw new Exception("No a key");
|
||||||
|
15
LuskiServer/Classes/TableDef/AltServers.cs
Normal file
15
LuskiServer/Classes/TableDef/AltServers.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using ServerDatabase;
|
||||||
|
using ServerDatabase.SourceGenerator;
|
||||||
|
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
|
[TableRow(typeof(AltServers))]
|
||||||
|
public partial class AltServerRow
|
||||||
|
{}
|
@ -6,6 +6,7 @@ namespace LuskiServer.Classes;
|
|||||||
public static class Tables
|
public static class Tables
|
||||||
{
|
{
|
||||||
public static Table<UserRow> Users { get; } = new("users", null!);
|
public static Table<UserRow> Users { get; } = new("users", null!);
|
||||||
|
public static Table<AltServerRow> AltServers { get; } = new("alt_servers", null!);
|
||||||
public static Table<ServerRow> Server { get; } = new("server", null!);
|
public static Table<ServerRow> Server { get; } = new("server", null!);
|
||||||
public static Table<RoleRow> Roles { get; } = new("roles", null!);
|
public static Table<RoleRow> Roles { get; } = new("roles", null!);
|
||||||
public static Table<LogRow> Logs { get; } = new("logs", null!);
|
public static Table<LogRow> Logs { get; } = new("logs", null!);
|
||||||
|
@ -22,16 +22,27 @@ public class SocketServerController : ControllerBase
|
|||||||
[Route(Luski.Info.Routes.Default.Base)]
|
[Route(Luski.Info.Routes.Default.Base)]
|
||||||
public IActionResult Get()
|
public IActionResult Get()
|
||||||
{
|
{
|
||||||
var sr = Tables.Server.ReadRow(Server.ID.CreateParameter(0));
|
ServerRow sr = Tables.Server.ReadRow(Server.ID.CreateParameter(0));
|
||||||
return this.ResponseToResult(new ServerInfoJson()
|
return this.ResponseToResult(new ServerInfoJson()
|
||||||
{
|
{
|
||||||
wssv4 = (Luski.Config.IPv4_Overode_WSS is null ? $"{(Luski.Config.IPv4SecureWSS ? "wss" : "ws" )}://{Luski.Config.IPv4WSS}:{Luski.Config.IPv4PortWSS}{Luski.Config.IPv4_URL_WSS}v1" : Luski.Config.IPv4_Overode_WSS + "v1"),
|
wssv4 = (Luski.Config.IPv4_Overode_WSS is null ? $"{(Luski.Config.IPv4SecureWSS ? "wss" : "ws" )}://{Luski.Config.IPv4WSS}:{Luski.Config.IPv4PortWSS}{Luski.Config.IPv4_URL_WSS}/v1" : Luski.Config.IPv4_Overode_WSS + "v1"),
|
||||||
name = sr.Name,
|
name = sr.Name,
|
||||||
description = sr.Description,
|
description = sr.Description,
|
||||||
owner = sr.Owner
|
owner = sr.Owner
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Produces(MediaTypeNames.Application.Json)]
|
||||||
|
[Route(Luski.Info.Routes.Default.Base)]
|
||||||
|
public IActionResult ServerConnect([FromHeader(Name = "key")]string Key)
|
||||||
|
{
|
||||||
|
byte[] data = Convert.FromBase64String(Key);
|
||||||
|
if (!Tables.AltServers.TryReadRow(out var ser, AltServers.Key.CreateParameter(data)))
|
||||||
|
return this.ResponseCodeToResult(ErrorCode.Forbidden);
|
||||||
|
return null!;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the icon for the server.
|
/// Returns the icon for the server.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -2,6 +2,9 @@ namespace LuskiServer.Enums;
|
|||||||
|
|
||||||
public enum ServerPermissions : long
|
public enum ServerPermissions : long
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Internal permission for quick permission lookup
|
||||||
|
/// </summary>
|
||||||
ViewThis,
|
ViewThis,
|
||||||
ViewChannels,
|
ViewChannels,
|
||||||
MoveChannels,
|
MoveChannels,
|
||||||
@ -19,14 +22,17 @@ public enum ServerPermissions : long
|
|||||||
ManageRoles,
|
ManageRoles,
|
||||||
ViewLogs,
|
ViewLogs,
|
||||||
ManageServer,
|
ManageServer,
|
||||||
|
AddServers,
|
||||||
|
RemoveServers,
|
||||||
Invite,
|
Invite,
|
||||||
Nickname,
|
Nickname,
|
||||||
ManageNacknames,
|
ManageNicknames,
|
||||||
Kick,
|
Kick,
|
||||||
Ban,
|
Ban,
|
||||||
SendMessages,
|
SendMessages,
|
||||||
SendFiles,
|
SendFiles,
|
||||||
ChannelAndServerPings,
|
ChannelPings,
|
||||||
|
ServerPings,
|
||||||
PingSomeone,
|
PingSomeone,
|
||||||
ManageMessages,
|
ManageMessages,
|
||||||
ReadMessageHistory,
|
ReadMessageHistory,
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<PackageReference Include="JacobTechEncryption" Version="1.0.2" />
|
<PackageReference Include="JacobTechEncryption" Version="1.0.2" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.3" />
|
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.3" />
|
||||||
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
|
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
|
||||||
<PackageReference Include="ServerDatabase" Version="2.8.8" />
|
<PackageReference Include="ServerDatabase" Version="2.8.9" />
|
||||||
<PackageReference Include="ServerDatabase.SourceGenerator" Version="1.0.2-alpha09" />
|
<PackageReference Include="ServerDatabase.SourceGenerator" Version="1.0.2-alpha09" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.5.0" />
|
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.5.0" />
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices.JavaScript;
|
using System.Runtime.InteropServices.JavaScript;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Asp.Versioning;
|
||||||
using Asp.Versioning.ApiExplorer;
|
using Asp.Versioning.ApiExplorer;
|
||||||
using JacobTechEncryption;
|
using JacobTechEncryption;
|
||||||
using JacobTechEncryption.Enums;
|
using JacobTechEncryption.Enums;
|
||||||
@ -27,19 +28,6 @@ Luski.Database = new Database(Luski.Config.Address,
|
|||||||
Luski.Config.Password,
|
Luski.Config.Password,
|
||||||
Luski.Config.CustomeName);
|
Luski.Config.CustomeName);
|
||||||
|
|
||||||
DirectoryInfo di =
|
|
||||||
new("/home/jacob/Downloads/matrix - Luski Project Discussion - Chat Export - 2023-08-08T01-13-19.480Z");
|
|
||||||
foreach (DirectoryInfo d in di.GetDirectories())
|
|
||||||
{
|
|
||||||
foreach (FileInfo file in d.GetFiles())
|
|
||||||
{
|
|
||||||
// Tables.Files.Insert(
|
|
||||||
// Files.ID.CreateParameter(0),
|
|
||||||
// Files.EncoderType.CreateParameter(EncoderType.UTF8),
|
|
||||||
// Files.Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Dictionary<string, List<Message>> fff = new();
|
Dictionary<string, List<Message>> fff = new();
|
||||||
|
|
||||||
@ -210,7 +198,7 @@ if (!Tables.Roles.TryRead(Roles.ID, out _, Roles.ID.CreateParameter(0)))
|
|||||||
Roles.ID.CreateParameter(0),
|
Roles.ID.CreateParameter(0),
|
||||||
Roles.Name.CreateParameter("server"),
|
Roles.Name.CreateParameter("server"),
|
||||||
Roles.DisplayName.CreateParameter("Members"),
|
Roles.DisplayName.CreateParameter("Members"),
|
||||||
Roles.Color.CreateParameter("5,5,5,5"),
|
Roles.Color.CreateParameter("ÿÿÿÿ"),
|
||||||
Roles.Description.CreateParameter("The default role for the server. Everybody will have this role."),
|
Roles.Description.CreateParameter("The default role for the server. Everybody will have this role."),
|
||||||
Roles.ServerPermissions.CreateParameter(new[]
|
Roles.ServerPermissions.CreateParameter(new[]
|
||||||
{
|
{
|
||||||
@ -219,7 +207,8 @@ if (!Tables.Roles.TryRead(Roles.ID, out _, Roles.ID.CreateParameter(0)))
|
|||||||
ServerPermissions.Nickname,
|
ServerPermissions.Nickname,
|
||||||
ServerPermissions.SendMessages,
|
ServerPermissions.SendMessages,
|
||||||
ServerPermissions.SendFiles,
|
ServerPermissions.SendFiles,
|
||||||
ServerPermissions.ChannelAndServerPings,
|
ServerPermissions.ChannelPings,
|
||||||
|
ServerPermissions.ServerPings,
|
||||||
ServerPermissions.PingSomeone,
|
ServerPermissions.PingSomeone,
|
||||||
ServerPermissions.ReadMessageHistory,
|
ServerPermissions.ReadMessageHistory,
|
||||||
ServerPermissions.UseServerCommands,
|
ServerPermissions.UseServerCommands,
|
||||||
@ -269,21 +258,27 @@ if (!Tables.Categories.TryRead(Categories.ID, out _, Categories.ID.CreateParamet
|
|||||||
|
|
||||||
Tables.Sessions.DeleteRows();
|
Tables.Sessions.DeleteRows();
|
||||||
|
|
||||||
|
|
||||||
|
foreach (AltServerRow Server in Tables.AltServers.ReadRows())
|
||||||
|
{
|
||||||
|
//TODO add code to open a live WSS connection with all other servers on the network
|
||||||
|
}
|
||||||
|
|
||||||
WSS.Init(Luski.Config.IPv4WSS, Luski.Config.IPv4PortWSS, Luski.Config.IPv4_URL_WSS!, Luski.Config.IPv4SecureWSS, Luski.Config.IPv6WSS, Luski.Config.IPv6_URL_WSS, Luski.Config.IPv6PortWSS, Luski.Config.IPv6SecureWSS);
|
WSS.Init(Luski.Config.IPv4WSS, Luski.Config.IPv4PortWSS, Luski.Config.IPv4_URL_WSS!, Luski.Config.IPv4SecureWSS, Luski.Config.IPv6WSS, Luski.Config.IPv6_URL_WSS, Luski.Config.IPv6PortWSS, Luski.Config.IPv6SecureWSS);
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder( args );
|
WebApplicationBuilder builder = WebApplication.CreateBuilder( args );
|
||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
|
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
builder.Services.AddProblemDetails();
|
builder.Services.AddProblemDetails();
|
||||||
|
|
||||||
builder.Services.AddApiVersioning(
|
builder.Services.AddApiVersioning(
|
||||||
options =>
|
options =>
|
||||||
{
|
{
|
||||||
// reporting api versions will return the headers
|
// reporting api versions will return the headers
|
||||||
// "api-supported-versions" and "api-deprecated-versions"
|
// "api-supported-versions" and "api-deprecated-versions"
|
||||||
options.ReportApiVersions = true;
|
options.ReportApiVersions = true;
|
||||||
|
|
||||||
/* Sunset example
|
/* Sunset example
|
||||||
options.Policies.Sunset( 1 )
|
options.Policies.Sunset( 1 )
|
||||||
//.Effective( DateTimeOffset.Now.Subtract( new TimeSpan(9999999) ) )
|
//.Effective( DateTimeOffset.Now.Subtract( new TimeSpan(9999999) ) )
|
||||||
@ -341,8 +336,8 @@ builder.Services.AddSwaggerGen(
|
|||||||
// add a custom operation filter which sets default values
|
// add a custom operation filter which sets default values
|
||||||
options.OperationFilter<SwaggerDefaultValues>();
|
options.OperationFilter<SwaggerDefaultValues>();
|
||||||
|
|
||||||
var fileName = typeof(Program).Assembly.GetName().Name + ".xml";
|
string fileName = typeof(Program).Assembly.GetName().Name + ".xml";
|
||||||
var filePath = Path.Combine(AppContext.BaseDirectory, fileName);
|
string filePath = Path.Combine(AppContext.BaseDirectory, fileName);
|
||||||
|
|
||||||
// integrate xml comments
|
// integrate xml comments
|
||||||
options.IncludeXmlComments(filePath, true);
|
options.IncludeXmlComments(filePath, true);
|
||||||
@ -359,7 +354,7 @@ app.UseSwaggerUI(
|
|||||||
IReadOnlyList<ApiVersionDescription> descriptions = app.DescribeApiVersions();
|
IReadOnlyList<ApiVersionDescription> descriptions = app.DescribeApiVersions();
|
||||||
|
|
||||||
// build a swagger endpoint for each discovered API version
|
// build a swagger endpoint for each discovered API version
|
||||||
foreach ( var description in descriptions )
|
foreach ( ApiVersionDescription description in descriptions )
|
||||||
{
|
{
|
||||||
string url = $"/swagger/{description.GroupName}/swagger.json";
|
string url = $"/swagger/{description.GroupName}/swagger.json";
|
||||||
string name = description.GroupName.ToUpperInvariant();
|
string name = description.GroupName.ToUpperInvariant();
|
||||||
@ -370,7 +365,7 @@ app.UseSwaggerUI(
|
|||||||
} );
|
} );
|
||||||
app.MapGet("/www/css/SwaggerDark.css", async (CancellationToken t) =>
|
app.MapGet("/www/css/SwaggerDark.css", async (CancellationToken t) =>
|
||||||
{
|
{
|
||||||
var css = await File.ReadAllBytesAsync("www/css/SwaggerDark.css", t);
|
byte[] css = await File.ReadAllBytesAsync("www/css/SwaggerDark.css", t);
|
||||||
return Results.File(css, "text/css");
|
return Results.File(css, "text/css");
|
||||||
}).ExcludeFromDescription();
|
}).ExcludeFromDescription();
|
||||||
app.UseHttpsRedirection();
|
app.UseHttpsRedirection();
|
||||||
|
Loading…
Reference in New Issue
Block a user