2017-03-02 10:07:55 +01:00

415 lines
10 KiB
JavaScript

import { Template } from 'meteor/templating';
import { Session } from 'meteor/session';
import { ReactiveVar } from 'meteor/reactive-var';
import { FindingsIndex } from '../imports/api/findings.js'
import { NonFindingsIndex } from '../imports/api/nonfindings';
import { LibraryFindingsIndex } from '../imports/api/library_findings.js'
import { LibraryNonFindingsIndex } from '../imports/api/library_non_findings.js'
import Findings from '../imports/api/findings';
import NonFindings from '../imports/api/nonfindings';
import { Settings } from '../imports/api/settings.js';
import './main.html';
Meteor.subscribe("snippets");
Meteor.subscribe("oneReport");
Meteor.subscribe("settings");
Meteor.subscribe("findings");
Meteor.subscribe("library_findings");
Meteor.subscribe("non_findings");
Meteor.subscribe("library_non_findings");
Findings.attachSchema(new SimpleSchema({
// filename: {
// type: String,
// label: "Filename",
// min: 1,
// max: 200
// },
id: {
type: String,
label: "ID",
min: 1,
max: 200,
},
threat_level: {
type: String,
allowedValues: [
"Low",
"Moderate",
"Elevated",
"High",
"Extreme"
],
label: "Threat level",
},
type: {
type: String,
label: "Type",
min: 1,
max: 200,
},
title: {
type: String,
label: "Title",
min: 1,
max: 200,
},
description: {
type: String,
label: "Description",
min: 1,
autoform: {
rows: 5
},
},
technical_description: {
type: String,
label: "Technical Description",
min: 1,
autoform: {
rows: 5
},
},
impact: {
type: String,
min: 1,
label: "Impact",
autoform: {
rows: 5
},
},
recommendation: {
type: String,
min: 1,
label: "Recommendation",
autoform: {
rows: 5
},
}
}));
NonFindings.attachSchema({
// filename: {
// type: String,
// label: "Filename",
// min: 1,
// max: 200
// },
id: {
type: String,
label: "ID",
min: 1,
max: 200,
},
title: {
type: String,
label: "Title",
min: 1,
max: 200,
},
description: {
type: String,
label: "Description",
min: 1,
autoform: {
rows: 5
},
},
});
/** ******************************** EDITOR PANE HELPERS *************************************/
/**
* FINDINGS_EDITOR
*/
Template.findings_editor.helpers({
getFormType:function () {
var finding_id = Session.get("selected_finding");
return finding_id ? "update" : "insert";
},
getSelectedFinding:function () {
return Findings.findOne(Session.get("selected_finding"));
}
});
/**
* NON-FINDINGS EDITOR
*/
Template.non_findings_editor.helpers({
getFormType:function () {
var finding_id = Session.get("selected_finding");
return finding_id ? "update" : "insert";
},
getSelectedNonFinding:function () {
return NonFindings.findOne(Session.get("selected_non_finding"));
}
});
// Template.editor.event = {
// 'click .btn_reset': function () {
// AutoForm.resetForm('findingForm');
// Session.set("selected_finding", null);
// }
// };
/**
* MAIN
*/
Template.main.events = {
'click .edit_findings_button': function (event, template) {
Session.set("edit_mode", "findings");
},
'click .edit_non_findings_button': function (event, template) {
Session.set("edit_mode", "non_findings");
},
};
Template.main.created = function () {
Session.set("edit_mode", null);
};
Template.main.helpers({
editMode:function() {
return Session.get("edit_mode");
},
findingButtonActive:function(){
return Session.get("edit_mode") == "findings" ? "active" : "";
},
nonFindingButtonActive:function(){
return Session.get("edit_mode") == "non_findings" ? "active" : "";
},
findingsEditorActive: function () {
return Session.get("selected_finding");
},
nonFindingsEditorActive: function () {
return Session.get("selected_non_finding");
},
editModeIs: function (mode) {
return Session.get("edit_mode") == mode;
},
});
/**
* Findings Settings
*/
Template.findings_settings.helpers({
findings_directory: function () {
return Settings.findOne({_id: "findings_directory"}).value;
},
findings_library_directory: function () {
return Settings.findOne({_id: "library_findings_directory"}).value;
}
});
Template.findings_settings.events({
"submit .update_findings_directory": function(event){
event.preventDefault();
var newvalue = event.target.findings_directory.value;
Settings.update({_id: "findings_directory"}, {$set: {value: newvalue}});
Session.set("selected_finding", null); // Prevents editor from emptying out on update
},
"submit .update_findings_library_directory": function(event){
event.preventDefault();
var newvalue = event.target.library_findings_directory.value;
Settings.update({_id: "library_findings_directory"}, {$set: {value: newvalue}});
}
});
/**
* Non-Findings Settings
*/
Template.non_findings_settings.helpers({
non_findings_directory: function () {
return Settings.findOne({_id: "non_findings_directory"}).value;
},
non_findings_library_directory: function () {
return Settings.findOne({_id: "non_findings_library_directory"}).value;
}
});
Template.non_findings_settings.events({
"submit .update_non_findings_directory": function(event){
event.preventDefault();
var newvalue = event.target.non_findings_directory.value;
Settings.update({_id: "non_findings_directory"}, {$set: {value: newvalue}});
Session.set("selected_non_finding", null); // Prevents editor from emptying out on update
},
"submit .update_non_findings_library_directory": function(event){
event.preventDefault();
var newvalue = event.target.non_findings_library_directory.value;
Settings.update({_id: "non_findings_library_directory"}, {$set: {value: newvalue}});
}
});
/**
* FINDINGS_PANE
*/
Template.findings_pane.created = function () {
this.activeTab = new ReactiveVar("pentest");
};
Template.findings_pane.helpers({
isPentestTabActive:function () {
return Template.instance().activeTab.get() == "pentest" ? "active" : null;
},
isLibraryTabActive:function () {
return Template.instance().activeTab.get() == "library" ? "active" : null
},
editModeIs: function (mode) {
return Session.get("edit_mode") == mode;
},
editMode: function() {
return Session.get("edit_mode");
}
});
Template.findings_pane.events({
'click .pentest': function (event, template) {
template.activeTab.set("pentest");
},
'click .library': function (event, template) {
template.activeTab.set("library");
},
});
/**
* FINDINGS
*/
Template.findings.helpers({
FindingsIndex: () => FindingsIndex,
properties: () => { return {placeholder: "Enter filter term .."}},
});
/**
* LIBRARY FINDINGS
*/
Template.library_findings.helpers({
LibraryFindingsIndex: () => LibraryFindingsIndex,
properties: () => { return {placeholder: "Enter filter term .."}}
});
/**
* LIBRARY NON FINDINGS
*/
Template.library_non_findings.helpers({
LibraryNonFindingsIndex: () => LibraryNonFindingsIndex,
properties: () => { return {placeholder: "Enter filter term .."}}
});
/**
* NON-FINDINGS
*/
Template.non_findings.helpers({
NonFindingsIndex: () => NonFindingsIndex,
properties: () => { return {placeholder: "Enter filter term .."}}
});
/**
* FINDING
*/
Template.finding.events = {
'click .search_result_title': function (e) {
if (Session.get(this._id)) {
Session.set(this._id, false);
} else {
Session.set(this._id, true);
}
}
};
Template.finding.helpers({
shouldShowContent:function () {
return Session.get(this._id);
},
bordercolor:function() {
switch (this.valid) {
case true:
return "green";
case false:
return "red";
default:
return "";
}
},
tooltip:function() {
switch (this.valid) {
case true:
return "This file is a valid XML file. All elements can be copied to the editor";
case false:
return "This file is not a valid XML file. This means that not all elements can be copied to the editor. If your are missing text, manually copy and paste it from the raw view.";
default:
return "";
}
},
typeIs: function (type) {
return Template.parentData(1).index.config.name == type;
}
});
/**
* USE FINDING BUTTON
*/
Template.use_finding_button.events({
"click": function () {
Session.set("selected_finding", this._id);
return false;
}
});
Template.use_library_finding_button.events({
"click": function () {
var id = Session.get("selected_finding");
if (!id) return false;
Findings.update(id, {
$set: {
threat_level: this.threat_level,
type: this.type,
title: this.title,
description: this.description,
technical_description: this.technical_description,
impact: this.impact,
recommendation: this.recommendation
}
});
return false;
}
});
/**
* LIBRARY NON FINDING BUTTON
*/
Template.use_library_non_finding_button.events({
"click": function () {
var id = Session.get("selected_non_finding");
console.log(id);
if (!id) return false;
NonFindings.update(id, {
$set: {
title: this.title,
description: this.description,
}
});
return false;
}
});
Template.use_non_finding_button.events({
"click": function () {
Session.set("selected_non_finding", this._id);
return false;
}
});