diff options
Diffstat (limited to 'lib/srtgui/tables.py')
-rw-r--r-- | lib/srtgui/tables.py | 809 |
1 files changed, 738 insertions, 71 deletions
diff --git a/lib/srtgui/tables.py b/lib/srtgui/tables.py index 44d02a11..e80ee71e 100644 --- a/lib/srtgui/tables.py +++ b/lib/srtgui/tables.py @@ -19,12 +19,17 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +import re +import json + from srtgui.widgets import ToasterTable from orm.models import Cve, Vulnerability, Investigation, CweTable, Product from orm.models import Package -from orm.models import CpeTable, CpeFilter, Defect, DataSource +from orm.models import CpeTable, CpeFilter, Defect, DataSource, SrtSetting from orm.models import PublishPending from orm.models import Notify, NotifyCategories +from orm.models import CveHistory, VulnerabilityHistory, InvestigationHistory, DefectHistory +from orm.models import PublishSet from users.models import UserSafe from django.db.models import Q @@ -32,8 +37,6 @@ from django.db.models import Q from srtgui.tablefilter import TableFilter from srtgui.tablefilter import TableFilterActionToggle -import re - # quick development/debugging support from srtgui.api import _log @@ -159,24 +162,6 @@ class CvesTable(ToasterTable): hidden=True, ) - self.add_column(title="Data Type", - field_name="cve_data_type", - hideable=True, - hidden=True, - ) - - self.add_column(title="Data Format", - field_name="cve_data_format", - hideable=True, - hidden=True, - ) - - self.add_column(title="Data Version", - field_name="cve_data_version", - hideable=True, - hidden=True, - ) - self.add_column(title="Description", field_name="description", hideable=False, @@ -205,23 +190,23 @@ class CvesTable(ToasterTable): static_data_template=priority_v2_template, ) - self.add_column(title="Packages", + self.add_column(title="Affected Components", field_name="packages", - hideable=True, - hidden=True, + hideable=False, + hidden=False, ) self.add_column(title="Published", help_text="Initial publish date of the CVE", hideable=False, - #orderable=True, + orderable=True, field_name="publishedDate", ) self.add_column(title="Modified", help_text="Last modification date of the CVE", hideable=True, - #orderable=True, + orderable=True, field_name="lastModifiedDate", ) @@ -237,6 +222,12 @@ class CvesTable(ToasterTable): hideable=True, ) + self.add_column(title="Tags", + field_name="tags", + hideable=True, + hidden=True, + ) + self.add_column(title="Publish Request", help_text="SRT Publish Request State", hideable=True, @@ -289,7 +280,7 @@ class CvesTable(ToasterTable): orderable=True, field_name="srt_updated", static_data_name="srt_updated", - static_data_template='{{data.srt_updated | date:"m/d/y H:i"}}' + static_data_template='{{data.srt_updated | date:"Y/m/d"}}' ) source_count_template = ''' @@ -315,6 +306,9 @@ class SelectCveTable(ToasterTable): context = super(SelectCveTable, self).get_context_data(**kwargs) context['products'] = Product.objects.all() context['components'] = Defect.Components + context['doesnotimpact_text'] = SrtSetting.get_setting('SRTOOL_DEFECT_DOESNOTIMPACT',"It doesn't impact the product") + context['components'] = Defect.Components + return context def apply_row_customization(self, row): @@ -562,39 +556,76 @@ class DefectsTable(ToasterTable): def setup_filters(self, *args, **kwargs): - # Priority filter - is_priority = TableFilter(name="is_priority", + # Defect Priority filter + is_defect_priority = TableFilter(name="is_defect_priority", title="Filter defects by 'Priority'") - for priority in range(len(Defect.Priority)): - is_priority.add_action(TableFilterActionToggle( - Defect.Priority[priority][1].lower().replace(' ','_'), - Defect.Priority[priority][1], - Q(priority=Defect.Priority[priority][0])) + for priority in range(len(Defect.DEFECT_PRIORITY)): + if Defect.DEFECT_PRIORITY_ERROR == Defect.DEFECT_PRIORITY[priority][0]: + continue + is_defect_priority.add_action(TableFilterActionToggle( + Defect.DEFECT_PRIORITY[priority][1].lower().replace(' ','_'), + Defect.DEFECT_PRIORITY[priority][1], + Q(priority=Defect.DEFECT_PRIORITY[priority][0])) ) - self.add_filter(is_priority) - - # Status filter - is_status = TableFilter(name="is_status", - title="Filter defects by 'Status'") - for status in range(len(Defect.Status)): - is_status.add_action(TableFilterActionToggle( - Defect.Status[status][1].lower().replace(' ','_'), - Defect.Status[status][1], - Q(status=Defect.Status[status][0])) + self.add_filter(is_defect_priority) + + # Defect Status filter + is_defect_status = TableFilter(name="is_defect_status", + title="Filter defects by defect 'Status'") + for status in range(len(Defect.DEFECT_STATUS)): + is_defect_status.add_action(TableFilterActionToggle( + Defect.DEFECT_STATUS[status][1].lower().replace(' ','_'), + Defect.DEFECT_STATUS[status][1], + Q(status=Defect.DEFECT_STATUS[status][0])) ) - self.add_filter(is_status) + self.add_filter(is_defect_status) # Resolution filter is_resolution = TableFilter(name="is_resolution", title="Filter defects by 'Resolution'") - for resolution in range(len(Defect.Resolution)): + for resolution in range(len(Defect.DEFECT_RESOLUTION)): is_resolution.add_action(TableFilterActionToggle( - Defect.Resolution[resolution][1].lower().replace(' ','_'), - Defect.Resolution[resolution][1], - Q(resolution=Defect.Resolution[resolution][0])) + Defect.DEFECT_RESOLUTION[resolution][1].lower().replace(' ','_'), + Defect.DEFECT_RESOLUTION[resolution][1], + Q(resolution=Defect.DEFECT_RESOLUTION[resolution][0])) ) self.add_filter(is_resolution) + # SRT Priority filter + is_srt_priority = TableFilter(name="is_srt_priority", + title="Filter defects by 'Priority'") + for priority in range(len(Defect.SRT_PRIORITY)): + if Defect.PRIORITY_ERROR == Defect.SRT_PRIORITY[priority][0]: + continue + is_srt_priority.add_action(TableFilterActionToggle( + Defect.SRT_PRIORITY[priority][1].lower().replace(' ','_'), + Defect.SRT_PRIORITY[priority][1], + Q(priority=Defect.SRT_PRIORITY[priority][0])) + ) + self.add_filter(is_srt_priority) + + # SRTool Status filter + is_srt_status = TableFilter(name="is_srt_status", + title="Filter defects by 'Status'") + for status in range(len(Defect.SRT_STATUS)): + is_srt_status.add_action(TableFilterActionToggle( + Defect.SRT_STATUS[status][1].lower().replace(' ','_'), + Defect.SRT_STATUS[status][1], + Q(status=Defect.SRT_STATUS[status][0])) + ) + self.add_filter(is_srt_status) + + # SRTool Outcome filter + is_srt_outcome = TableFilter(name="is_srt_outcome", + title="Filter defects by 'Outcome'") + for status in range(len(Defect.SRT_OUTCOME)): + is_srt_outcome.add_action(TableFilterActionToggle( + Defect.SRT_OUTCOME[status][1].lower().replace(' ','_'), + Defect.SRT_OUTCOME[status][1], + Q(status=Defect.SRT_OUTCOME[status][0])) + ) + self.add_filter(is_srt_outcome) + # Product filter #(name="Wind River Linux",version="LTS-17") is_product = TableFilter(name="is_product", @@ -631,31 +662,58 @@ class DefectsTable(ToasterTable): field_name="summary", ) - self.add_column(title="Priority", + self.add_column(title="Defect Priority", hideable=False, - field_name="priority", orderable=True, - filter_name="is_priority", - static_data_name="priority", - static_data_template='{{data.get_priority_text}}', + filter_name="is_defect_priority", + static_data_name="defect_priority", + static_data_template='{{data.get_defect_priority_text}}', ) - self.add_column(title="Status", + self.add_column(title="Defect Status", hideable=False, - field_name="status", orderable=True, - filter_name="is_status", - static_data_name="status", - static_data_template='{{data.get_status_text}}', + filter_name="is_defect_status", + static_data_name="defect_status", + static_data_template='{{data.get_defect_status_text}}', ) - self.add_column(title="Resolution", + self.add_column(title="Defect Resolution", hideable=False, - field_name="resolution", orderable=True, filter_name="is_resolution", - static_data_name="resolution", - static_data_template='{{data.get_resolution_text}}', + static_data_name="defect_resolution", + static_data_template='{{data.get_defect_resolution_text}}', + ) + + self.add_column(title="SRT Priority", + hideable=False, + orderable=True, + filter_name="is_srt_priority", + static_data_name="srt_priority", + static_data_template='{{data.get_priority_text}}', + ) + + self.add_column(title="SRT Status", + hideable=False, + orderable=True, + filter_name="is_srt_status", + static_data_name="srt_status", + static_data_template='{{data.get_status_text}}', + ) + + self.add_column(title="Duplicate Of", + hideable=True, + hidden=True, + field_name="duplicate_of", + ) + + self.add_column(title="Outcome", + hideable=True, + hidden=True, + filter_name="is_srt_outcome", + static_data_name="srt_outcome", + static_data_template='{{data.get_outcome_text}}', ) self.add_column(title="Release Version", @@ -712,6 +770,23 @@ class DefectsTable(ToasterTable): static_data_template=product_link_template, ) + self.add_column(title="Defect Created", + hideable=True, + hidden=True, + orderable=True, + field_name="date_created", + static_data_name="date_created", + static_data_template='{{date_created}}' + ) + self.add_column(title="Defect Update", + hideable=True, + hidden=True, + orderable=True, + field_name="date_updated", + static_data_name="date_updated", + static_data_template='{{data.date_updated}}' + ) + self.add_column(title="SRT Update", hideable=True, hidden=True, @@ -726,7 +801,7 @@ class CwesTable(ToasterTable): def __init__(self, *args, **kwargs): super(CwesTable, self).__init__(*args, **kwargs) - self.default_orderby = "name_sort" + self.default_orderby = "name" def get_context_data(self, **kwargs): context = super(CwesTable, self).get_context_data(**kwargs) @@ -1162,13 +1237,17 @@ class ProductsTable(ToasterTable): ) self.add_column(title="Defect Tags", - field_name="defect_tags", - hideable=False, + hideable=True, + hidden=True, + static_data_name="defect_tags", + static_data_template='{{data.get_defect_str}}', ) self.add_column(title="Product Tags", - field_name="product_tags", - hideable=False, + hideable=True, + hidden=True, + static_data_name="product_tags", + static_data_template='{{data.get_product_str}}', ) @@ -1262,6 +1341,10 @@ class VulnerabilitiesTable(ToasterTable): # Priority filter is_priority = TableFilter(name="is_priority", title="Filter Vulnerabilities by 'Priority'") + exec_is_undefined = TableFilterActionToggle( + "undefined", + "Undefined", + Q(priority=Vulnerability.UNDEFINED)) exec_is_low = TableFilterActionToggle( "low", "Low", @@ -1274,9 +1357,15 @@ class VulnerabilitiesTable(ToasterTable): "high", "High", Q(priority=Vulnerability.HIGH)) + exec_is_critical = TableFilterActionToggle( + "critical", + "Critical", + Q(priority=Vulnerability.CRITICAL)) + is_priority.add_action(exec_is_undefined) is_priority.add_action(exec_is_low) is_priority.add_action(exec_is_medium) is_priority.add_action(exec_is_high) + is_priority.add_action(exec_is_critical) self.add_filter(is_priority) def setup_queryset(self, *args, **kwargs): @@ -1356,6 +1445,12 @@ class VulnerabilitiesTable(ToasterTable): hideable=True, ) + self.add_column(title="Tags", + field_name="tags", + hideable=True, + hidden=True, + ) + investigate_link_template = ''' {% for investigation in data.vulnerability_investigation.all %} {% if not forloop.first %} {% endif %}<a href="{% url 'investigation' investigation.name %}" target="_blank">{{investigation.name}}</a> @@ -1397,6 +1492,16 @@ class VulnerabilitiesTable(ToasterTable): hidden=False, ) + self.add_column(title="SRT Update", + hideable=True, + hidden=True, + orderable=True, + field_name="srt_updated", + static_data_name="srt_updated", + static_data_template='{{data.srt_updated | date:"Y/m/d"}}' + ) + + class InvestigationsTable(ToasterTable): """Table of All Investigations in SRTool""" @@ -1458,23 +1563,34 @@ class InvestigationsTable(ToasterTable): # Priority filter is_priority = TableFilter(name="is_priority", title="Filter Investigations by 'Priority'") + exec_is_undefined = TableFilterActionToggle( + "undefined", + "Undefined", + Q(priority=Vulnerability.UNDEFINED)) exec_is_low = TableFilterActionToggle( "low", "Low", - Q(priority=Investigation.LOW)) + Q(priority=Vulnerability.LOW)) exec_is_medium = TableFilterActionToggle( "medium", "Medium", - Q(priority=Investigation.MEDIUM)) + Q(priority=Vulnerability.MEDIUM)) exec_is_high = TableFilterActionToggle( "high", "High", - Q(priority=Investigation.HIGH)) + Q(priority=Vulnerability.HIGH)) + exec_is_critical = TableFilterActionToggle( + "critical", + "Critical", + Q(priority=Vulnerability.CRITICAL)) + is_priority.add_action(exec_is_undefined) is_priority.add_action(exec_is_low) is_priority.add_action(exec_is_medium) is_priority.add_action(exec_is_high) + is_priority.add_action(exec_is_critical) self.add_filter(is_priority) + # Product filter is_product = TableFilter(name="is_product", title="Filter Investigations by 'Product'") @@ -1572,6 +1688,12 @@ class InvestigationsTable(ToasterTable): hideable=True, ) + self.add_column(title="Tags", + field_name="tags", + hideable=True, + hidden=True, + ) + self.add_column(title="Vulnerability", hidden=False, orderable=False, @@ -1587,6 +1709,16 @@ class InvestigationsTable(ToasterTable): static_data_template="<a href=\"{% url 'product' data.product.id %}\">{{data.product.long_name}}</a>", ) + self.add_column(title="SRT Update", + hideable=True, + hidden=True, + orderable=True, + field_name="srt_updated", + static_data_name="srt_updated", + static_data_template='{{data.srt_updated | date:"Y/m/d"}}' + ) + + class SourcesTable(ToasterTable): """Table of All Data Sources in SRTool""" @@ -2193,3 +2325,538 @@ class PackageFilterDetailTable(ToasterTable): static_data_name="defects", static_data_template=defect_link_template, ) + +class HistoryCveTable(ToasterTable): + """Table of History Cves Details in SRTool""" + + def __init__(self, *args, **kwargs): + super(HistoryCveTable, self).__init__(*args, **kwargs) + self.default_orderby = "-date" + + def get_context_data(self,**kwargs): + context = super(HistoryCveTable, self).get_context_data(**kwargs) + return context + + def setup_queryset(self, *args, **kwargs): + self.queryset = CveHistory.objects.all() + + def setup_columns(self, *args, **kwargs): + self.add_column(title="Cve", + hideable=False, + orderable=True, + static_data_name="name", + static_data_template='''<a href="{% url 'cve' data.cve.name %}">{{data.cve.name}}</a>''', + ) + self.add_column(title="Comment", + field_name="comment", + hideable=False, + orderable=True, + ) + self.add_column(title="Date", + field_name="date", + hideable=False, + orderable=True, + ) + self.add_column(title="Author", + field_name="author", + hideable=False, + orderable=True, + ) + +class HistoryVulnerabilityTable(ToasterTable): + """Table of History Vulnerability Details in SRTool""" + + def __init__(self, *args, **kwargs): + super(HistoryVulnerabilityTable, self).__init__(*args, **kwargs) + self.default_orderby = "-date" + + def get_context_data(self,**kwargs): + context = super(HistoryVulnerabilityTable, self).get_context_data(**kwargs) + return context + + def setup_queryset(self, *args, **kwargs): + self.queryset = VulnerabilityHistory.objects.all() + + def setup_columns(self, *args, **kwargs): + self.add_column(title="Vulnerability", + hideable=False, + orderable=True, + static_data_name="vulnerability", + static_data_template='''<a href="{% url 'vulnerability' data.vulnerability.name %}">{{data.vulnerability.name}}</a>''', + ) + self.add_column(title="Comment", + field_name="comment", + hideable=False, + orderable=True, + ) + self.add_column(title="Date", + field_name="date", + hideable=False, + orderable=True, + ) + self.add_column(title="Author", + field_name="author", + hideable=False, + orderable=True, + ) + +class HistoryInvestigationTable(ToasterTable): + """Table of History Investigation Details in SRTool""" + + def __init__(self, *args, **kwargs): + super(HistoryInvestigationTable, self).__init__(*args, **kwargs) + self.default_orderby = "-date" + + def get_context_data(self,**kwargs): + context = super(HistoryInvestigationTable, self).get_context_data(**kwargs) + return context + + def setup_queryset(self, *args, **kwargs): + self.queryset = InvestigationHistory.objects.all() + + def setup_columns(self, *args, **kwargs): + self.add_column(title="Investigation", + hideable=False, + orderable=True, + static_data_name="investigation", + static_data_template='''<a href="{% url 'investigation' data.investigation.name %}">{{data.investigation.name}}</a>''', + ) + self.add_column(title="Comment", + field_name="comment", + hideable=False, + orderable=True, + ) + self.add_column(title="Date", + field_name="date", + hideable=False, + orderable=True, + ) + self.add_column(title="Author", + field_name="author", + hideable=False, + orderable=True, + ) + +class HistoryDefectTable(ToasterTable): + """Table of History Defect Details in SRTool""" + + def __init__(self, *args, **kwargs): + super(HistoryDefectTable, self).__init__(*args, **kwargs) + self.default_orderby = "-date" + + def get_context_data(self,**kwargs): + context = super(HistoryDefectTable, self).get_context_data(**kwargs) + return context + + def setup_queryset(self, *args, **kwargs): + self.queryset = DefectHistory.objects.all() + + def setup_columns(self, *args, **kwargs): + self.add_column(title="Defect", + hideable=False, + orderable=True, + static_data_name="defect", + static_data_template='''<a href="{% url 'defect_name' data.defect.name %}">{{data.defect.name}}</a>''', + ) + self.add_column(title="Comment", + field_name="comment", + hideable=False, + orderable=True, + ) + self.add_column(title="Date", + field_name="date", + hideable=False, + orderable=True, + ) + self.add_column(title="Author", + field_name="author", + hideable=False, + orderable=True, + ) + + +class PublishListTable(ToasterTable): + """Table of Publish View in SRTool""" + + def __init__(self, *args, **kwargs): + super(PublishListTable, self).__init__(*args, **kwargs) + self.default_orderby = "cve" + + def get_context_data(self,**kwargs): + context = super(PublishListTable, self).get_context_data(**kwargs) + return context + + def setup_filters(self, *args, **kwargs): + # Is Status filter + is_status = TableFilter(name="is_status", + title="Filter CVE's by 'Status'") + for status in range(len(Cve.STATUS)): + is_status.add_action(TableFilterActionToggle( + Cve.STATUS[status][1].lower().replace(' ','_'), + Cve.STATUS[status][1], + Q(cve__status=Cve.STATUS[status][0])) + ) + self.add_filter(is_status) + + # Is State filter + is_state = TableFilter(name="is_state", + title="Filter items by 'State'") + for state in range(len(PublishSet.PUBLISH_SET_STATE)): + if PublishSet.PUBLISH_SET_ERROR == PublishSet.PUBLISH_SET_STATE[state][0]: + continue + is_state.add_action(TableFilterActionToggle( + PublishSet.PUBLISH_SET_STATE[state][1].lower().replace(' ','_'), + PublishSet.PUBLISH_SET_STATE[state][1], + Q(state=PublishSet.PUBLISH_SET_STATE[state][0])) + ) + self.add_filter(is_state) + +#Record.objects.filter( Q(parameter__icontains="wd2") | ~Q(parameter__icontains="wd") ) + + # V3 filter + is_v3 = TableFilter(name="is_v3",title="Filter items by 'V3'") + exec_v3 = TableFilterActionToggle( + "v3", + "Severity_V3 change", + Q(reason__icontains="Severity_V3")) + is_v3.add_action(exec_v3) + self.add_filter(is_v3) + + # V2 filter + is_v2 = TableFilter(name="is_v2",title="Filter items by 'V2'") + exec_v2 = TableFilterActionToggle( + "v2", + "Severity_V2 change", + Q(reason__icontains="Severity_V2")) + is_v2.add_action(exec_v2) + self.add_filter(is_v2) + + # Product filters + # Gather the supported products + product_query = Product.objects.filter() + product_filter = [] + for product in product_query: + if "support" == product.get_product_tag('mode').order_by('-order'): + product_filter.append(product.get_defect_tag('key')) + for product_key in product_filter: + is_filter = TableFilter(name="is_%s" % product_key,title="Filter CVE's by '%s'" % product_key) + for status in range(len(Cve.STATUS)): + is_filter.add_action(TableFilterActionToggle( + product_key.lower(), + product_key, + Q(reason__icontains==product_key)) + ) + self.add_filter(is_filter) + + + def setup_queryset(self, *args, **kwargs): + self.queryset = PublishSet.objects.all() + + def apply_row_customization(self, row): + data = super(PublishListTable, self).apply_row_customization(row) + # data:dict_keys(['rows', 'total', 'default_orderby', 'error', 'columns']) + def get_key(key,dict): + if key in dict: + return(dict[key]) + return '' + # {'Severity_V2': '["", "MEDIUM"]', 'Severity_V3': '["", "MEDIUM"]'} + for i in range(len(data['rows'])): + reason = data['rows'][i]['reason'] + if not reason: + continue + try: + # CvssV3 + reason_dict = json.loads(reason) + cvssV3 = get_key('Severity_V3',reason_dict) + if cvssV3: + data['rows'][i]['cvssV3'] = "%s,%s" % (cvssV3[0],cvssV3[1]) + # CvssV2 + cvssV2 = get_key('Severity_V2',reason_dict) + if cvssV2: + data['rows'][i]['cvssV2'] = "%s,%s" % (cvssV2[0],cvssV2[1]) + # Products + for product_key in ('LIN5','CGP5','SCP5','OVP','LIN6','CGP6','SCP6','LIN7','CGP7','SCP7','LIN8','LIN9','LIN10','LIN1018'): + product_col = get_key(product_key,reason_dict) + if product_col: + data['rows'][i][product_key] = "%s" % (product_col) + except Exception as e: + continue + return data + + def setup_columns(self, *args, **kwargs): + + self.add_column(title="Select", + field_name="Select", + hideable=False, + static_data_name="select", + static_data_template='<input type="checkbox" id="box_{{data.id}}" name="{{data.cve.name}}" />', + ) + + self.add_column(title="State", + hideable=False, + orderable=True, + filter_name="is_state", + static_data_name="state", + static_data_template='''{{data.state_text}}''', + ) + + self.add_column(title="CVE", + field_name="cve__name", + hideable=False, + orderable=True, + static_data_name="cve__name", + static_data_template='''<a href="{% url 'cve' data.cve.name %}">{{data.cve.name}}</a>''', + ) + + self.add_column(title="CVE Published", + field_name="cve__publishedDate", + hideable=False, + orderable=True, + ) + + self.add_column(title="CVE Modified", + field_name="cve__lastModifiedDate", + hideable=False, + orderable=True, + ) + + self.add_column(title="CVE Status", + field_name="cve_status", + hideable=False, + orderable=True, + filter_name="is_status", + static_data_name="cve_status", + static_data_template='''{{data.cve.get_status_text}}''', + ) + + self.add_column(title="cvssV3", + hideable=True, + hidden=False, + filter_name="is_v3", + static_data_name="cvssV3", + static_data_template='', + ) + + self.add_column(title="cvssV2", + hideable=True, + hidden=False, + filter_name="is_v2", + static_data_name="cvssV2", + static_data_template='', + ) + + self.add_column(title="CVE Description", + field_name="cve__description", + hideable=False, + orderable=False, + ) + + # Product columns + for product_key in ('LIN5','CGP5','SCP5','OVP','LIN6','CGP6','SCP6','LIN7','CGP7','SCP7','LIN8','LIN9','LIN10','LIN1018'): + self.add_column(title=product_key, +# hideable=True, +# hidden=True, + filter_name="is_%s" % product_key, + static_data_name=product_key, + static_data_template='', + ) + + self.add_column(title="CVE Acknowledge", + hideable=True, + hidden=True, + orderable=True, + static_data_name="cve_acknowledge", + static_data_template='''{{data.cve.acknowledge_date|date:'Y-m-d'}}''', + ) + + self.add_column(title="Public Comments", + hideable=False, + orderable=False, + static_data_name="public_comments", + static_data_template='''{{data.cve.get_public_comments}}''', + ) + + self.add_column(title="reason", + field_name="reason", + hideable=False, + orderable=False, + ) + + +class PublishCveTable(ToasterTable): + """Table of Publish View in SRTool""" + + def __init__(self, *args, **kwargs): + super(PublishCveTable, self).__init__(*args, **kwargs) + self.default_orderby = "-status" + + def get_context_data(self,**kwargs): + context = super(PublishCveTable, self).get_context_data(**kwargs) + return context + + def setup_filters(self, *args, **kwargs): + # Is Status filter + is_status = TableFilter(name="is_status", + title="Filter CVE's by 'Status'") + for status in range(len(Cve.STATUS)): + is_status.add_action(TableFilterActionToggle( + Cve.STATUS[status][1].lower().replace(' ','_'), + Cve.STATUS[status][1], + Q(status=Cve.STATUS[status][0])) + ) + self.add_filter(is_status) + + def setup_queryset(self, *args, **kwargs): + self.queryset = Cve.objects.all() + exclude_list = [Cve.NEW, Cve.HISTORICAL, Cve.NEW_RESERVED] # CVE.NEW + self.queryset = self.queryset.exclude(status__in=exclude_list) + + def setup_columns(self, *args, **kwargs): + + self.add_column(title="Select", + field_name="Select", + hideable=False, + static_data_name="select", + static_data_template='<input type="checkbox" id="box_{{data.id}}" name="{{data.name}}" />', + ) + + self.add_column(title="State", + hideable=False, + orderable=True, + static_data_name="state", + static_data_template='''{{data.get_publishset_state}}''', + ) + + self.add_column(title="Name", + field_name="name", + hideable=False, + orderable=True, + static_data_name="cve_name", + static_data_template='''<a href="{% url 'cve' data.name %}">{{data.name}}</a>''', + ) + + self.add_column(title="CVE Published", + field_name="publishedDate", + hideable=False, + orderable=True, + ) + + self.add_column(title="CVE Modified", + field_name="lastModifiedDate", + hideable=False, + orderable=True, + ) + + self.add_column(title="CVE Status", + field_name="status", + hideable=False, + orderable=True, + filter_name="is_status", + static_data_name="cve_status", + static_data_template='''{{data.get_status_text}}''', + ) + + self.add_column(title="CVE Description", + field_name="description", + hideable=False, + orderable=False, + ) + + self.add_column(title="CVE Acknowledge", + hideable=True, + hidden=True, + orderable=True, + static_data_name="cve_acknowledge", + static_data_template='''{{data.acknowledge_date|date:'Y-m-d'}}''', + ) + + +class PublishDefectTable(ToasterTable): + """Table of Publish View in SRTool""" + + def __init__(self, *args, **kwargs): + super(PublishDefectTable, self).__init__(*args, **kwargs) + self.default_orderby = "-date_updated" + + def get_context_data(self,**kwargs): + context = super(PublishDefectTable, self).get_context_data(**kwargs) + return context + + def setup_filters(self, *args, **kwargs): + # Is Status filter + is_status = TableFilter(name="is_status", + title="Filter CVE's by 'Status'") + for status in range(len(Defect.DEFECT_STATUS)): + is_status.add_action(TableFilterActionToggle( + Defect.DEFECT_STATUS[status][1].lower().replace(' ','_'), + Defect.DEFECT_STATUS[status][1], + Q(status=Defect.DEFECT_STATUS[status][0])) + ) + self.add_filter(is_status) + + def setup_queryset(self, *args, **kwargs): + self.queryset = Defect.objects.all() + + def setup_columns(self, *args, **kwargs): + + self.add_column(title="Select", + field_name="Select", + hideable=False, + static_data_name="select", + static_data_template='<input type="checkbox" id="box_{{data.id}}" name="{{data.name}}" />', + ) + + self.add_column(title="State", + hideable=False, + orderable=True, + static_data_name="state", + static_data_template='''{{data.get_publishset_state}}''', + ) + + self.add_column(title="Name", + hideable=False, + orderable=True, + static_data_name="name", + static_data_template='''<a href="{% url 'defect_name' data.name %}">{{data.name}}</a>''', + ) + + self.add_column(title="Created", + hideable=False, + orderable=True, + static_data_name="date_created", + static_data_template='''{{data.get_date_created_text}}''', + ) + + self.add_column(title="Modified", + hideable=False, + orderable=True, + static_data_name="date_updated", + static_data_template='''{{data.get_date_updated_text}}''', + ) + + self.add_column(title="Status", + field_name="status", + hideable=False, + orderable=True, + filter_name="is_status", + static_data_name="status", + static_data_template='''{{data.get_defect_status_text}}''', + ) + + self.add_column(title="Summary", + field_name="summary", + hideable=False, + orderable=False, + ) + + self.add_column(title="Release Version", + field_name="release_version", + orderable=True, + ) + + self.add_column(title="CVE List", + field_name="get_cve_names", + hideable=False, + orderable=False, + ) + |