public async Task <ActionResult <AplosAuthenticationStatusModel> > GetAplosAuthenticationStatus(string sessionId, CancellationToken cancellationToken)
        {
            if (!Guid.TryParse(sessionId, out var sessionGuid))
            {
                return(BadRequest());
            }

            var session = await _pexOAuthSessionStorage.GetBySessionGuidAsync(sessionGuid, cancellationToken);

            if (session == null)
            {
                return(Unauthorized());
            }

            var mapping = await _aplosIntegrationService.EnsureMappingInstalled(session, cancellationToken);

            var result = new AplosAuthenticationStatusModel
            {
                AplosAuthenticationMode = mapping.AplosAuthenticationMode,
                HasAplosAccountId       = !string.IsNullOrWhiteSpace(mapping.AplosAccountId),
            };

            if (result.AplosAuthenticationMode == AplosAuthenticationMode.PartnerAuthentication && result.HasAplosAccountId && !mapping.AplosPartnerVerified)
            {
                result.PartnerVerificationUrl = _appSettings.AplosPartnerVerificationUrl.ToString();
            }

            var isAuthenticated = await _aplosIntegrationService.ValidateAplosApiCredentials(mapping, cancellationToken);

            result.IsAuthenticated = isAuthenticated;

            return(Ok(result));
        }
        public async Task <TokenModel> CreateSessionFromJwt([FromBody] TokenModel model, CancellationToken cancellationToken)
        {
            var externalToken = await _pexApiClient.ExchangeJwtForApiToken(model.Token,
                                                                           new ExchangeTokenRequestModel { AppId = _appSettings.PexApiClientId, AppSecret = _appSettings.PexApiClientSecret });

            var business = await _pexApiClient.GetBusinessDetails(externalToken, cancellationToken);

            var sessionGuid = Guid.NewGuid();
            var session     = new PexOAuthSessionModel
            {
                SessionGuid       = sessionGuid,
                ExternalToken     = externalToken,
                CreatedUtc        = DateTime.UtcNow,
                LastRenewedUtc    = DateTime.UtcNow,
                PEXBusinessAcctId = business.BusinessAccountId,
            };
            await _pexOAuthSessionStorage.CreateAsync(session, cancellationToken);

            await _aplosIntegrationService.EnsureMappingInstalled(session, cancellationToken);

            return(new TokenModel {
                Token = sessionGuid.ToString()
            });
        }