< Summary

Class:SVETA.Api.Services.Implements.CaptureAuthorizationService
Assembly:SVETA.Api
File(s):/opt/dev/sveta_api_build/SVETA.Api/Services/Implements/CaptureAuthorizationService.cs
Covered lines:0
Uncovered lines:10
Coverable lines:10
Total lines:77
Line coverage:0% (0 of 10)
Covered branches:0
Total branches:4
Branch coverage:0% (0 of 4)

Metrics

MethodLine coverage Branch coverage
.ctor(...)0%100%

File(s)

/opt/dev/sveta_api_build/SVETA.Api/Services/Implements/CaptureAuthorizationService.cs

#LineLine coverage
 1using SVETA.Api.Helpers.Authorize;
 2using Microsoft.AspNetCore.Authorization;
 3using Microsoft.Extensions.Logging;
 4using Microsoft.Extensions.Options;
 5using Newtonsoft.Json;
 6using System;
 7using System.Collections.Generic;
 8using System.Linq;
 9using System.Security.Authentication;
 10using System.Security.Claims;
 11using System.Threading.Tasks;
 12using Microsoft.AspNetCore.Authorization.Infrastructure;
 13using Microsoft.EntityFrameworkCore.Internal;
 14
 15namespace SVETA.Api.Services.Implements
 16{
 17    public class CaptureAuthorizationService : DefaultAuthorizationService, IAuthorizationService
 18    {
 19        private readonly AuthorizationOptions _options;
 20        private readonly IAuthorizationHandlerContextFactory _contextFactory;
 21        private readonly IAuthorizationHandlerProvider _handlers;
 22        private readonly IAuthorizationEvaluator _evaluator;
 23        private readonly IAuthorizationPolicyProvider _policyProvider;
 24        private readonly ILogger _logger;
 25
 26        public CaptureAuthorizationService(IAuthorizationPolicyProvider policyProvider
 27            , IAuthorizationHandlerProvider handlers
 28            , ILogger<DefaultAuthorizationService> logger
 29            , IAuthorizationHandlerContextFactory contextFactory
 30            , IAuthorizationEvaluator evaluator
 31            , IOptions<AuthorizationOptions> options)
 032            : base(policyProvider, handlers, logger, contextFactory, evaluator, options)
 033        {
 034            _options = options.Value;
 035            _handlers = handlers;
 036            _policyProvider = policyProvider;
 037            _logger = logger;
 038            _evaluator = evaluator;
 039            _contextFactory = contextFactory;
 040        }
 41
 42        public new async Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user, object resource, IEnumerable<IAu
 43        {
 44            if (requirements == null)
 45            {
 46                throw new ArgumentNullException(nameof(requirements));
 47            }
 48
 49            var authContext = _contextFactory.CreateContext(requirements, user, resource);
 50            var handlers = await _handlers.GetHandlersAsync(authContext);
 51            foreach (var handler in handlers)
 52            {
 53                await handler.HandleAsync(authContext);
 54                if (!_options.InvokeHandlersAfterFailure && authContext.HasFailed)
 55                {
 56                    break;
 57                }
 58            }
 59
 60            var result = _evaluator.Evaluate(authContext);
 61            if (!result.Succeeded)
 62            {
 63                var json = JsonConvert.SerializeObject(result.Failure.FailedRequirements);
 64                _logger.LogInformation($"Authorization is failed for { json }");
 65
 66                //перехват проблемной авторизации и создание исключения
 067                if (result.Failure.FailedRequirements.Any(d => d is DenyAnonymousAuthorizationRequirement))
 68                    throw new AuthorizationException("Not authorizated");
 69                else
 70                    throw new ForbidException("Access denied");
 71            }
 72
 73            //ответ только при удачной авторизации
 74            return result;
 75        }
 76    }
 77}

Methods/Properties

.ctor(...)