Skip to content

Commit

Permalink
feat(api): CVE Details are now pulled from engine
Browse files Browse the repository at this point in the history
  • Loading branch information
jiridostal committed Oct 9, 2018
1 parent 2dd6421 commit 2f7ed45
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { Grid } from '@patternfly/react-core';
import { connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
import { fetchCVEListFromVMaaS } from '../../../Store/Actions/CVEActions';
import { fetchCveDetails } from '../../../Store/Actions/CVEActions';
import { sCveDetailsPage } from '../../../Store/Selectors/CVESelectors';
import CVEPageDescriptionResolution from '../CVEPageDescriptionResolution/CVEPageDescriptionResolution';
import CVEPageOverview from '../CVEPageOverview/CVEPageOverview';
Expand Down Expand Up @@ -36,7 +36,7 @@ function mapStateToProps(state) {

const mapDispatchToProps = dispatch => {
return {
fetchData: cveName => dispatch(fetchCVEListFromVMaaS({ cve_list: [cveName] }))
fetchData: cveName => dispatch(fetchCveDetails(cveName))
};
};

Expand Down
12 changes: 12 additions & 0 deletions src/Helpers/APIHelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export function createApiCall(endpoint, method, parser, data = undefined) {
return fetch('https://localhost:8300' + endpoint, {
method,
body: JSON.stringify(data)
}).then(function(res) {
if (!res.ok) {
throw new Error(res.statusText);
}

return res.json();
});
}
41 changes: 20 additions & 21 deletions src/Helpers/CVE/CVEHelper.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import { Battery, Ansible } from '@red-hat-insights/insights-frontend-components';
import _ from 'lodash';
import { LaptopIcon, ExclamationTriangleIcon, LinkIcon } from '@patternfly/react-icons';
import { createApiCall } from '../APIHelper';

/* global require */

Expand All @@ -23,6 +23,11 @@ export function getVMaaSCVEs(apiProps) {
});
}

export function getCveDetails(synopsis) {
let result = createApiCall('/api/v1/cves/details/' + synopsis, 'get', processRawCVEs);
return result;
}

export async function getCVEsWithSystems() {
let cvesWithSystems = [];
let cveList = [
Expand Down Expand Up @@ -104,29 +109,23 @@ export function createExposedSystemsTable(cves) {
}

export function createCveDetailsPage(cves) {
if (_.isEmpty(cves.items)) {
return {
impact: '',
public_date: '',
description: '',
synopsis: '',
errata_list: [],
isLoading: true
let dataSet = cves;
let isLoading = cves.isLoading;
if (!isLoading) {
let singleCve = cves.payload;
dataSet = {
impact: processImpactForTable(singleCve.impact),
public_date: processDate(singleCve.public_date),
description: singleCve.description,
synopsis: singleCve.synopsis,
errata_list: singleCve.errata_list.map(item => <li key={item}>{createErrataLink(item)}</li>),
package_list: singleCve.package_list.map(item => <li key={item}>{item}</li>),
url_list: linkToDatabase(singleCve.synopsis)
};
}

let singleCve = cves.items[0];
let isLoading = cves.isLoading;
return {
impact: processImpactForTable(singleCve.impact),
public_date: processDate(singleCve.public_date),
description: singleCve.description,
synopsis: singleCve.synopsis,
errata_list: singleCve.errata_list.map(item => <li key={item}>{createErrataLink(item)}</li>),
package_list: singleCve.package_list.map(item => <li key={item}>{item}</li>),
url_list: linkToDatabase(singleCve.synopsis),
isLoading
};
dataSet = { ...dataSet, isLoading };
return dataSet;
}

function createErrataLink(item) {
Expand Down
1 change: 1 addition & 0 deletions src/Store/ActionTypes.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export const FETCH_CVES = 'CVE_FETCH_DATA';
export const FETCH_CVE_DETAILS = 'CVE_FETCH_DETAILS';
export const FETCH_CVES_WITH_SYSTEMS = 'CVE_FETCH_DATA_SYSTEMS';
export const FILTER_CVES = 'CVE_FILTER';
export const FETCH_CHANGES_SINCE_LAST_LOGIN = 'CHANGES_SINCE_LAST_LOGIN';
7 changes: 7 additions & 0 deletions src/Store/Actions/CVEActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,10 @@ export const searchCVEs = value => ({
resolve(value);
})
});

export const fetchCveDetails = synopsis => ({
type: ActionTypes.FETCH_CVE_DETAILS,
payload: new Promise(resolve => {
resolve(CVEHelper.getCveDetails(synopsis));
})
});
13 changes: 13 additions & 0 deletions src/Store/Reducers/CVEStore.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ const initialState = Immutable({
cveListWithSystems: {
isLoading: true,
items: []
},
cveDetails: {
isLoading: true,
payload: {}
}
});

Expand All @@ -26,6 +30,15 @@ export const CVEReducer = (state = initialState, action) => {
newState = newState.setIn(['cveList', 'isLoading'], false);
return newState;

case ActionTypes.FETCH_CVE_DETAILS + '_PENDING':
newState = state.setIn(['cveDetails', 'isLoading'], true);
return newState;

case ActionTypes.FETCH_CVE_DETAILS + '_FULFILLED':
newState = state.setIn(['cveDetails', 'payload'], action.payload);
newState = newState.setIn(['cveDetails', 'isLoading'], false);
return newState;

case ActionTypes.FETCH_CVES_WITH_SYSTEMS + '_PENDING':
newState = state.setIn(['cveListWithSystems', 'isLoading'], true);
return newState;
Expand Down
2 changes: 1 addition & 1 deletion src/Store/Selectors/CVESelectors.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { createSelector } from 'reselect';
import { createCveWithSystemsTable, createCveDetailsPage, createExposedSystemsTable } from '../../Helpers/CVE/CVEHelper';

const cveListWithSystemsSelector = state => state.CVEStore.cveListWithSystems.items;
const cveDetailsPageSelector = state => state.CVEStore.cveList;
const cveDetailsPageSelector = state => state.CVEStore.cveDetails;

export const sCvesWithSystemsTable = createSelector([cveListWithSystemsSelector], createCveWithSystemsTable);
export const sCveDetailsPage = createSelector([cveDetailsPageSelector], createCveDetailsPage);
Expand Down

0 comments on commit 2f7ed45

Please sign in to comment.