def __init__( self, config=None, db_name='report_tracker.db', purge=False, verbose=None, debug=False, username=None, password=None, ): super(vulnWhispererJIRA, self).__init__(config=config) self.logger = logging.getLogger('vulnWhispererJira') if debug: self.logger.setLevel(logging.DEBUG) self.config_path = config self.config = vwConfig(config) if config is not None: try: self.logger.info('Attempting to connect to jira...') self.jira = \ JiraAPI(hostname=self.hostname, username=self.username, password=self.password) self.jira_connect = True self.logger.info('Connected to jira on {host}'.format(host=self.hostname)) except Exception as e: self.logger.error('Exception: {}'.format(str(e))) raise Exception( 'Could not connect to nessus -- Please verify your settings in {config} are correct and try again.\nReason: {e}'.format( config=self.config.config_in, e=e)) sys.exit(1) profiles = [] profiles = self.get_scan_profiles() if not self.config.exists_jira_profiles(profiles): self.config.update_jira_profiles(profiles) self.logger.info("Jira profiles have been created in {config}, please fill the variables before rerunning the module.".format(config=self.config_path)) sys.exit(0)
def get_env_variables(self, source, scan_name): # function returns an array with [jira_project, jira_components, datafile_path] #Jira variables jira_section = self.config.normalize_section("{}.{}".format(source,scan_name)) project = self.config.get(jira_section,'jira_project') if project == "": self.logger.error('JIRA project is missing on the configuration file!') sys.exit(0) # check that project actually exists if not self.jira.project_exists(project): self.logger.error("JIRA project '{project}' doesn't exist!".format(project=project)) sys.exit(0) components = self.config.get(jira_section,'components').split(',') #cleaning empty array from '' if not components[0]: components = [] min_critical = self.config.get(jira_section,'min_critical_to_report') if not min_critical: self.logger.error('"min_critical_to_report" variable on config file is empty.') sys.exit(0) #datafile path filename = self.get_latest_results(source, scan_name) # search data files under user specified directory for root, dirnames, filenames in os.walk(vwConfig(self.config_path).get(source,'write_path')): if filename in filenames: fullpath = "{}/{}".format(root,filename) if not fullpath: self.logger.error('Scan file path "{scan_name}" for source "{source}" has not been found.'.format(scan_name=scan_name, source=source)) return 0 return project, components, fullpath, min_critical
def __init__( self, config=None, db_name='report_tracker.db', purge=False, verbose=None, debug=False, username=None, password=None, section=None, develop=False, ): if self.CONFIG_SECTION is None: raise Exception('Implementing class must define CONFIG_SECTION') self.db_name = db_name self.purge = purge self.develop = develop if config is not None: self.config = vwConfig(config_in=config) self.enabled = self.config.get(self.CONFIG_SECTION, 'enabled') self.hostname = self.config.get(self.CONFIG_SECTION, 'hostname') self.username = self.config.get(self.CONFIG_SECTION, 'username') self.password = self.config.get(self.CONFIG_SECTION, 'password') self.write_path = self.config.get(self.CONFIG_SECTION, 'write_path') self.db_path = self.config.get(self.CONFIG_SECTION, 'db_path') self.verbose = self.config.getbool(self.CONFIG_SECTION, 'verbose') if self.db_name is not None: if self.db_path: self.database = os.path.join(self.db_path, db_name) else: self.database = \ os.path.abspath(os.path.join(os.path.dirname(__file__), 'database', db_name)) if not os.path.exists(self.db_path): os.makedirs(self.db_path) self.vprint('{info} Creating directory {dir}'.format(info=bcolors.INFO, dir=self.db_path)) if not os.path.exists(self.database): with open(self.database, 'w'): self.vprint('{info} Creating file {dir}'.format(info=bcolors.INFO, dir=self.database)) pass try: self.conn = sqlite3.connect(self.database) self.cur = self.conn.cursor() self.vprint('{info} Connected to database at {loc}'.format(info=bcolors.INFO, loc=self.database)) except Exception as e: self.vprint( '{fail} Could not connect to database at {loc}\nReason: {e} - Please ensure the path exist'.format( e=e, fail=bcolors.FAIL, loc=self.database)) else: self.vprint('{fail} Please specify a database to connect to!'.format(fail=bcolors.FAIL)) exit(0) self.table_columns = [ 'scan_name', 'scan_id', 'last_modified', 'filename', 'download_time', 'record_count', 'source', 'uuid', 'processed', ] self.init() self.uuids = self.retrieve_uuids() self.processed = 0 self.skipped = 0 self.scan_list = []
def __init__(self, config=None, db_name='report_tracker.db', purge=False, verbose=None, debug=False): self.verbose = verbose self.nessus_connect = False self.develop = True self.purge = purge if config is not None: try: self.config = vwConfig(config_in=config) self.nessus_enabled = self.config.getbool('nessus', 'enabled') if self.nessus_enabled: self.nessus_hostname = self.config.get('nessus', 'hostname') self.nessus_port = self.config.get('nessus', 'port') self.nessus_username = self.config.get('nessus', 'username') self.nessus_password = self.config.get('nessus', 'password') self.nessus_writepath = self.config.get('nessus', 'write_path') self.nessus_dbpath = self.config.get('nessus', 'db_path') self.nessus_trash = self.config.getbool('nessus', 'trash') self.verbose = self.config.getbool('nessus', 'verbose') try: self.vprint( '{info} Attempting to connect to nessus...'.format(info=bcolors.INFO)) self.nessus = NessusAPI(hostname=self.nessus_hostname, port=self.nessus_port, username=self.nessus_username, password=self.nessus_password) self.nessus_connect = True self.vprint( '{success} Connected to nessus on {host}:{port}'.format(success=bcolors.SUCCESS, host=self.nessus_hostname, port=str(self.nessus_port))) except Exception as e: self.vprint(e) raise Exception( "{fail} Could not connect to nessus -- Please verify your settings in {config} are correct and try again.\nReason: {e}".format(config=self.config, fail=bcolors.FAIL, e=e)) except Exception as e: self.vprint('{fail} Could not properly load your config!\nReason: {e}'.format(fail=bcolors.FAIL, e=e)) sys.exit(0) if db_name is not None: if self.nessus_dbpath: self.database = os.path.join(self.nessus_dbpath, db_name) else: self.database = os.path.abspath(os.path.join(os.path.dirname( __file__ ), 'database', db_name)) try: self.conn = sqlite3.connect(self.database) self.cur = self.conn.cursor() self.vprint("{info} Connected to database at {loc}".format(info=bcolors.INFO, loc=self.database)) except Exception as e: self.vprint("{fail} Could not connect to database at {loc}\nReason: {e} - Please ensure the path exist".format(e=e, fail=bcolors.FAIL, loc=self.database)) else: self.vprint('{fail} Please specify a database to connect to!'.format(fail=bcolors.FAIL)) exit(0) self.table_columns = ['scan_name', 'scan_id', 'last_modified', 'filename', 'download_time', 'record_count', 'source', 'uuid', 'processed'] self.init() self.uuids = self.retrieve_uuids() self.processed = 0 self.skipped = 0 self.scan_list = []