56 lines
No EOL
2.3 KiB
C#
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
|
|
}
|
|
} |