aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/src/Endpoints/Internal/Root/ValidateRoute.cs
blob: 8f0882db560ac7d6469ab4f082fa17206de94fd0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
namespace IOL.GreatOffice.Api.Endpoints.Internal.Root;

public class ValidateRoute : RouteBaseSync.WithRequest<ValidateRoute.QueryParams>.WithActionResult
{
    private readonly EmailValidationService _emailValidation;
    private readonly string CanonicalFrontendUrl;
    private readonly ILogger<ValidateRoute> _logger;

    public ValidateRoute(VaultService vaultService, EmailValidationService emailValidation, ILogger<ValidateRoute> logger) {
        _emailValidation = emailValidation;
        _logger = logger;
        var c = vaultService.GetCurrentAppConfiguration();
        CanonicalFrontendUrl = c.CANONICAL_FRONTEND_URL;
    }

    public class QueryParams
    {
        [FromQuery]
        public Guid Id { get; set; }
    }

    [HttpGet("~/_/validate")]
    public override ActionResult Handle([FromQuery] QueryParams request) {
        var isFulfilled = _emailValidation.FulfillEmailValidationRequest(request.Id, LoggedInUser.Id);
        if (!isFulfilled) {
            _logger.LogError("Email validation fulfillment failed for request {requestId} and user {userId}", request.Id, LoggedInUser.Id);
            return StatusCode(400, $"""
<html>
<body>
<h3>The validation could not be completed</h3>
<p>We are working on fixing this, in the meantime, have patience.</p>
<a href="{CanonicalFrontendUrl}">Click here to go back to {CanonicalFrontendUrl}</a>
</body>
""");
        }

        return Redirect(CanonicalFrontendUrl + "/portal?msg=emailValidated");
    }
}