| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | using System;using System.Threading.Tasks;using MediaBrowser.Controller.Configuration;using Microsoft.AspNetCore.Cors.Infrastructure;using Microsoft.AspNetCore.Http;namespace Jellyfin.Server.Configuration{    /// <summary>    /// Cors policy provider.    /// </summary>    public class CorsPolicyProvider : ICorsPolicyProvider    {        private readonly IServerConfigurationManager _serverConfigurationManager;        /// <summary>        /// Initializes a new instance of the <see cref="CorsPolicyProvider"/> class.        /// </summary>        /// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/> interface.</param>        public CorsPolicyProvider(IServerConfigurationManager serverConfigurationManager)        {            _serverConfigurationManager = serverConfigurationManager;        }        /// <inheritdoc />        public Task<CorsPolicy?> GetPolicyAsync(HttpContext context, string? policyName)        {            var corsHosts = _serverConfigurationManager.Configuration.CorsHosts;            var builder = new CorsPolicyBuilder()                .AllowAnyMethod()                .AllowAnyHeader();            // No hosts configured or only default configured.            if (corsHosts.Length == 0                || (corsHosts.Length == 1                    && string.Equals(corsHosts[0], CorsConstants.AnyOrigin, StringComparison.Ordinal)))            {                builder.AllowAnyOrigin();            }            else            {                builder.WithOrigins(corsHosts)                    .AllowCredentials();            }            return Task.FromResult<CorsPolicy?>(builder.Build());        }    }}
 |