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))); }