aboutsummaryrefslogtreecommitdiffstats
path: root/bin/acme/srtool_defect.py
diff options
context:
space:
mode:
Diffstat (limited to 'bin/acme/srtool_defect.py')
-rwxr-xr-xbin/acme/srtool_defect.py241
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:])