using System; using System.Collections.Generic; using System.Linq; using ServiceStack.FluentValidation.Internal; using ServiceStack.ServiceInterface.Auth; using ServiceStack.WebHost.Endpoints; namespace ServiceStack.ServiceInterface { /// /// Enable the authentication feature and configure the AuthService. /// public class AuthFeature : IPlugin { public static bool AddUserIdHttpHeader = true; private readonly Func sessionFactory; private readonly IAuthProvider[] authProviders; public Dictionary ServiceRoutes { get; set; } public List RegisterPlugins { get; set; } public bool IncludeAssignRoleServices { set { if (!value) { (from registerService in ServiceRoutes where registerService.Key == typeof(AssignRolesService) || registerService.Key == typeof(UnAssignRolesService) select registerService.Key).ToList() .ForEach(x => ServiceRoutes.Remove(x)); } } } public AuthFeature(Func sessionFactory, IAuthProvider[] authProviders) { this.sessionFactory = sessionFactory; this.authProviders = authProviders; ServiceRoutes = new Dictionary { { typeof(AuthService), new[]{"/auth", "/auth/{provider}"} }, { typeof(AssignRolesService), new[]{"/assignroles"} }, { typeof(UnAssignRolesService), new[]{"/unassignroles"} }, }; RegisterPlugins = new List { new SessionFeature() }; } public void Register(IAppHost appHost) { AuthService.Init(sessionFactory, authProviders); var unitTest = appHost == null; if (unitTest) return; foreach (var registerService in ServiceRoutes) { appHost.RegisterService(registerService.Key, registerService.Value); } RegisterPlugins.ForEach(x => appHost.LoadPlugin(x)); } public static TimeSpan? GetDefaultSessionExpiry() { var authProvider = AuthService.AuthProviders.FirstOrDefault() as AuthProvider; return authProvider == null ? null : authProvider.SessionExpiry; } } }