Exemplo n.º 1
0
        private async Task <ActionResult> CollectComplete(BankIdLoginApiStatusRequest request, CollectResponse collectResponse)
        {
            _logger.BankIdCollectCompleted(collectResponse.OrderRef, collectResponse.CompletionData);
            await _bankIdResultStore.StoreCollectCompletedCompletionData(collectResponse.OrderRef, collectResponse.CompletionData);

            var returnUri = GetSuccessReturnUri(collectResponse.CompletionData.User, request.ReturnUrl);

            if (!Url.IsLocalUrl(returnUri))
            {
                throw new Exception(BankIdAuthenticationConstants.InvalidReturnUrlErrorMessage);
            }

            return(Ok(BankIdLoginApiStatusResponse.Finished(returnUri)));
        }
        public async Task <ActionResult> StatusAsync(BankIdLoginApiStatusRequest request)
        {
            var             orderRef = _orderRefProtector.Unprotect(request.OrderRef);
            CollectResponse collectResponse;

            try
            {
                collectResponse = await _bankIdApiClient.CollectAsync(orderRef.OrderRef);
            }
            catch (BankIdApiException bankIdApiException)
            {
                _logger.BankIdCollectFailure(orderRef.OrderRef, bankIdApiException);
                var errorStatusMessage = GetStatusMessage(bankIdApiException);
                return(BadRequest(new BankIdLoginApiErrorResponse(errorStatusMessage)));
            }

            var statusMessage = GetStatusMessage(collectResponse);

            if (collectResponse.Status == CollectStatus.Pending)
            {
                _logger.BankIdCollectPending(collectResponse.OrderRef, collectResponse.HintCode);
                return(Ok(BankIdLoginApiStatusResponse.Pending(statusMessage)));
            }

            if (collectResponse.Status == CollectStatus.Complete)
            {
                _logger.BankIdCollectCompleted(collectResponse.OrderRef, collectResponse.CompletionData);
                await _bankIdResultStore.StoreCollectCompletedCompletionData(collectResponse.OrderRef, collectResponse.CompletionData);

                var returnUri = GetSuccessReturnUri(collectResponse.CompletionData.User, request.ReturnUrl);
                if (!Url.IsLocalUrl(returnUri))
                {
                    throw new Exception(BankIdAuthenticationConstants.InvalidReturnUrlErrorMessage);
                }

                return(Ok(BankIdLoginApiStatusResponse.Finished(returnUri)));
            }

            _logger.BankIdCollectFailure(collectResponse.OrderRef, collectResponse.HintCode);
            return(BadRequest(new BankIdLoginApiErrorResponse(statusMessage)));
        }