public MitigationInfoIssueType[] GetMitigationForFlaw(string build_id, string flaw_id)
        {
            var xml = _wrapper.GetMitigationInfo(build_id, flaw_id);

            if (string.IsNullOrWhiteSpace(xml))
            {
                return(null);
            }

            var issueType = XmlParseHelper.Parse <mitigationinfo>(xml);

            if (issueType.issue is null || !issueType.issue.Any())
            {
                return(new MitigationInfoIssueType[0]);
            }

            if (issueType.issue[0].mitigation_action is null || !issueType.issue[0].mitigation_action.Any())
            {
                return(new MitigationInfoIssueType[0]);
            }

            return(issueType.issue
                   .Where(x => x.mitigation_action.Any())
                   .ToArray());
        }
        public FileListFileType[] UploadFileForPrescan(string app_id, string filepath)
        {
            var fileInfo = new FileInfo(filepath);
            var xml      = _wrapper.UploadFileForPrescan(app_id, filepath, fileInfo.Name);

            return(XmlParseHelper.Parse <filelist>(xml).file);
        }
        public LoginAccount UpdateUser(LoginAccount user, Roles[] roles)
        {
            var roles_parsed = string.Join(",", roles.Select(VeracodeEnumConverter.Convert).ToArray());
            var xml          = _wrapper.UpdateUser(user.username, user.first_name,
                                                   user.last_name, user.email_address, roles_parsed, user.teams);

            return(XmlParseHelper.Parse <userinfo>(xml).login_account);
        }
        public BuildInfoBuildType UpdateBuild(string app_id, BuildInfoBuildType build)
        {
            var xml = _wrapper.UpdateBuild(
                app_id,
                build.build_id,
                build.version);

            return(XmlParseHelper.Parse <buildinfo>(xml).build ?? null);
        }
        public IEnumerable <BuildType> GetAllBuildsForApp(string appId)
        {
            var builds = new List <BuildType>();

            var xml = _wrapper.GetBuildList(appId);

            try
            {
                if (!string.IsNullOrWhiteSpace(xml))
                {
                    if (XmlParseHelper.Parse <buildlist>(xml).build != null)
                    {
                        builds.AddRange(XmlParseHelper.Parse <buildlist>(xml).build);
                    }
                }
            } catch (XmlParseError e)
            {
                if (!e.Message.ToLower().Contains("could not find"))
                {
                    throw e;
                }
            }

            var sandboxXml = _wrapper.GetSandboxes(appId);

            if (!string.IsNullOrWhiteSpace(sandboxXml))
            {
                var sandboxes = XmlParseHelper.Parse <sandboxlist>(sandboxXml);
                if (sandboxes.sandbox != null)
                {
                    foreach (var sandbox in sandboxes.sandbox)
                    {
                        var sandboxBuildXml = _wrapper.GetBuildListForSandbox(appId, $"{sandbox.sandbox_id}");

                        try
                        {
                            if (!string.IsNullOrWhiteSpace(sandboxBuildXml))
                            {
                                builds.AddRange(XmlParseHelper.Parse <buildlist>(sandboxBuildXml).build);
                            }
                        } catch (XmlParseError e)
                        {
                            if (!e.Message.ToLower().Contains("could not find"))
                            {
                                throw e;
                            }
                        }
                    }
                }
            }

            return(builds.GroupBy(p => p.build_id)
                   .Select(g => g.First())
                   .ToList());
        }
        public IEnumerable <ModuleType> GetModules(string appId, string buildId)
        {
            var xml = _wrapper.GetPreScanResults(appId, buildId);

            if (string.IsNullOrWhiteSpace(xml))
            {
                return(new ModuleType[0]);
            }

            return(XmlParseHelper.Parse <prescanresults>(xml).module);
        }
        public SeverityType[] GetSeverity(string buildId)
        {
            var xml = _wrapper.GetDetailedResults(buildId);

            if (string.IsNullOrWhiteSpace(xml))
            {
                return(new SeverityType[0]);
            }

            var report = XmlParseHelper.Parse <detailedreport>(xml);

            return(report.severity.ToArray());
        }
        public buildinfo GetLatestScan(string appId)
        {
            var xml = _wrapper.GetBuildInfo(appId, null, null);

            try {
                return(XmlParseHelper.Parse <buildinfo>(xml));
            } catch (XmlParseError e)
            {
                if (!e.Message.ToLower().Contains("could not find"))
                {
                    throw e;
                }

                return(null);
            }
        }
        public IEnumerable <BuildType> GetAllBuildsForSandbox(string appId, string sandboxId)
        {
            var sandboxBuildXml = _wrapper.GetBuildListForSandbox(appId, sandboxId);

            try
            {
                return(XmlParseHelper.Parse <buildlist>(sandboxBuildXml).build);
            } catch (XmlParseError e)
            {
                if (e.Message.Contains("could not find"))
                {
                    return(new List <BuildType>());
                }

                throw e;
            }
        }
        public string[] GetUsers()
        {
            var xml = _wrapper.GetUserList();

            if (string.IsNullOrWhiteSpace(xml))
            {
                return(new string[0]);
            }

            var userlist = XmlParseHelper.Parse <userlist>(xml);

            if (userlist.users == null || string.IsNullOrWhiteSpace(userlist.users.usernames))
            {
                return(new string[0]);
            }

            return(userlist.users.usernames.Split(","));
        }
        public DetailedReportModuleType[] GetEntryPoints(string buildId)
        {
            var xml = _wrapper.GetDetailedResults(buildId);

            if (string.IsNullOrWhiteSpace(xml))
            {
                return(new DetailedReportModuleType[0]);
            }

            var report = XmlParseHelper.Parse <detailedreport>(xml);

            if (report.staticanalysis == null || report.staticanalysis.modules == null ||
                !report.staticanalysis.modules.Any())
            {
                return(new DetailedReportModuleType[0]);
            }

            return(report.staticanalysis.modules.ToArray());
        }
        public FlawType[] GetFlaws(string buildId)
        {
            var xml = _wrapper.GetDetailedResults(buildId);

            if (string.IsNullOrWhiteSpace(xml))
            {
                return(new FlawType[0]);
            }

            var report = XmlParseHelper.Parse <detailedreport>(xml);

            if (report.severity == null || !report.severity.Any())
            {
                return(new FlawType[0]);
            }

            return(report.severity.Where(x => x.category != null && x.category.Any())
                   .SelectMany(sev => sev.category.Where(x => x.cwe != null && x.cwe.Any())
                               .SelectMany(cat => cat.cwe.Where(x => x.staticflaws != null && x.staticflaws.Any())
                                           .SelectMany(cwe => cwe.staticflaws)))
                   .ToArray());
        }
        public ApplicationType CreateApp(ApplicationType newApp)
        {
            var xml = _wrapper.NewApp(
                newApp.app_name,
                newApp.business_criticality,
                newApp.policy,
                newApp.business_owner,
                newApp.business_owner_email);

            if (string.IsNullOrWhiteSpace(xml))
            {
                return(null);
            }

            var appinfo = XmlParseHelper.Parse <appinfo>(xml);

            if (appinfo.application.Count() == 0)
            {
                return(null);
            }

            return(appinfo.application[0]);
        }
        public MitigationInfoIssueType[] GetAllMitigationsForBuild(string buildId)
        {
            var mitgations = new List <MitigationInfoIssueType>();
            var flawIds    = GetFlaws(buildId).Select(x => x.issueid).ToArray();

            for (var i = 0; i < flawIds.Length; i += FLAW_BATCH_LIMIT)
            {
                var batch       = flawIds.Skip(i).Take(FLAW_BATCH_LIMIT);
                var flaw_string = string.Join(",", batch);
                var xml         = _wrapper.GetMitigationInfo(buildId, flaw_string);

                if (string.IsNullOrWhiteSpace(xml))
                {
                    continue;
                }

                var issueType         = XmlParseHelper.Parse <mitigationinfo>(xml);
                var issuesWithActions = issueType.issue.Where(x => x.mitigation_action != null && !x.mitigation_action.Any());
                mitgations.AddRange(issuesWithActions);
            }

            return(mitgations.ToArray());
        }
        public mitigationinfo UpdateMitigations(string build_id, string action, string comment, string flaw_id_list)
        {
            action = action.ToLower();
            var acceptedActions = new[] { "comment", "fp", "appdesign", "osenv", "netenv", "rejected", "accepted" };

            if (!acceptedActions.Contains(action))
            {
                throw new ArgumentException("Action must be either \"comment\", \"fp\", \"appdesign\", \"osenv\", \"netenv\", \"rejected\", \"accepted\"");
            }

            if (action.Equals("accepted") || action.Equals("rejected"))
            {
                var currentMitigations = GetMitigationForFlaw(build_id, flaw_id_list);
                var mitigationActions  = new[] { ActionTypeType.appdesign, ActionTypeType.osenv, ActionTypeType.netenv, ActionTypeType.fp };
                if (!mitigationActions.Any(x => x == currentMitigations.First().mitigation_action.First().action))
                {
                    throw new ArgumentException("The latest action on this flaw is not \"appdesign\", \"osenv\", \"netenv\", \"fp\" so there is nothing to accept or reject.");
                }
            }

            var xml = _wrapper.UpdateMitigationInfo(build_id, action, comment, flaw_id_list);

            return(XmlParseHelper.Parse <mitigationinfo>(xml));
        }
        public buildinfo StartScan(string app_id, string modules)
        {
            var xml = _wrapper.StartScan(app_id, modules);

            return(XmlParseHelper.Parse <buildinfo>(xml));
        }
        public buildinfo StartPrescan(string app_id)
        {
            var xml = _wrapper.StartPrescan(app_id);

            return(XmlParseHelper.Parse <buildinfo>(xml));
        }
        public deletebuildresult DeleteBuild(string app_id, string sandbox_id)
        {
            var xml = _wrapper.DeleteBuild(app_id, sandbox_id);

            return(XmlParseHelper.Parse <deletebuildresult>(xml));
        }
        public IEnumerable <AppType> GetAllApps()
        {
            var xml = _wrapper.GetAppList();

            return(XmlParseHelper.Parse <applist>(xml).app ?? new AppType[0]);
        }
        public deletesandboxresult DeleteSandbox(string sandbox_id)
        {
            var xml = _wrapper.DeleteSandbox(sandbox_id);

            return(XmlParseHelper.Parse <deletesandboxresult>(xml));
        }
        public deleteuserresult DeleteUser(string username)
        {
            var xml = _wrapper.DeleteUser(username);

            return(XmlParseHelper.Parse <deleteuserresult>(xml));
        }
        public teaminfo GetTeamInfo(string team_id, bool include_users = false, bool include_applications = false)
        {
            var xml = _wrapper.GetTeamInfo(team_id, include_users, include_applications);

            return(XmlParseHelper.Parse <teaminfo>(xml));
        }
        public teamlistTeam[] GetTeams()
        {
            var xml = _wrapper.GetTeamList();

            return(XmlParseHelper.Parse <teamlist>(xml).team);
        }
        public teaminfo UpdateTeam(teaminfo team)
        {
            var xml = _wrapper.UpdateTeam(team.team_id, team.team_name);

            return(XmlParseHelper.Parse <teaminfo>(xml));
        }
        public sandboxinfo CreateSandbox(string app_id, string sandbox_name)
        {
            var xml = _wrapper.CreateSandbox(app_id, sandbox_name);

            return(XmlParseHelper.Parse <sandboxinfo>(xml));
        }
        public LoginAccount GetUser(string username)
        {
            var xml = _wrapper.GetUserDetail(username);

            return(XmlParseHelper.Parse <userinfo>(xml).login_account);
        }
        public sandboxinfo PromoteSandbox(string build_id)
        {
            var xml = _wrapper.DeleteSandbox(build_id);

            return(XmlParseHelper.Parse <sandboxinfo>(xml));
        }
        public Callstacks GetCallStacks(string buildId, string flawId)
        {
            var xml = _wrapper.GetCallStack(buildId, flawId);

            return(XmlParseHelper.Parse <Callstacks>(xml));
        }
        public deleteteamresult DeleteTeam(string team_id)
        {
            var xml = _wrapper.DeleteTeam(team_id);

            return(XmlParseHelper.Parse <deleteteamresult>(xml));
        }
        public deleteapp DeleteApp(ApplicationType app)
        {
            var xml = _wrapper.DeleteApp(app.app_id);

            return(XmlParseHelper.Parse <deleteapp>(xml));
        }