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