CorsPolicyProvider.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System;
  2. using System.Threading.Tasks;
  3. using MediaBrowser.Controller.Configuration;
  4. using Microsoft.AspNetCore.Cors.Infrastructure;
  5. using Microsoft.AspNetCore.Http;
  6. namespace Jellyfin.Server.Configuration
  7. {
  8. /// <summary>
  9. /// Cors policy provider.
  10. /// </summary>
  11. public class CorsPolicyProvider : ICorsPolicyProvider
  12. {
  13. private readonly IServerConfigurationManager _serverConfigurationManager;
  14. /// <summary>
  15. /// Initializes a new instance of the <see cref="CorsPolicyProvider"/> class.
  16. /// </summary>
  17. /// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/> interface.</param>
  18. public CorsPolicyProvider(IServerConfigurationManager serverConfigurationManager)
  19. {
  20. _serverConfigurationManager = serverConfigurationManager;
  21. }
  22. /// <inheritdoc />
  23. public Task<CorsPolicy?> GetPolicyAsync(HttpContext context, string? policyName)
  24. {
  25. var corsHosts = _serverConfigurationManager.Configuration.CorsHosts;
  26. var builder = new CorsPolicyBuilder()
  27. .AllowAnyMethod()
  28. .AllowAnyHeader();
  29. // No hosts configured or only default configured.
  30. if (corsHosts.Length == 0
  31. || (corsHosts.Length == 1
  32. && string.Equals(corsHosts[0], CorsConstants.AnyOrigin, StringComparison.Ordinal)))
  33. {
  34. builder.AllowAnyOrigin();
  35. }
  36. else
  37. {
  38. builder.WithOrigins(corsHosts)
  39. .AllowCredentials();
  40. }
  41. return Task.FromResult<CorsPolicy?>(builder.Build());
  42. }
  43. }
  44. }