diff options
Diffstat (limited to 'bin/acme/srtool_defect.py')
-rwxr-xr-x | bin/acme/srtool_defect.py | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/bin/acme/srtool_defect.py b/bin/acme/srtool_defect.py new file mode 100755 index 00000000..6178dcaf --- /dev/null +++ b/bin/acme/srtool_defect.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python3 +# +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# Security Response Tool Commandline Tool +# +# Copyright (C) 2018 Wind River Systems +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +### Usage Examples (run from top level directory) +# Updating Defect System Issues: ./bin/acme/srtool_defect.py -U + + +import os +import sys +import re +import csv +import xml.etree.ElementTree as ET +import argparse +import sqlite3 +import subprocess +import json +import urllib +from time import sleep +from datetime import datetime + +# load the srt.sqlite schema indexes +dir_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) +sys.path.insert(0, dir_path) +from common.srt_schema import ORM + +try: + from datetime import datetime, date + from urllib.request import urlopen, URLError + from urllib.parse import urlparse +except ImportError: + from urllib2 import urlopen, URLError + from urlparse import urlparse + +srtDbName = 'srt.sqlite' +srtErrorLog = 'srt_errors.txt' + +################################# +# Helper methods +# + +verbose = False + +def debugMsg(msg): + if verbose: + print(msg) + +overrides = {} + +def set_override(key,value=None): + if not value is None: + overrides[key] = value + elif key in os.environ.keys(): + overrides[key] = 'yes' if os.environ[key].startswith('1') else 'no' + else: + overrides[key] = 'no' + if 'yes' == overrides[key]: + print("OVERRIDE: %s = %s" % (key,overrides[key])) + +def get_override(key): + if key in overrides.keys(): + return 'yes' == overrides[key] + return False + +def srt_error_log(msg): + f1=open(srtErrorLog, 'a') + f1.write("|" + msg + "|\n" ) + f1.close() + +def get_tag_key(tag,key): + d = json.loads(tag) + return d[key] + +################################# +# class to hold fields of a Defect System issues +# + +class Defect: + project = '' + product_id = '' + + def __init__(self,*args, **kwargs): + self.reset() + + # reset all but persistent project info + def reset(self): + self.id = -1 + self.name = '' + self.summary = '' + self.url = '' + self.priority = -1 + self.status = '' + self.resolution = 'Unresolved' + self.publish = '' + + # RCPL + self.release_version = '' + + self.date_created = '' + self.date_updated = '' + + # extra fields + self.cve_status = '' + self.vi_status = '' + self.vi_outcome = '' + + +################################# +# Import Defect System defects +# + +################################# +# Defect System list update +# + +################################# +# Defect System add to investigation +# + +################################# +# defect_del_from_defect_db +# + +################################# +# New defect +# + +################################# +# Init/Update from Defect System status +# + +################################# +# main loop +# + +def main(argv): + global force_update + global verbose + global master_log + global srt_user + global srt_passwd + + parser = argparse.ArgumentParser(description='srtool_defect.py: Manage the SRTool to Defect System connection') + parser.add_argument('--init-defect', '-i', action='store_const', const='init_defect', dest='command', help='Init and import Defect System states and update defects') + parser.add_argument('--update-defect', '-u', action='store_const', const='update_defect', dest='command', help='Import Defect System states and update defects') + parser.add_argument('--update-defect-list', '-l', dest='defect_update_list', help='List of Defect System defects to update in SRTool database') + parser.add_argument('--defect_er', '-e', nargs=1, help='Query list of pending ERs under a project, review them, and assign to Rally themes') + parser.add_argument('--force', '-f', action='store_true', dest='force_update', help='Force updates') + parser.add_argument('--verbose', '-v', action='store_true', dest='verbose', help='Verbose debugging') + parser.add_argument('--user', dest='user', help='User name for Defect System access') + parser.add_argument('--passwd', dest='passwd', help='User password for Defect System access') + + parser.add_argument('--add', nargs=1, help='Add an existing defect to SRTool defect database') + parser.add_argument('--delete', nargs=1, help='Delete an existing defect from SRTool defect database') + parser.add_argument('--new', nargs=6, help='Create a new defect "--new <program> <summary> <description> <priority> <components> <urllink>"') + parser.add_argument('--defect-projects', '-P', action='store_const', const='defect-projects', dest='command', help='Defect System projects') + + args = parser.parse_args() + + master_log = open("./update_logs/master_log.txt", "a") + + # Authorization + if args.user: + srt_user = args.user + else: + srt_user = os.environ.get('SRT_USER') + if args.passwd: + srt_passwd = args.passwd + else: + srt_passwd = os.environ.get('SRT_PASSWD') + if not srt_user or not srt_passwd: + msg = "FATAL ERROR: Missing user/password for Defect System access" + print(msg) + srt_error_log(msg) + return 1 + + force_update = False + if None != args.force_update: + force_update = args.force_update + if None != args.verbose: + verbose = True + + defect_list = '' + if None != args.defect_update_list: + defect_list = args.defect_update_list + + if args.defect_er: + #get_defect_er(args.defect_er[0]) + print("NOT IMPLEMENTED") + elif args.add: + #defect_add_to_defect_db(args.add[0]) + print("NOT IMPLEMENTED") + elif args.delete: + #defect_del_from_defect_db(args.add[0]) + print("NOT IMPLEMENTED") + elif args.new: + #defect_new_defect(args.new[0],args.new[1],args.new[2],args.new[3],args.new[4],args.new[5]) + print("NOT IMPLEMENTED") + elif 'init_defect' == args.command: + #update_defect(True) + print("NOT IMPLEMENTED") + elif 'update_defect' == args.command: + #update_defect(False) + print("NOT IMPLEMENTED") + elif defect_list: + #defect_update_list(defect_list) + print("NOT IMPLEMENTED") + elif 'defect-projects' == args.command: + #get_projects() + print("NOT IMPLEMENTED") + else: + print("Command not found") + +if __name__ == '__main__': + global srtool_basepath + + if verbose: print("srtool_defect(%s)" % sys.argv[1:]) + + # fetch any environment overrides + #set_override('SRTDBG_MINIMAL_DB') + + srtool_basepath = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))) + main(sys.argv[1:]) |