aboutsummaryrefslogtreecommitdiffstats
path: root/lib/srtgui/tables.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/srtgui/tables.py')
-rw-r--r--lib/srtgui/tables.py809
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,
+ )
+