public override void Execute() { base.Execute(); log.Debug("Begin Execute"); try { var api = new ApiClient(); var count = 0; foreach (var item in (List <tblAttachmentsTemp>)State.Data) { log.Debug($"Uploading {item.FileName}"); count++; if (count == Config.Instance.VirusScanTaskPostCountLimit) { log.Debug("Post Count Limit reached."); return; } var boundary = "-----" + Guid.NewGuid().ToString().Replace("-", ""); var request = new ApiClient.Request { Url = Config.Instance.VirusScanTaskPostUrl, Method = "POST", Headers = new NameValueCollection { { "content-type", $"multipart/form-data; boundary={boundary}" }, { "protocol-version", "1.0" } }, Body = ApiClient.BuildMultipartForm( boundary, new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("apikey", Config.Instance.VirusScanTaskApiKey) }, new List <ApiClient.File> { new ApiClient.File { Name = "file", FileName = item.FileName, ContentType = item.ContentType, Base64Data = item.Base64Data } } ), ResponseAsString = true }; var response = api.ClientRequest(request); var json = JsonConvert.DeserializeObject <VirusTotalPostResult>(response.ToString()); if (json.ResponseCode == 1) { log.Info($"Uploaded {item.FileName}, ScanId: {json.ScanId}"); item.ScanId = json.ScanId; item.Sha256 = json.Sha256; item.DateScanStart = State.RunDate; UpdateAttachmentTemp(item); Results.Add(new Result(item.ScanId, response.StatusCode.ToString(), response.StatusDescription, null)); } else { var warning = $"Upload failed, JSON returned: {json}"; log.Error(warning); Results.Add(new Result(null, response.StatusCode.ToString(), response.StatusDescription, warning)); } } } catch (Exception e) { log.Error(e); Results.Add(new Result(null, null, null, e.Message)); } finally { log.Debug("End Execute"); } }
public override void Execute() { base.Execute(); log.Debug("Begin Execute"); try { var api = new ApiClient(); var count = 0; foreach (var item in (List <tblAttachmentsTemp>)State.Data) { log.Debug($"Checking reports for {item.FileName}"); count++; if (count == Config.Instance.VirusScanTaskScanReportCountLimit) { log.Debug("Scan Report Count Limit reached."); return; } var boundary = "-----" + Guid.NewGuid().ToString().Replace("-", ""); var request = new ApiClient.Request { Url = Config.Instance.VirusScanTaskScanReportUrl, Method = "POST", Headers = new NameValueCollection { { "content-type", $"multipart/form-data; boundary={boundary}" }, }, Body = ApiClient.BuildMultipartForm( boundary, new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("apikey", Config.Instance.VirusScanTaskApiKey), new KeyValuePair <string, string>("resource", item.ScanId) }, null ), ResponseAsString = true }; var response = api.ClientRequest(request); var json = JsonConvert.DeserializeObject <VirusTotalScanReportResult>(response.ToString()); if (json.ResponseCode == 1) { var isOk = json.Positives == 0 ? "returned OK, " : ""; var result = $"Report {isOk} found {json.Positives} positives out of {json.Total} scans"; log.Info(result); item.ScanResult = json.Positives == 0 ? "OK" : result + "\n" + response; if (item.ScanResult != "OK") { UpdateAttachmentTemp(item); Results.Add(new Result(item.ScanId, response.StatusCode.ToString(), response.StatusDescription, null)); var email = new EmailError(); email.GenerateErrorMessageEmail($"{result}<br/> Filename: {item.FileName}<br/> ScanId: {item.ScanId}<br/> Returned JSON:<br/>{response.ToString()}"); } else { var isSaved = AllowAttachment(item); if (isSaved) { CloseAttachmentTemp(item); Results.Add(new Result(item.ScanId, response.StatusCode.ToString(), response.StatusDescription, null)); } else { throw new Exception($"Could not save create attachment for Id: {item.Id}"); } } } else { var warning = $"Report not completed, JSON returned: {response}"; log.Error(warning); Results.Add(new Result(null, response.StatusCode.ToString(), response.StatusDescription, warning)); } } } catch (Exception e) { log.Error(e); Results.Add(new Result(null, null, null, e.Message)); } finally { log.Debug("End Execute"); } }