summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-02-15 19:23:29 +0100
committerRory& <root@rory.gay>2026-02-15 19:24:02 +0100
commit8be1a310b1df146620af2a748891d60bd0b686b6 (patch)
treed66475437e61de6d32c663e52cf5aa82914c178b
parentFix accepting friend requests (diff)
downloadserver-ts-8be1a310b1df146620af2a748891d60bd0b686b6.tar.xz
Some unfinished templates work
-rw-r--r--assets/openapi.json5
-rw-r--r--assets/schemas.json5
-rw-r--r--extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs2
-rw-r--r--extra/admin-api/Spacebar.AdminApi/Program.cs1
-rw-r--r--extra/admin-api/Spacebar.UApi/Controllers/GuildTemplatesController.cs16
-rw-r--r--extra/admin-api/Spacebar.UApi/Models/GuildTemplate.cs73
-rw-r--r--extra/admin-api/Spacebar.UApi/Models/UseGuildTemplateRequest.cs14
-rw-r--r--extra/admin-api/Spacebar.UApi/Program.cs2
-rw-r--r--extra/admin-api/Spacebar.UApi/Services/TemplateImportService.cs13
-rw-r--r--src/schemas/uncategorised/GuildTemplateCreateSchema.ts2
10 files changed, 129 insertions, 4 deletions
diff --git a/assets/openapi.json b/assets/openapi.json

index a06d0d78..ee3b8746 100644 --- a/assets/openapi.json +++ b/assets/openapi.json
@@ -4647,7 +4647,7 @@ "name": { "type": "string" }, - "avatar": { + "icon": { "type": "string", "nullable": true } @@ -5696,6 +5696,9 @@ 4 ], "type": "number" + }, + "confirm_stranger_request": { + "type": "boolean" } } }, diff --git a/assets/schemas.json b/assets/schemas.json
index f10afc4a..289dec60 100644 --- a/assets/schemas.json +++ b/assets/schemas.json
@@ -4931,7 +4931,7 @@ "name": { "type": "string" }, - "avatar": { + "icon": { "type": [ "null", "string" @@ -6051,6 +6051,9 @@ 4 ], "type": "number" + }, + "confirm_stranger_request": { + "type": "boolean" } }, "additionalProperties": false, diff --git a/extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs b/extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs
index a817335d..2959c71b 100644 --- a/extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs +++ b/extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs
@@ -34,7 +34,7 @@ public class UnixSocketSpacebarReplication(UnixSocketConfiguration conf) : ISpac public class UnixSocketConfiguration { public UnixSocketConfiguration(IConfiguration config) { - config.GetRequiredSection("UnixSocketReplication").Bind(this); + config.GetRequiredSection("Spacebar").GetRequiredSection("UnixSocketReplication").Bind(this); } public string SocketDir { get; set; } = null!; diff --git a/extra/admin-api/Spacebar.AdminApi/Program.cs b/extra/admin-api/Spacebar.AdminApi/Program.cs
index b0f8f209..072fba4b 100644 --- a/extra/admin-api/Spacebar.AdminApi/Program.cs +++ b/extra/admin-api/Spacebar.AdminApi/Program.cs
@@ -36,6 +36,7 @@ builder.Services.AddScoped<SpacebarAspNetAuthenticationService>(); // builder.Services.AddSingleton<RabbitMQConfiguration>(); // builder.Services.AddSingleton<RabbitMQService>(); // builder.Services.AddSingleton<ISpacebarReplication, RabbitMqSpacebarReplication>(); +builder.Services.AddSingleton<UnixSocketConfiguration>(); builder.Services.AddSingleton<ISpacebarReplication, UnixSocketSpacebarReplication>(); builder.Services.AddRequestTimeouts(x => { diff --git a/extra/admin-api/Spacebar.UApi/Controllers/GuildTemplatesController.cs b/extra/admin-api/Spacebar.UApi/Controllers/GuildTemplatesController.cs new file mode 100644
index 00000000..6206a6c4 --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Controllers/GuildTemplatesController.cs
@@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc; +using Spacebar.Interop.Authentication.AspNetCore; +using Spacebar.Models.Db.Contexts; +using Spacebar.UApi.Models; +using Spacebar.UApi.Services; + +namespace Spacebar.UApi.Controllers; + +[ApiController] +public class GuildTemplatesController(ILogger<GuildMembersController> logger, SpacebarDbContext db, SpacebarAspNetAuthenticationService authService, TemplateImportService importService) : ControllerBase { + [HttpPost("/api/v10/guilds/templates/{templateId}")] + public async Task UseTemplate(string templateId, UseGuildTemplateRequest request) { + var user = await authService.GetCurrentUserAsync(Request); + await importService.CreateGuildFromTemplateById(templateId, request, user); + } +} \ No newline at end of file diff --git a/extra/admin-api/Spacebar.UApi/Models/GuildTemplate.cs b/extra/admin-api/Spacebar.UApi/Models/GuildTemplate.cs new file mode 100644
index 00000000..d5303569 --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Models/GuildTemplate.cs
@@ -0,0 +1,73 @@ +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; + +namespace Spacebar.UApi.Models; + +// TODO: real schemas +public class GuildTemplate { + [JsonPropertyName("code")] + public string Code { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("usage_count")] + public int UsageCount { get; set; } + + [JsonPropertyName("creator_id")] + public string CreatorId { get; set; } + + [JsonPropertyName("creator")] + public JsonObject Creator { get; set; } + + [JsonPropertyName("created_at")] + public DateTimeOffset CreatedAt { get; set; } + + [JsonPropertyName("updated_at")] + public DateTimeOffset UpdatedAt { get; set; } + + [JsonPropertyName("source_guild_id")] + public string SourceGuildId { get; set; } + + [JsonPropertyName("serialized_source_guild")] + public SerializedSourceGuild SerializedSourceGuild { get; set; } +} + +public class SerializedSourceGuild { } + +public class GuildTemplateRole { + [JsonPropertyName("id")] + public int Id { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("permissions")] + public string Permissions { get; set; } + + // "color" ignored for now - is deprecated anyhow + [JsonPropertyName("colors")] + public RoleColors Colors { get; set; } + + [JsonPropertyName("hoist")] + public bool Hoist { get; set; } + + [JsonPropertyName("mentionable")] + public bool Mentionable { get; set; } + + // [JsonPropertyName("icon")] +} + +public class RoleColors { + [JsonPropertyName("primary_color")] + public int PrimaryColor { get; set; } + + [JsonPropertyName("secondary_color")] + public int? SecondaryColor { get; set; } + + [JsonPropertyName("tertiary_color")] + public int TertiaryColor { get; set; } +} \ No newline at end of file diff --git a/extra/admin-api/Spacebar.UApi/Models/UseGuildTemplateRequest.cs b/extra/admin-api/Spacebar.UApi/Models/UseGuildTemplateRequest.cs new file mode 100644
index 00000000..47a516a0 --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Models/UseGuildTemplateRequest.cs
@@ -0,0 +1,14 @@ +using System.Text.Json.Serialization; + +namespace Spacebar.UApi.Models; + +public class UseGuildTemplateRequest { + /// <summary> + /// Data URI encoded image + /// </summary> + [JsonPropertyName("icon")] + public string? Icon { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } +} \ No newline at end of file diff --git a/extra/admin-api/Spacebar.UApi/Program.cs b/extra/admin-api/Spacebar.UApi/Program.cs
index 4695b7ab..d6bb0d96 100644 --- a/extra/admin-api/Spacebar.UApi/Program.cs +++ b/extra/admin-api/Spacebar.UApi/Program.cs
@@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore; using Spacebar.Interop.Authentication; using Spacebar.Interop.Authentication.AspNetCore; using Spacebar.Models.Db.Contexts; +using Spacebar.UApi.Services; var builder = WebApplication.CreateBuilder(args); if (!string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("APPSETTINGS_PATH"))) @@ -32,6 +33,7 @@ builder.Services.AddDbContextPool<SpacebarDbContext>(options => { builder.Services.AddSingleton<SpacebarAuthenticationConfiguration>(); builder.Services.AddScoped<SpacebarAuthenticationService>(); builder.Services.AddScoped<SpacebarAspNetAuthenticationService>(); +builder.Services.AddScoped<TemplateImportService>(); var app = builder.Build(); diff --git a/extra/admin-api/Spacebar.UApi/Services/TemplateImportService.cs b/extra/admin-api/Spacebar.UApi/Services/TemplateImportService.cs new file mode 100644
index 00000000..ae7b86a2 --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Services/TemplateImportService.cs
@@ -0,0 +1,13 @@ +using Spacebar.Models.Db.Contexts; +using Spacebar.Models.Db.Models; +using Spacebar.UApi.Models; + +namespace Spacebar.UApi.Services; + +public class TemplateImportService(SpacebarDbContext db) { + public async Task<string> CreateGuildFromTemplateById(string templateId, UseGuildTemplateRequest request, User user) { + return ""; + } + + public async Task<> +} \ No newline at end of file diff --git a/src/schemas/uncategorised/GuildTemplateCreateSchema.ts b/src/schemas/uncategorised/GuildTemplateCreateSchema.ts
index 3ce9862f..31035b78 100644 --- a/src/schemas/uncategorised/GuildTemplateCreateSchema.ts +++ b/src/schemas/uncategorised/GuildTemplateCreateSchema.ts
@@ -18,5 +18,5 @@ export interface GuildTemplateCreateSchema { name: string; - avatar?: string | null; + icon?: string | null; }