Add project files
This commit is contained in:
parent
4dafed3553
commit
8cf01ead74
40 changed files with 3967 additions and 0 deletions
56
StalwartSimpleLoginMiddleware/Controllers/AliasController.cs
Normal file
56
StalwartSimpleLoginMiddleware/Controllers/AliasController.cs
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
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
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue