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 NewRandomAlias([FromQuery] string? hostname, [FromQuery] string? mode, [FromBody] NewRandomAliasInput body) { var apiKeyAccessor = HttpContext.RequestServices.GetRequiredService(); var randomAlias = Get8CharacterRandomString(); var client = await stalwartClient.GetClient(); var requestBody = new Body2 { Type = "list", Name = randomAlias, Description = body.Note, Emails = new List { $"{randomAlias}@{apiKeyAccessor.Metadata.Domain}" }, Members = apiKeyAccessor.Metadata.Members as ICollection, ExternalMembers = apiKeyAccessor.Metadata.ExternalMembers as ICollection }; await client.PrincipalPOSTAsync(requestBody); return Created(null as string, new NewRandomAliasOutput { CreationDate = DateTime.Today.Date, CreationTimestamp = DateTime.Now.Ticks, Email = requestBody.Emails?.OfType().FirstOrDefault() ?? string.Empty, Alias = requestBody.Emails?.OfType().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 } }