Skip to content

Commit

Permalink
v0.4.15
Browse files Browse the repository at this point in the history
  • Loading branch information
SecSimon committed Jul 19, 2023
1 parent ef540b0 commit cdea8db
Show file tree
Hide file tree
Showing 15 changed files with 66 additions and 29 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 0.4.15

* Report improvements
* Mitigation process: Adopt tasks from assigned countermeasures
* Fix: Numbering in Excel export

## 0.4.14

* Added risk overview page
Expand Down
2 changes: 1 addition & 1 deletion app/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ttmodeler",
"version": "0.4.14",
"version": "0.4.15",
"description": "Thing Threat Modeler for Internet of Things Devices",
"homepage": "https://www.simon-liebl.de/TTM",
"author": {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ttmodeler",
"version": "0.4.14",
"version": "0.4.15",
"description": "Thing Threat Modeler for Internet of Things Devices",
"homepage": "https://www.simon-liebl.de/TTM",
"author": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -742,7 +742,7 @@ export class ResultsAnalysisComponent implements AfterViewInit {
}
asNotApp.sort((a, b) => mySort(a, b));
for (let i = 0; i < asNotApp.length; i++) {
this.dataService.Project.MoveItemAttackScenario(asOrig.indexOf(asNotApp[i]), i);
this.dataService.Project.MoveItemAttackScenario(asOrig.indexOf(asNotApp[i]), asApp.length+i);
asNotApp[i].Number = (asApp.length+i+1).toString();
}

Expand Down
38 changes: 19 additions & 19 deletions src/app/mitigation-overview/mitigation-overview.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,20 +91,20 @@ export class MitigationOverviewComponent extends SideNavBase implements OnInit {
public createNodes() {
const prevNodes = this.nodes;
this.nodes = [];
let pf = this.dataService.Project;
const pf = this.dataService.Project;

let createMapping = (map: Countermeasure, groupNode: INavigationNode): INavigationNode => {
const createCountermeasure = (cm: Countermeasure, groupNode: INavigationNode): INavigationNode => {
let node: INavigationNode = {
name: () => map.Name,
name: () => 'CM' + cm.Number + ') ' + cm.Name,
canSelect: true,
data: map,
data: cm,
canRename: true,
onRename: (val: string) => { map.Name = val; },
onRename: (val: string) => { cm.Name = val; },
canDelete: true,
onDelete: () => {
this.dialog.OpenDeleteObjectDialog(map).subscribe(res => {
this.dialog.OpenDeleteObjectDialog(cm).subscribe(res => {
if (res) {
pf.DeleteCountermeasure(map);
pf.DeleteCountermeasure(cm);
if (this.selectedNode == node) this.selectedNode = null;
this.createNodes();
}
Expand All @@ -114,30 +114,30 @@ export class MitigationOverviewComponent extends SideNavBase implements OnInit {
onMoveUp: () => {
let arr = pf.GetCountermeasures();
let arrProcess = groupNode.children?.map(x => x.data);
let idxProcess = arrProcess.findIndex(x => x.ID == map.ID);
let idxProcess = arrProcess.findIndex(x => x.ID == cm.ID);
if (idxProcess != 0) {
let newIndex = arr.findIndex(x => x.ID == arrProcess[idxProcess-1].ID);
pf.MoveItemCountermeasures(arr.findIndex(x => x.ID == map.ID), newIndex);
pf.MoveItemCountermeasures(arr.findIndex(x => x.ID == cm.ID), newIndex);
groupNode.children.splice(idxProcess, 0, groupNode.children.splice(idxProcess-1, 1)[0]);
}
},
onMoveDown: () => {
let arr = pf.GetCountermeasures();
let arrProcess = groupNode.children?.map(x => x.data);
let idxProcess = arrProcess.findIndex(x => x.ID == map.ID);
let idxProcess = arrProcess.findIndex(x => x.ID == cm.ID);
if (idxProcess != arrProcess.length-1) {
let newIndex = arr.findIndex(x => x.ID == arrProcess[idxProcess+1].ID);
pf.MoveItemCountermeasures(arr.findIndex(x => x.ID == map.ID), newIndex);
pf.MoveItemCountermeasures(arr.findIndex(x => x.ID == cm.ID), newIndex);
groupNode.children.splice(idxProcess, 0, groupNode.children.splice(idxProcess+1, 1)[0]);
}
}
};
return node;
};

let createProcess = (proc: MitigationProcess, groupNode: INavigationNode): INavigationNode => {
const createProcess = (proc: MitigationProcess, groupNode: INavigationNode): INavigationNode => {
let node: INavigationNode = {
name: () => proc.Name,
name: () => 'MP' + proc.Number + ') ' + proc.Name,
canSelect: true,
data: proc,
canRename: true,
Expand Down Expand Up @@ -174,12 +174,12 @@ export class MitigationOverviewComponent extends SideNavBase implements OnInit {
children: []
};

pf.GetCountermeasures().filter(x => x.MitigationProcess == proc).forEach(x => node.children.push(createMapping(x, node)));
pf.GetCountermeasures().filter(x => x.MitigationProcess == proc).forEach(x => node.children.push(createCountermeasure(x, node)));

return node;
};

let root: INavigationNode = {
const root: INavigationNode = {
name: () => this.translate.instant('pages.modeling.mitigationoverview.MitigationProcesses'),
icon:'security',
canSelect: true,
Expand All @@ -194,21 +194,21 @@ export class MitigationOverviewComponent extends SideNavBase implements OnInit {
children: []
};

let na: INavigationNode = {
const na: INavigationNode = {
name: () => this.translate.instant('pages.modeling.mitigationoverview.NotAssignedCountermeasures'),
canSelect: false,
children: []
};
pf.GetCountermeasuresApplicable().filter(x => x.MitigationProcess == null).forEach(x => na.children.push(createMapping(x, na)));
pf.GetCountermeasuresApplicable().filter(x => x.MitigationProcess == null).forEach(x => na.children.push(createCountermeasure(x, na)));
if (na.children.length > 0) root.children.push(na);

let rej: INavigationNode = {
const rej: INavigationNode = {
name: () => this.translate.instant('pages.modeling.mitigationoverview.RejectedCountermeasures'),
canSelect: false,
children: [],
isExpanded: false
};
pf.GetCountermeasuresNotApplicable().filter(x => x.MitigationProcess == null).forEach(x => rej.children.push(createMapping(x, rej)));
pf.GetCountermeasuresNotApplicable().filter(x => x.MitigationProcess == null).forEach(x => rej.children.push(createCountermeasure(x, rej)));
if (rej.children.length > 0) root.children.push(rej);

pf.GetMitigationProcesses().forEach(x => root.children.push(createProcess(x, root)));
Expand Down
1 change: 1 addition & 0 deletions src/app/model/export-template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,7 @@ export class ExportTemplate extends DatabaseBase {
else if (this.ExportType == ExportTypes.SystemThreats) src = this.project.GetSystemThreats();
else if (this.ExportType == ExportTypes.ThreatSources) src = this.project.GetThreatSources().Sources;
else if (this.ExportType == ExportTypes.TestCases) src = this.project.GetTesting().TestCases;
src.sort((a, b) => { return Number(a.Number) - Number(b.Number); })
src.forEach(entry => {
let row = [];
const rowBuffer = [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,17 @@
<textarea matInput cdkTextareaAutosize cdkAutosizeMinRows="2" cdkAutosizeMaxRows="5" [spellcheck]="dataService.HasSpellCheck" [(ngModel)]="mitigationProcess.Description"></textarea>
</mat-form-field>
<div>
<h4>{{'general.Tasks' | translate}}</h4>
<h4>
{{'general.Tasks' | translate}}
<button mat-icon-button [matMenuTriggerFor]="moreMenu">
<mat-icon>more_vert</mat-icon>
</button>
</h4>
<mat-menu #moreMenu="matMenu">
<button mat-menu-item (click)="AdoptFromMeasures()">
<span>{{'pages.modeling.mitigationprocess.adoptMeasures' | translate}}</span>
</button>
</mat-menu>
<app-notes [showTimestamp]="false" [hasCheckbox]="true" [canToggleTimestamp]="true" [notes]="mitigationProcess.Tasks"></app-notes>
</div>
<div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ export class MitigationProcessComponent implements OnInit {
ngOnInit(): void {
}

public AdoptFromMeasures() {
this.mitigationProcess.Countermeasures.forEach(cm => {
if (!this.mitigationProcess.Tasks.some(x => x.Note == cm.Name)) {
this.mitigationProcess.Tasks.push({ Note: cm.Name + ' (CM' + cm.Number.toString() + ')', IsChecked: false, Date: Date.now().toString(), Author: this.dataService.UserDisplayName, HasCheckbox: true, ShowTimestamp: false });
}
});
}

public OnStateChange(val: MitigationProcessStates) {
if (val == MitigationProcessStates.WorkInProgress) {
if (this.mitigationProcess.Progress == 0) this.mitigationProcess.Progress = 5;
Expand Down
8 changes: 7 additions & 1 deletion src/app/reporting/reporting.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,13 @@ export class ReportingComponent implements OnInit {
}
// Executive Summary
this.createHeading(this.translate.instant('report.ExecutiveSummary'));
this.createParagraph(StringExtension.Format(this.translate.instant('report.SUC'), this.Project.GetDevices().map(x => x.Name).join(', '), this.Project.GetMobileApps().map(x => x.Name).join(', ')));
if (this.Project.GetMobileApps().length > 0) {
this.createParagraph(StringExtension.Format(this.translate.instant('report.SUCinContext'), this.Project.GetDevices().map(x => x.Name).join(', '), this.Project.GetMobileApps().map(x => x.Name).join(', ')));
}
else {
this.createParagraph(StringExtension.Format(this.translate.instant('report.SUC'), this.Project.GetDevices().map(x => x.Name).join(', '), this.Project.GetMobileApps().map(x => x.Name).join(', ')));
}

this.createParagraph(StringExtension.Format(this.translate.instant('report.UseCaseUC'), this.Project.GetDFDiagrams().map(x => x.Name).join(', ')));
this.createParagraph('');
if (this.Project.Image) {
Expand Down
2 changes: 1 addition & 1 deletion src/assets/Terms.drawio
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<mxfile host="Electron" modified="2023-04-04T11:51:28.904Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/19.0.3 Chrome/102.0.5005.63 Electron/19.0.3 Safari/537.36" etag="oU94A03fg6UcuPpQXxxb" version="19.0.3" type="device"><diagram id="6LgTEdnsfuajW__zdtRa" name="Seite-1">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</diagram></mxfile>
<mxfile host="Electron" modified="2023-07-03T11:37:27.741Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/19.0.3 Chrome/102.0.5005.63 Electron/19.0.3 Safari/537.36" etag="Bysp-V4Cf62GcgeM4YfP" version="19.0.3" type="device"><diagram id="6LgTEdnsfuajW__zdtRa" name="Seite-1">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</diagram></mxfile>
Binary file modified src/assets/Terms_de.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/assets/Terms_en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit cdea8db

Please sign in to comment.