First commit that builds.

This commit is contained in:
2025-06-29 14:43:35 +02:00
parent 3944764cb5
commit 6d15dcb985
24 changed files with 816 additions and 0 deletions

View File

@ -0,0 +1,102 @@
using MessengerBroker.Handlers;
using MessengerBroker.Model.Http;
using System.Runtime.CompilerServices;
namespace MessengerBroker
{
public class Program
{
public static void Main(string[] args)
{
var settings = (Settings)null;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/users", async (HttpContext httpContext) =>
{
var authHandler = app.Services.GetService<AuthHandler>();
var brokerId = authHandler.Auth(httpContext);
if(brokerId == null)
{
return Results.Unauthorized();
}
var dataHandler = app.Services.GetService<DataHandler>();
var usersAndRoutes = await dataHandler.GetLocalUsersAndRoutes();
var response = new Users.UsersResponse
{
Users = usersAndRoutes.Item1.Select(x => new Users.UsersResponse.User
{
Id = x.Id,
Name = x.Name,
ApiKey = x.ApiKey,
CanReceive = x.CanReceive,
CanSend = x.CanSend,
IsEnabled = x.IsEnabled,
}).ToArray(),
UserRoutes = usersAndRoutes.Item2.Select(x => new Users.UsersResponse.UserRoute
{
Id = x.Id,
FromId = x.From.Id,
ToId = x.To.Id
}).ToArray()
};
return Results.Json(response);
});
app.MapGet("/sync", async (HttpContext httpContext, [AsParameters] Sync.SyncRequest request) =>
{
var authHandler = app.Services.GetService<AuthHandler>();
var brokerId = authHandler.Auth(httpContext);
if(brokerId == null)
{
return Results.Unauthorized();
}
else if(request.BrokerId != brokerId && request.BrokerId != settings.BrokerId)
{
return Results.Unauthorized();
}
var dataHandler = app.Services.GetService<DataHandler>();
var messages = await dataHandler.GetMessages(request.BrokerId, request.SinceUtc);
var response = new Sync.SyncResponse
{
Messages = messages.Select(x => new Sync.SyncResponse.Message
{
Id = x.Id,
CreatedUtc = x.CreatedUtc,
From = x.From.Id,
To = x.To.Id,
IsAcknowledged = x.IsAcknowledged,
IsDelivered = x.IsDelivered,
Payload = x.Payload,
PayloadId = x.PayloadId,
PayloadLifespanInSeconds = x.PayloadLifespanInSeconds,
PayloadTimestamp = x.PayloadTimestamp,
PayloadType = x.PayloadType
}).ToArray()
};
return Results.Json(response);
});
_ = Task.Run(async () =>
{
var cts = new CancellationTokenSource();
var handler = app.Services.GetService<MasterHandler>();
foreach(var master in settings.Masters)
{
_ = handler.BeginSyncingWithMaster(master, cts.Token);
}
});
app.Run();
}
}
}