Skip to content

Commit

Permalink
#782 add rejected and reserved stubs, fix missing file lint error
Browse files Browse the repository at this point in the history
  • Loading branch information
athu-tran committed Mar 27, 2022
1 parent 66d933f commit 0bcd51b
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 51 deletions.
7 changes: 7 additions & 0 deletions src/assets/data/cveRecord/rejectedId.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"cveMetadata": {
"assignerShortName": "mitre",
"cveId": "CVE-2021-3896",
"state": "REJECTED"
}
}
27 changes: 0 additions & 27 deletions src/assets/data/cveRecord/rejectedRecord1.json

This file was deleted.

File renamed without changes.
35 changes: 21 additions & 14 deletions src/views/CVERecord/CVERecord5.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@
<div class="column is-8-desktop cve-main-column-content-width">
<main id="cve-main-page-content" role="main">
<div class="content">
<button class="button" @click="showFakeData('published')">Show fake Published CVE record data</button>
<button class="button" @click="showFakeData('rejected')">Show fake Rejected CVE record data</button>
<button class="button" @click="showFakeData('reserved')">Show fake Reserved CVE record data</button>
<div class="loader-wrapper is-active" v-if="this.$store.state.isSearching">
<p class="is-size-5">Please wait. Loading...</p>
<p class="loader is-loading mb-4 ml-1"></p>
Expand Down Expand Up @@ -45,52 +42,62 @@
</div>
<div v-else>
<PublishedRecord v-if="this.$store.state.recordData.cveMetadata.state.toLowerCase() == 'published'"/>
<RejectedRecordOrId v-if="this.$store.state.recordData.cveMetadata.state.toLowerCase() == 'rejected'"/>
<RejectedRecordOrId :isArecord="isArecord" v-if="this.$store.state.recordData.cveMetadata.state.toLowerCase() == 'rejected'"/>
<ReservedId v-if="this.$store.state.recordData.cveMetadata.state.toLowerCase() == 'reserved'"/>
</div>
</div>
</div>
</div>
</main>
</div>
<div class="column is-1">
<button class="button" @click="showFakeData('published')">Show fake Published CVE record data</button>
<button class="button" @click="showFakeData('rejected')">Show fake Rejected CVE record data</button>
<button class="button" @click="showFakeData('reserved')">Show fake Reserved CVE record data</button>
</div>
</div>
</div>
</template>

<script>
import advancedExample from '@/assets/data/cveRecord/tmpAdvanced5Example.json';
import rejectedExample from '@/assets/data/cveRecord/rejectedRecord.json';
import rejectedId from '@/assets/data/cveRecord/rejectedId.json';
import reservedIdExample from '@/assets/data/cveRecord/reservedId.json';
import PublishedRecord from './PublishedRecord.vue';
import RejectedRecordOrId from './RejectedRecordOrId.vue'
import RejectedRecordOrId from './RejectedRecordOrId.vue';
import ReservedId from './ReservedId.vue';
export default {
name: 'CVERecord5',
components: {
PublishedRecord,
RejectedRecordOrId,
ReservedId
ReservedId,
},
data() {
return {
}
isArecord: true, // TODO: Set this to false if using "rejectedId"
};
},
computed: {
},
methods: {
// SRL - remove showFakeData when JSON 5.0 service is ready
showFakeData(state) {
this.$store.commit('updateState', { showHelpText: false, isSearching: false, serverError: false });
if (state == 'published') this.$store.state.recordData = advancedExample;
if (state == 'rejected') this.$store.state.recordData = rejectedExample;
if (state == 'reserved') this.$store.state.recordData = reservedIdExample;
if (state === 'published') this.$store.state.recordData = advancedExample;
if (state === 'rejected') this.$store.state.recordData = rejectedExample;
if (state === 'reserved') this.$store.state.recordData = reservedIdExample;
},
}
}
},
};
</script>

<style scoped lang="scss">
<style lang="scss">
@import '@/assets/style/globals.scss';
.cve-gray-text {
color: #3d4551;
;
}
</style>
4 changes: 2 additions & 2 deletions src/views/CVERecord/PublishedRecord.vue
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export default ({
'References', 'State', 'Tags', 'Title', 'Vendors, Products & Versions'],
showJsonModal: false,
NVDUrl: `https://nvd.nist.gov/view/vuln/detail?vulnId=${this.$store.state.recordData.cveMetadata.cveId}`,
}
};
},
computed: {
cveFieldList() {
Expand Down Expand Up @@ -226,5 +226,5 @@ export default ({
this.$store.commit('updateState', { showJsonRecord: !this.$store.state.showJsonRecord });
},
},
})
});
</script>
142 changes: 138 additions & 4 deletions src/views/CVERecord/RejectedRecordOrId.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,140 @@
<template>
<div>
<h1 class="title">{{this.$store.state.recordData.cveMetadata.cveId}}
</h1>
<div class="content">
<nav class="level">
<!-- Left side -->
<div class="level-left">
<div class="level-item">
<h1 class="title">{{cveFieldList.cveId}}</h1>
</div>
<div v-if="cveFieldList.state.length > 0" class="level-item">
<span class="tag is-info">{{cveFieldList.state}}</span>
</div>
</div>
</nav>
<p v-if="cveFieldList.assigner.length > 0" class="mb-0">
<span class="has-text-weight-bold" style="text-transform: capitalize;">Assigner: </span>
<span style="text-transform: capitalize;">{{cveFieldList.assigner}}</span>
</p>
<p v-if="cveFieldList.dateUpdatedCna.length > 0" class="cve-gray-text">
<span>Updated: </span>
<time>{{cveFieldList.dateUpdatedCna}}</time>
</p>
<p>
<span class="has-text-weight-bold">Rejected Reason:</span>
<span>
<span v-if="cveFieldList.rejectedReasons.length == 0">
This CVE ID was unused by the <router-link to="/ProgramOrganization/CNAs">CNA</router-link>.
</span>
<span v-else>
<span v-for="rejectedReason in cveFieldList.rejectedReasons" :key="rejectedReason.index">
{{rejectedReason}}
</span>
</span>
</span>
</p>
<div class="level-right">
<div v-if="cveFieldList.dateRejectedCveMetadata" class="level-item cve-gray-text">
<span>{{isArecord ? 'Record' : 'ID'}} {{isArecord}} Rejected: {{cveFieldList.dateRejectedCveMetadata}}</span>
</div>
<div v-if="cveFieldList.dateUpdatedCveMetadata" class="level-item cve-gray-text">
<span>{{isArecord ? 'Record' : 'ID'}} Udated: {{cveFieldList.dateUpdatedCveMetadata}}</span>
</div>
</div>
</div>
</template>
</template>

<script>
export default ({
props: {
isArecord: {
type: Boolean,
required: true,
},
},
data() {
return {
cveFieldList: {
cveId: '',
state: '',
dateUpdatedCna: '',
assigner: '',
rejectedReasons: [],
dateUpdatedCveMetadata: '',
dateRejectedCveMetadata: '',
},
originalRecordData: this.$store.state.recordData || {},
};
},
mounted() {
this.populatedCveFieldList();
},
methods: {
populatedCveFieldList() {
// TODO: Update logic to support both record and ID
this.getCVEid();
this.getState();
this.getDateUpdatedCna();
this.getAssigner();
this.getRejectedReason();
this.getDateUpdatedCveMetadata();
this.getDateRejectedCveMetadata();
},
getCVEid() {
if (this.originalRecordData.cveMetadata.cveId.length > 0) {
this.cveFieldList.cveId = this.originalRecordData.cveMetadata.cveId;
} else {
this.cveFieldList.cveId = 'ID Not Found';
}
},
getState() {
if (this.originalRecordData.cveMetadata.state.length > 0) {
this.cveFieldList.state = this.originalRecordData.cveMetadata.state;
}
},
getDateUpdatedCna() {
const value = this.getNestedObjValue(this.originalRecordData, 'containers', 'cna', 'providerMetadata', 'dateUpdated');
if (value !== undefined && this.originalRecordData.containers.cna.providerMetadata.dateUpdated.length !== 0) {
this.cveFieldList.dateUpdatedCna = this.getDate(value);
}
},
getAssigner() {
const value = this.getNestedObjValue(this.originalRecordData, 'cveMetadata', 'assignerShortName');
if (value !== undefined && this.originalRecordData.cveMetadata.assignerShortName.length !== 0) {
this.cveFieldList.assigner = value.replace('_', ' ');
}
},
getRejectedReason() {
const value = this.getNestedObjValue(this.originalRecordData, 'containers', 'cna', 'rejectedReasons');
if (value.length > 0) {
value.forEach((rejectReason) => {
if (rejectReason.lang === 'en') this.cveFieldList.rejectedReasons.push(rejectReason.value);
});
}
},
getDateUpdatedCveMetadata() {
const value = this.getNestedObjValue(this.originalRecordData, 'cveMetadata', 'dateUpdated');
if (value.length > 0) {
this.cveFieldList.dateUpdatedCveMetadata = this.getDate(value);
}
},
getDateRejectedCveMetadata() {
const value = this.getNestedObjValue(this.originalRecordData, 'cveMetadata', 'dateRejected');
if (value.length > 0) {
this.cveFieldList.dateRejectedCveMetadata = this.getDate(value);
}
},
/**
* Get value if key exists in a nested JSON
* @return {String | undefined} Returns a string value if keys exist, else undefined
* */
getNestedObjValue(obj, ...args) {
console.log(obj, ...args);
return args.reduce((obj, level) => obj && obj[level], obj);
},
getDate(dateTime) {
const [date] = dateTime.split('T');
return date;
},
},
});
</script>
18 changes: 14 additions & 4 deletions src/views/CVERecord/ReservedId.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
<template>
<div>
<h1 class="title">{{this.$store.state.recordData.cveMetadata.cveId}}
</h1>
<div class="content">
<nav class="level">
<!-- Left side -->
<div class="level-left">
<div class="level-item">
<h1 class="title">{{this.$store.state.recordData.cveMetadata.cveId}}</h1>
</div>
<div class="level-item">
<span class="tag is-info">{{this.$store.state.recordData.cveMetadata.state}}</span>
</div>
</div>
</nav>
<p>This ID was reserved by a <router-link to="/ProgramOrganization/CNAs">CNA</router-link>.</p>
</div>
</template>
</template>

0 comments on commit 0bcd51b

Please sign in to comment.