ExternalAuthManager.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Abp.Dependency;
  5. namespace VberAdmin.Authentication.External;
  6. public class ExternalAuthManager : IExternalAuthManager, ITransientDependency
  7. {
  8. private readonly IIocResolver _iocResolver;
  9. private readonly IExternalAuthConfiguration _externalAuthConfiguration;
  10. public ExternalAuthManager(IIocResolver iocResolver, IExternalAuthConfiguration externalAuthConfiguration)
  11. {
  12. _iocResolver = iocResolver;
  13. _externalAuthConfiguration = externalAuthConfiguration;
  14. }
  15. public Task<bool> IsValidUser(string provider, string providerKey, string providerAccessCode)
  16. {
  17. using (var providerApi = CreateProviderApi(provider))
  18. {
  19. return providerApi.Object.IsValidUser(providerKey, providerAccessCode);
  20. }
  21. }
  22. public Task<ExternalAuthUserInfo> GetUserInfo(string provider, string accessCode)
  23. {
  24. using (var providerApi = CreateProviderApi(provider))
  25. {
  26. return providerApi.Object.GetUserInfo(accessCode);
  27. }
  28. }
  29. public IDisposableDependencyObjectWrapper<IExternalAuthProviderApi> CreateProviderApi(string provider)
  30. {
  31. var providerInfo = _externalAuthConfiguration.Providers.FirstOrDefault(p => p.Name == provider);
  32. if (providerInfo == null)
  33. {
  34. throw new Exception("Unknown external auth provider: " + provider);
  35. }
  36. var providerApi = _iocResolver.ResolveAsDisposable<IExternalAuthProviderApi>(providerInfo.ProviderApiType);
  37. providerApi.Object.Initialize(providerInfo);
  38. return providerApi;
  39. }
  40. }