49 lines
1.7 KiB
C#
49 lines
1.7 KiB
C#
using System;
|
|
using System.Linq;
|
|
using BankingBot.Attributes;
|
|
using BankingBot.Contracts;
|
|
using OpenQA.Selenium;
|
|
|
|
namespace BankingBot.LoginManagers
|
|
{
|
|
public class LoginManager : ILoginManager
|
|
{
|
|
private readonly IBrowserBot _browserBot;
|
|
|
|
public LoginManager(IBrowserBot browserBot)
|
|
{
|
|
_browserBot = browserBot;
|
|
}
|
|
|
|
public void Login(ILoginCredentials credentials)
|
|
{
|
|
var provLoginManagerType = GetProviderLoginManagerType(credentials);
|
|
var provLoginManager = (IProviderLoginManager)Activator.CreateInstance(provLoginManagerType, _browserBot);
|
|
provLoginManager.Login(credentials);
|
|
}
|
|
|
|
private Type GetProviderLoginManagerType(ILoginCredentials credentials)
|
|
{
|
|
// Get all "provider login manager" classes in the assembly
|
|
// (any class that implements IProviderLoginManager)
|
|
var providerLoginManagerTypes = AppDomain.CurrentDomain.GetAssemblies()
|
|
.SelectMany(s => s.GetTypes())
|
|
.Where(p =>
|
|
typeof(IProviderLoginManager).IsAssignableFrom(p) &&
|
|
p != typeof(IProviderLoginManager));
|
|
|
|
var credentialsProvider = credentials.GetProvider();
|
|
foreach (var type in providerLoginManagerTypes)
|
|
{
|
|
// Get associated provider for each "provider login manager" class
|
|
var provider = ProviderIdentifier.GetProviderFromType(type);
|
|
if (provider == credentialsProvider)
|
|
{
|
|
return type;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|