Exemple #1
0
        public async Task <ActionResult> StatusAsync(BankIdLoginApiStatusRequest request)
        {
            var unprotectedLoginOptions = _loginOptionsProtector.Unprotect(request.LoginOptions);
            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, unprotectedLoginOptions, HttpContext.Request);

            if (collectResponse.GetCollectStatus() == CollectStatus.Pending)
            {
                return(CollectPending(collectResponse, statusMessage));
            }

            if (collectResponse.GetCollectStatus() == CollectStatus.Complete)
            {
                return(await CollectComplete(request, collectResponse));
            }

            return(CollectFailure(collectResponse, statusMessage));
        }
        private async Task <ActionResult> CollectComplete(BankIdLoginApiStatusRequest request, CollectResponse collectResponse)
        {
            if (collectResponse.CompletionData == null)
            {
                throw new ArgumentNullException(nameof(collectResponse.CompletionData));
            }

            if (request.ReturnUrl == null)
            {
                throw new ArgumentNullException(nameof(request.ReturnUrl));
            }

            _logger.BankIdCollectCompleted(collectResponse.OrderRef, collectResponse.CompletionData);
            foreach (var bankIdResultStore in _bankIdResultStores)
            {
                await bankIdResultStore.StoreCollectCompletedCompletionData(collectResponse.OrderRef, collectResponse.CompletionData);
            }

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

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

            return(Ok(BankIdLoginApiStatusResponse.Finished(returnUri)));
        }
Exemple #3
0
        public async Task <ActionResult> Status(BankIdLoginApiStatusRequest request)
        {
            if (string.IsNullOrWhiteSpace(request.LoginOptions))
            {
                throw new ArgumentNullException(nameof(request.LoginOptions));
            }

            if (string.IsNullOrWhiteSpace(request.ReturnUrl))
            {
                throw new ArgumentNullException(nameof(request.ReturnUrl));
            }

            if (string.IsNullOrWhiteSpace(request.OrderRef))
            {
                throw new ArgumentNullException(nameof(request.OrderRef));
            }

            var unprotectedLoginOptions = _loginOptionsProtector.Unprotect(request.LoginOptions);
            var orderRef       = _orderRefProtector.Unprotect(request.OrderRef);
            var detectedDevice = GetDetectedUserDevice();

            CollectResponse collectResponse;

            try
            {
                collectResponse = await _bankIdApiClient.CollectAsync(orderRef.OrderRef);
            }
            catch (BankIdApiException bankIdApiException)
            {
                await _bankIdEventTrigger.TriggerAsync(new BankIdCollectErrorEvent(orderRef.OrderRef, bankIdApiException, detectedDevice, unprotectedLoginOptions));

                var errorStatusMessage = GetStatusMessage(bankIdApiException);
                return(BadRequestJsonResult(new BankIdLoginApiErrorResponse(errorStatusMessage)));
            }

            var statusMessage = GetStatusMessage(collectResponse, unprotectedLoginOptions, detectedDevice);

            if (collectResponse.GetCollectStatus() == CollectStatus.Pending)
            {
                return(await CollectPending(collectResponse, statusMessage, detectedDevice, unprotectedLoginOptions));
            }

            if (collectResponse.GetCollectStatus() == CollectStatus.Complete)
            {
                return(await CollectComplete(request, collectResponse, detectedDevice, unprotectedLoginOptions));
            }

            var hintCode = collectResponse.GetCollectHintCode();

            if (hintCode.Equals(CollectHintCode.StartFailed) &&
                request.AutoStartAttempts < BankIdConstants.MaxRetryLoginAttempts)
            {
                return(OkJsonResult(BankIdLoginApiStatusResponse.Retry(statusMessage)));
            }

            return(await CollectFailure(collectResponse, statusMessage, detectedDevice, unprotectedLoginOptions));
        }
Exemple #4
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> Status(BankIdLoginApiStatusRequest request)
        {
            if (request.LoginOptions == null)
            {
                throw new ArgumentNullException(nameof(request.LoginOptions));
            }

            if (request.OrderRef == null)
            {
                throw new ArgumentNullException(nameof(request.OrderRef));
            }

            var unprotectedLoginOptions = _loginOptionsProtector.Unprotect(request.LoginOptions);
            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, unprotectedLoginOptions, HttpContext.Request);

            if (collectResponse.GetCollectStatus() == CollectStatus.Pending)
            {
                return(CollectPending(collectResponse, statusMessage));
            }

            if (collectResponse.GetCollectStatus() == CollectStatus.Complete)
            {
                return(await CollectComplete(request, collectResponse));
            }

            var hintCode = collectResponse.GetCollectHintCode();

            if (hintCode.Equals(CollectHintCode.StartFailed) &&
                request.AutoStartAttempts < MaxRetryLoginAttempts)
            {
                return(Ok(BankIdLoginApiStatusResponse.Retry(statusMessage)));
            }

            return(CollectFailure(collectResponse, statusMessage));
        }
        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)));
        }
Exemple #7
0
        private async Task <ActionResult> CollectComplete(BankIdLoginApiStatusRequest request, CollectResponse collectResponse, BankIdSupportedDevice detectedDevice, BankIdLoginOptions loginOptions)
        {
            if (collectResponse.CompletionData == null)
            {
                throw new ArgumentNullException(nameof(collectResponse.CompletionData));
            }

            if (request.ReturnUrl == null)
            {
                throw new ArgumentNullException(nameof(request.ReturnUrl));
            }

            await _bankIdEventTrigger.TriggerAsync(new BankIdCollectCompletedEvent(collectResponse.OrderRef, collectResponse.CompletionData, detectedDevice, loginOptions));

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

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

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