using System; using Microsoft.AspNetCore.Authentication; using Microsoft.Extensions.DependencyInjection; using NzbDrone.Core.Authentication; namespace Lidarr.Http.Authentication { public static class AuthenticationBuilderExtensions { public static AuthenticationBuilder AddApiKey(this AuthenticationBuilder authenticationBuilder, string name, Action options) { return authenticationBuilder.AddScheme(name, options); } public static AuthenticationBuilder AddBasic(this AuthenticationBuilder authenticationBuilder, string name) { return authenticationBuilder.AddScheme(name, options => { }); } public static AuthenticationBuilder AddNone(this AuthenticationBuilder authenticationBuilder, string name) { return authenticationBuilder.AddScheme(name, options => { }); } public static AuthenticationBuilder AddExternal(this AuthenticationBuilder authenticationBuilder, string name) { return authenticationBuilder.AddScheme(name, options => { }); } public static AuthenticationBuilder AddAppAuthentication(this IServiceCollection services) { return services.AddAuthentication() .AddNone(AuthenticationType.None.ToString()) .AddExternal(AuthenticationType.External.ToString()) .AddBasic(AuthenticationType.Basic.ToString()) .AddCookie(AuthenticationType.Forms.ToString(), options => { options.Cookie.Name = "LidarrAuth"; options.AccessDeniedPath = "/login?loginFailed=true"; options.LoginPath = "/login"; options.ExpireTimeSpan = TimeSpan.FromDays(7); options.SlidingExpiration = true; }) .AddApiKey("API", options => { options.HeaderName = "X-Api-Key"; options.QueryName = "apikey"; }) .AddApiKey("SignalR", options => { options.HeaderName = "X-Api-Key"; options.QueryName = "access_token"; }); } } }