using System; using System.Linq; using System.Threading.Tasks; using Abp.Dependency; namespace VberAdmin.Authentication.External; public class ExternalAuthManager : IExternalAuthManager, ITransientDependency { private readonly IIocResolver _iocResolver; private readonly IExternalAuthConfiguration _externalAuthConfiguration; public ExternalAuthManager(IIocResolver iocResolver, IExternalAuthConfiguration externalAuthConfiguration) { _iocResolver = iocResolver; _externalAuthConfiguration = externalAuthConfiguration; } public Task IsValidUser(string provider, string providerKey, string providerAccessCode) { using (var providerApi = CreateProviderApi(provider)) { return providerApi.Object.IsValidUser(providerKey, providerAccessCode); } } public Task GetUserInfo(string provider, string accessCode) { using (var providerApi = CreateProviderApi(provider)) { return providerApi.Object.GetUserInfo(accessCode); } } public IDisposableDependencyObjectWrapper CreateProviderApi(string provider) { var providerInfo = _externalAuthConfiguration.Providers.FirstOrDefault(p => p.Name == provider); if (providerInfo == null) { throw new Exception("Unknown external auth provider: " + provider); } var providerApi = _iocResolver.ResolveAsDisposable(providerInfo.ProviderApiType); providerApi.Object.Initialize(providerInfo); return providerApi; } }