public override async Task <CrawlJobData> GetCrawlJobData(
            ProviderUpdateContext context,
            IDictionary <string, object> configuration,
            Guid organizationId,
            Guid userId,
            Guid providerDefinitionId)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            var adversusCrawlJobData = new AdversusCrawlJobData();

            if (configuration.ContainsKey(AdversusConstants.KeyName.ApiKey))
            {
                adversusCrawlJobData.ApiKey = configuration[AdversusConstants.KeyName.ApiKey].ToString();
            }
            if (configuration.ContainsKey(AdversusConstants.KeyName.Username))
            {
                adversusCrawlJobData.Username = configuration[AdversusConstants.KeyName.Username].ToString();
            }
            if (configuration.ContainsKey(AdversusConstants.KeyName.Password))
            {
                adversusCrawlJobData.Password = configuration[AdversusConstants.KeyName.Password].ToString();
            }

            return(await Task.FromResult(adversusCrawlJobData));
        }
        public override Task <bool> TestAuthentication(
            ProviderUpdateContext context,
            IDictionary <string, object> configuration,
            Guid organizationId,
            Guid userId,
            Guid providerDefinitionId)
        {
            var adversusCrawlJobData = new AdversusCrawlJobData();

            if (configuration.ContainsKey(AdversusConstants.KeyName.ApiKey))
            {
                adversusCrawlJobData.ApiKey = configuration[AdversusConstants.KeyName.ApiKey].ToString();
            }
            if (configuration.ContainsKey(AdversusConstants.KeyName.Username))
            {
                adversusCrawlJobData.Username = configuration[AdversusConstants.KeyName.Username].ToString();
            }
            if (configuration.ContainsKey(AdversusConstants.KeyName.Password))
            {
                adversusCrawlJobData.Password = configuration[AdversusConstants.KeyName.Password].ToString();
            }


            try
            {
                var client = _adversusClientFactory.CreateNew(adversusCrawlJobData);
                var result = client.GetAccountInformation();
                return(Task.FromResult(result != null));
            }
            catch (Exception exception)
            {
                context.Log.LogError("Could not add Adversus provider", exception);
                return(Task.FromResult(false));
            }
        }
        public AdversusClient(ILogger <AdversusClient> log, AdversusCrawlJobData adversusCrawlJobData, IRestClient client) // TODO: pass on any extra dependencies
        {
            if (adversusCrawlJobData == null)
            {
                throw new ArgumentNullException(nameof(adversusCrawlJobData));
            }

            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            this.log    = log ?? throw new ArgumentNullException(nameof(log));
            this.client = client ?? throw new ArgumentNullException(nameof(client));

            // TODO use info from adversusCrawlJobData to instantiate the connection
            client.BaseUrl             = new Uri(BaseUri);
            this._adversusCrawlJobData = adversusCrawlJobData;
        }