< Summary

Class:SVETA.Api.ConfigureOptions.ConfigureCorsOptions
Assembly:SVETA.Api
File(s):/opt/dev/sveta_api_build/SVETA.Api/ConfigureOptions/ConfigureCorsOptions.cs
Covered lines:0
Uncovered lines:25
Coverable lines:25
Total lines:56
Line coverage:0% (0 of 25)
Covered branches:0
Total branches:0

Metrics

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

File(s)

/opt/dev/sveta_api_build/SVETA.Api/ConfigureOptions/ConfigureCorsOptions.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using Microsoft.Extensions.Options;
 5using System.Threading.Tasks;
 6using IdentityServer4.AccessTokenValidation;
 7using Microsoft.Extensions.DependencyInjection;
 8using WinSolutions.Sveta.Server.Data.DataModel.Contexts;
 9using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 10using Microsoft.Extensions.Configuration;
 11using SVETA.Api.Data.DTO;
 12using Microsoft.AspNetCore.Cors.Infrastructure;
 13using SVETA.Api.Data.Domain;
 14
 15namespace SVETA.Api.ConfigureOptions
 16{
 17    public class ConfigureCorsOptions : IConfigureNamedOptions<CorsOptions>
 18    {
 19        private readonly ConfigurationsSettings _optionsConfs;
 20        private readonly IConfiguration _сonfiguration;
 21
 022        public ConfigureCorsOptions(IOptions<ConfigurationsSettings> optionsConfs, IConfiguration сonfiguration)
 023        {
 024            _optionsConfs = optionsConfs.Value;
 025            _сonfiguration = сonfiguration;
 026        }
 27
 28        /// <summary>
 29        /// Конфигурирует настройки CORS
 30        /// </summary>
 31        /// <param name="name"></param>
 32        /// <param name="options"></param>
 33        public void Configure(string name, CorsOptions options)
 034        {
 035            options.AddDefaultPolicy(
 036                builder =>
 037                {
 038                    var origins = _сonfiguration.GetSection("CorsSettings").GetValue<string>("Origins");
 039                    if (!Boolean.TryParse(_optionsConfs.GetConfValue("GlobalCorsSettings", "CorsOn"), out bool corsSwitc
 040                        throw new ArgumentException("Не удалось разобрать значение ключа CorsOn в секции GlobalCorsSetti
 041                    if (corsSwitch && origins.Trim() != "*")
 042                        builder.WithOrigins(origins.Split(","))
 043                             .AllowAnyHeader()
 044                             .AllowAnyMethod()
 045                             .AllowCredentials();
 046                    else
 047                        builder.SetIsOriginAllowed(_ => true) //хак, чтобы разрешить anyorigin и allowcredentials одновр
 048                        .AllowAnyHeader()
 049                        .AllowAnyMethod()
 050                        .AllowCredentials();
 051                });
 052        }
 53
 054        public void Configure(CorsOptions options) => Configure(Options.DefaultName, options);
 55    }
 56}