├── APICheckmarx.py ├── LICENSE ├── PyCheckmarx.py ├── README.md ├── etc └── config.json_template └── sdk.txt /APICheckmarx.py: -------------------------------------------------------------------------------- 1 | #!usr/bin/python 2 | 3 | ############################### 4 | # > Author: Duarte Monteiro 5 | # > Version: 1.0 6 | # > Vendor: www.checkmarx.com 7 | # > Notes: RESTAPI for PyCheckMarx 8 | ############################### 9 | 10 | # Python Dependencies 11 | from flask import Flask, jsonify, request 12 | app = Flask(__name__) 13 | 14 | # Import PyCheckMarx 15 | import PyCheckmarx 16 | 17 | # 18 | # Launch error to the user 19 | # 20 | def launchError(message): 21 | return jsonify({"error":"%s" % message}), 500 22 | 23 | # 24 | # getProjectScannedDisplayData 25 | # 26 | @app.route('/APICX/getProjectScannedDisplayData/', methods=["GET"]) 27 | @app.route('/APICX/getProjectScannedDisplayData/', defaults={"extra_path": ""}, methods=["GET"]) 28 | @app.route('/APICX/getProjectScannedDisplayData/', methods=["GET"]) 29 | def ProjectScannedDisplayData(projectID=None): 30 | try: 31 | if projectID == None: 32 | return pyC.getProjectScannedDisplayData() 33 | else: 34 | return pyC.filterProjectScannedDisplayData(projectID) 35 | except Exception as e: 36 | return launchError(e.message) 37 | 38 | # 39 | # getProjectsDisplayData 40 | # 41 | @app.route('/APICX/getProjectsDisplayData/', methods=["GET"]) 42 | @app.route('/APICX/getProjectsDisplayData/', methods=["GET"]) 43 | def ProjectsDisplayData(projectID=None): 44 | try: 45 | if projectID == None: 46 | return pyC.getProjectsDisplayData() 47 | else: 48 | return pyC.filterProjectsDisplayData(projectID) 49 | except Exception as e: 50 | return launchError(e.message) 51 | 52 | # 53 | # getScanInfoForAllProjects 54 | # 55 | @app.route('/APICX/getScanInfoForAllProjects/', methods=["GET"]) 56 | @app.route('/APICX/getScanInfoForAllProjects/', methods=["GET"]) 57 | def ScanInfoForAllProjects(projectID=None): 58 | try: 59 | if projectID == None: 60 | return pyC.getScanInfoForAllProjects() 61 | else: 62 | return pyC.filterScanInfoForAllProjects(projectID) 63 | except Exception as e: 64 | return launchError(e.message) 65 | 66 | # 67 | # getPresetList 68 | # 69 | @app.route('/APICX/getPresetList/', methods=["GET"]) 70 | def PresetList(): 71 | try: 72 | return pyC.getPresetList() 73 | except Exception as e: 74 | return launchError(e.message) 75 | 76 | # 77 | # getConfigurationList 78 | # 79 | @app.route('/APICX/getConfigurationList/', methods=["GET"]) 80 | def ConfigurationList(): 81 | try: 82 | return pyC.getConfigurationList() 83 | except Exception as e: 84 | return launchError(e.message) 85 | 86 | # 87 | # getAssociatedGroups 88 | # 89 | @app.route('/APICX/getAssociatedGroups/', methods=["GET"]) 90 | def AssociatedGroups(): 91 | try: 92 | return pyC.getAssociatedGroups() 93 | except Exception as e: 94 | return launchError(e.message) 95 | 96 | # 97 | # Trigger Flask App 98 | # 99 | if __name__ == '__main__': 100 | print ("[SYS]\tLoading...") 101 | pyC = PyCheckmarx.PyCheckmarx() 102 | print ("[SYS]\tLoaded!") 103 | app.run(debug=True, host="0.0.0.0", port=5000) 104 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Duarte Monteiro 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /PyCheckmarx.py: -------------------------------------------------------------------------------- 1 | 2 | ############################### 3 | # > Author: Duarte Monteiro 4 | # > Version: 1.0 5 | # > Vendor: www.checkmarx.com 6 | # > Notes: Python API for Checkmarx WSDL 7 | ############################### 8 | 9 | # Python Dependencies 10 | from suds.client import Client 11 | from suds.sudsobject import asdict 12 | from suds.cache import NoCache 13 | import base64 14 | import re 15 | import json 16 | import time 17 | 18 | class PyCheckmarx(object): 19 | 20 | # Internal Variables for the Class 21 | DEBUG = False 22 | configPath = "etc/" 23 | errorLog = [] 24 | ttlReport = 6 25 | timeWaitReport = 3 26 | 27 | # 28 | # Init Function 29 | # 30 | def __init__(self): 31 | # Get Configuration 32 | self.getConfig() 33 | # Open Connection With Checkmarx 34 | self.Initclient = self.openConnection() 35 | # Get the Service URL 36 | self.serviceUrl = self.getServiceUrl(self.Initclient) 37 | # Get the Session Id and Client Object 38 | (self.sessionId, self.client) = self.getSessionId(self.Initclient,self.serviceUrl) 39 | return None 40 | 41 | ########################################## 42 | # 43 | # Functions Related to Openning session with Checkmarx 44 | # 45 | ########################################## 46 | 47 | # 48 | # Get Configuration 49 | # 50 | def getConfig(self): 51 | try: 52 | with open(self.configPath + "config.json", "r") as outfile: 53 | tmpJson = json.load(outfile)["checkmarx"] 54 | self.USERNAME = str(tmpJson["username"]) 55 | self.PASSWORD = str(tmpJson["password"]) 56 | self.URL = str(tmpJson["url"]) 57 | self.APITYPE = tmpJson["APIType"] 58 | except Exception as e: 59 | raise Exception("Unable to get configuration: %s" % e.message) 60 | 61 | # 62 | # Open Connection 63 | # 64 | def openConnection(self): 65 | try: 66 | tmpClient = Client(self.URL) 67 | if self.DEBUG: 68 | print dir(tmpClient) 69 | return tmpClient 70 | except Exception as e: 71 | raise Exception("Unable to establish connection with WSDL [%s]: %s " % (self.URL, e.message)) 72 | 73 | # 74 | # Get Service URL 75 | # 76 | def getServiceUrl(self, client): 77 | try: 78 | CxClient = client.factory.create('CxClientType') 79 | responseDiscovery = client.service.GetWebServiceUrl(CxClient.SDK,self.APITYPE) 80 | 81 | if responseDiscovery.IsSuccesfull: 82 | serviceUrl = responseDiscovery.ServiceURL 83 | else: 84 | raise Exception("Error establishing connection > %s" % cxSDK.ErrorMessage) 85 | 86 | if self.DEBUG: 87 | print "Response Discovery Object:", dir(responseDiscovery) 88 | print "Service Url:", serviceUrl 89 | 90 | return serviceUrl 91 | except Exception as e: 92 | raise Exception("Unable to get Service URL: %s" % e.message) 93 | 94 | # 95 | # Login in Checkmarx and retrive the Session ID 96 | # 97 | def getSessionId(self,client, serviceUrl): 98 | try: 99 | clientSDK = Client(serviceUrl + "?wsdl", cache=NoCache()) 100 | 101 | CxLogin = clientSDK.factory.create("Credentials") 102 | CxLogin.User = self.USERNAME 103 | CxLogin.Pass = self.PASSWORD 104 | 105 | cxSDK = clientSDK.service.Login(CxLogin,1033) 106 | 107 | if not cxSDK.IsSuccesfull: 108 | raise Exception("Unable to Login > %s" % cxSDK.ErrorMessage) 109 | 110 | if self.DEBUG: 111 | print "Service Object:", dir(client) 112 | print "Login Object:", dir(cxSDK) 113 | print "Session ID:", cxSDK.SessionId 114 | 115 | return (cxSDK.SessionId, clientSDK) 116 | except Exception as e: 117 | raise Exception("Unable to get SessionId from [%s] : %s" % (serviceUrl,e.message)) 118 | 119 | ########################################## 120 | # 121 | # Functions Related to the functionality of the WSDL 122 | # 123 | ########################################## 124 | 125 | # 126 | # Get data from the Projects 127 | # 128 | def getProjectScannedDisplayData(self, filterOn=False): 129 | tmp = self.client.service.GetProjectScannedDisplayData(self.sessionId) 130 | 131 | if not tmp.IsSuccesfull: 132 | raise Exception("Unable to get data from the server.") 133 | 134 | if self.DEBUG: 135 | print dir(tmp) 136 | 137 | if not filterOn: 138 | return self.convertToJson(tmp) 139 | else: 140 | return tmp.ProjectScannedList[0] 141 | 142 | # 143 | # Get Project Display Data 144 | # 145 | def getProjectsDisplayData(self, filterOn=False): 146 | tmp = self.client.service.GetProjectsDisplayData(self.sessionId) 147 | 148 | if not tmp.IsSuccesfull: 149 | raise Exception("Unable to get data from the server.") 150 | 151 | if self.DEBUG: 152 | print dir(tmp) 153 | 154 | if not filterOn: 155 | return self.convertToJson(tmp) 156 | else: 157 | return tmp.projectList[0] 158 | 159 | # 160 | # Get Scan Info For All Projects 161 | # 162 | def getScanInfoForAllProjects(self, filterOn=False): 163 | tmp = self.client.service.GetScansDisplayDataForAllProjects(self.sessionId) 164 | if not tmp.IsSuccesfull: 165 | raise Exception("Unable to get data from the server.") 166 | 167 | if self.DEBUG: 168 | print dir(tmp) 169 | 170 | 171 | if not filterOn: 172 | return self.convertToJson(tmp) 173 | else: 174 | return tmp 175 | 176 | # 177 | # Get Preset List 178 | # 179 | def getPresetList(self): 180 | tmp = self.client.service.GetPresetList(self.sessionId) 181 | 182 | if not tmp.IsSuccesfull: 183 | raise Exception("Unable to get data from the server.") 184 | 185 | if self.DEBUG: 186 | print dir(tmp) 187 | 188 | return self.convertToJson(tmp) 189 | 190 | # 191 | # Get Configuration List 192 | # 193 | def getConfigurationList(self): 194 | tmp = self.client.service.GetConfigurationSetList(self.sessionId) 195 | 196 | if not tmp.IsSuccesfull: 197 | raise Exception("Unable to get data from the server.") 198 | 199 | if self.DEBUG: 200 | print dir(tmp) 201 | 202 | return self.convertToJson(tmp) 203 | 204 | # 205 | # Get Associated Groups List 206 | # 207 | def getAssociatedGroups(self): 208 | tmp = self.client.service.GetAssociatedGroupsList(self.sessionId) 209 | 210 | if not tmp.IsSuccesfull: 211 | raise Exception("Unable to get data from the server.") 212 | 213 | if self.DEBUG: 214 | print dir(tmp) 215 | 216 | return self.convertToJson(tmp) 217 | 218 | # 219 | # Filter For [getProjectScannedDisplayData] 220 | # 221 | def filterProjectScannedDisplayData(self, projectID): 222 | tmpProjects = self.getProjectScannedDisplayData(True) 223 | for project in tmpProjects: 224 | if project.ProjectID == projectID: 225 | return self.convertToJson(project) 226 | 227 | raise Exception("Could not find ProjectID: %s " % projectID) 228 | 229 | # 230 | # Filter for [getProjectsDisplayData] 231 | # 232 | def filterProjectsDisplayData(self,projectID): 233 | tmpProjects = self.getProjectsDisplayData(True) 234 | for project in tmpProjects: 235 | if project.projectID == projectID: 236 | return self.convertToJson(project) 237 | 238 | raise Exception("Could not find ProjectID: %s " % projectID) 239 | 240 | # 241 | # Filter for [getScanInfoForAllProjects] 242 | # 243 | def filterScanInfoForAllProjects(self,projectID): 244 | tmpProjects = self.getScanInfoForAllProjects(True).ScanList[0] 245 | for project in tmpProjects: 246 | if project.ProjectId == projectID: 247 | return self.convertToJson(project) 248 | 249 | raise Exception("Could not find ProjectID: %s " % projectID) 250 | 251 | # 252 | # Get Suppressed Issues 253 | # 254 | def getSupressedIssues(self, scanID): 255 | CxWSReportType = self.client.factory.create("CxWSReportType") 256 | CxReportRequest = self.client.factory.create("CxWSReportRequest") 257 | CxReportRequest.ScanID = scanID 258 | CxReportRequest.Type = CxWSReportType.XML 259 | createReportResponse = self.client.service.CreateScanReport(self.sessionId, CxReportRequest) 260 | if createReportResponse.IsSuccesfull: 261 | 262 | if self.DEBUG: 263 | print createReportResponse 264 | print "Success. Creating Get Scan Report Status" 265 | 266 | inc = 0 267 | while inc < self.ttlReport: 268 | inc += 1 269 | reportStatusResponse = self.client.service.GetScanReportStatus(self.sessionId, createReportResponse.ID) 270 | if reportStatusResponse.IsSuccesfull and reportStatusResponse.IsReady: 271 | break 272 | 273 | if self.DEBUG: 274 | print "fail" 275 | time.sleep(self.timeWaitReport) 276 | 277 | if self.DEBUG: 278 | print "Sucess. Creating Get Scan Report" 279 | responseScanResults = self.client.service.GetScanReport(self.sessionId, createReportResponse.ID ) 280 | 281 | if responseScanResults.IsSuccesfull and responseScanResults.ScanResults: 282 | 283 | XMLData = base64.b64decode(responseScanResults.ScanResults) 284 | 285 | issues = re.findall('FalsePositive="([a-zA-Z]+)" Severity="([a-zA-Z]+)"', XMLData) 286 | 287 | if self.DEBUG: 288 | print responseScanResults 289 | print issues 290 | 291 | mediumSupressIssues = 0 292 | lowSupressIssues = 0 293 | highSupressIssues = 0 294 | otherSupressIssues = 0 295 | 296 | for a,b in issues: 297 | if a == "True": 298 | if b == "Medium": 299 | mediumSupressIssues += 1 300 | elif b == "High": 301 | highSupressIssues += 1 302 | elif b == "Low": 303 | lowSupressIssues += 1 304 | else: 305 | otherSupressIssues += 1 306 | if self.DEBUG: 307 | print highSupressIssues 308 | print mediumSupressIssues 309 | print lowSupressIssues 310 | return {"highSupressIssues": highSupressIssues, "mediumSupressIssues": mediumSupressIssues, "lowSupressIssues": lowSupressIssues} 311 | else: 312 | raise Exception("Unable to Get Report") 313 | 314 | else: 315 | raise Exception("Unable to get Supressed") 316 | 317 | # 318 | # Convert Suds object into serializable format. 319 | # 320 | def recursive_asdict(self,d): 321 | out = {} 322 | for k, v in asdict(d).iteritems(): 323 | if hasattr(v, '__keylist__'): 324 | out[k] = self.recursive_asdict(v) 325 | elif isinstance(v, list): 326 | out[k] = [] 327 | for item in v: 328 | if hasattr(item, '__keylist__'): 329 | out[k].append(self.recursive_asdict(item)) 330 | else: 331 | out[k].append(item) 332 | else: 333 | out[k] = v 334 | return out 335 | 336 | 337 | # 338 | # Return Subs Object into Serializable format Handler 339 | # 340 | def convertToJson(self, data): 341 | try: 342 | tmp = self.recursive_asdict(data) 343 | return json.dumps(tmp) 344 | except Exception as e: 345 | raise Exception("Unable to convert to JSON: %s" % e.message) 346 | 347 | 348 | ########################################## 349 | # 350 | # Testing AREA 351 | # 352 | ########################################## 353 | 354 | #tmp = PyCheckmarx() 355 | #print tmp.filterProjectScannedDisplayData(20004) 356 | #print tmp.getSupressedIssues("1000004") 357 | 358 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PyCheckmarx 2 | Python API and REST API for the Checkmarx WSDL 3 | 4 | -------------------------------------------------------------------------------- /etc/config.json_template: -------------------------------------------------------------------------------- 1 | { 2 | "checkmarx":{ 3 | "url":":", 4 | "APIType":1, 5 | "username":"admin@cx", 6 | "password":"admin", 7 | "APIversion":"0.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /sdk.txt: -------------------------------------------------------------------------------- 1 | Service ( CxSDKWebService ) tns="http://Checkmarx.com/v7" 2 | Prefixes (1) 3 | ns0 = "http://Checkmarx.com/v7" 4 | Ports (2): 5 | (CxSDKWebServiceSoap) 6 | Methods (21): 7 | CancelScan(xs:string sessionID, xs:string RunId, ) 8 | CreateScanReport(xs:string sessionID, CxWSReportRequest reportRequest, ) 9 | DeleteProjects(xs:string sessionID, ArrayOfLong projectIDs, ) 10 | DeleteScans(xs:string sessionID, ArrayOfLong scanIDs, ) 11 | GetAssociatedGroupsList(xs:string SessionID, ) 12 | GetConfigurationSetList(xs:string SessionID, ) 13 | GetPresetList(xs:string SessionID, ) 14 | GetProjectConfiguration(xs:string sessionID, xs:long projectID, ) 15 | GetProjectScannedDisplayData(xs:string sessionID, ) 16 | GetProjectsDisplayData(xs:string sessionID, ) 17 | GetScanReport(xs:string SessionID, xs:long ReportID, ) 18 | GetScanReportStatus(xs:string SessionID, xs:long ReportID, ) 19 | GetScanSummary(xs:string SessionID, xs:long ScanID, ) 20 | GetScansDisplayDataForAllProjects(xs:string sessionID, ) 21 | GetStatusOfSingleScan(xs:string sessionID, xs:string runId, ) 22 | Login(Credentials applicationCredentials, xs:int lcid, ) 23 | Scan(xs:string sessionId, CliScanArgs args, ) 24 | ScanWithScheduling(xs:string sessionId, CliScanArgs args, xs:string schedulingData, ) 25 | ScanWithSchedulingWithCron(xs:string sessionId, CliScanArgs args, xs:string cronString, xs:long utcEpochStartTime, xs:long utcEpochEndTime, ) 26 | UpdateProjectIncrementalConfiguration(xs:string sessionID, xs:long projectID, ProjectConfiguration projectConfiguration, ) 27 | UpdateScanComment(xs:string sessionID, xs:long ScanID, xs:string Comment, ) 28 | Types (66): 29 | ArrayOfConfigurationSet 30 | ArrayOfCxWSIssueTrackingParam 31 | ArrayOfCxWSQueryLanguageState 32 | ArrayOfDayOfWeek 33 | ArrayOfGroup 34 | ArrayOfLong 35 | ArrayOfPreset 36 | ArrayOfProjectDisplayData 37 | ArrayOfProjectScannedDisplayData 38 | ArrayOfScanAction 39 | ArrayOfScanDisplayData 40 | ArrayOfScanPath 41 | ArrayOfString 42 | CliScanArgs 43 | ConfigurationSet 44 | Credentials 45 | CurrentStatusEnum 46 | CxClientType 47 | CxDateTime 48 | CxWSBasicRepsonse 49 | CxWSCreateReportResponse 50 | CxWSIssueTrackingParam 51 | CxWSProjectIssueTrackingSettings 52 | CxWSQueryLanguageState 53 | CxWSReportRequest 54 | CxWSReportStatusResponse 55 | CxWSReportType 56 | CxWSResponseConfigSetList 57 | CxWSResponseGroupList 58 | CxWSResponseLoginData 59 | CxWSResponsePresetList 60 | CxWSResponseProjectConfig 61 | CxWSResponseProjectScannedDisplayData 62 | CxWSResponseProjectsDisplayData 63 | CxWSResponseRunID 64 | CxWSResponseScanResults 65 | CxWSResponseScanStatus 66 | CxWSResponseScanSummary 67 | CxWSResponseScansDisplayData 68 | CxWSResponseSessionID 69 | DayOfWeek 70 | GitLsRemoteViewType 71 | Group 72 | GroupType 73 | LocalCodeContainer 74 | Preset 75 | ProjectConfiguration 76 | ProjectDisplayData 77 | ProjectScannedDisplayData 78 | ProjectSettings 79 | RepositoryType 80 | ScanAction 81 | ScanActionSettings 82 | ScanActionType 83 | ScanDisplayData 84 | ScanEventType 85 | ScanPath 86 | ScanType 87 | ScheduleSettings 88 | ScheduleType 89 | SourceCodeSettings 90 | SourceControlProtocolType 91 | SourceControlSettings 92 | SourceFilterPatterns 93 | SourceLocationType 94 | UserPermission 95 | (CxSDKWebServiceSoap12) 96 | Methods (21): 97 | CancelScan(xs:string sessionID, xs:string RunId, ) 98 | CreateScanReport(xs:string sessionID, CxWSReportRequest reportRequest, ) 99 | DeleteProjects(xs:string sessionID, ArrayOfLong projectIDs, ) 100 | DeleteScans(xs:string sessionID, ArrayOfLong scanIDs, ) 101 | GetAssociatedGroupsList(xs:string SessionID, ) 102 | GetConfigurationSetList(xs:string SessionID, ) 103 | GetPresetList(xs:string SessionID, ) 104 | GetProjectConfiguration(xs:string sessionID, xs:long projectID, ) 105 | GetProjectScannedDisplayData(xs:string sessionID, ) 106 | GetProjectsDisplayData(xs:string sessionID, ) 107 | GetScanReport(xs:string SessionID, xs:long ReportID, ) 108 | GetScanReportStatus(xs:string SessionID, xs:long ReportID, ) 109 | GetScanSummary(xs:string SessionID, xs:long ScanID, ) 110 | GetScansDisplayDataForAllProjects(xs:string sessionID, ) 111 | GetStatusOfSingleScan(xs:string sessionID, xs:string runId, ) 112 | Login(Credentials applicationCredentials, xs:int lcid, ) 113 | Scan(xs:string sessionId, CliScanArgs args, ) 114 | ScanWithScheduling(xs:string sessionId, CliScanArgs args, xs:string schedulingData, ) 115 | ScanWithSchedulingWithCron(xs:string sessionId, CliScanArgs args, xs:string cronString, xs:long utcEpochStartTime, xs:long utcEpochEndTime, ) 116 | UpdateProjectIncrementalConfiguration(xs:string sessionID, xs:long projectID, ProjectConfiguration projectConfiguration, ) 117 | UpdateScanComment(xs:string sessionID, xs:long ScanID, xs:string Comment, ) 118 | Types (66): 119 | ArrayOfConfigurationSet 120 | ArrayOfCxWSIssueTrackingParam 121 | ArrayOfCxWSQueryLanguageState 122 | ArrayOfDayOfWeek 123 | ArrayOfGroup 124 | ArrayOfLong 125 | ArrayOfPreset 126 | ArrayOfProjectDisplayData 127 | ArrayOfProjectScannedDisplayData 128 | ArrayOfScanAction 129 | ArrayOfScanDisplayData 130 | ArrayOfScanPath 131 | ArrayOfString 132 | CliScanArgs 133 | ConfigurationSet 134 | Credentials 135 | CurrentStatusEnum 136 | CxClientType 137 | CxDateTime 138 | CxWSBasicRepsonse 139 | CxWSCreateReportResponse 140 | CxWSIssueTrackingParam 141 | CxWSProjectIssueTrackingSettings 142 | CxWSQueryLanguageState 143 | CxWSReportRequest 144 | CxWSReportStatusResponse 145 | CxWSReportType 146 | CxWSResponseConfigSetList 147 | CxWSResponseGroupList 148 | CxWSResponseLoginData 149 | CxWSResponsePresetList 150 | CxWSResponseProjectConfig 151 | CxWSResponseProjectScannedDisplayData 152 | CxWSResponseProjectsDisplayData 153 | CxWSResponseRunID 154 | CxWSResponseScanResults 155 | CxWSResponseScanStatus 156 | CxWSResponseScanSummary 157 | CxWSResponseScansDisplayData 158 | CxWSResponseSessionID 159 | DayOfWeek 160 | GitLsRemoteViewType 161 | Group 162 | GroupType 163 | LocalCodeContainer 164 | Preset 165 | ProjectConfiguration 166 | ProjectDisplayData 167 | ProjectScannedDisplayData 168 | ProjectSettings 169 | RepositoryType 170 | ScanAction 171 | ScanActionSettings 172 | ScanActionType 173 | ScanDisplayData 174 | ScanEventType 175 | ScanPath 176 | ScanType 177 | ScheduleSettings 178 | ScheduleType 179 | SourceCodeSettings 180 | SourceControlProtocolType 181 | SourceControlSettings 182 | SourceFilterPatterns 183 | SourceLocationType 184 | UserPermission --------------------------------------------------------------------------------