stalwart-simplelogin-middle.../StalwartSimpleLoginMiddleware/Controllers/AliasController.cs
2025-05-10 05:25:22 -04:00

56 lines
No EOL
2.3 KiB
C#

using AdOrbitSDK;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using StalwartSimpleLoginMiddleware.Models;
using StalwartSimpleLoginMiddleware.Services;
namespace StalwartSimpleLoginMiddleware.Controllers;
[ApiController]
[Authorize]
[Route("api/[controller]")]
public class AliasController(StalwartClient stalwartClient) : ControllerBase
{
[Route("random/new")]
[HttpPost]
public async Task<IActionResult> NewRandomAlias([FromQuery] string? hostname,
[FromQuery] string? mode,
[FromBody] NewRandomAliasInput body)
{
var apiKeyAccessor = HttpContext.RequestServices.GetRequiredService<IApiKeyAccessor>();
var randomAlias = Get8CharacterRandomString();
var client = await stalwartClient.GetClient();
var requestBody = new Body2
{
Type = "list",
Name = randomAlias,
Description = body.Note,
Emails = new List<object> { $"{randomAlias}@{apiKeyAccessor.Metadata.Domain}" },
Members = apiKeyAccessor.Metadata.Members as ICollection<object>,
ExternalMembers = apiKeyAccessor.Metadata.ExternalMembers as ICollection<object>
};
await client.PrincipalPOSTAsync(requestBody);
return Created(null as string, new NewRandomAliasOutput
{
CreationDate = DateTime.Today.Date,
CreationTimestamp = DateTime.Now.Ticks,
Email = requestBody.Emails?.OfType<string>().FirstOrDefault() ?? string.Empty,
Alias = requestBody.Emails?.OfType<string>().FirstOrDefault() ?? string.Empty,
Name = requestBody.Name ?? string.Empty,
Enabled = true,
Id = new Random().Next(),
Mailbox = new Mailbox { Id = new Random().Next(), Email = apiKeyAccessor.Metadata.Members.First() },
Mailboxes = apiKeyAccessor.Metadata.Members.Concat(apiKeyAccessor.Metadata.ExternalMembers)
.Select(email => new Mailbox { Id = new Random().Next(), Email = email.ToString() }),
Note = body.Note ?? string.Empty,
});
}
private static string Get8CharacterRandomString()
{
var path = Path.GetRandomFileName();
path = path.Replace(".", ""); // Remove period
return path.Substring(0, 8); // Return 8 character string
}
}