-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js.map
1 lines (1 loc) · 600 KB
/
main.js.map
1
{"version":3,"file":"main.js","mappings":"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ClB,CAAC;AAEF;;;;;;GAMG;AACH,sEAAsE;;;;;;;;;;;;;;;;;;ACfvB;AAGF;AACY;AAGzD,IAAI,6EAAsB,EAAE;IAC1B,6DAAc,EAAE,CAAC;CAClB;AAED,wEAAwB,CAAC,eAAe,CAAC,sDAAS,CAAC;KAChD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;ACZ7B,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;;;;;;;;;;;ACArC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["./src/app/api.service.ts","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/dialog-addissue/dialog-addissue.component.ts","./src/app/dialog-addissue/dialog-addissue.component.html","./src/app/dialog-addreportprofile/dialog-addreportprofile.component.ts","./src/app/dialog-addreportprofile/dialog-addreportprofile.component.html","./src/app/dialog-apiadd/dialog-apiadd.component.ts","./src/app/dialog-apiadd/dialog-apiadd.component.html","./src/app/dialog-apierror/dialog-apierror.component.ts","./src/app/dialog-apierror/dialog-apierror.component.html","./src/app/dialog-apikey/dialog-apikey.component.ts","./src/app/dialog-apikey/dialog-apikey.component.html","./src/app/dialog-changekey/dialog-changekey.component.ts","./src/app/dialog-changekey/dialog-changekey.component.html","./src/app/dialog-changelog/dialog-changelog.component.ts","./src/app/dialog-changelog/dialog-changelog.component.html","./src/app/dialog-customcontent/dialog-customcontent.component.ts","./src/app/dialog-customcontent/dialog-customcontent.component.html","./src/app/dialog-cve/dialog-cve.component.ts","./src/app/dialog-cve/dialog-cve.component.html","./src/app/dialog-cvss/dialog-cvss.component.ts","./src/app/dialog-cvss/dialog-cvss.component.html","./src/app/dialog-edit/dialog-edit.component.ts","./src/app/dialog-edit/dialog-edit.component.html","./src/app/dialog-exportissues/dialog-exportissues.component.ts","./src/app/dialog-exportissues/dialog-exportissues.component.html","./src/app/dialog-import/dialog-import.component.ts","./src/app/dialog-import/dialog-import.component.html","./src/app/dialog-pass/dialog-pass.component.ts","./src/app/dialog-pass/dialog-pass.component.html","./src/app/dialog-removeitems/dialog-removeitems.component.ts","./src/app/dialog-removeitems/dialog-removeitems.component.html","./src/app/faq/faq.component.ts","./src/app/faq/faq.component.html","./src/app/home/home.component.ts","./src/app/home/home.component.html","./src/app/import-report/import-report.component.ts","./src/app/import-report/import-report.component.html","./src/app/indexeddb.service.ts","./src/app/message.service.ts","./src/app/myreports/myreports.component.ts","./src/app/myreports/myreports.component.html","./src/app/newreport/newreport.component.ts","./src/app/newreport/newreport.component.html","./src/app/report/report.component.ts","./src/app/report/report.component.html","./src/app/seckey-validator.service.ts","./src/app/settings/settings.component.ts","./src/app/settings/settings.component.html","./src/app/vuln-list/vuln-list.component.ts","./src/app/vuln-list/vuln-list.component.html","./src/environments/environment.ts","./src/main.ts","./src/version.ts","./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport {MatSnackBar} from '@angular/material/snack-bar';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n\n constructor(private http: HttpClient, private snackBar: MatSnackBar) { }\n\n getCVE(cve: string): Promise<any> {\n return this.http.get<any>('https://api.vulnrepo.com/cve/' + cve)\n .toPromise()\n .then(response => response)\n .catch(error => {\n console.log('CVE error: ', error);\n });\n }\n\n APISend(apiurl: string, apikey: string, action: string, body: string): Promise<any> {\n const header = new HttpHeaders().set('VULNREPO-AUTH', apikey).set('VULNREPO-ACTION', action).set('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n return this.http.post<any>('https://' + apiurl + '/api/', body, {headers: header})\n .toPromise()\n .then(response => response, (reason) => {\n if (reason.AUTH_ACCESS === 'ACCOUNT_EXPIRES') {\n this.snackBar.open('API ' + apiurl + ' AUTH ERROR: ACCESS EXPIRES!', 'OK', {\n duration: 3000,\n panelClass: ['notify-snackbar-fail']\n });\n } else {\n this.snackBar.open('CAN\\'T CONNECT TO API: ' + apiurl, 'OK', {\n duration: 3000,\n panelClass: ['notify-snackbar-fail']\n });\n }\n })\n .catch(error => {\n console.log('API error: ', error);\n });\n }\n\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nimport { FaqComponent } from './faq/faq.component';\nimport { HomeComponent } from './home/home.component';\nimport { MyreportsComponent } from './myreports/myreports.component';\nimport { SettingsComponent } from './settings/settings.component';\nimport { NewreportComponent } from './newreport/newreport.component';\nimport { ReportComponent } from './report/report.component';\nimport { ImportReportComponent } from './import-report/import-report.component';\nimport { VulnListComponent } from './vuln-list/vuln-list.component';\n\nconst routes: Routes = [{\n path: 'home',\n pathMatch: 'full',\n component: HomeComponent\n},\n{\n path: 'faq',\n pathMatch: 'full',\n component: FaqComponent\n},\n{\n path: 'my-reports',\n pathMatch: 'full',\n component: MyreportsComponent\n},\n{\n path: 'new-report',\n pathMatch: 'full',\n component: NewreportComponent\n},\n{\n path: 'report/:report_id',\n pathMatch: 'full',\n component: ReportComponent\n},\n{\n path: 'settings',\n pathMatch: 'full',\n component: SettingsComponent\n},\n{\n path: 'import-report',\n pathMatch: 'full',\n component: ImportReportComponent\n},\n{\n path: '',\n redirectTo: '/home',\n pathMatch: 'full'\n},\n{\n path: 'vuln-list',\n pathMatch: 'full',\n component: VulnListComponent\n},\n{\n path: '**',\n component: HomeComponent\n}];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { IndexeddbService } from './indexeddb.service';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { version } from \"../version\";\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\n\nexport class AppComponent implements OnInit, OnDestroy {\n show_status: any;\n enc_status: any;\n subscription: Subscription;\n app_ver = '';\n app_ver_short = '';\n\n constructor(public route: ActivatedRoute, public router: Router, private indexeddbService: IndexeddbService) {\n \n }\n\n ngOnInit() {\n this.app_ver = version.number;\n \n if (this.app_ver !== ''){\n\n this.app_ver_short = this.app_ver.substring(0, 7)\n\n }\n\n if (!window.indexedDB) {\n console.log('Your browser doesn\\'t support a stable version of IndexedDB.');\n }\n if (!window.sessionStorage) {\n console.log('Your browser doesn\\'t support a stable version of sessionStorage.');\n }\n\n this.subscription = this.indexeddbService.getstatusencryption().subscribe(value => {\n this.enc_status = value;\n });\n\n this.router.events.subscribe(value => {\n if (value instanceof NavigationEnd) {\n if (value.url.includes('/report/')) {\n this.show_status = true;\n } else {\n this.show_status = false;\n this.enc_status = false;\n }\n }\n });\n\n }\n\n ngOnDestroy() {\n // unsubscribe to ensure no memory leaks\n this.subscription.unsubscribe();\n }\n\n}\n","<mat-toolbar color=\"primary\">\n <mat-toolbar-row>\n <button mat-icon-button (click)=\"sidenav.toggle()\" fxShow=\"true\" fxHide.gt-sm>\n <mat-icon>menu</mat-icon>\n </button>\n <span style=\"display: contents;\">\n <img style=\"margin-right: 5px;\" width=\"35px\" src=\"assets/logo/vulnrepo_logo.png\"> <span style=\"color:white\">VULNRΞPO</span> <small>v.β <small *ngIf=\"app_ver != ''\"><span style=\"text-decoration: underline;text-decoration-color: #69f0ae\"><a title=\"Version Rev ID: {{app_ver}}\" target=\"_blank\" style=\"font-size: smaller; color: rgba(255, 255, 255, 0.7);\" href=\"https://github.com/kac89/vulnrepo/commit/{{app_ver}}\">#{{app_ver_short}}</a></span></small></small>\n </span>\n <div *ngIf=\"show_status\" class=\"title-center\">\n\n <div *ngIf=\"enc_status\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3 decrypted-color\" matSuffix>no_encryption</mat-icon> Report is decrypted.\n </div>\n <div *ngIf=\"!enc_status\"><mat-icon class=\"vertical-align-middle padding-bottom-3 encrypted-color\" matSuffix>lock</mat-icon> Report is encrypted.</div>\n\n </div>\n \n <span class=\"example-fill-remaining-space\" *ngIf=\"!show_status\"></span>\n\n <div fxShow=\"true\" fxHide.lt-md=\"true\">\n <a routerLink=\"/home\" routerLinkActive=\"active-link\" href=\"/home\" mat-button>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">home</mat-icon>\n Home\n </a>\n\n <a routerLink=\"/my-reports\" routerLinkActive=\"active-link\" href=\"/my-reports\" mat-button>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">list_alt</mat-icon>\n My Reports\n </a>\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n\n <a routerLink=\"/new-report\" routerLinkActive=\"active-link\" href=\"/new-report\" mat-menu-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">add_circle_outline</mat-icon> Create new report\n </a>\n\n <a routerLink=\"/import-report\" routerLinkActive=\"active-link\" href=\"/import-report\" mat-menu-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">playlist_add</mat-icon> Import report\n </a>\n\n <a routerLink=\"/vuln-list\" routerLinkActive=\"active-link\" href=\"/vuln-list\" mat-menu-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">bug_report</mat-icon>\n Vulnerability List\n </a>\n <a routerLink=\"/settings\" routerLinkActive=\"active-link\" href=\"/settings\" mat-menu-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">settings</mat-icon>\n Settings\n </a>\n <a routerLink=\"/faq\" routerLinkActive=\"active-link\" href=\"/faq\" mat-menu-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">info</mat-icon>\n FAQ\n </a>\n </mat-menu>\n\n <a target=\"_blank\" href=\"https://github.com/kac89/vulnrepo\" title=\"Visit project on github.com\" mat-button>\n <img src=\"./assets/github.png\" height=\"22px\">\n </a>\n\n <a target=\"_blank\" href=\"https://twitter.com/vulnrepo\" title=\"Follow project on twitter\" mat-button>\n <img src=\"./assets/twitter.svg\" height=\"32px\">\n </a>\n\n </div>\n </mat-toolbar-row>\n</mat-toolbar>\n\n<mat-sidenav-container fxFlexFill>\n <mat-sidenav #sidenav>\n <mat-nav-list>\n <a routerLink=\"/home\" routerLinkActive=\"active-link\" href=\"/home\" mat-list-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">home</mat-icon>\n Home\n </a>\n <a routerLink=\"/my-reports\" routerLinkActive=\"active-link\" href=\"/my-reports\" mat-list-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">list_alt</mat-icon>\n My Reports\n </a>\n <a routerLink=\"/new-report\" routerLinkActive=\"active-link\" href=\"/new-report\" mat-list-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">add_circle_outline</mat-icon> Create new report\n </a>\n <a routerLink=\"/import-report\" routerLinkActive=\"active-link\" href=\"/import-report\" mat-list-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">playlist_add</mat-icon> Import report\n </a>\n <a routerLink=\"/vuln-list\" routerLinkActive=\"active-link\" href=\"/vuln-list\" mat-list-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">bug_report</mat-icon>\n Vulnerability List\n </a>\n <a routerLink=\"/settings\" routerLinkActive=\"active-link\" href=\"/settings\" mat-list-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">settings</mat-icon>\n Settings\n </a>\n <a routerLink=\"/faq\" routerLinkActive=\"active-link\" href=\"/faq\" mat-list-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">info</mat-icon>\n FAQ\n </a>\n <a (click)=\"sidenav.toggle()\" mat-list-item>\n <mat-icon>close</mat-icon> Close\n </a>\n </mat-nav-list>\n </mat-sidenav>\n\n <mat-sidenav-content fxFlexFill>\n\n <div class=\"container\">\n <router-outlet></router-outlet>\n </div>\n\n </mat-sidenav-content>\n</mat-sidenav-container>","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\n\nimport { AppRoutingModule } from './app-routing.module';\nimport { AppComponent } from './app.component';\nimport { HomeComponent } from './home/home.component';\n\nimport { Router } from '@angular/router';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatListModule } from '@angular/material/list';\nimport { MyreportsComponent } from './myreports/myreports.component';\nimport { SettingsComponent } from './settings/settings.component';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { NewreportComponent } from './newreport/newreport.component';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { ReportComponent } from './report/report.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DialogPassComponent } from './dialog-pass/dialog-pass.component';\nimport { MessageService } from './message.service';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { ChartsModule } from 'ng2-charts';\nimport { DialogAddissueComponent } from './dialog-addissue/dialog-addissue.component';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { IndexeddbService } from './indexeddb.service';\nimport { MatChipsModule } from '@angular/material/chips';\n\nimport { HttpClientModule } from '@angular/common/http';\nimport { MatSelectModule } from '@angular/material/select';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { DatePipe } from '@angular/common';\nimport { DialogImportComponent } from './dialog-import/dialog-import.component';\nimport { DialogEditComponent } from './dialog-edit/dialog-edit.component';\nimport { ImportReportComponent } from './import-report/import-report.component';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { DialogExportissuesComponent } from './dialog-exportissues/dialog-exportissues.component';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { DialogChangelogComponent } from './dialog-changelog/dialog-changelog.component';\nimport { VulnListComponent } from './vuln-list/vuln-list.component';\nimport { DialogChangekeyComponent } from './dialog-changekey/dialog-changekey.component';\nimport { DialogRemoveitemsComponent } from './dialog-removeitems/dialog-removeitems.component';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { DialogCvssComponent } from './dialog-cvss/dialog-cvss.component';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { HammerModule } from '@angular/platform-browser';\nimport {MatProgressBarModule} from '@angular/material/progress-bar';\nimport { DialogCveComponent } from './dialog-cve/dialog-cve.component';\nimport { FaqComponent } from './faq/faq.component';\nimport { DialogCustomcontentComponent } from './dialog-customcontent/dialog-customcontent.component';\nimport { DialogApikeyComponent } from './dialog-apikey/dialog-apikey.component';\nimport { DialogApiaddComponent } from './dialog-apiadd/dialog-apiadd.component';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { DialogAddreportprofileComponent } from './dialog-addreportprofile/dialog-addreportprofile.component';\nimport { DialogApierrorComponent } from './dialog-apierror/dialog-apierror.component';\n\n\n@NgModule({\n declarations: [\n AppComponent,\n HomeComponent,\n MyreportsComponent,\n SettingsComponent,\n NewreportComponent,\n ReportComponent,\n DialogPassComponent,\n DialogAddissueComponent,\n DialogImportComponent,\n DialogEditComponent,\n ImportReportComponent,\n DialogExportissuesComponent,\n DialogChangelogComponent,\n VulnListComponent,\n DialogChangekeyComponent,\n DialogRemoveitemsComponent,\n DialogCvssComponent,\n DialogCveComponent,\n FaqComponent,\n DialogCustomcontentComponent,\n DialogApikeyComponent,\n DialogApiaddComponent,\n DialogAddreportprofileComponent,\n DialogApierrorComponent\n ],\n imports: [\n BrowserModule,\n AppRoutingModule,\n BrowserAnimationsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatSidenavModule,\n FlexLayoutModule,\n MatIconModule,\n MatToolbarModule,\n MatCardModule,\n MatGridListModule,\n MatListModule,\n MatTableModule,\n MatSortModule,\n MatPaginatorModule,\n MatInputModule,\n MatFormFieldModule,\n FormsModule,\n ReactiveFormsModule,\n MatDialogModule,\n MatExpansionModule,\n MatDatepickerModule,\n MatNativeDateModule,\n ChartsModule,\n MatBadgeModule,\n MatAutocompleteModule,\n MatSlideToggleModule,\n MatChipsModule,\n MatSnackBarModule,\n HttpClientModule,\n MatSelectModule,\n DragDropModule,\n MatTabsModule,\n MatMenuModule,\n MatRadioModule,\n HammerModule,\n MatProgressBarModule\n ],\n providers: [MessageService, IndexeddbService, DatePipe],\n exports: [],\n bootstrap: [AppComponent]\n})\n\nexport class AppModule {\n // Diagnostic only: inspect router configuration\n constructor(router: Router) {\n // Use a custom replacer to display function names in the route configs\n // const replacer = (key, value) => (typeof value === 'function') ? value.name : value;\n\n // console.log('Routes: ', JSON.stringify(router.config, replacer, 2));\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { HttpClient } from '@angular/common/http';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { map, startWith } from 'rxjs/operators';\nimport { DatePipe } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { ApiService } from '../api.service';\n\nexport interface Vulns {\n title: string;\n cve: string;\n cvss: number;\n desc: string;\n poc: string;\n ref: string;\n severity: string;\n}\n\nexport interface PCI {\n maincategory: string;\n items: Array<PCIRequirments>;\n}\n\nexport interface PCIRequirments {\n title: string;\n testing: Array<PCITesting>;\n guidance: string;\n}\n\nexport interface PCITesting {\n title: string;\n}\n\n@Component({\n selector: 'app-dialog-addissue',\n templateUrl: './dialog-addissue.component.html',\n styleUrls: ['./dialog-addissue.component.scss']\n})\nexport class DialogAddissueComponent implements OnInit {\n myControl = new UntypedFormControl();\n myControl2 = new UntypedFormControl();\n mycve = new UntypedFormControl();\n mymobilemitre = new UntypedFormControl();\n myenterprisemitre = new UntypedFormControl();\n myPCI = new UntypedFormControl();\n myOWASP2017 = new UntypedFormControl();\n myOWASP2021 = new UntypedFormControl();\n options: Vulns[] = [];\n cwe: Vulns[] = [];\n mitremobile: Vulns[] = [];\n mitreenterprise: Vulns[] = [];\n pcidssv3: any;\n owasptop2017: Vulns[] = [];\n owasptop2021: Vulns[] = [];\n filteredOptions: Observable<Vulns[]>;\n filteredOptionsCWE: Observable<Vulns[]>;\n filteredOptionsmitremobile: Observable<Vulns[]>;\n filteredOptionsmitreenterprise: Observable<Vulns[]>;\n filteredOptionsPCIDSS: Observable<string[]>;\n filteredOptionsOWASPtop2017: Observable<Vulns[]>;\n filteredOptionsOWASPtop2021: Observable<Vulns[]>;\n err_msg: string;\n sourceSelect = 'VULNREPO';\n show = false;\n\n constructor(public router: Router,\n public dialogRef: MatDialogRef<DialogAddissueComponent>, private http: HttpClient,\n private apiService: ApiService, private datePipe: DatePipe) {\n\n this.filteredOptions = this.myControl.valueChanges\n .pipe(\n startWith<string | Vulns>(''),\n map(value => typeof value === 'string' ? value : value.title),\n map(title => title ? this._filter(title) : this.options.slice())\n );\n\n this.filteredOptionsCWE = this.myControl2.valueChanges\n .pipe(\n startWith<string | Vulns>(''),\n map(value => typeof value === 'string' ? value : value.title),\n map(title => title ? this._filterCWE(title) : this.cwe.slice())\n );\n\n this.filteredOptionsmitremobile = this.mymobilemitre.valueChanges\n .pipe(\n startWith<string | Vulns>(''),\n map(value => typeof value === 'string' ? value : value.title),\n map(title => title ? this._filtermitremobile(title) : this.mitremobile.slice())\n );\n\n this.filteredOptionsmitreenterprise = this.myenterprisemitre.valueChanges\n .pipe(\n startWith<string | Vulns>(''),\n map(value => typeof value === 'string' ? value : value.title),\n map(title => title ? this._filtermitreenterprise(title) : this.mitreenterprise.slice())\n );\n\n this.filteredOptionsPCIDSS = this.myPCI.valueChanges\n .pipe(\n startWith(''),\n map(value => this._filterPCI(value))\n );\n\n this.filteredOptionsOWASPtop2017 = this.myOWASP2017.valueChanges\n .pipe(\n startWith<string | Vulns>(''),\n map(value => typeof value === 'string' ? value : value.title),\n map(title => title ? this._filterOWASP2017(title) : this.owasptop2017.slice())\n );\n\n this.filteredOptionsOWASPtop2021 = this.myOWASP2021.valueChanges\n .pipe(\n startWith<string | Vulns>(''),\n map(value => typeof value === 'string' ? value : value.title),\n map(title => title ? this._filterOWASP2021(title) : this.owasptop2021.slice())\n );\n\n }\n\n private _filter(name: string): Vulns[] {\n const filterValue = name.toLowerCase();\n return this.options.filter(option => option.title.toLowerCase().indexOf(filterValue) >= 0);\n }\n private _filterCWE(name: string): Vulns[] {\n const filterValue = name.toLowerCase();\n return this.cwe.filter(option => option.title.toLowerCase().indexOf(filterValue) >= 0);\n }\n\n private _filtermitremobile(name: string): Vulns[] {\n const filterValue = name.toLowerCase();\n return this.mitremobile.filter(option => option.title.toLowerCase().indexOf(filterValue) >= 0);\n }\n\n private _filtermitreenterprise(name: string): Vulns[] {\n const filterValue = name.toLowerCase();\n return this.mitreenterprise.filter(option => option.title.toLowerCase().indexOf(filterValue) >= 0);\n }\n\n ////////////\n private _filterPCI(value: string): string[] {\n if (value) {\n return this.pcidssv3\n .map(group => ({ maincategory: group.maincategory, items: this._filt3r(group.items, value) }))\n .filter(group => group.items.length > 0);\n }\n return this.pcidssv3;\n }\n\n private _filt3r(opt, value: string): string[] {\n const filterValue = value.toString().toLowerCase();\n return opt.filter(item => item.title.toString().toLowerCase().indexOf(filterValue) >= 0);\n }\n ////////////\n\n private _filterOWASP2017(name: string): Vulns[] {\n const filterValue = name.toLowerCase();\n return this.owasptop2017.filter(option => option.title.toLowerCase().indexOf(filterValue) >= 0);\n }\n\n private _filterOWASP2021(name: string): Vulns[] {\n const filterValue = name.toLowerCase();\n return this.owasptop2021.filter(option => option.title.toLowerCase().indexOf(filterValue) >= 0);\n }\n\n ngOnInit() {\n\n this.http.get<any>('/assets/vulns.json?v=' + + new Date()).subscribe(res => {\n this.options = res;\n });\n\n this.http.get<any>('/assets/CWE_V.4.3.json?v=' + + new Date()).subscribe(res => {\n this.cwe = res;\n });\n\n this.http.get<any>('/assets/mobile-attack.json?v=' + + new Date()).subscribe(res => {\n this.mitremobile = res;\n });\n\n this.http.get<any>('/assets/enterprise-attack.json?v=' + + new Date()).subscribe(res => {\n this.mitreenterprise = res;\n });\n\n this.http.get<any>('/assets/pcidssv3.2.1.json?v=' + + new Date()).subscribe(res => {\n this.pcidssv3 = res;\n });\n\n this.http.get<any>('/assets/OWASPtop102017.json?v=' + + new Date()).subscribe(res => {\n this.owasptop2017 = res;\n });\n\n this.http.get<any>('/assets/OWASPtop102021.json?v=' + + new Date()).subscribe(res => {\n this.owasptop2021 = res;\n });\n\n }\n\n redir(): void {\n this.dialogRef.close();\n this.router.navigate(['/vuln-list']);\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n addIssue() {\n const data = this.myControl.value;\n if (data !== '' && data !== null) {\n for (const key in this.options) {\n if (this.options.hasOwnProperty(key)) {\n\n if (this.options[key].title === data) {\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const def = {\n title: this.options[key].title,\n poc: this.options[key].poc,\n files: [],\n desc: this.options[key].desc,\n severity: this.options[key].severity,\n status: 1,\n ref: this.options[key].ref,\n cvss: this.options[key].cvss,\n cve: this.options[key].cve,\n tags: [],\n bounty: [],\n date: today + ''\n };\n this.dialogRef.close(def);\n break;\n\n } else if (Number(key) + 1 === this.options.length) {\n\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n\n const def = {\n title: data,\n poc: '',\n files: [],\n desc: '',\n severity: '',\n status: 1,\n ref: '',\n cvss: '',\n cve: '',\n tags: [],\n bounty: [],\n date: today + ''\n };\n this.dialogRef.close(def);\n }\n\n\n }\n }\n } else {\n this.err_msg = 'Please add title!';\n }\n\n }\n\n\n addIssueCWE() {\n const data = this.myControl2.value;\n if (data !== '' && data !== null) {\n for (const key in this.cwe) {\n if (this.cwe.hasOwnProperty(key)) {\n\n if (this.cwe[key].title === data) {\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const def = {\n title: this.cwe[key].title,\n poc: this.cwe[key].poc,\n files: [],\n desc: this.cwe[key].desc,\n severity: this.cwe[key].severity,\n status: 1,\n ref: this.cwe[key].ref,\n cvss: this.cwe[key].cvss,\n cve: this.cwe[key].cve,\n tags: [],\n bounty: [],\n date: today + ''\n };\n this.dialogRef.close(def);\n break;\n\n } else {\n this.err_msg = 'Can\\'t find ' + data;\n }\n\n }\n }\n } else {\n this.err_msg = 'Please add title!';\n }\n\n }\n\n displayFn(template?: Vulns): string | undefined {\n return template ? template.title : undefined;\n }\n\n changeselect() {\n this.err_msg = '';\n this.show = false;\n }\n\n addCVE() {\n this.err_msg = '';\n let severity = 'Info';\n const severityRatings = [{\n name: 'Info',\n bottom: 0.0,\n top: 0.0\n }, {\n name: 'Low',\n bottom: 0.1,\n top: 3.9\n }, {\n name: 'Medium',\n bottom: 4.0,\n top: 6.9\n }, {\n name: 'High',\n bottom: 7.0,\n top: 8.9\n }, {\n name: 'Critical',\n bottom: 9.0,\n top: 10.0\n }];\n\n const data = this.mycve.value;\n if (data !== '' && data !== null) {\n\n const reg = new RegExp(/^CVE-\\d{4}-\\d{4,7}$/, 'i');\n if (reg.test(data)) {\n\n this.show = true;\n this.apiService.getCVE(data).then(resp => {\n\n if (resp !== null && resp !== undefined) {\n // if everything OK\n if (resp.id) {\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n\n let cvetitle = '';\n\n if (resp.refmap) {\n\n if (resp.refmap.xf) {\n cvetitle = resp.refmap.xf;\n }\n if (resp.refmap.vupen) {\n cvetitle = resp.refmap.vupen;\n }\n if (resp.refmap.mlist) {\n cvetitle = resp.refmap.mlist[0];\n }\n if (resp.refmap.bugtraq) {\n cvetitle = resp.refmap.bugtraq[0];\n }\n if (resp.refmap.idefense) {\n cvetitle = resp.refmap.idefense;\n }\n\n }\n\n if (resp.saint) {\n cvetitle = resp.saint[0].description;\n }\n\n if (resp.redhat) {\n if (resp.redhat.advisories) {\n if (resp.redhat.advisories[0].bugzilla) {\n cvetitle = resp.redhat.advisories[0].bugzilla.title;\n }\n }\n }\n\n if (cvetitle === '') {\n cvetitle = resp.id;\n }\n\n if (resp.cvss) {\n for (let _i = 0; _i < severityRatings.length; _i++) {\n if (severityRatings[_i].bottom <= resp.cvss && severityRatings[_i].top >= resp.cvss) {\n severity = severityRatings[_i].name;\n }\n }\n }\n let refer = '';\n if (resp.references) {\n\n for (let _i = 0; _i < resp.references.length; _i++) {\n refer += resp.references[_i] + '\\n';\n }\n\n }\n\n const def = {\n title: cvetitle,\n poc: '',\n files: [],\n desc: resp.summary,\n severity: severity,\n status: 1,\n ref: refer,\n cvss: resp.cvss,\n cve: resp.id,\n bounty: [],\n tags: [],\n date: today + ''\n };\n this.show = false;\n this.dialogRef.close(def);\n }\n\n if (resp.error) {\n this.err_msg = resp.error;\n this.show = false;\n }\n\n } else {\n this.show = false;\n this.err_msg = 'CVE not found.';\n }\n\n });\n\n } else {\n this.show = false;\n this.err_msg = 'CVE format error.';\n }\n\n } else {\n this.show = false;\n this.err_msg = 'Empty field?.';\n }\n\n }\n\n addattackMobile() {\n\n const data = this.mymobilemitre.value;\n if (data !== '' && data !== null) {\n for (const key in this.mitremobile) {\n if (this.mitremobile.hasOwnProperty(key)) {\n\n if (this.mitremobile[key].title === data) {\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const def = {\n title: this.mitremobile[key].title,\n poc: this.mitremobile[key].poc,\n files: [],\n desc: this.mitremobile[key].desc,\n severity: this.mitremobile[key].severity,\n status: 1,\n ref: this.mitremobile[key].ref,\n cvss: this.mitremobile[key].cvss,\n cve: this.mitremobile[key].cve,\n tags: [],\n bounty: [],\n date: today + ''\n };\n this.dialogRef.close(def);\n break;\n\n } else {\n this.err_msg = 'Can\\'t find ' + data;\n }\n\n }\n }\n } else {\n this.err_msg = 'Please add title!';\n }\n\n\n }\n\n addattackEnterprise() {\n\n const data = this.myenterprisemitre.value;\n if (data !== '' && data !== null) {\n for (const key in this.mitreenterprise) {\n if (this.mitreenterprise.hasOwnProperty(key)) {\n\n if (this.mitreenterprise[key].title === data) {\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const def = {\n title: this.mitreenterprise[key].title,\n poc: this.mitreenterprise[key].poc,\n files: [],\n desc: this.mitreenterprise[key].desc,\n severity: this.mitreenterprise[key].severity,\n status: 1,\n ref: this.mitreenterprise[key].ref,\n cvss: this.mitreenterprise[key].cvss,\n cve: this.mitreenterprise[key].cve,\n tags: [],\n bounty: [],\n date: today + ''\n };\n this.dialogRef.close(def);\n break;\n\n } else {\n this.err_msg = 'Can\\'t find ' + data;\n }\n\n }\n }\n } else {\n this.err_msg = 'Please add title!';\n }\n\n\n }\n\n\n\n addPCIDSS() {\n const data = this.myPCI.value;\n if (data !== '' && data !== null) {\n\n for (const key in this.pcidssv3) {\n\n if (this.pcidssv3.hasOwnProperty(key)) {\n\n for (const ile in this.pcidssv3[key].items) {\n\n if (this.pcidssv3[key].items[ile].title === data) {\n\n let tytul = this.pcidssv3[key].items[ile].title;\n\n tytul = tytul.split(':')[0];\n\n if (tytul.length >= 100) {\n tytul = tytul.substring(0, 100);\n tytul = tytul + '...';\n }\n\n let il = '';\n this.pcidssv3[key].items[ile].testing.forEach(item => {\n il = il + item.title + '\\n\\n';\n });\n\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const def = {\n title: tytul,\n poc: 'Testing:\\n\\n' + il + '\\nGuidance:\\n\\n' + this.pcidssv3[key].items[ile].guidance,\n files: [],\n // tslint:disable-next-line:max-line-length\n desc: this.pcidssv3[key].items[ile].title,\n severity: 'Info',\n status: 1,\n ref: 'https://www.pcisecuritystandards.org/\\nhttps://www.pcisecuritystandards.org/documents/PCI_DSS_v3-2-1.pdf',\n cvss: '',\n cve: '',\n tags: [],\n bounty: [],\n date: today + ''\n };\n this.dialogRef.close(def);\n break;\n\n } else {\n this.err_msg = 'Can\\'t find ' + data;\n }\n\n }\n\n }\n }\n } else {\n this.err_msg = 'Please add title!';\n }\n\n\n }\n\n\n addOWASPtop2017() {\n const data = this.myOWASP2017.value;\n if (data !== '' && data !== null) {\n for (const key in this.owasptop2017) {\n if (this.owasptop2017.hasOwnProperty(key)) {\n\n if (this.owasptop2017[key].title === data) {\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const def = {\n title: this.owasptop2017[key].title,\n poc: this.owasptop2017[key].poc,\n files: [],\n desc: this.owasptop2017[key].desc,\n severity: this.owasptop2017[key].severity,\n status: 1,\n ref: this.owasptop2017[key].ref,\n cvss: this.owasptop2017[key].cvss,\n cve: this.owasptop2017[key].cve,\n tags: [],\n bounty: [],\n date: today + ''\n };\n this.dialogRef.close(def);\n break;\n\n } else {\n this.err_msg = 'Can\\'t find ' + data;\n }\n\n }\n }\n } else {\n this.err_msg = 'Please add title!';\n }\n\n }\n\n addOWASPtop2021() {\n const data = this.myOWASP2021.value;\n if (data !== '' && data !== null) {\n for (const key in this.owasptop2021) {\n if (this.owasptop2021.hasOwnProperty(key)) {\n\n if (this.owasptop2021[key].title === data) {\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const def = {\n title: this.owasptop2021[key].title,\n poc: this.owasptop2021[key].poc,\n files: [],\n desc: this.owasptop2021[key].desc,\n severity: this.owasptop2021[key].severity,\n status: 1,\n ref: this.owasptop2021[key].ref,\n cvss: this.owasptop2021[key].cvss,\n cve: this.owasptop2021[key].cve,\n tags: [],\n bounty: [],\n date: today + ''\n };\n this.dialogRef.close(def);\n break;\n\n } else {\n this.err_msg = 'Can\\'t find ' + data;\n }\n\n }\n }\n } else {\n this.err_msg = 'Please add title!';\n }\n\n }\n\n\n}\n","<h1 mat-dialog-title>Add Issue from: \n<mat-form-field appearance=\"outline\" color=\"accent\" style=\"width: 150px; font-size:11px;\">\n <mat-label>Source</mat-label>\n <mat-select [(value)]=\"sourceSelect\" (selectionChange)=\"changeselect()\">\n <mat-option value=\"VULNREPO\">VULNRΞPO</mat-option>\n <mat-option value=\"CVE\">CVE (ONLINE DB)</mat-option>\n <mat-option value=\"CWE\">CWE Research Concepts</mat-option>\n <mat-option value=\"MENTERPRISE\">MITRE ATT&CK Enterprise</mat-option>\n <mat-option value=\"MMOBILE\">MITRE ATT&CK Mobile</mat-option>\n <mat-option value=\"PCIDSS\">PCI DSS Requirements v3.2.1</mat-option>\n <mat-option value=\"OWASPTOP2021\">OWASP Top 10 2021 Web Application Security Risks</mat-option>\n <mat-option value=\"OWASPTOP2017\">OWASP Top 10 2017 Web Application Security Risks</mat-option>\n </mat-select>\n</mat-form-field>\n</h1>\n<div mat-dialog-content>\n\n <div *ngIf=\"sourceSelect == 'VULNREPO'\" class=\"example-form\">\n <mat-form-field class=\"example-form\" color=\"accent\" appearance=\"outline\">\n <mat-label>Issue title</mat-label>\n <input cdkFocusInitial type=\"text\" matInput placeholder=\"type: XSS, SQL, RCE vulnerability or custom\" [formControl]=\"myControl\" [matAutocomplete]=\"auto\">\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"option.title\">\n {{option.title}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <span fxLayoutAlign=\"flex-end\"><small><a class=\"active-link\" href=\"/vuln-list\" routerLink=\"/vuln-list\" (click)=\"redir()\">Vulnerability List</a></small></span>\n </div>\n \n\n <div *ngIf=\"sourceSelect == 'CWE'\" class=\"example-form\">\n <mat-form-field class=\"example-form\" color=\"accent\" appearance=\"outline\">\n <mat-label>CWE title</mat-label>\n <input cdkFocusInitial type=\"text\" matInput placeholder=\"type: CWE-20 or bypass, injection\" [formControl]=\"myControl2\" [matAutocomplete]=\"auto2\">\n <mat-autocomplete #auto2=\"matAutocomplete\">\n <mat-option [title]=\"option.title\" *ngFor=\"let option of filteredOptionsCWE | async\" [value]=\"option.title\">\n {{option.title}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <span fxLayoutAlign=\"flex-end\"><small><a class=\"active-link\" target=\"_blank\" href=\"https://cwe.mitre.org/data/index.html\">cwe.mitre.org</a></small></span>\n</div>\n\n\n <div *ngIf=\"sourceSelect == 'CVE'\" class=\"example-form\">\n <mat-form-field class=\"example-form\" color=\"accent\" appearance=\"outline\">\n <mat-label>CVE</mat-label>\n <input cdkFocusInitial type=\"text\" matInput placeholder=\"e.g.: CVE-2016-0077\" [formControl]=\"mycve\">\n </mat-form-field>\n <span fxLayoutAlign=\"flex-end\"><small><a class=\"active-link\" target=\"_blank\" href=\"https://cve.circl.lu/\">cve.circl.lu</a></small></span>\n</div>\n\n<div *ngIf=\"sourceSelect == 'MMOBILE'\" class=\"example-form\">\n <mat-form-field class=\"example-form\" color=\"accent\" appearance=\"outline\">\n <mat-label>ATT&CK Mobile</mat-label>\n <input cdkFocusInitial type=\"text\" matInput placeholder=\"e.g.: Application Discovery\" [formControl]=\"mymobilemitre\" [matAutocomplete]=\"auto3\">\n <mat-autocomplete #auto3=\"matAutocomplete\">\n <mat-option [title]=\"option.title\" *ngFor=\"let option of filteredOptionsmitremobile | async\" [value]=\"option.title\">\n {{option.title}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <span fxLayoutAlign=\"flex-end\"><small><a class=\"active-link\" target=\"_blank\" href=\"https://attack.mitre.org/techniques/mobile/\">attack.mitre.org</a></small></span>\n</div>\n\n<div *ngIf=\"sourceSelect == 'MENTERPRISE'\" class=\"example-form\">\n <mat-form-field class=\"example-form\" color=\"accent\" appearance=\"outline\">\n <mat-label>ATT&CK Enterprise</mat-label>\n <input cdkFocusInitial type=\"text\" matInput placeholder=\"e.g.: DNS Server\" [formControl]=\"myenterprisemitre\" [matAutocomplete]=\"auto4\">\n <mat-autocomplete #auto4=\"matAutocomplete\">\n <mat-option [title]=\"option.title\" *ngFor=\"let option of filteredOptionsmitreenterprise | async\" [value]=\"option.title\">\n {{option.title}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <span fxLayoutAlign=\"flex-end\"><small><a class=\"active-link\" target=\"_blank\" href=\"https://attack.mitre.org/techniques/enterprise/\">attack.mitre.org</a></small></span>\n</div>\n\n<div *ngIf=\"sourceSelect == 'PCIDSS'\" class=\"example-form\">\n <mat-form-field class=\"example-form\" color=\"accent\" appearance=\"outline\">\n <mat-label>PCI DSS Requirements v3.2.1</mat-label>\n <input cdkFocusInitial type=\"text\" matInput placeholder=\"e.g.: Firewall\" [formControl]=\"myPCI\" [matAutocomplete]=\"auto5\">\n <mat-autocomplete #auto5=\"matAutocomplete\">\n <mat-optgroup *ngFor=\"let group of filteredOptionsPCIDSS | async\" [label]=\"group.maincategory\" [title]=\"group.maincategory\">\n <mat-option *ngFor=\"let item of group.items\" [value]=\"item.title\" [title]=\"item.title\">\n {{item.title}}\n </mat-option>\n </mat-optgroup>\n </mat-autocomplete>\n </mat-form-field>\n <span fxLayoutAlign=\"flex-end\"><small><a class=\"active-link\" target=\"_blank\" href=\"https://www.pcisecuritystandards.org/document_library\">pcisecuritystandards.org</a></small></span>\n</div>\n\n<div *ngIf=\"sourceSelect == 'OWASPTOP2017'\" class=\"example-form\">\n <mat-form-field class=\"example-form\" color=\"accent\" appearance=\"outline\">\n <mat-label>OWASP category</mat-label>\n <input cdkFocusInitial type=\"text\" matInput placeholder=\"type: Injection\" [formControl]=\"myOWASP2017\" [matAutocomplete]=\"auto6\">\n <mat-autocomplete #auto6=\"matAutocomplete\">\n <mat-option [title]=\"option.title\" *ngFor=\"let option of filteredOptionsOWASPtop2017 | async\" [value]=\"option.title\">\n {{option.title}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <span fxLayoutAlign=\"flex-end\"><small><a class=\"active-link\" target=\"_blank\" href=\"https://owasp.org/www-project-top-ten/\">owasp.org</a></small></span>\n</div>\n\n<div *ngIf=\"sourceSelect == 'OWASPTOP2021'\" class=\"example-form\">\n <mat-form-field class=\"example-form\" color=\"accent\" appearance=\"outline\">\n <mat-label>OWASP category</mat-label>\n <input cdkFocusInitial type=\"text\" matInput placeholder=\"type: Injection\" [formControl]=\"myOWASP2021\" [matAutocomplete]=\"auto7\">\n <mat-autocomplete #auto7=\"matAutocomplete\">\n <mat-option [title]=\"option.title\" *ngFor=\"let option of filteredOptionsOWASPtop2021 | async\" [value]=\"option.title\">\n {{option.title}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <span fxLayoutAlign=\"flex-end\"><small><a class=\"active-link\" target=\"_blank\" href=\"https://owasp.org/www-project-top-ten/\">owasp.org</a></small></span>\n</div>\n\n<div *ngIf=\"show\">Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></div>\n {{err_msg}}\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"sourceSelect == 'VULNREPO'\" mat-raised-button color=\"accent\" (click)=\"addIssue()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add Issue</button>\n <button *ngIf=\"sourceSelect == 'CWE'\" mat-raised-button color=\"accent\" (click)=\"addIssueCWE()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add from CWE</button>\n <button *ngIf=\"sourceSelect == 'CVE'\" mat-raised-button color=\"accent\" (click)=\"addCVE()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add from CVE</button>\n <button *ngIf=\"sourceSelect == 'MMOBILE'\" mat-raised-button color=\"accent\" (click)=\"addattackMobile()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add from ATT&CK Mobile</button>\n <button *ngIf=\"sourceSelect == 'MENTERPRISE'\" mat-raised-button color=\"accent\" (click)=\"addattackEnterprise()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add from ATT&CK Enterprise</button>\n <button *ngIf=\"sourceSelect == 'PCIDSS'\" mat-raised-button color=\"accent\" (click)=\"addPCIDSS()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add from PCI DSS Requirements</button>\n <button *ngIf=\"sourceSelect == 'OWASPTOP2017'\" mat-raised-button color=\"accent\" (click)=\"addOWASPtop2017()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add OWASP Top 10 2017</button>\n <button *ngIf=\"sourceSelect == 'OWASPTOP2021'\" mat-raised-button color=\"accent\" (click)=\"addOWASPtop2021()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add OWASP Top 10 2021</button>\n \n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n</div>\n\n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Inject } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\n@Component({\n selector: 'app-dialog-addreportprofile',\n templateUrl: './dialog-addreportprofile.component.html',\n styleUrls: ['./dialog-addreportprofile.component.scss']\n})\nexport class DialogAddreportprofileComponent implements OnInit {\n\n profile_name = new UntypedFormControl();\n profile_theme = new UntypedFormControl();\n logow = new UntypedFormControl();\n logoh = new UntypedFormControl();\n uploadlogoprev = '';\n advlogo = '';\n video_embed = new UntypedFormControl();\n remove_lastpage = new UntypedFormControl();\n remove_issueStatus = new UntypedFormControl();\n remove_issuecvss = new UntypedFormControl();\n remove_issuecve = new UntypedFormControl();\n remove_researcher = new UntypedFormControl();\n remove_changelog = new UntypedFormControl();\n remove_tags = new UntypedFormControl();\n report_parsing_desc = new UntypedFormControl();\n ResName = new UntypedFormControl();\n ResEmail = new UntypedFormControl();\n ResSocial = new UntypedFormControl();\n ResWeb = new UntypedFormControl();\n origi = [];\n\n constructor(public dialogRef: MatDialogRef<DialogAddreportprofileComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit(): void {\n\n if (this.data === 'open') {\n this.logow.setValue(600);\n this.logoh.setValue(500);\n this.video_embed.setValue(true);\n this.profile_theme.setValue('white');\n this.remove_lastpage.setValue(false);\n this.remove_issueStatus.setValue(false);\n this.remove_issuecvss.setValue(true);\n this.remove_issuecve.setValue(true);\n this.remove_researcher.setValue(false);\n this.remove_changelog.setValue(false);\n this.remove_tags.setValue(false);\n this.report_parsing_desc.setValue(false);\n this.ResName.setValue('');\n this.ResEmail.setValue('');\n this.ResSocial.setValue('');\n this.ResWeb.setValue('');\n } else {\n\n this.origi.push(this.data);\n this.profile_name.setValue(this.data.profile_name);\n\n this.uploadlogoprev = '<img src=\"' + this.data.logo + '\" width=\"100px\">';\n this.advlogo = this.data.logo;\n\n this.logow.setValue(this.data.logow);\n this.logoh.setValue(this.data.logoh);\n this.video_embed.setValue(this.data.video_embed);\n this.profile_theme.setValue(this.data.theme);\n this.remove_lastpage.setValue(this.data.remove_lastpage);\n this.remove_issueStatus.setValue(this.data.remove_issueStatus);\n this.remove_issuecvss.setValue(this.data.remove_issuecvss);\n this.remove_issuecve.setValue(this.data.remove_issuecve);\n this.remove_researcher.setValue(this.data.remove_researcher);\n this.remove_changelog.setValue(this.data.remove_changelog);\n this.remove_tags.setValue(this.data.remove_tags);\n this.report_parsing_desc.setValue(this.data.report_parsing_desc);\n this.ResName.setValue(this.data.ResName);\n this.ResEmail.setValue(this.data.ResEmail);\n this.ResSocial.setValue(this.data.ResSocial);\n this.ResWeb.setValue(this.data.ResWeb);\n }\n\n\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n importlogo(input: HTMLInputElement) {\n\n const files = input.files;\n if (files && files.length) {\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = (e) => {\n this.parselogo(fileReader.result);\n\n };\n fileReader.readAsBinaryString(fileToRead);\n }\n\n }\n\n parselogo(data) {\n const linkprev = 'data:image/png;base64,' + btoa(data);\n this.uploadlogoprev = '<img src=\"' + linkprev + '\" width=\"100px\">';\n this.advlogo = linkprev;\n }\n\n clearlogo() {\n this.uploadlogoprev = '';\n this.advlogo = '';\n console.log('Logo cleared!');\n }\n\n addNewProfile() {\n console.log('add new profile');\n this.dialogRef.close([\n {\n profile_name: this.profile_name.value,\n logo: this.advlogo,\n logow: this.logow.value,\n logoh: this.logoh.value,\n theme: this.profile_theme.value,\n video_embed: this.video_embed.value,\n remove_lastpage: this.remove_lastpage.value,\n remove_issueStatus: this.remove_issueStatus.value,\n remove_issuecvss: this.remove_issuecvss.value,\n remove_issuecve: this.remove_issuecve.value,\n remove_researcher: this.remove_researcher.value,\n remove_changelog: this.remove_changelog.value,\n remove_tags: this.remove_tags.value,\n report_parsing_desc: this.report_parsing_desc.value,\n ResName: this.ResName.value,\n ResEmail: this.ResEmail.value,\n ResSocial: this.ResSocial.value,\n ResWeb: this.ResWeb.value\n }\n ]);\n }\n\n saveNewProfile() {\n console.log('add new profile');\n this.dialogRef.close({\n profile_name: this.profile_name.value,\n logo: this.advlogo,\n logow: this.logow.value,\n logoh: this.logoh.value,\n theme: this.profile_theme.value,\n video_embed: this.video_embed.value,\n remove_lastpage: this.remove_lastpage.value,\n remove_issueStatus: this.remove_issueStatus.value,\n remove_issuecvss: this.remove_issuecvss.value,\n remove_issuecve: this.remove_issuecve.value,\n remove_researcher: this.remove_researcher.value,\n remove_changelog: this.remove_changelog.value,\n remove_tags: this.remove_tags.value,\n report_parsing_desc: this.report_parsing_desc.value,\n ResName: this.ResName.value,\n ResEmail: this.ResEmail.value,\n ResSocial: this.ResSocial.value,\n ResWeb: this.ResWeb.value,\n original: this.origi\n });\n }\n\n}\n","\n<h1 class=\"mat-display\">\n Report Settings Profile\n</h1>\n\n<div md-dialog-content>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <mat-label>Profile name (*)</mat-label>\n <input matInput placeholder=\"Ex. My bugbounty settings profile\" [formControl]=\"profile_name\" value=\"\" />\n </mat-form-field>\n \n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"start center\">\n\n <button mat-flat-button (click)=\"fileuploadInput.click()\" color=\"primary\" title=\"Upload report logo\" style=\"margin-right: 10px!important;\">\n <i class=\"material-icons\">attach_file</i> HTML Report logo\n <input type=\"file\" #fileuploadInput id=\"file\" accept=\"image/*\" (change)=\"importlogo($event.target)\" name=\"myfiles\" style=\"display:none;\">\n </button>\n\n <div fxLayout=\"column\" style=\"margin-top: 5px; height: 118px;\" style=\"margin-right: 10px!important;\">\n <mat-form-field appearance=\"outline\" color=\"accent\" [style.width.px]=\"85\">\n <mat-label>Width (px)</mat-label>\n <input matInput [formControl]=\"logow\">\n </mat-form-field>\n \n <mat-form-field appearance=\"outline\" color=\"accent\" [style.width.px]=\"85\">\n <mat-label>Height (px)</mat-label>\n <input matInput [formControl]=\"logoh\">\n </mat-form-field>\n </div>\n\n <div [innerHTML]=\"uploadlogoprev\"></div>\n\n <button *ngIf=\"advlogo\" mat-icon-button color=\"warn\" (click)=\"clearlogo()\" title=\"Remove report logo\">\n <mat-icon>delete_forever</mat-icon>\n </button>\n\n </div>\n\n </div>\n\n <br>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <mat-label>Theme</mat-label>\n <mat-select [formControl]=\"profile_theme\">\n <mat-option value=\"white\">White</mat-option>\n <mat-option value=\"dark\">Dark</mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <div class=\"example-full-width\">\n\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-checkbox [formControl]=\"video_embed\">Embed video in report<br>(MP4, WebM, and OGG)</mat-checkbox>\n <mat-checkbox [formControl]=\"remove_lastpage\">Remove Last page<br>(Generated by VULNRΞPO)</mat-checkbox>\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-checkbox [formControl]=\"report_parsing_desc\">(Parsing: Description)<br>Add new line</mat-checkbox>\n <mat-checkbox [formControl]=\"remove_changelog\">Remove Changelog</mat-checkbox>\n <mat-checkbox [formControl]=\"remove_issueStatus\">Remove Issue status</mat-checkbox>\n <mat-checkbox [formControl]=\"remove_issuecvss\">Remove Issue CVSS</mat-checkbox>\n <mat-checkbox [formControl]=\"remove_issuecve\">Remove Issue CVE</mat-checkbox>\n <mat-checkbox [formControl]=\"remove_researcher\">Remove Researcher</mat-checkbox>\n <mat-checkbox [formControl]=\"remove_tags\">Remove TAGs</mat-checkbox>\n </div>\n\n </div>\n\n </div>\n <hr>\n <div class=\"example-full-width\">\n\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Name\" [formControl]=\"ResName\">\n <mat-icon matSuffix>person_pin</mat-icon>\n </mat-form-field>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Social links\" [formControl]=\"ResSocial\">\n <mat-icon matSuffix>share</mat-icon>\n </mat-form-field>\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"E-mail\" [formControl]=\"ResEmail\">\n <mat-icon matSuffix>email</mat-icon>\n </mat-form-field>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Website\" [formControl]=\"ResWeb\">\n <mat-icon matSuffix>public</mat-icon>\n </mat-form-field>\n </div>\n\n </div>\n\n </div>\n \n\n \n</div>\n<br>\n<div md-dialog-actions>\n <div>\n <button mat-flat-button color=\"accent\" *ngIf=\"data == 'open'\" (click)=\"addNewProfile()\">Add</button>\n <button mat-flat-button color=\"accent\" *ngIf=\"data !== 'open'\" (click)=\"saveNewProfile()\">Save</button>\n \n <button mat-flat-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n </div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ApiService } from '../api.service';\nimport { IndexeddbService } from '../indexeddb.service';\nimport { Inject } from '@angular/core';\n\ninterface Apisource {\n value: string;\n viewValue: string;\n}\n\n@Component({\n selector: 'app-dialog-apiadd',\n templateUrl: './dialog-apiadd.component.html',\n styleUrls: ['./dialog-apiadd.component.scss']\n})\nexport class DialogApiaddComponent implements OnInit {\n apiconneted = false;\n hide = true;\n addapihide = false;\n apiname = '';\n apiurl = '';\n alert = '';\n status = 'Not connected!';\n sour: Apisource[] = [\n { value: 'api.vulnrepo.com', viewValue: 'VULNRΞPO REMOTE API' },\n { value: '', viewValue: 'Custom API' },\n ];\n selectedAPIDEF = this.sour[0];\n\n constructor(public dialogRef: MatDialogRef<DialogApiaddComponent>, private apiService: ApiService,\n private indexeddbService: IndexeddbService, @Inject(MAT_DIALOG_DATA) public data) { }\n\n ngOnInit(): void {\n\n if (this.data) {\n this.addapihide = true;\n }\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n apiconnectManual(apik: string, pass: string, selected) {\n\n let setapiurl = selected.value;\n let setapiname = selected.viewValue;\n\n if (selected.value === '' && selected.viewValue === 'Custom API') {\n setapiurl = this.apiurl;\n setapiname = this.apiname;\n }\n\n if (apik !== undefined && apik !== '' && pass !== undefined && pass !== '' && setapiurl !== undefined && setapiname !== undefined) {\n\n this.status = 'Connecting...';\n const url = new URL(setapiurl);\n // url.port; // => \"443\"\n this.apiService.APISend(url.hostname, apik, 'apiconnect', '').then(resp => {\n if (resp.AUTH === 'OK') {\n this.apiconneted = true;\n\n const savejson = { apikey: apik, value: url.hostname, viewValue: setapiname };\n\n sessionStorage.setItem('VULNREPO-API', JSON.stringify([savejson]));\n this.saveAPIKEY([savejson], pass);\n this.dialogRef.close('OK');\n\n } else {\n this.status = 'Not connected!';\n }\n }).catch(err => {\n this.status = 'Can\\'t connect, try again!';\n });\n }\n }\n\n saveAPIKEY(key, pass) {\n\n this.indexeddbService.encryptKEY(JSON.stringify(key), pass).then(data => {\n if (data) {\n this.indexeddbService.saveKEYinDB(data).then(ret => {});\n }\n });\n\n }\n\n addapi(apikey, selectedAPIDEF) {\n\n let setapiurl = selectedAPIDEF.value;\n let setapiname = selectedAPIDEF.viewValue;\n\n if (selectedAPIDEF.value === '' && selectedAPIDEF.viewValue === 'Custom API') {\n setapiurl = this.apiurl;\n setapiname = this.apiname;\n }\n\n const apik = apikey;\n\n // tslint:disable-next-line:max-line-length\n if (apik !== undefined && apik !== '' && this.data !== undefined && this.data !== '' && setapiurl !== undefined && setapiname !== undefined) {\n\n this.status = 'Connecting...';\n const url = new URL(setapiurl);\n // url.port; // => \"443\"\n this.apiService.APISend(url.hostname, apik, 'apiconnect', '').then(resp => {\n if (resp.AUTH === 'OK') {\n this.apiconneted = true;\n\n const localkey = sessionStorage.getItem('VULNREPO-API');\n let list = [];\n const savejson = { apikey: apik, value: url.hostname, viewValue: setapiname };\n\n if (localkey) {\n list = JSON.parse(localkey);\n list.push(savejson);\n sessionStorage.setItem('VULNREPO-API', JSON.stringify(list));\n this.saveAPIKEY(list, this.data);\n }\n\n this.dialogRef.close('OK');\n\n } else {\n this.status = 'Not connected!';\n }\n }).catch(err => {\n this.status = 'Can\\'t connect, try again!';\n });\n }\n\n\n\n\n\n }\n\n}\n","<h1 class=\"mat-display\">\n <mat-icon class=\"vertical-align-middle size-45\">https</mat-icon> Access API Vault\n</h1>\n\n\n<div md-dialog-content>\n\n <form class=\"example-form\">\n\n <mat-form-field style=\"width: 100%;\" color=\"accent\" appearance=\"fill\">\n <mat-label>Select an API</mat-label>\n <mat-select [(value)]=\"selectedAPIDEF\" [disabled]=\"apiconneted\">\n <mat-option *ngFor=\"let Importsource of sour\" [value]=\"Importsource\">\n {{Importsource.viewValue}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n \n <div *ngIf=\"selectedAPIDEF.value == 'api.vulnrepo.com'\">API: <a target=\"_blank\" class=\"active-link\" rel=\"noopener noreferrer\" href=\"https://{{selectedAPIDEF.value}}/\">https://{{selectedAPIDEF.value}}</a></div>\n \n <div *ngIf=\"selectedAPIDEF.value != 'api.vulnrepo.com'\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <mat-label>API Name:</mat-label>\n <input matInput placeholder=\"API Name\" [(ngModel)]=\"apiname\" name=\"apiname\" value=\"\">\n </mat-form-field>\n \n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <mat-label>API URL:</mat-label>\n <input matInput placeholder=\"api.vulnrepo.com OR IP\" [(ngModel)]=\"apiurl\" name=\"apiurl\" value=\"\">\n </mat-form-field>\n </div>\n\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <mat-label>API KEY:</mat-label>\n <input matInput placeholder=\"API KEY\" #apikey value=\"\" [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n\n <div [hidden]=\"addapihide\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <mat-label >Set your API Vault password:</mat-label>\n <input matInput placeholder=\"Your storing API Vault password\" #apikeypass value=\"\" [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n </div>\n\n <p *ngIf=\"!apiconneted\">Status: {{status}}</p>\n\n </form>\n\n<div *ngIf=\"alert != ''\">\n <span class=\"label danger\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-25\">warning</mat-icon> {{alert}}</span><br>\n</div>\n</div>\n<br>\n<div md-dialog-actions>\n <div>\n <button *ngIf=\"addapihide\" mat-flat-button color=\"accent\" (click)=\"addapi(apikey.value, selectedAPIDEF)\">Confirm</button>\n <button *ngIf=\"!addapihide\" mat-flat-button color=\"accent\" (click)=\"apiconnectManual(apikey.value, apikeypass.value, selectedAPIDEF)\">Confirm</button>\n \n <button mat-flat-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n </div>\n</div>","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-dialog-apierror',\n templateUrl: './dialog-apierror.component.html',\n styleUrls: ['./dialog-apierror.component.scss']\n})\nexport class DialogApierrorComponent implements OnInit {\n\n constructor(public dialogRef: MatDialogRef<DialogApierrorComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit(): void {\n }\n tryagain(): void {\n this.dialogRef.close('tryagain');\n }\n savelocally(): void {\n this.dialogRef.close('savelocally');\n }\n}\n","\n<h1 class=\"mat-display\">\n <mat-icon class=\"vertical-align-middle size-45\">sync_problem</mat-icon> API ERROR\n</h1>\n\n\n<div md-dialog-content>\n Cannot connect to the API server!\n</div>\n<br>\n<div md-dialog-actions>\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"start end\">\n <button mat-flat-button color=\"accent\" (click)=\"savelocally()\"><mat-icon>check</mat-icon> Save locally</button>\n </div>\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"end start\">\n <button mat-flat-button color=\"primary\" (click)=\"tryagain()\"><mat-icon>cancel</mat-icon> Try again</button>\n </div>\n </div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Inject } from '@angular/core';\nimport { IndexeddbService } from '../indexeddb.service';\n\n@Component({\n selector: 'app-dialog-apikey',\n templateUrl: './dialog-apikey.component.html',\n styleUrls: ['./dialog-apikey.component.scss']\n})\nexport class DialogApikeyComponent implements OnInit {\n hide = true;\n alert = '';\n removedialog = false;\n\n constructor(public dialogRef: MatDialogRef<DialogApikeyComponent>,\n @Inject(MAT_DIALOG_DATA) public data, private indexeddbService: IndexeddbService) { }\n\n ngOnInit(): void {\n\n if (sessionStorage.getItem('hidedialog') === 'true') {\n this.removedialog = true;\n }\n\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n onKeydown(event, keypass: string) {\n if (event.key === 'Enter') {\n this.decrypt(keypass);\n }\n }\n\n decrypt(keypass) {\n\n if (this.data === 'addtovault') {\n\n this.indexeddbService.retrieveAPIkey().then(ret => {\n\n if (ret) {\n this.indexeddbService.decryptKEY(ret, keypass).then(ret2 => {\n if (ret2) {\n this.dialogRef.close(keypass);\n } else {\n this.alert = 'Wrong password!';\n }\n });\n\n }\n });\n\n } else {\n this.indexeddbService.decryptKEY(this.data, keypass).then(ret => {\n if (ret) {\n this.dialogRef.close(ret);\n } else {\n this.alert = 'Wrong password!';\n }\n });\n }\n\n }\n\n removedialogFunc(event) {\n if (event.checked === true) {\n sessionStorage.setItem('hidedialog', 'true');\n }\n if (event.checked === false) {\n sessionStorage.removeItem('hidedialog');\n }\n }\n}\n","\n<h1 class=\"mat-display\">\n <mat-icon class=\"vertical-align-middle size-45\">https</mat-icon> Access API Vault\n</h1>\n\n\n<div md-dialog-content>\n\n <form class=\"example-form\">\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"API Vault password\" #keypass (keydown)=\"onKeydown($event,keypass.value)\" [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n\n </form>\n\n<div *ngIf=\"alert != ''\">\n <span class=\"label danger\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-25\">warning</mat-icon> {{alert}}</span><br>\n</div>\n<mat-checkbox [checked]=\"removedialog\" (change)=\"removedialogFunc($event)\">Do not show again in this session</mat-checkbox>\n</div>\n<br>\n<div md-dialog-actions>\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"start end\">\n <button mat-flat-button color=\"accent\" (click)=\"decrypt(keypass.value)\"><mat-icon>lock_open</mat-icon> Open vault</button>\n </div>\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"end start\">\n <button mat-flat-button color=\"primary\" (click)=\"cancel()\"><mat-icon>cancel</mat-icon> Cancel</button>\n </div>\n </div>\n</div>\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-dialog-changekey',\n templateUrl: './dialog-changekey.component.html',\n styleUrls: ['./dialog-changekey.component.scss']\n})\nexport class DialogChangekeyComponent implements OnInit {\n alert: string;\n hide = true;\n\n constructor(public dialogRef: MatDialogRef<DialogChangekeyComponent>) { }\n\n ngOnInit() {\n }\n\n changeseckey(pass: string, pass2: string) {\n\n if ((pass.length >= 8) && (pass2.length >= 8)) {\n\n if (pass === pass2) {\n this.dialogRef.close(pass);\n } else {\n this.alert = 'The given passwords do not match. Try again.';\n }\n\n } else {\n this.alert = 'Security key is too weak. Try again.';\n }\n\n\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n}\n","<h1 mat-dialog-title><mat-icon class=\"vertical-align-middle padding-bottom-3\">security</mat-icon> Change report security key</h1>\n\n <form class=\"example-form\">\n \n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Set report security key\" #pass [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n \n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Re-enter report security key\" #pass2 [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n\n <p>Remember report security key, losing it you will lose access to the report!</p>\n <p style=\"color: red\">{{alert}}</p>\n\n <button mat-raised-button color=\"accent\" (click)=\"changeseckey(pass.value, pass2.value)\">Set new security key</button>\n \n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Close</button>\n \n </form>","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-dialog-changelog',\n templateUrl: './dialog-changelog.component.html',\n styleUrls: ['./dialog-changelog.component.scss']\n})\nexport class DialogChangelogComponent implements OnInit {\n\n mydata: any;\n today = Date.now();\n\n constructor(public dialogRef: MatDialogRef<DialogChangelogComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit() {\n }\n\n addChangelog(date, desc) {\n this.dialogRef.close({date: new Date(date).getTime(), desc: desc});\n }\n\n editChangelog(date, desc, data) {\n const xta = {date: new Date(date).getTime(), desc: desc, origi: data};\n this.dialogRef.close(xta);\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>Changelog <span *ngIf=\"!data\">add</span><span *ngIf=\"data\">edit</span></h1>\n<div mat-dialog-content>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Event date\" #edate value=\"{{ (data ? data.date : today) | date:'medium' }}\">\n </mat-form-field>\n \n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <textarea matInput placeholder=\"Leave a comment\" #edesc value=\"{{data?.desc}}\"></textarea>\n </mat-form-field>\n\n</div>\n\n<div mat-dialog-actions>\n <button *ngIf=\"!data\" mat-raised-button cdkFocusInitial color=\"accent\" (click)=\"addChangelog(edate.value, edesc.value)\">Add</button>\n <button *ngIf=\"data\" mat-raised-button cdkFocusInitial color=\"accent\" (click)=\"editChangelog(edate.value, edesc.value, data)\">Edit</button>\n \n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n \n</div>","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-dialog-customcontent',\n templateUrl: './dialog-customcontent.component.html',\n styleUrls: ['./dialog-customcontent.component.scss']\n})\nexport class DialogCustomcontentComponent implements OnInit {\n\n constructor(public dialogRef: MatDialogRef<DialogCustomcontentComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit(): void {\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n}\n","<div class=\"fixActionRow\">\n <h1 mat-dialog-title>Add Custom Content (You can use Markdown or HTML)</h1>\n <div mat-dialog-content>\n\n <mat-form-field appearance=\"outline\" class=\"example-full-width\" color=\"accent\">\n <textarea rows=\"12\" matInput placeholder=\"HTML content\" [(ngModel)]=\"data.report_settings.report_html\"\n value=\"{{data.report_settings.report_html}}\"></textarea>\n <mat-hint>Use \"<div class="pagebreak"></div>\" to break page in print/pdf.</mat-hint>\n </mat-form-field>\n\n </div>\n <div class=\"spacer\"></div>\n <div mat-dialog-actions>\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n </div>\n</div>","import { Component, OnInit, Inject } from '@angular/core';\nimport { ApiService } from '../api.service';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-dialog-cve',\n templateUrl: './dialog-cve.component.html',\n styleUrls: ['./dialog-cve.component.scss']\n})\nexport class DialogCveComponent implements OnInit {\n err_msg: string;\n show = false;\n results: any;\n mycve = new UntypedFormControl();\n\n constructor(private apiService: ApiService,\n public dialogRef: MatDialogRef<DialogCveComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\n this.mycve.setValue(this.data.cve);\n }\n\n ngOnInit(): void {\n }\n\n searchCVE() {\n this.show = false;\n this.results = null;\n this.err_msg = '';\n const data = this.mycve.value;\n if (data !== '' && data !== null) {\n\n const reg = new RegExp(/^CVE-\\d{4}-\\d{4,7}$/, 'i');\n if (reg.test(data)) {\n\n this.show = true;\n this.apiService.getCVE(data).then(resp => {\n\n if (resp !== null && resp !== undefined) {\n // if everything OK\n if (resp.id) {\n this.results = resp;\n this.show = false;\n }\n\n if (resp.error) {\n this.err_msg = resp.error;\n this.show = false;\n }\n\n } else {\n this.show = false;\n this.err_msg = 'CVE not found.';\n }\n\n });\n\n } else {\n this.show = false;\n this.err_msg = 'CVE format error.';\n }\n }\n\n }\n\n\n saveCVE() {\n const cve = this.mycve.value;\n this.data.cve = cve.toUpperCase();\n this.dialogRef.close(this.data);\n }\n\n\n}\n","<h1 class=\"mat-display\">\n <mat-icon class=\"vertical-align-middle size-45\">explore</mat-icon> CVE Info (Online DB)\n</h1>\n<mat-dialog-content>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\" appearance=\"outline\">\n <mat-label>CVE</mat-label>\n <input matInput placeholder=\"e.g.: CVE-2017-0144\" [formControl]=\"mycve\">\n </mat-form-field>\n\n <div *ngIf=\"results\">\n\n <div style=\"width: 100%;\" fxLayout.xs=\"column\" fxLayoutGap=\"10px\" ngClass.gt-xs=\"ml-10\">\n <div fxFlex.sm=\"0 1 calc(50%-10px)\" fxFlex.md=\"0 1 calc(33%-10px)\" fxFlex.gt-md=\"0 1 calc(25%-10px)\" *ngIf=\"results?.Published\" fxFlex><b>Published:</b><br>{{ results?.Published }}</div>\n <div fxFlex.sm=\"0 1 calc(50%-10px)\" fxFlex.md=\"0 1 calc(33%-10px)\" fxFlex.gt-md=\"0 1 calc(25%-10px)\" *ngIf=\"results?.Modified\" fxFlex><b>Modified:</b><br>{{ results?.Modified }}</div>\n <div fxFlex.sm=\"0 1 calc(50%-10px)\" fxFlex.md=\"0 1 calc(33%-10px)\" fxFlex.gt-md=\"0 1 calc(25%-10px)\" *ngIf=\"results?.assigner\" fxFlex><b>Assigner:</b><br>{{ results?.assigner }}</div>\n </div>\n \n <p *ngIf=\"results?.summary\"><b>Summary:</b> {{ results?.summary }}</p>\n <p>\n <mat-chip-list>\n <mat-chip *ngIf=\"results?.cvss\">CVSS: {{ results?.cvss }}</mat-chip>\n <mat-chip *ngIf=\"results?.cwe\">{{ results?.cwe }}</mat-chip>\n\n <div *ngFor=\"let item of results?.references\">\n <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"{{ item }}\">\n <mat-chip>{{ item }}</mat-chip>\n </a>\n </div>\n\n </mat-chip-list>\n </p>\n\n\n\n\n <mat-form-field class=\"example-full-width\" color=\"accent\" appearance=\"outline\">\n <mat-label>Source data (JSON):</mat-label>\n <textarea matInput>{{ results | json }}</textarea>\n </mat-form-field>\n\n </div>\n\n <div *ngIf=\"show\">\n Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar>\n </div>\n {{err_msg}}\n</mat-dialog-content>\n<mat-dialog-actions align=\"start\">\n <button mat-raised-button color=\"accent\" (click)=\"searchCVE()\">\n <mat-icon matSuffix>explore</mat-icon> Search CVE \n </button>\n \n\n <div *ngIf=\"results\">\n <button mat-raised-button color=\"accent\" (click)=\"saveCVE()\">\n <mat-icon matSuffix>save</mat-icon> Save & close\n </button> \n </div>\n\n <button mat-flat-button color=\"primary\" mat-dialog-close>Cancel</button>\n</mat-dialog-actions>","import { Component, OnInit } from '@angular/core';\nimport { Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-dialog-cvss',\n templateUrl: './dialog-cvss.component.html',\n styleUrls: ['./dialog-cvss.component.scss']\n})\nexport class DialogCvssComponent implements OnInit {\n\n selectedAnswers = [];\n selectedItem: string;\n show = false;\n severity: string;\n basescore: number;\n AVvalue: any;\n ACvalue: any;\n PRvalue: any;\n UIvalue: any;\n Svalue: any;\n Cvalue: any;\n Ivalue: any;\n Avalue: any;\n\n AV: any[] = [['Network (N)', 'A vulnerability exploitable with network access means the vulnerable component is bound to the network stack and the attacker\\'s path is through OSI layer 3 (the network layer). Such a vulnerability is often termed \"remotely exploitable\" and can be thought of as an attack being exploitable one or more network hops away (e.g. across layer 3 boundaries from routers). An example of a network attack is an attacker causing a denial of service (DoS) by sending a specially crafted TCP packet from across the public Internet (e.g. CVE 2004 0230).', 0.85],\n ['Adjacent', 'A vulnerability exploitable with adjacent network access means the vulnerable component is bound to the network stack, however the attack is limited to the same shared physical (e.g. Bluetooth, IEEE 802.11), or logical (e.g. local IP subnet) network, and cannot be performed across an OSI layer 3 boundary (e.g. a router). An example of an Adjacent attack would be an ARP (IPv4) or neighbor discovery (IPv6) flood leading to a denial of service on the local LAN segment. See also CVE 2013 6014.', 0.62],\n ['Local (L)', 'A vulnerability exploitable with Local access means that the vulnerable component is not bound to the network stack, and the attacker\\'s path is via read/write/execute capabilities. In some cases, the attacker may be logged in locally in order to exploit the vulnerability, otherwise, she may rely on User Interaction to execute a malicious file.', 0.55],\n ['Physical (P)', 'A vulnerability exploitable with Physical access requires the attacker to physically touch or manipulate the vulnerable component. Physical interaction may be brief (e.g. evil maid attack [1]) or persistent. An example of such an attack is a cold boot attack which allows an attacker to access to disk encryption keys after gaining physical access to the system, or peripheral attacks such as Firewire/USB Direct Memory Access attacks.', 0.2]];\n\n AC: any[] = [['Low (L)', 'Specialized access conditions or extenuating circumstances do not exist. An attacker can expect repeatable success against the vulnerable component.', 0.77],\n ['High (H)', 'A successful attack depends on conditions beyond the attacker\\'s control. That is, a successful attack cannot be accomplished at will, but requires the attacker to invest in some measurable amount of effort in preparation or execution against the vulnerable component before a successful attack can be expected. 2 For example, a successful attack may depend on an attacker overcoming any of the following conditions:\\n- The attacker must conduct target-specific reconnaissance. For example, on target configuration settings, sequence numbers, shared secrets, etc.\\n- The attacker must prepare the target environment to improve exploit reliability. For example, repeated exploitation to win a race condition, or overcoming advanced exploit mitigation techniques.\\n- The attacker must inject herself into the logical network path between the target and the resource requested by the victim in order to read and/or modify network communications (e.g. man in the middle attack).', 0.44]];\n\n PR: any[] = [['None (N)', 'The attacker is unauthorized prior to attack, and therefore does not require any access to settings or files to carry out an attack.', 0.85],\n ['Low (L)', 'The attacker is authorized with (i.e. requires) privileges that provide basic user capabilities that could normally affect only settings and files owned by a user. Alternatively, an attacker with Low privileges may have the ability to cause an impact only to non-sensitive resources.', [0.62, 0.68]],\n ['High (H)', 'The attacker is authorized with (i.e. requires) privileges that provide significant (e.g. administrative) control over the vulnerable component that could affect component-wide settings and files.', [0.27, 0.5]]];\n\n UI: any[] = [['None (N)', 'The vulnerable system can be exploited without interaction from any user.', 0.85],\n ['Required (R)', 'Successful exploitation of this vulnerability requires a user to take some action before the vulnerability can be exploited. For example, a successful exploit may only be possible during the installation of an application by a system administrator.', 0.62]];\n\n S: any[] = [['Unchanged (U)', 'An exploited vulnerability can only affect resources managed by the same authority. In this case the vulnerable component and the impacted component are the same.', [true, 6.42]], ['Changed (C)', 'An exploited vulnerability can affect resources beyond the authorization privileges intended by the vulnerable component. In this case the vulnerable component and the impacted component are different.', [false, 7.52]]];\n\n C: any[] = [['High (H)', 'There is total loss of confidentiality, resulting in all resources within the impacted component being divulged to the attacker. Alternatively, access to only some restricted information is obtained, but the disclosed information presents a direct, serious impact. For example, an attacker steals the administrator\\'s password, or private encryption keys of a web server.', 0.56],\n ['Low (L)', 'There is some loss of confidentiality. Access to some restricted information is obtained, but the attacker does not have control over what information is obtained, or the amount or kind of loss is constrained. The information disclosure does not cause a direct, serious loss to the impacted component.', 0.22],\n ['None (N)', 'There is no loss of confidentiality within the impacted component.', 0]];\n\n I: any[] = [['High (H)', 'There is a total loss of integrity, or a complete loss of protection. For example, the attacker is able to modify any/all files protected by the impacted component. Alternatively, only some files can be modified, but malicious modification would present a direct, serious consequence to the impacted component.', 0.56],\n ['Low (L)', 'Modification of data is possible, but the attacker does not have control over the consequence of a modification, or the amount of modification is constrained. The data modification does not have a direct, serious impact on the impacted component.', 0.22],\n ['None (N)', 'There is no loss of integrity within the impacted component.', 0]];\n\n A: any[] = [['High (H)', 'There is total loss of availability, resulting in the attacker being able to fully deny access to resources in the impacted component; this loss is either sustained (while the attacker continues to deliver the attack) or persistent (the condition persists even after the attack has completed). Alternatively, the attacker has the ability to deny some availability, but the loss of availability presents a direct, serious consequence to the impacted component (e.g., the attacker cannot disrupt existing connections, but can prevent new connections; the attacker can repeatedly exploit a vulnerability that, in each instance of a successful attack, leaks a only small amount of memory, but after repeated exploitation causes a service to become completely unavailable).', 0.56],\n ['Low (L)', 'There is reduced performance or interruptions in resource availability. Even if repeated exploitation of the vulnerability is possible, the attacker does not have the ability to completely deny service to legitimate users. The resources in the impacted component are either partially available all of the time, or fully available only some of the time, but overall there is no direct, serious consequence to the impacted component.', 0.22],\n ['None (N)', 'There is no impact to availability within the impacted component.', 0]];\n\n constructor(public router: Router, public dialogRef: MatDialogRef<DialogCvssComponent>,\n @Inject(MAT_DIALOG_DATA) public data) { }\n\n ngOnInit() {}\n\n AVonclick(event) {\n this.selectedItem = event[0] + ': ' + event[1];\n this.AVvalue = event[2];\n this.calcit();\n }\n AConclick(event) {\n this.selectedItem = event[0] + ': ' + event[1];\n this.ACvalue = event[2];\n this.calcit();\n }\n PRonclick(event) {\n this.selectedItem = event[0] + ': ' + event[1];\n this.PRvalue = event[2];\n this.calcit();\n }\n UIonclick(event) {\n this.selectedItem = event[0] + ': ' + event[1];\n this.UIvalue = event[2];\n this.calcit();\n }\n\n Sonclick(event) {\n this.selectedItem = event[0] + ': ' + event[1];\n this.Svalue = event[2];\n this.calcit();\n }\n Conclick(event) {\n this.selectedItem = event[0] + ': ' + event[1];\n this.Cvalue = event[2];\n this.calcit();\n }\n Ionclick(event) {\n this.selectedItem = event[0] + ': ' + event[1];\n this.Ivalue = event[2];\n this.calcit();\n }\n Aonclick(event) {\n this.selectedItem = event[0] + ': ' + event[1];\n this.Avalue = event[2];\n this.calcit();\n }\n\n\n calcit() {\n\n const severityRatings = [{\n name: 'Info',\n bottom: 0.0,\n top: 0.0\n }, {\n name: 'Low',\n bottom: 0.1,\n top: 3.9\n }, {\n name: 'Medium',\n bottom: 4.0,\n top: 6.9\n }, {\n name: 'High',\n bottom: 7.0,\n top: 8.9\n }, {\n name: 'Critical',\n bottom: 9.0,\n top: 10.0\n }];\n\n if (this.AVvalue !== undefined && this.ACvalue !== undefined && this.PRvalue !== undefined &&\n this.UIvalue !== undefined && this.Svalue !== undefined && this.Cvalue !== undefined && this.Ivalue !== undefined\n && this.Avalue !== undefined) {\n\n if (this.Svalue[0] === true) {\n // unchange\n if (this.PRvalue[0]) {\n this.PRvalue = this.PRvalue[0];\n }\n } else if (this.Svalue[0] === false) {\n // change\n if (this.PRvalue[1]) {\n this.PRvalue = this.PRvalue[1];\n }\n }\n const exploitabilityCoefficient = 8.22;\n const scopeCoefficient = 1.08;\n let impactSubScore: number;\n // tslint:disable-next-line:max-line-length\n const exploitabalitySubScore = exploitabilityCoefficient * Number(this.AVvalue) * Number(this.ACvalue) * Number(this.PRvalue) * Number(this.UIvalue);\n const impactSubScoreMultiplier = (1 - ((1 - Number(this.Cvalue)) * (1 - Number(this.Ivalue)) * (1 - Number(this.Avalue))));\n\n if (this.Svalue[0] === true) {\n impactSubScore = Number(this.Svalue[1]) * impactSubScoreMultiplier;\n } else {\n // tslint:disable-next-line:max-line-length\n impactSubScore = Number(this.Svalue[1]) * (impactSubScoreMultiplier - 0.029) - 3.25 * Math.pow(impactSubScoreMultiplier - 0.02, 15);\n }\n\n if (impactSubScore <= 0) {\n this.basescore = 0;\n } else {\n if (this.Svalue[0]) {\n this.basescore = Math.min((exploitabalitySubScore + impactSubScore), 10);\n } else {\n this.basescore = Math.min((exploitabalitySubScore + impactSubScore) * scopeCoefficient, 10);\n }\n }\n\n this.basescore = Math.ceil(this.basescore * 10) / 10;\n this.show = true;\n for (let _i = 0; _i < severityRatings.length; _i++) {\n if (severityRatings[_i].bottom <= this.basescore && severityRatings[_i].top >= this.basescore) {\n this.severity = severityRatings[_i].name;\n }\n }\n\n }\n\n }\n\n save(cvss: number, severity: string) {\n this.data.cvss = cvss;\n this.data.severity = severity;\n this.dialogRef.close(this.data);\n }\n\n}\n","<h1 class=\"mat-display\">\n <mat-icon class=\"vertical-align-middle size-45\">add_circle_outline</mat-icon> CVSS v3.1 calculator\n <div fxFlex></div>\n <div *ngIf=\"show\"><span class=\"label {{severity | lowercase}}\">{{severity}} {{basescore}}</span></div>\n</h1>\n<mat-dialog-content>\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"25%\" fxFlex.sm=\"25%\" fxFlex.xs=\"100%\">\n <label title=\"This metric reflects the context by which vulnerability exploitation is possible. The Base Score increases the more remote (logically, and physically) an attacker can be in order to exploit the vulnerable component.\"><b>Attack Vector (AV)</b></label><br>\n <mat-radio-group class=\"example-radio-group\" [(ngModel)]=\"selectedAnswers[0]\">\n <mat-radio-button class=\"example-radio-button\" (change)=\"AVonclick(item)\" *ngFor=\"let item of AV\"\n [value]=\"\">\n {{item[0]}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div fxFlex=\"25%\" fxFlex.sm=\"25%\" fxFlex.xs=\"100%\">\n <label title=\"This metric describes the conditions beyond the attacker’s control that must exist in order to exploit the vulnerability. Such conditions may require the collection of more information about the target or computational exceptions. The assessment of this metric excludes any requirements for user interaction in order to exploit the vulnerability. If a specific configuration is required for an attack to succeed, the Base metrics should be scored assuming the vulnerable component is in that configuration.\"><b>Attack Complexity (AC)</b></label><br>\n <mat-radio-group class=\"example-radio-group\" [(ngModel)]=\"selectedAnswers[1]\">\n <mat-radio-button class=\"example-radio-button\" (change)=\"AConclick(item)\" *ngFor=\"let item of AC\"\n [value]=\"\">\n {{item[0]}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div fxFlex=\"25%\" fxFlex.sm=\"25%\" fxFlex.xs=\"100%\">\n <label title=\"This metric describes the level of privileges an attacker must possess before successfully exploiting the vulnerability.\"><b>Privileges Required (PR)</b></label><br>\n <mat-radio-group class=\"example-radio-group\" [(ngModel)]=\"selectedAnswers[2]\">\n <mat-radio-button class=\"example-radio-button\" (change)=\"PRonclick(item)\" *ngFor=\"let item of PR\"\n [value]=\"\">\n {{item[0]}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div fxFlex=\"25%\" fxFlex.sm=\"25%\" fxFlex.xs=\"100%\">\n <label title=\"This metric captures the requirement for a user, other than the attacker, to participate in the successful compromise the vulnerable component. This metric determines whether the vulnerability can be exploited solely at the will of the attacker, or whether a separate user (or user-initiated process) must participate in some manner.\"><b>User Interaction (UI)</b></label><br>\n <mat-radio-group class=\"example-radio-group\" [(ngModel)]=\"selectedAnswers[3]\">\n <mat-radio-button class=\"example-radio-button\" (change)=\"UIonclick(item)\" *ngFor=\"let item of UI\"\n [value]=\"\">\n {{item[0]}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n </div>\n\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"25%\" fxFlex.sm=\"25%\" fxFlex.xs=\"100%\">\n <label title=\"Does a successful attack impact a component other than the vulnerable component? If so, the Base Score increases and the Confidentiality, Integrity and Authentication metrics should be scored relative to the impacted component.\"><b>Scope (S)</b></label><br>\n <mat-radio-group class=\"example-radio-group\" [(ngModel)]=\"selectedAnswers[4]\">\n <mat-radio-button class=\"example-radio-button\" (change)=\"Sonclick(item)\" *ngFor=\"let item of S\"\n [value]=\"\">\n {{item[0]}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div fxFlex=\"25%\" fxFlex.sm=\"25%\" fxFlex.xs=\"100%\">\n <label title=\"This metric measures the impact to the confidentiality of the information resources managed by a software component due to a successfully exploited vulnerability. Confidentiality refers to limiting information access and disclosure to only authorized users, as well as preventing access by, or disclosure to, unauthorized ones.\"><b>Confidentiality Impact (C)</b></label><br>\n <mat-radio-group class=\"example-radio-group\" [(ngModel)]=\"selectedAnswers[5]\">\n <mat-radio-button class=\"example-radio-button\" (change)=\"Conclick(item)\" *ngFor=\"let item of C\"\n [value]=\"\">\n {{item[0]}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div fxFlex=\"25%\" fxFlex.sm=\"25%\" fxFlex.xs=\"100%\">\n <label title=\"This metric measures the impact to integrity of a successfully exploited vulnerability. Integrity refers to the trustworthiness and veracity of information.\"><b>Integrity Impact (I)</b></label><br>\n <mat-radio-group class=\"example-radio-group\" [(ngModel)]=\"selectedAnswers[6]\">\n <mat-radio-button class=\"example-radio-button\" (change)=\"Ionclick(item)\" *ngFor=\"let item of I\"\n [value]=\"\">\n {{item[0]}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div fxFlex=\"25%\" fxFlex.sm=\"25%\" fxFlex.xs=\"100%\">\n <label title=\"This metric measures the impact to the availability of the impacted component resulting from a successfully exploited vulnerability. It refers to the loss of availability of the impacted component itself, such as a networked service (e.g., web, database, email). Since availability refers to the accessibility of information resources, attacks that consume network bandwidth, processor cycles, or disk space all impact the availability of an impacted component.\"><b>Availability Impact (A)</b></label><br>\n <mat-radio-group class=\"example-radio-group\" [(ngModel)]=\"selectedAnswers[7]\">\n <mat-radio-button class=\"example-radio-button\" (change)=\"Aonclick(item)\" *ngFor=\"let item of A\"\n [value]=\"\">\n {{item[0]}}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n </div>\n <hr>\n <div>{{selectedItem}}</div>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"start\">\n <button mat-flat-button color=\"accent\" *ngIf=\"show\" (click)=\"save(basescore, severity)\">Save CVSS and Severity</button> \n <button mat-flat-button color=\"primary\" mat-dialog-close>Cancel</button>\n</mat-dialog-actions>","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntypedFormControl } from '@angular/forms';\n\n@Component({\n selector: 'app-dialog-edit',\n templateUrl: './dialog-edit.component.html',\n styleUrls: ['./dialog-edit.component.scss']\n})\nexport class DialogEditComponent implements OnInit {\n title = new UntypedFormControl();\n reportname = new UntypedFormControl();\n col1 = false;\n col2 = false;\n col3 = false;\n col4 = false;\n col5 = false;\n\n constructor(public dialogRef: MatDialogRef<DialogEditComponent>, @Inject(MAT_DIALOG_DATA) public data: any) {\n\n\n }\n\n ngOnInit() {\n\n if (this.data.report_name) {\n this.col1 = true;\n this.reportname.setValue(this.data.report_name);\n }\n if (this.data.title) {\n this.col2 = true;\n this.title.setValue(this.data.title);\n }\n\n if (this.data[0] !== undefined) {\n if (this.data[0].remo === 'remove') {\n this.col3 = true;\n }\n if (this.data[0].remo === 'changelog') {\n this.col4 = true;\n }\n if (this.data[0].remo === 'removereport') {\n this.col5 = true;\n }\n }\n\n\n }\n\n removeissue(item): void {\n this.dialogRef.close(item);\n }\n removechangelog(item): void {\n this.dialogRef.close(item);\n }\n removeReport(item): void {\n this.dialogRef.close(item);\n }\n cancel(): void {\n this.dialogRef.close();\n }\n\n changeseckey() {\n\n if (this.data.title !== this.title.value) {\n this.data.title = this.title.value;\n this.dialogRef.close(this.data);\n } else {\n this.dialogRef.close('nochanges');\n }\n \n }\n\n changereportname() {\n\n if (this.data.report_name !== this.reportname.value) {\n this.data.report_name = this.reportname.value;\n this.dialogRef.close(this.reportname.value);\n } else {\n this.dialogRef.close('nochanges');\n }\n \n }\n\n}\n","<h1 *ngIf=\"col1\" mat-dialog-title>Edit report title</h1>\n<h1 *ngIf=\"col2\" mat-dialog-title>Edit issue title</h1>\n<h1 *ngIf=\"col3\" mat-dialog-title>Remove issue:</h1>\n<h1 *ngIf=\"col4\" mat-dialog-title>Remove event from changelog:</h1>\n<h1 *ngIf=\"col5\" mat-dialog-title>Remove report:</h1>\n\n<div mat-dialog-content >\n <div class=\"example-form\">\n\n <mat-form-field *ngIf=\"col1\" class=\"example-full-width\" color=\"accent\">\n <input [formControl]=\"reportname\" type=\"text\" matInput>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"col2\" class=\"example-full-width\" color=\"accent\">\n <input [formControl]=\"title\" type=\"text\" matInput>\n </mat-form-field>\n\n <h3 *ngIf=\"col3\">{{data[1].item.title}}</h3>\n <h3 *ngIf=\"col4\">{{data[1].item.desc}}</h3>\n <h3 *ngIf=\"col5\">{{data[1].item.report_name}}</h3>\n </div>\n</div>\n\n<div mat-dialog-actions>\n <button *ngIf=\"col1\" mat-raised-button color=\"accent\" (click)=\"changereportname()\">Save</button>\n <button *ngIf=\"col2\" mat-raised-button color=\"accent\" (click)=\"changeseckey()\">Save</button>\n <button *ngIf=\"col5\" mat-raised-button color=\"warn\" (click)=\"removeReport(data[1].item)\">Remove</button>\n <button *ngIf=\"col4\" mat-raised-button color=\"warn\" (click)=\"removechangelog(data[1].item)\">Remove</button>\n <button *ngIf=\"col3\" mat-raised-button color=\"warn\" (click)=\"removeissue(data[1].item)\">Remove</button>\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Close</button>\n</div>","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport * as Crypto from 'crypto-js';\n\n@Component({\n selector: 'app-dialog-exportissues',\n templateUrl: './dialog-exportissues.component.html',\n styleUrls: ['./dialog-exportissues.component.scss']\n})\nexport class DialogExportissuesComponent implements OnInit {\n isReturn = [];\n fields: any;\n issues: any;\n curlhide = false;\n splitfilereport = false;\n multipartcurl = false;\n multicurlcmd = '';\n curlcmd = '';\n hide = true;\n fields_prop = `\n \"project\": {\n \"key\": \"$key\"\n },\n \"summary\": \"$title\",\n \"description\": \"$desc \\\\n\\\\n POC: \\\\n $poc \\\\n\\\\n Reference: \\\\n $ref\",\n \"issuetype\": {\n \"name\": \"Bug\"\n },\n \"priority\": {\n \"id\": \"$severity\"\n },\n \"labels\": [\n \"$label\"\n ]`;\n\n constructor(public dialogRef: MatDialogRef<DialogExportissuesComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit() {\n\n if (this.data.sel) {\n this.data.sel.forEach((item, index) => {\n if (item === true) {\n this.isReturn.push(this.data.orig[index]);\n }\n });\n } else {\n this.isReturn = this.data;\n }\n\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n jiraCloudExport(jira_c_url, jira_c_key, jira_c_email, jira_c_label, workflow, splitcount) {\n this.hide = true;\n this.curlhide = false;\n\n function sevret(text) {\n let ret = 0;\n\n if (text === 'Critical') {\n ret = 1;\n }\n if (text === 'High') {\n ret = 2;\n }\n\n if (text === 'Medium') {\n ret = 3;\n }\n\n if (text === 'Low') {\n ret = 4;\n }\n\n if (text === 'Info') {\n ret = 5;\n }\n\n return ret;\n }\n\n function dataownload(datajson, filename) {\n const element = document.createElement('a');\n element.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(datajson));\n element.setAttribute('download', 'data' + String(filename) + '.json');\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n }\n\n if (this.isReturn.length > 0) {\n this.data = this.isReturn;\n }\n\n const myClonedArray = Object.assign([], this.data);\n\n if (this.splitfilereport === true) {\n\n this.curlhide = false;\n this.multipartcurl = false;\n let fname = 0;\n while (myClonedArray.length > 0) {\n\n const chunk = myClonedArray.splice(0, splitcount);\n this.issues = '';\n\n chunk.forEach((item, index) => {\n let myStr = workflow;\n let des = item.desc.toString().replace(/(\\\\)/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '').replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '');\n if (des.length > 4000) {\n des = des.substring(0, 4000);\n des = des + '[TRUNCATE]';\n }\n // tslint:disable-next-line:max-line-length\n let po = item.poc.toString().replace(/(\\\\)/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '').replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '');\n if (po.length > 4000) {\n po = po.substring(0, 4000);\n po = po + '[TRUNCATE]';\n }\n\n myStr = myStr\n .replace('$key', jira_c_key)\n .replace('$title', item.title.toString())\n .replace('$desc', des)\n .replace('$poc', po)\n .replace('$ref', item.ref.toString().replace(/\\n/g, '\\\\n'))\n .replace('$severity', sevret(item.severity))\n .replace('$label', jira_c_label);\n\n this.fields = `\"fields\": {\n ` + myStr + `\n }`;\n let sep = '';\n if (chunk.length > 1) {\n sep = ',';\n }\n\n this.issues = this.issues + `{\n \"update\": {},\n ` + this.fields + `\n }` + sep;\n\n });\n\n if (this.issues.slice(-1) === ',') {\n this.issues = this.issues.slice(0, -1);\n }\n\n const datajson = `{\n \"issueUpdates\": [\n ` + this.issues + `\n ]\n }`;\n\n this.multicurlcmd = `ls data*[0-9].json | while read file\ndo\ncurl -D- -u ` + jira_c_email + ` -X POST -d \"@$file\" -H \"Content-Type: application/json\" ` + jira_c_url + `/rest/api/2/issue/bulk\ndone`;\n\n dataownload(datajson, fname);\n this.multipartcurl = true;\n fname = fname + 1;\n\n }\n\n\n } else {\n\n this.multipartcurl = false;\n this.curlhide = false;\n this.issues = '';\n if (this.isReturn.length > 0) {\n this.data = this.isReturn;\n }\n\n this.data.forEach((item, index) => {\n\n let myStr = workflow;\n\n let des = item.desc.toString().replace(/(\\\\)/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '').replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '');\n if (des.length > 4000) {\n des = des.substring(0, 4000);\n des = des + '[TRUNCATE]';\n }\n\n let po = item.poc.toString().replace(/(\\\\)/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '').replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '');\n if (po.length > 4000) {\n po = po.substring(0, 4000);\n po = po + '[TRUNCATE]';\n }\n\n myStr = myStr\n .replace('$key', jira_c_key)\n .replace('$title', item.title.toString())\n .replace('$desc', des)\n .replace('$poc', po)\n .replace('$ref', item.ref.toString().replace(/\\n/g, '\\\\n'))\n .replace('$severity', sevret(item.severity))\n .replace('$label', jira_c_label);\n\n this.fields = `\"fields\": {\n ` + myStr + `\n }`;\n let sep = '';\n if (this.data.length > 1) {\n sep = ',';\n }\n\n this.issues = this.issues + `{\n \"update\": {},\n ` + this.fields + `\n }` + sep;\n\n });\n\n if (this.issues.slice(-1) === ',') {\n this.issues = this.issues.slice(0, -1);\n }\n\n const datajson = `{\n \"issueUpdates\": [\n ` + this.issues + `\n ]\n }`;\n\nthis.curlcmd = `\ncurl \\\n-D- \\\n-u ` + jira_c_email + ` \\\n-X POST \\\n-d \"@data.json\" \\\n-H \"Content-Type: application/json\" \\\n` + jira_c_url + `/rest/api/2/issue/bulk`;\n\n dataownload(datajson, '');\n this.curlhide = true;\n }\n }\n\n\n vulnrepojsonexport(pass, pass2) {\n\n if (pass === pass2) {\n const json = JSON.stringify(this.data);\n // Encrypt\n const ciphertext = Crypto.AES.encrypt(json, pass);\n\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(ciphertext));\n element.setAttribute('download', 'Vulnrepo issues export.vuln');\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n }\n\n\n }\n\n splitfile(event) {\n if (event.checked === false) {\n this.splitfilereport = false;\n }\n if (event.checked === true) {\n this.splitfilereport = true;\n }\n }\n\n\n}\n","<h1 mat-dialog-title>Export issues {{isReturn.length}} to:</h1>\n<div mat-dialog-content>\n\n <mat-tab-group>\n\n\n <mat-tab label=\"VULNRΞPO (.VULN)\">\n\n <form class=\"example-form\">\n <p>Exported file will be encrypted by default:</p>\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput cdkFocusInitial placeholder=\"Set report security key\" #pass\n [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Re-enter report security key\" #pass2\n [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n\n <button *ngIf=\"pass.value != '' && pass2.value != '' && pass.value == pass2.value\" mat-raised-button\n color=\"accent\" (click)=\"vulnrepojsonexport(pass.value,pass2.value)\" cdkFocusInitial>Secure issues\n export</button>\n \n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Close</button>\n\n </form>\n\n </mat-tab>\n\n\n <mat-tab label=\"Atlassian JIRA\"><br>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input cdkFocusInitial matInput placeholder=\"Jira URL*\" #jira_c_url value=\"\">\n </mat-form-field>\n\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"0px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"pola\" color=\"accent\">\n <input matInput placeholder=\"Project key*\" #jira_c_key value=\"\">\n </mat-form-field>\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Set ticket label\" #jira_c_label value=\"\">\n </mat-form-field>\n </div>\n\n </div>\n\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"0px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"pola\" color=\"accent\">\n <input matInput placeholder=\"User e-mail/login*\" #jira_c_email value=\"\">\n </mat-form-field>\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"center center\"\n style=\"border: 1px solid #ccc !important;border-radius: 16px;\">\n <mat-checkbox [checked]=\"splitfilereport\" (change)=\"splitfile($event)\">Split the file<br>(smaller parts)</mat-checkbox>\n :<input style=\"width: 40px;\" matInput\n placeholder=\"How many issue to split the file?\" #splitcount value=\"2\" maxlength=\"4\" size=\"4\"\n title=\"How many issue to split the file?\">\n </div>\n\n </div>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <textarea matInput value=\"{{fields_prop}}\" #jira_workflow placeholder=\"WorkFlow fields*\"></textarea>\n <mat-hint>You can customize all fields params. Variables: $key, $title, $desc, $poc, $ref, $severity,\n $label</mat-hint>\n </mat-form-field>\n\n <br><br><br>\n <button mat-raised-button color=\"accent\"\n (click)=\"jiraCloudExport(jira_c_url.value, jira_c_key.value, jira_c_email.value, jira_c_label.value, jira_workflow.value, splitcount.value)\">Generate\n cURL request</button> \n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n\n <br><br>\n <div *ngIf=\"curlhide\">\n <p>Download data.json file and in the same folder run curl:</p>\n <pre style=\"white-space:pre-wrap;\">{{curlcmd}}</pre>\n <p>cURL should prompt to enter your user password to jira.</p>\n </div>\n <div *ngIf=\"multipartcurl\">\n <p>Download data[0-9].json files and in the same folder run curl:</p>\n <textarea matInput placeholder=\"Ex. It makes me feel...\">{{multicurlcmd}}</textarea>\n <p>cURL should prompt to enter your user password to JIRA.</p>\n </div>\n\n </mat-tab>\n\n </mat-tab-group>\n\n</div>","import { Component, OnInit } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { DatePipe } from '@angular/common';\nimport * as xml2js from 'xml2js';\nimport * as Crypto from 'crypto-js';\n\ninterface Importsource {\n value: string;\n viewValue: string;\n}\n\n@Component({\n selector: 'app-dialog-import',\n templateUrl: './dialog-import.component.html',\n styleUrls: ['./dialog-import.component.scss']\n})\nexport class DialogImportComponent implements OnInit {\n selected = '';\n selected_source = '';\n csvContent: string;\n parsedCsv: any[];\n xmltojson: any[];\n public show_input = true;\n public please_wait = false;\n\n public bugcrowdshow_input = true;\n public bugcrowdplease_wait = false;\n public burpshow_input = true;\n public burpplease_wait = false;\n public openvas9show_input = true;\n public openvas9please_wait = false;\n public nessusxmlshow_input = true;\n public nessusxmlplease_wait = false;\n public vulnrepojsonshow_input = true;\n public vulnrepojsonplease_wait = false;\n public vulnrepowrongpass = false;\n public nmapshow_input = true;\n public nmapplease_wait = false;\n public nmapwrongpass = false;\n\n file: any;\n hide = true;\n sour: Importsource[] = [\n { value: 'vulnrepojson', viewValue: 'VULNRΞPO (.VULN)' },\n { value: 'burp', viewValue: 'Burp Suite (.XML)' },\n { value: 'bugcrowd', viewValue: 'Bugcrowd (.CSV)' },\n { value: 'nmap', viewValue: 'Nmap (.XML)' },\n { value: 'openvas', viewValue: 'OpenVAS 9 (.XML)' },\n { value: 'nessus_xml', viewValue: 'Tenable Nessus (.NESSUS)' },\n { value: 'nessus', viewValue: 'Tenable Nessus (.CSV)' }\n ];\n\n constructor(public dialogRef: MatDialogRef<DialogImportComponent>, public datePipe: DatePipe) { }\n\n ngOnInit() {\n }\n\n onFileLoad(fileLoadedEvent) {\n }\n\n onFileSelect(input: HTMLInputElement) {\n\n const files = input.files;\n if (files && files.length) {\n this.show_input = false;\n this.please_wait = true;\n\n const fileToRead = files[0];\n\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n\n\n fileReader.onload = (e) => {\n this.parseNessus(fileReader.result);\n };\n\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n parseNessus(imp): void {\n\n const csvData = imp || '';\n const allTextLines = csvData.split(/\\r\\n/);\n const headers = allTextLines[0].split(',');\n const lines = [];\n\n for (let i = 0; i < allTextLines.length; i++) {\n // split content based on comma\n const data = allTextLines[i].split('\",\"');\n\n const tarr = [];\n for (let j = 0; j < headers.length; j++) {\n tarr.push(data[j]);\n }\n\n lines.push(tarr);\n\n }\n this.parsedCsv = lines;\n\n function unique(array, propertyName) {\n return array.filter((e, i) => array.findIndex(a => a[propertyName] === e[propertyName]) === i);\n }\n\n function group_issues(array) {\n\n const ret = [];\n array.forEach((item, index) => {\n\n ret.forEach((retit, retindex) => {\n\n if (retit[0] === item[0]) {\n\n if (retit[1] !== '') {\n retit[1] = retit[1] + ',' + item[1];\n }\n if (retit[4] !== item[4]) {\n\n if (retit[4] !== '') {\n\n\n const doesContains = retit[4].match(item[4]);\n\n if (doesContains !== null) {\n\n } else {\n if (item[6] === '0') {\n retit[4] = retit[4] + '\\n' + item[4];\n } else {\n retit[4] = retit[4] + '\\n' + item[5] + '://' + item[4] + ':' + item[6];\n }\n }\n\n }\n\n }\n\n }\n\n });\n\n if (item[6] !== '0') {\n item[4] = item[5] + '://' + item[4] + ':' + item[6];\n }\n\n ret.push(item);\n\n });\n\n return ret;\n }\n\n\n const parsedCsv2 = group_issues(this.parsedCsv);\n const parsedCsv = unique(parsedCsv2, 0);\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const info = parsedCsv.map((res, key) => {\n\n const def = {\n title: res[7],\n poc: res[4],\n files: [],\n desc: res[8] + '\\n\\n' + res[9],\n severity: res[3],\n ref: res[11],\n cvss: res[2],\n cve: res[1],\n tags: [],\n bounty: [],\n date: today\n };\n\n return def;\n });\n\n info.splice(info.length - 1, 1);\n info.splice(0, 1);\n this.dialogRef.close(info);\n\n }\n\n bugcrowdonFileSelect(input: HTMLInputElement) {\n const files = input.files;\n if (files && files.length) {\n this.bugcrowdshow_input = false;\n this.bugcrowdplease_wait = true;\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n fileReader.onload = (e) => {\n this.parsebugcrowd(fileReader.result);\n };\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n }\n\n\n \n parsebugcrowd(csv) {\n \n const csvData = csv || '';\n let m: any;\n const issuelist = [];\n let text = csvData.substring(csvData.indexOf(\"\\n\") + 1);\n text = text.replace(/, /g,'. ');\n \n\n function setseverity(severity: string) {\n\n if (severity === \"5\") {\n severity = \"Info\";\n } else if (severity === \"4\") {\n severity = \"Low\";\n } else if (severity === \"3\") {\n severity = \"Medium\";\n } else if (severity === \"2\") {\n severity = \"High\";\n } else if (severity === \"1\") {\n severity = \"Critical\";\n }\n\n return severity;\n }\n\n\n const regex = /(.*),(.*),(.*),(.*),(.*),(.*),([\\S\\s]*?),([\\S\\s]*?),(.*),(.*),(.*),(.*),(.*)/gm;\n while ((m = regex.exec(text)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n \n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const def = {\n title: m[4],\n poc: m[6] + \"\\n\\n\" + m[8],\n files: [],\n desc: m[7],\n severity: setseverity(m[11]),\n ref: 'https://bugcrowd.com/vulnerability-rating-taxonomy',\n cvss: '',\n cve: '',\n tags: [{name: 'bugcrowd'}],\n bounty: [],\n date: today\n };\n\n issuelist.push(def);\n\n }\n this.dialogRef.close(issuelist);\n\n }\n\n burponFileSelect(input: HTMLInputElement) {\n const files = input.files;\n if (files && files.length) {\n this.burpshow_input = false;\n this.burpplease_wait = true;\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n fileReader.onload = (e) => {\n this.parseBurp(fileReader.result);\n };\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n }\n\n\n\n parseBurp(xml) {\n\n function returnhost(host, path) {\n let ret = '';\n host.map((res, key) => {\n ret = ret + res.$.ip + ' ' + res._ + path[key] + '\\n';\n });\n return ret;\n }\n\n\n function stripHtml(html)\n {\n let tmp = document.createElement(\"DIV\");\n tmp.innerHTML = html;\n return tmp.textContent || tmp.innerText || \"\";\n }\n\n function setcvss(severity) {\n\n let cvss = 0;\n if (severity === 'High') {\n cvss = 8;\n } else if (severity === 'Medium') {\n cvss = 5;\n } else if (severity === 'Low') {\n cvss = 2;\n } else if (severity === 'Info') {\n cvss = 0;\n }\n\n return cvss;\n }\n\n this.xmltojson = [];\n const parser = new xml2js.Parser({ strict: true, trim: true });\n parser.parseString(xml, (err, result) => {\n this.xmltojson = result.issues.issue;\n });\n\n\n const emp = [];\n\n this.xmltojson.map((res, key) => {\n\n if (!emp.find(x => x.type[0] === res.type[0])) {\n emp.push(res);\n } else {\n const index = emp.findIndex(x => x.type[0] === res.type[0]);\n\n emp[index].location.push(res.location[0]);\n emp[index].path.push(res.path[0]);\n emp[index].host.push(res.host[0]);\n\n }\n\n\n });\n\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const info = emp.map((res, key) => {\n\n let item = '';\n if (res.vulnerabilityClassifications !== undefined) {\n item = stripHtml(res.vulnerabilityClassifications[0]);\n } else {\n item = '';\n }\n\n let itempoc = '';\n if (res.issueDetail !== undefined) {\n itempoc = stripHtml(res.issueDetail[0]);\n } else {\n itempoc = '';\n }\n\n let itemrem = '';\n if (res.remediationBackground !== undefined) {\n itemrem = stripHtml(res.remediationBackground[0]);\n } else {\n itemrem = '';\n }\n\n if (res.severity[0] === 'Information') {\n res.severity[0] = 'Info';\n }\n\n const def = {\n title: res.name[0],\n poc: itempoc + '\\n\\n' + returnhost(res.host, res.path),\n files: [],\n desc: stripHtml(res.issueBackground[0]) + '\\n\\n' + itemrem,\n severity: res.severity[0],\n ref: item,\n cvss: setcvss(res.severity[0]),\n cve: '',\n tags: [],\n bounty: [],\n date: today\n };\n\n return def;\n });\n\n\n this.dialogRef.close(info);\n\n }\n\n openvas9onFileSelect(input: HTMLInputElement) {\n const files = input.files;\n if (files && files.length) {\n this.openvas9show_input = false;\n this.openvas9please_wait = true;\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n fileReader.onload = (e) => {\n this.parseOpenvas9(fileReader.result);\n };\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n }\n\n parseOpenvas9(xml) {\n\n this.xmltojson = [];\n const parser = new xml2js.Parser({ strict: true, trim: true });\n\n parser.parseString(xml, (err, result) => {\n if (result.report !== undefined) {\n if (result.report.report) {\n this.xmltojson = result.report.report;\n }\n } else {\n if (result.get_results_response !== undefined) {\n this.parseOpenvasxml(result.get_results_response.result);\n }\n }\n });\n\n this.xmltojson.forEach((myObject, index) => {\n if (myObject.results) {\n myObject.results.forEach((myarrdeep) => {\n this.parseOpenvasxml(myarrdeep.result);\n });\n }\n });\n\n }\n\n parseOpenvasxml(xml) {\n\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const info = xml.map((res, key) => {\n\n const def = {\n title: res.name,\n poc: res.port[0] + '\\n\\n' + res.host[0]._,\n files: [],\n desc: res.description,\n severity: res.threat[0],\n ref: res.nvt[0].xref[0],\n cvss: res.severity[0],\n cve: '',\n tags: [],\n bounty: [],\n date: today\n };\n\n return def;\n });\n\n this.dialogRef.close(info);\n }\n\n\n nessusxmlonFileSelect(input: HTMLInputElement) {\n\n const files = input.files;\n if (files && files.length) {\n this.nessusxmlshow_input = false;\n this.nessusxmlplease_wait = true;\n\n const fileToRead = files[0];\n\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n\n fileReader.onload = (e) => {\n this.parseNessusxml(fileReader.result);\n };\n\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n\n }\n\n parseNessusxml(xml) {\n\n function getSafe(fn, defaultVal) {\n try {\n return fn();\n } catch (e) {\n return defaultVal;\n }\n }\n\n this.xmltojson = [];\n const issues = [];\n const parser = new xml2js.Parser({ strict: true, trim: true });\n\n parser.parseString(xml, (err, result) => {\n this.xmltojson = result.NessusClientData_v2.Report;\n });\n\n this.xmltojson.forEach((myObject, index) => {\n if (myObject.ReportHost) {\n myObject.ReportHost.forEach((myarrdeep) => {\n\n myarrdeep.ReportItem.forEach((itemissue) => {\n\n // tslint:disable-next-line:max-line-length\n type MyArrayType = Array<{ ip: string, port: string, protocol: string, hostfqdn: string, hostname: string, pluginout: string }>;\n const arr: MyArrayType = [\n // tslint:disable-next-line:max-line-length\n { ip: myarrdeep.$.name, port: itemissue.$.port, protocol: itemissue.$.protocol, hostfqdn: getSafe(() => myarrdeep.HostProperties[0].tag[2]._, ''), hostname: getSafe(() => myarrdeep.HostProperties[0].tag[14]._, ''), pluginout: itemissue.plugin_output }\n ];\n\n if (myarrdeep.HostProperties[0].tag[2]._) {\n\n }\n // tslint:disable-next-line:max-line-length\n issues.push([itemissue.$.pluginName, itemissue.$.pluginID, arr, itemissue.cvss_base_score, itemissue.solution, itemissue.description, itemissue.cve, itemissue.see_also, itemissue.risk_factor]);\n });\n\n });\n }\n });\n\n\n const uniq_items = [];\n issues.forEach((myissues, index) => {\n\n if (!uniq_items.some((item) => item[1] === myissues[1])) {\n uniq_items.push(myissues);\n } else {\n const ind = uniq_items.findIndex(x => x[1] === myissues[1]);\n uniq_items[ind][2].push(myissues[2]);\n }\n\n });\n\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const info = uniq_items.map((res, key) => {\n\n if (res[8].toString() === 'Information') {\n res[8] = 'Info';\n }\n if (res[8].toString() === 'None') {\n res[8] = 'Info';\n res[3] = '0';\n }\n\n\n let out_hosts = 'IP List:\\n\\n';\n res[2].forEach((myObject, index) => {\n\n if (myObject.ip !== undefined) {\n let port = '';\n if (myObject.port.toString() === '0') {\n port = '';\n } else {\n port = 'Port: ' + myObject.protocol + '/' + myObject.port;\n }\n\n if (myObject.hostname.toString() === 'true') {\n myObject.hostname = '';\n }\n\n out_hosts = out_hosts + myObject.ip + ' ' + myObject.hostname + ' ' + port + '\\n';\n } else {\n\n let port = '';\n if (myObject[0].port.toString() === '0') {\n port = '';\n } else {\n port = 'Port: ' + myObject[0].protocol + '/' + myObject[0].port;\n }\n if (myObject[0].hostname.toString() === 'true') {\n myObject[0].hostname = '';\n }\n\n // tslint:disable-next-line:max-line-length\n out_hosts = out_hosts + myObject[0].ip + ' ' + myObject[0].hostname + ' ' + port + '\\n';\n }\n\n });\n\n\n let out_ip = '\\nOutput:\\n';\n res[2].forEach((myObject, index) => {\n\n if (myObject.ip !== undefined) {\n let port = '';\n if (myObject.port.toString() === '0') {\n port = '';\n } else {\n port = 'Port: ' + myObject.protocol + '/' + myObject.port;\n }\n\n if (myObject.hostname.toString() === 'true') {\n myObject.hostname = '';\n }\n if (myObject.pluginout === undefined) {\n myObject.pluginout = '';\n }\n\n out_ip = out_ip + '===\\n' + myObject.ip + '\\n' + myObject.hostname + '\\n' + port + '\\n\\n' + myObject.pluginout + '\\n\\n';\n } else {\n\n let port = '';\n if (myObject[0].port.toString() === '0') {\n port = '';\n } else {\n port = 'Port: ' + myObject[0].protocol + '/' + myObject[0].port;\n }\n\n if (myObject[0].hostname.toString() === 'true') {\n myObject[0].hostname = '';\n }\n if (myObject[0].pluginout === undefined) {\n myObject[0].pluginout = '';\n }\n\n // tslint:disable-next-line:max-line-length\n out_ip = out_ip + '===\\n' + myObject[0].ip + '\\n' + myObject[0].hostname + '\\n' + port + '\\n\\n' + myObject[0].pluginout + '\\n\\n';\n }\n\n });\n\n res[3] = getSafe(() => res[3], '0');\n\n if (res[7] === undefined) {\n res[7] = '';\n }\n if (res[5] === undefined) {\n res[5] = '';\n }\n\n const def = {\n title: res[0],\n poc: out_hosts + out_ip,\n files: [],\n desc: res[5],\n severity: res[8].toString(),\n ref: res[7],\n cvss: res[3],\n cve: '',\n tags: [],\n bounty: [],\n date: today\n };\n\n return def;\n });\n\n this.dialogRef.close(info);\n }\n\n fileChanged(e) {\n this.file = e.target.files[0];\n }\n\n startUpload(pass) {\n\n if (pass !== '' && this.file) {\n this.vulnrepojsonshow_input = false;\n this.vulnrepojsonplease_wait = true;\n const fileReader = new FileReader();\n fileReader.onload = (e) => {\n this.vulnrepojson(fileReader.result, pass);\n };\n fileReader.readAsText(this.file, 'UTF-8');\n }\n\n }\n\n vulnrepojson(json, pass) {\n\n try {\n // Decrypt\n const bytes = Crypto.AES.decrypt(json.toString(), pass);\n const decryptedData = JSON.parse(bytes.toString(Crypto.enc.Utf8));\n\n if (decryptedData) {\n this.dialogRef.close(decryptedData);\n }\n\n } catch (except) {\n this.vulnrepojsonplease_wait = false;\n this.vulnrepowrongpass = true;\n }\n\n }\n\n nmaponFileSelect(input: HTMLInputElement) {\n\n const files = input.files;\n if (files && files.length) {\n this.show_input = false;\n this.please_wait = true;\n\n const fileToRead = files[0];\n\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n\n\n fileReader.onload = (e) => {\n this.parseNmap(fileReader.result);\n };\n\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n\n }\n\n parseNmap(xml) {\n\n let json = '';\n let hosts = [];\n const parser = new xml2js.Parser({ strict: true, trim: true });\n\n parser.parseString(xml, (err, result) => {\n json = result.nmaprun;\n hosts = result.nmaprun.host;\n });\n\n const date = new Date();\n const today = this.datePipe.transform(date, 'yyyy-MM-dd');\n const info = hosts.map((res, key) => {\n let addre = '';\n if (res.address[0]['$'].addr !== undefined) {\n addre = res.address[0]['$'].addr + ' ';\n } else {\n addre = '';\n }\n\n let hostt = '';\n if(res.hostnames) {\n if(res.hostnames[0].hostname) {\n if (res.hostnames[0].hostname[0]['$'].name !== undefined) {\n hostt = ' - ' + res.hostnames[0].hostname[0]['$'].name;\n } else {\n hostt = '';\n }\n }\n }\n\n let cmd = '';\n if (json['$'].args !== undefined) {\n cmd = 'Execute: ' + json['$'].args + '\\n\\n';\n }\n\n let status = '';\n let ipstat = '';\n if (res.status) {\n if (res.status[0]['$'].state !== undefined) {\n // tslint:disable-next-line:max-line-length\n status = 'IP: ' + res.address[0]['$'].addr + '\\nStatus: ' + res.status[0]['$'].state + '\\nReason: ' + res.status[0]['$'].reason + '\\nReason TTL: ' + res.status[0]['$'].reason_ttl + '\\n';\n ipstat = ' (' + res.status[0]['$'].state + ')';\n }\n }\n\n let ports = 'Open ports:\\n';\n let filteredports = '';\n if (res.ports) {\n if (res.ports[0].port !== undefined) {\n res.ports[0].port.forEach((myObject, index) => {\n let service = '';\n let service_name = '';\n if (myObject.service[0]['$'].name !== undefined) {\n service_name = myObject.service[0]['$'].name;\n }\n let service_product = '';\n if (myObject.service[0]['$'].product !== undefined) {\n service_product = myObject.service[0]['$'].product;\n }\n if (service_product === '') {\n service = service_name\n } else {\n service = service_name + ' - ' + service_product;\n }\n \n ports = ports + myObject['$'].protocol + '/' + myObject['$'].portid + ' - ' + service + '\\n';\n });\n \n }\n \n if (res.ports[0].extraports !== undefined) {\n const title = '\\nFiltered ports:\\n';\n res.ports[0].extraports.forEach((myObject, index) => {\n filteredports = myObject['$'].state + '/' + myObject['$'].count + '\\n';\n });\n filteredports = title + filteredports;\n }\n }\n\n let osdetect = '';\n if (res.os) {\n if (res.os[0].osmatch !== undefined) {\n const title = '\\n====================\\nOS detection:\\n';\n res.os[0].osmatch.forEach((myObject, index) => {\n osdetect = osdetect + myObject['$'].name + ' - ' + myObject['$'].accuracy + '% \\n';\n });\n osdetect = title + osdetect;\n }\n }\n\n const pocc = ports + filteredports + osdetect + '';\n const descc = cmd + status + '';\n\n const def = {\n title: 'Nmap scan for: ' + addre + hostt + ipstat,\n poc: pocc,\n files: [],\n desc: descc,\n severity: 'Info',\n ref: 'https://nmap.org/',\n cvss: '',\n cve: '',\n tags: [],\n bounty: [],\n date: today\n };\n\n return def;\n });\n\n this.dialogRef.close(info);\n\n }\n\n}\n","<h1 mat-dialog-title>Import issues from:</h1>\n<div mat-dialog-content>\n\n <mat-form-field color=\"accent\">\n <mat-label>Select source</mat-label>\n <mat-select [(value)]=\"selected_source\" >\n <mat-option *ngFor=\"let Importsource of sour\" [value]=\"Importsource.value\">\n {{Importsource.viewValue}}\n </mat-option>\n </mat-select>\n </mat-form-field> \n\n <span *ngIf=\"selected_source == 'vulnrepojson'\">\n <p><input type=\"file\" accept=\".vuln\" name=\"myfile\" (change)=\"fileChanged($event)\"></p>\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input cdkFocusInitial matInput placeholder=\"File security key\" #pass [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n \n <p *ngIf=\"vulnrepojsonplease_wait\">Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n <p *ngIf=\"vulnrepowrongpass\"><b style=\"color: red\">Wrong security key!!!</b></p>\n <br>\n <button mat-raised-button color=\"accent\" (click)=\"startUpload(pass.value)\">Import</button> <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n </span>\n\n <input *ngIf=\"selected_source == 'bugcrowd'\" cdkFocusInitial type=\"file\" accept=\".csv\" (change)=\"bugcrowdonFileSelect($event.target)\" name=\"myfile\">\n <p *ngIf=\"bugcrowdplease_wait\">Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n\n <input *ngIf=\"selected_source == 'burp'\" cdkFocusInitial type=\"file\" accept=\".xml\" (change)=\"burponFileSelect($event.target)\" name=\"myfile\">\n <p *ngIf=\"burpplease_wait\">Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n\n <input *ngIf=\"selected_source == 'nmap'\" cdkFocusInitial type=\"file\" accept=\".xml\" (change)=\"nmaponFileSelect($event.target)\" name=\"myfile\">\n <p *ngIf=\"nmapplease_wait\">Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n\n <input *ngIf=\"selected_source == 'openvas'\" cdkFocusInitial type=\"file\" accept=\".xml\" (change)=\"openvas9onFileSelect($event.target)\" name=\"myfile\">\n <p *ngIf=\"openvas9please_wait\">Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n\n <input *ngIf=\"selected_source == 'nessus'\" cdkFocusInitial type=\"file\" accept=\".csv\" (change)=\"onFileSelect($event.target)\" name=\"myfile\">\n <p *ngIf=\"please_wait\">Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n\n <input *ngIf=\"selected_source == 'nessus_xml'\" cdkFocusInitial type=\"file\" accept=\".nessus\" (change)=\"nessusxmlonFileSelect($event.target)\" name=\"myfile\">\n <p *ngIf=\"nessusxmlplease_wait\">Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n\n <br><button *ngIf=\"selected_source != 'vulnrepojson'\" mat-raised-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Router } from '@angular/router';\nimport { IndexeddbService } from '../indexeddb.service';\n\n@Component({\n selector: 'app-dialog-pass',\n templateUrl: './dialog-pass.component.html',\n styleUrls: ['./dialog-pass.component.scss']\n})\nexport class DialogPassComponent implements OnInit {\n hide = true;\n msg = '';\n error = '';\n forgot = false;\n\n constructor(public router: Router, private indexeddbService: IndexeddbService,\n public dialogRef: MatDialogRef<DialogPassComponent>,\n @Inject(MAT_DIALOG_DATA) public data) {\n }\n\n cancel(): void {\n this.dialogRef.close();\n this.router.navigate(['/my-reports']);\n }\n ngOnInit() {\n }\n\n onKeydown(event, pass: string, report_id: string) {\n if (event.key === 'Enter') {\n this.decrypt(pass, report_id);\n }\n }\n\n decrypt(pass: string, report_id: string) {\n this.error = '';\n this.msg = 'Report is decrypted please wait...';\n\n this.indexeddbService.decrypt(pass, report_id).then(returned => {\n if (returned) {\n this.dialogRef.close({ data: pass });\n } else {\n\n if (this.indexeddbService.decodeAES(this.data, pass)) {\n this.dialogRef.close({ data: pass });\n } else {\n this.msg = '';\n this.error = 'Incorrect security key';\n this.forgot = true;\n }\n\n }\n\n });\n\n }\n\n}\n","\n<h1 class=\"mat-display\">\n <mat-icon class=\"vertical-align-middle size-45\">https</mat-icon> Decrypt report\n</h1>\n\n\n<div md-dialog-content>\n\n <form class=\"example-form\">\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Report security key\" #pass (keydown)=\"onKeydown($event,pass.value,data.report_id)\" [type]=\"hide ? 'password' : 'text'\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n\n <div class=\"example-full-width\" fxLayout=\"row\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"65%\" fxLayoutAlign=\"flex-start center\">\n <p *ngIf=\"error != ''\">\n <span class=\"label danger\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-25\">warning</mat-icon> {{error}}</span><br>\n </p>\n </div>\n <div fxFlex=\"35%\" fxLayoutAlign=\"flex-end center\">\n <div *ngIf=\"forgot\">\n <a class=\"active-link\" target=\"_blank\" href=\"/faq?q=I-forgot-my-security-key\">Forgot your key?</a>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"msg != ''\">\n <p>{{msg}}<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n </div>\n </form>\n\n</div>\n<br>\n<div md-dialog-actions>\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"start end\">\n <button mat-flat-button color=\"accent\" (click)=\"decrypt(pass.value,data.report_id)\"><mat-icon>check</mat-icon> Confirm</button>\n </div>\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"end start\">\n <button mat-flat-button color=\"primary\" (click)=\"cancel()\"><mat-icon>cancel</mat-icon> Cancel</button>\n </div>\n </div>\n</div>","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'app-dialog-removeitems',\n templateUrl: './dialog-removeitems.component.html',\n styleUrls: ['./dialog-removeitems.component.scss']\n})\nexport class DialogRemoveitemsComponent implements OnInit {\n isReturn = [];\n constructor(public dialogRef: MatDialogRef<DialogRemoveitemsComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { }\n\n ngOnInit() {\n\n this.data.sel.forEach((item, index) => {\n if (item === true) {\n this.isReturn.push(this.data.orig[index]);\n }\n });\n\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n removefromreport(array) {\n this.dialogRef.close(this.isReturn);\n }\n\n}\n","<h1 mat-dialog-title>Remove selected items: {{isReturn.length}}</h1>\n\n<div mat-dialog-content></div>\n\n<div mat-dialog-actions>\n <button mat-raised-button color=\"warn\" (click)=\"removefromreport(data)\">Remove</button> <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Cancel</button>\n</div>","import { Component, OnInit } from '@angular/core';\nimport {Router, ActivatedRoute} from '@angular/router';\n\n@Component({\n selector: 'app-faq',\n templateUrl: './faq.component.html',\n styleUrls: ['./faq.component.scss']\n})\nexport class FaqComponent implements OnInit {\n\n constructor(private activatedRoute: ActivatedRoute, private router: Router) { }\n\n ngOnInit(): void {\n\n this.activatedRoute.queryParams.subscribe(params => {\n const param: string = params['q'];\n if (param) {\n this.scroll(param);\n }\n });\n\n }\n\n scroll(id) {\n\n const node = document.getElementById(id);\n const yourHeight = 105 + 20;\n \n // scroll to your element\n node.scrollIntoView(true);\n \n // now account for fixed header\n const scrolledY = window.scrollY;\n \n if (scrolledY) {\n window.scroll(0, scrolledY - yourHeight);\n }\n\n }\n\n}\n","<h1 class=\"mat-display-2\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">info</mat-icon> FAQ\n </h1>\n \n\n <mat-card id=\"Browser-support\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=Browser-support\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>Browser support</mat-card-title>\n <mat-card-subtitle>Project is working on latest browsers:</mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <mat-list>\n <mat-list-item><mat-icon color=\"accent\">check</mat-icon> Google Chrome </mat-list-item>\n <mat-list-item><mat-icon color=\"accent\">check</mat-icon> Mozilla Firefox </mat-list-item>\n <mat-list-item><mat-icon color=\"accent\">check</mat-icon> Microsoft Edge (chromium) </mat-list-item>\n <mat-list-item><mat-icon color=\"accent\">check</mat-icon> iOS Safari/Chrome </mat-list-item>\n <mat-list-item><mat-icon color=\"accent\">check</mat-icon> Android Chrome </mat-list-item>\n </mat-list>\n </mat-card-content>\n </mat-card>\n<br>\n\n<mat-card id=\"How-are-reports-stored\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=How-are-reports-stored\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>How are reports stored?</mat-card-title>\n <mat-card-subtitle>All data are stored in browser (by default on local machine, nothing is send outside) using indexeddb and SessionStorage.</mat-card-subtitle>\n <mat-card-subtitle>There is option to use external database/server to store encrypted reports, check on: <a class=\"active-link\" target=\"_blank\" href=\"https://github.com/kac89/vulnrepo/blob/master/API-INTEGRATION.md\">API Reference</a>, <a class=\"active-link\" target=\"_blank\" href=\"https://www.youtube.com/watch?v=k32Oo57ZQdY\">Video Tutorial</a>.</mat-card-subtitle>\n </mat-card-header>\n</mat-card>\n<br>\n\n<mat-card id=\"I-forgot-my-security-key\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=I-forgot-my-security-key\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>How to restore my encrypted report if I forgot my security key?</mat-card-title>\n <mat-card-subtitle>Use bruteforce method or better remember the security key, otherwise there is no other option to decrypt data.</mat-card-subtitle>\n </mat-card-header>\n</mat-card>\n<br>\n\n<mat-card id=\"Can-I-change-report-security-key\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=Can-I-change-report-security-key\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>Can I change report security key?</mat-card-title>\n <mat-card-subtitle>Yes If you able to decrypt report where security key you want to change.</mat-card-subtitle>\n </mat-card-header>\n</mat-card>\n<br>\n\n<mat-card id=\"Displaying-attachments\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=Displaying-attachments\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>How does displaying attachments in the HTML report works?</mat-card-title>\n <mat-card-subtitle>It's simple, all images are always displayed and *.txt files. All other file types will be displayed as a link.</mat-card-subtitle>\n </mat-card-header>\n</mat-card>\n<br>\n\n<mat-card id=\"How-to-create-PDF-report\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=How-to-create-PDF-report\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>How to create PDF report?</mat-card-title>\n <mat-card-subtitle>Download HTML report, open and use 'print to pdf' feature in your browser (ctrl+p), check: <a class=\"active-link\" target=\"_blank\" href=\"https://www.youtube.com/watch?v=k32Oo57ZQdY\">Video Tutorial</a></mat-card-subtitle>\n </mat-card-header>\n <mat-card-actions>\n \n <mat-list>\n <mat-list-item><mat-icon>open_in_browser</mat-icon> <a target=\"_blank\" class=\"active-link\" href=\"https://www.google.com/search?q=print%20to%20pdf%20how%20to%20chrome\">Google Chrome</a> </mat-list-item>\n <mat-list-item><mat-icon>open_in_browser</mat-icon> <a target=\"_blank\" class=\"active-link\" href=\"https://www.google.com/search?q=print%20to%20pdf%20how%20to%20firefox%20browser\">Mozilla Firefox</a> </mat-list-item>\n </mat-list>\n\n </mat-card-actions>\n</mat-card>\n<br>\n\n<mat-card id=\"VULN-VULNR\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=VULN-VULNR\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>What is the difference between the file with the (.VULN) & (.VULNR) extension?</mat-card-title>\n <mat-card-subtitle>Files:</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <mat-list>\n <mat-list-item>(.VULN) - File contains only issues</mat-list-item>\n <mat-list-item>(.VULNR) - File contains full report details e.g.: issues, metadata, author etc...</mat-list-item>\n </mat-list>\n </mat-card-content>\n</mat-card>\n<br>\n\n<mat-card id=\"What-is-the-issue-status\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=What-is-the-issue-status\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>What is the issue status?</mat-card-title>\n <mat-card-subtitle>Issue status is information for the researcher and information in the report about issue current status of review/fixing/if issue still exist.</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <mat-list>\n <mat-list-item><mat-icon style=\"color:red\" title=\"Issue status: Open (Waiting for review)\" class=\"vertical-align-middle valign-issues-center padding-bottom-3\">report</mat-icon> - Open (Waiting for review)</mat-list-item>\n <mat-list-item><mat-icon style=\"color:yellow\" title=\"Issue status: Fix In Progress\" class=\"vertical-align-middle valign-issues-center padding-bottom-3\">warning</mat-icon> - Fix In Progress</mat-list-item>\n <mat-list-item><mat-icon style=\"color:green\" title=\"Issue status: Fixed\" class=\"vertical-align-middle valign-issues-center padding-bottom-3\">check_circle</mat-icon> - Fixed</mat-list-item>\n <mat-list-item><mat-icon style=\"color:grey\" title=\"Issue status: Won't Fix\" class=\"vertical-align-middle valign-issues-center padding-bottom-3\">check_circle</mat-icon> - Won't Fix</mat-list-item>\n </mat-list>\n </mat-card-content>\n</mat-card>\n \n<br>\n<mat-card id=\"API\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=API\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>Can I use external storage for encrypted reports?</mat-card-title>\n <mat-card-subtitle>YES, You can use Local or External server. Here is <a class=\"active-link\" target=\"_blank\" href=\"https://github.com/kac89/vulnrepo/blob/master/API-INTEGRATION.md\">API Reference</a> and example server for personal use on localhost: (<a class=\"active-link\" target=\"_blank\" href=\"https://www.youtube.com/watch?v=k32Oo57ZQdY\">Video Tutorial</a>)</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <mat-list>\n <mat-list-item>\n <mat-icon>open_in_browser</mat-icon> <a class=\"active-link\" target=\"_blank\" href=\"https://github.com/kac89/vulnrepo-server\">vulnrepo-server</a>\n </mat-list-item>\n </mat-list>\n </mat-card-content>\n</mat-card>\n<br>\n\n<mat-card id=\"API-VAULT\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=API-VAULT\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>What is the API VAULT?</mat-card-title>\n <mat-card-subtitle>API VAULT is encrypted (AES) configuration for your API. You have only one VAULT which contains your all APIs configuration.</mat-card-subtitle>\n </mat-card-header>\n</mat-card>\n<br>\n\n<mat-card id=\"Report-Profiles\">\n <mat-card-header>\n <div mat-card-avatar>\n <a class=\"active-link\" href=\"/faq?q=Report-Profiles\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">link</mat-icon></a>\n </div>\n <mat-card-title>Can I create settings for exist/new report and save it?</mat-card-title>\n <mat-card-subtitle>Use in Settings: \"Report Profiles\". <a class=\"active-link\" target=\"_blank\" href=\"https://www.youtube.com/watch?v=k32Oo57ZQdY\">Video Tutorial</a></mat-card-subtitle>\n </mat-card-header>\n</mat-card>\n<br>\n\n<br><br>","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-home',\n templateUrl: './home.component.html',\n styleUrls: ['./home.component.scss']\n})\nexport class HomeComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","<div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n <div fxLayoutAlign=\"center center\" fxFlex=\"20%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <img width=\"150px\" src=\"assets/logo/vulnrepo_logo.png\">\n </div>\n <div fxLayoutAlign=\"start center\" fxFlex=\"80%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <h1 style=\"margin: 0 0 0;\" class=\"mat-display-2\">Create vulnerability reports like a PRO!!!</h1>\n </div>\n</div>\n<br>\n<mat-card>\n\n <p><span style=\"text-decoration: underline;text-decoration-color: #69f0ae\"><b style=\"color:white\">VULNRΞPO</b></span> is a FREE Open Source project designed to speed up the creation of IT Security vulnerability reports and can be used as a Security Reports Repository.</p>\n <p>Store and manage your research locally, share it securely!<br>Focus on research! Spend time on research NOT on the report form!</p>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <h2>Feature list</h2>\n\n <mat-card class=\"mat-elevation-z9\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">security</mat-icon>\n <mat-card-title>Security</mat-card-title>\n <mat-card-subtitle>\n Project use browser for encrypt/decrypt (AES) and store data in locally. Full confidentiality of data, <span style=\"text-decoration: underline;text-decoration-color: #69f0ae\">end-to-end encryption</span>, by default nothing is sent out. No backend system, only front-end technology, pure JS client.\n </mat-card-subtitle>\n </mat-card-header>\n </mat-card>\n <br>\n <mat-card class=\"mat-elevation-z9\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">share</mat-icon>\n <mat-card-title>Share report</mat-card-title>\n <mat-card-subtitle>\n You can share your report using AES encryption by default.\n </mat-card-subtitle>\n </mat-card-header>\n </mat-card>\n <br>\n <mat-card class=\"mat-elevation-z9\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">cloud_download</mat-icon>\n <mat-card-title>TXT & HTML & PDF</mat-card-title>\n <mat-card-subtitle>\n You can download report in TXT, HTML formats!. If you need PDF just 'print as PDF' html report.\n </mat-card-subtitle>\n </mat-card-header>\n </mat-card>\n <br>\n <mat-card class=\"mat-elevation-z9\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">attach_file</mat-icon>\n <mat-card-title>Attachments</mat-card-title>\n <mat-card-subtitle>\n You can easly attach any file you want to. Screenshot, movie or scanner output in txt. Automatically doing checksum sha256 of attached file.\n </mat-card-subtitle>\n </mat-card-header>\n </mat-card>\n\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <h2> </h2>\n\n <mat-card class=\"mat-elevation-z9\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">info</mat-icon>\n <mat-card-title>Issues templates!</mat-card-title>\n <mat-card-subtitle>\n Create own templates or use default. The use of templates greatly speeds up the work for pentester or security auditor. Import CVE, CWE, MITRE ATT&CK or PCI DSS data also possible.\n </mat-card-subtitle>\n </mat-card-header>\n </mat-card>\n <br>\n\n <mat-card class=\"mat-elevation-z9\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">import_export</mat-icon>\n <mat-card-title>Import issues from security scanners</mat-card-title>\n <mat-card-subtitle>\n Supported import from: Nmap, Nessus, Burp, OpenVAS, Bugcrowd. After importing, easily manage and edit vulnerabilities.\n </mat-card-subtitle>\n </mat-card-header>\n </mat-card>\n <br>\n <mat-card class=\"mat-elevation-z9\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">track_changes</mat-icon>\n <mat-card-title>Changelog</mat-card-title>\n <mat-card-subtitle>\n All important changes in report will be logged in to changelog and update to the next version of the report.\n </mat-card-subtitle>\n </mat-card-header>\n </mat-card>\n <br>\n <mat-card class=\"mat-elevation-z9\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">import_export</mat-icon>\n <mat-card-title>Export Issues</mat-card-title>\n <mat-card-subtitle>\n You can export issues to popular bugtrackers like Atlassian JIRA or use secure way to share only issues.\n </mat-card-subtitle>\n </mat-card-header>\n </mat-card>\n \n </div>\n\n </div>\n\n</mat-card>","import { Component, OnInit } from '@angular/core';\nimport { IndexeddbService } from '../indexeddb.service';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-import-report',\n templateUrl: './import-report.component.html',\n styleUrls: ['./import-report.component.scss']\n})\nexport class ImportReportComponent implements OnInit {\n public pastefromclipboard: any = '';\n\n constructor(public router: Router, private indexeddbService: IndexeddbService) { }\n\n ngOnInit() {\n }\n\n importfromclipboard(item) {\n if (item !== '') {\n\n item = decodeURIComponent(item);\n item = item.replace(/(\\r\\n|\\n|\\r| )/gm, '');\n\n const decodedData = atob(item);\n this.indexeddbService.importReport(decodedData);\n\n }\n }\n\n onFileLoad(fileLoadedEvent) {}\n\n onFileSelect(input: HTMLInputElement) {\n const files = input.files;\n let ile = 0;\n Object.keys(files).forEach(key => {\n\n const fileToRead = files[key];\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n\n fileReader.onload = (e) => {\n ile = ile + 1;\n const res: string = fileReader.result as string;\n let item = decodeURIComponent(res);\n item = item.replace(/(\\r\\n|\\n|\\r| )/gm, '');\n const decodedData = atob(item);\n this.indexeddbService.importReportfromfile(decodedData);\n\n if (files.length === ile) {\n console.log('files end');\n this.router.navigate(['/my-reports']);\n }\n\n };\n\n fileReader.readAsText(fileToRead, 'UTF-8');\n\n });\n\n\n }\n}\n","<h1 class=\"mat-display-2\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">playlist_add</mat-icon> Import report\n</h1>\n\n<div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <mat-card>\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">description</mat-icon>\n <mat-card-title>Import from file (.VULNR)</mat-card-title>\n <mat-card-subtitle>(.VULNR) - File contains full report details</mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <input cdkFocusInitial type=\"file\" accept=\".vulnr\" (change)=\"onFileSelect($event.target)\" name=\"myfiles\" multiple>\n </mat-card-content>\n \n </mat-card>\n\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-card>\n\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">content_paste</mat-icon>\n <mat-card-title>Import from a clipboard</mat-card-title>\n <mat-card-subtitle>Import report from clipboard if need it.</mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field appearance=\"outline\" class=\"example-full-width\" color=\"accent\">\n <mat-label>Paste from the clipboard</mat-label>\n <textarea matInput rows=\"6\" [(ngModel)]=\"pastefromclipboard\" class=\"form-control z-depth-1\"></textarea>\n </mat-form-field>\n </mat-card-content>\n\n <mat-card-actions>\n <button (click)=\"importfromclipboard(pastefromclipboard)\" mat-raised-button color=\"accent\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-25\">playlist_add</mat-icon> Import</button>\n </mat-card-actions>\n\n \n </mat-card>\n </div>\n\n</div>","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { v4 as uuid } from 'uuid';\nimport * as Crypto from 'crypto-js';\nimport { Observable } from 'rxjs';\n\nimport { MessageService } from './message.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { ApiService } from './api.service';\nimport {MatSnackBar} from '@angular/material/snack-bar';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IndexeddbService {\n\n reportlist = [];\n\n private decryptstatusObs = new Subject<any>();\n\n constructor(public router: Router, private messageService: MessageService, public dialog: MatDialog,\n private apiService: ApiService, private snackBar: MatSnackBar) {\n\n this.updateEncStatus(false);\n /*\n const test = [\n {\n report_id: '07f8026e-23c9-40f8-9001-53c3240a2c7d',\n report_name: 'Testing security infrastructure apple.com',\n report_createdate: 1541259311298,\n encrypted_data: 'encdata'\n },\n {\n report_id: '64f8026e-23c9-40f8-9001-53c3240a2c7d',\n report_name: 'PCI DSS Security report',\n report_createdate: 1541260948293,\n encrypted_data: 'encdata'\n }\n ];\n\n this.reportlist.push(test);\n this.Obsreportlist.next(test);\n */\n }\n\n getReports() {\n return new Promise<any>((resolve, reject) => {\n\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n // add, clear, count, delete, get, getAll, getAllKeys, getKey, put\n const request = store.getAll();\n\n request.onsuccess = function (evt) {\n resolve(request.result);\n };\n\n tx.oncomplete = function () {\n db.close();\n };\n request.onerror = function (e) {\n reject(e);\n };\n };\n\n });\n }\n\n setProfile(base_array, profile) {\n\n if (profile) {\n\n base_array.report_settings.report_logo.logo = profile.logo;\n base_array.report_settings.report_logo.width = profile.logow;\n base_array.report_settings.report_logo.height = profile.logoh;\n\n base_array.researcher[0].reportername = profile.ResName;\n base_array.researcher[0].reportersocial = profile.ResSocial;\n base_array.researcher[0].reporterwww = profile.ResWeb;\n base_array.researcher[0].reporteremail = profile.ResEmail;\n\n base_array.report_settings.report_theme = profile.theme;\n\n base_array.report_settings.report_video_embed = profile.video_embed;\n base_array.report_settings.report_remove_lastpage = profile.remove_lastpage;\n base_array.report_settings.report_remove_issuestatus = profile.remove_issueStatus;\n base_array.report_settings.report_remove_issuecvss = profile.remove_issuecvss;\n base_array.report_settings.report_remove_issuecve = profile.remove_issuecve;\n base_array.report_settings.report_remove_researchers = profile.remove_researcher;\n base_array.report_settings.report_changelog_page = profile.remove_changelog;\n base_array.report_settings.report_remove_issuetags = profile.remove_tags;\n base_array.report_settings.report_parsing_desc = profile.report_parsing_desc;\n \n }\n\n return base_array;\n\n }\n\n addnewReport(title: string, pass: string, profile: any) {\n\n if (title && pass) {\n\n // detect space in pass\n if (/\\s/.test(pass)) {\n console.log('space');\n\n } else {\n\n\n\n // report_vulns: [\n // {\n // title: '[XSS] Cross site scripting vulnerability',\n // poc: '',\n // files: [],\n // desc: 'desc',\n // severity: 'Medium',\n // status: 1,\n // ref: 'https://www.owasp.org/',\n // cvss: '4.3',\n // cve: '',\n // tags: [],\n // bounty: [],\n // date: today\n // },\n // {\n // title: '[XSS] DOM',\n // poc: '',\n // files: [],\n // desc: 'desc',\n // severity: 'Medium',\n // status: 1,\n // ref: 'https://www.owasp.org/',\n // cvss: '4.3',\n // cve: '',\n // tags: [],\n // bounty: [],\n // date: today\n // }\n // ],\n\n\n const defaultContent = `### Methodology and Standards:\n\n* OSTTMM(Open Source Security Testing Methodology Manual)\n* OWASP(Open Web Application Security Project)\n* ISSAF(Information Systems Security Assessment Framework)\n* WASC-TC(Web Application Security Consortium Threat Classification)\n* PTF(Penetration Testing Framework)\n* OISSG(Information Systems Security Assessment Framework)\n* NIST SP800-115(Technical Guide to Information Security Testing and Assessment)\n`;\n\n const today: number = Date.now();\n let empty_vulns = {\n report_vulns: [],\n report_scope: '',\n report_summary: '',\n report_changelog: [\n {\n date: today,\n desc: 'Create report: \\\"' + title + '\\\".'\n }\n ],\n report_version: 0,\n report_metadata: {\n starttest: '',\n endtest: ''\n },\n researcher: [\n {\n reportername: '',\n reportersocial: '',\n reporterwww: '',\n reporteremail: ''\n }\n ],\n report_settings: {\n report_html: defaultContent,\n report_logo: {\n logo: '',\n width: 600,\n height: 500\n },\n report_theme: 'white',\n report_video_embed: true,\n report_remove_lastpage: false,\n report_remove_issuestatus: false,\n report_remove_issuecvss: true,\n report_remove_issuecve: true,\n report_remove_researchers: false,\n report_changelog_page: false,\n report_remove_issuetags: false,\n report_parsing_desc: false\n }\n };\n\n // check profile and set profile\n empty_vulns = this.setProfile(empty_vulns, profile);\n\n // Encrypt\n const ciphertext = Crypto.AES.encrypt(JSON.stringify(empty_vulns), pass);\n const reportId = uuid();\n const data = {\n report_id: reportId,\n report_name: title,\n report_createdate: today,\n report_lastupdate: '',\n encrypted_data: ciphertext.toString()\n };\n\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n store.put(data);\n\n tx.oncomplete = function () {\n db.close();\n };\n };\n\n\n sessionStorage.setItem(reportId, pass);\n this.router.navigate(['/my-reports']);\n\n\n }\n\n }\n\n }\n\n addnewReportonAPI(apiurl: string, apikey: string, title: string, pass: string, profile: any) {\n\n if (title && pass) {\n\n // detect space in pass\n if (/\\s/.test(pass)) {\n console.log('space');\n\n } else {\n\n const defaultContent = `### Methodology and Standards:\n\n* OSTTMM(Open Source Security Testing Methodology Manual)\n* OWASP(Open Web Application Security Project)\n* ISSAF(Information Systems Security Assessment Framework)\n* WASC-TC(Web Application Security Consortium Threat Classification)\n* PTF(Penetration Testing Framework)\n* OISSG(Information Systems Security Assessment Framework)\n* NIST SP800-115(Technical Guide to Information Security Testing and Assessment)\n`;\n\n const today: number = Date.now();\n let empty_vulns = {\n report_vulns: [],\n report_scope: '',\n report_summary: '',\n report_changelog: [\n {\n date: today,\n desc: 'Create report: \\\"' + title + '\\\".'\n }\n ],\n report_version: 0,\n report_metadata: {\n starttest: '',\n endtest: ''\n },\n researcher: [\n {\n reportername: '',\n reportersocial: '',\n reporterwww: '',\n reporteremail: ''\n }\n ],\n report_settings: {\n report_html: defaultContent,\n report_logo: {\n logo: '',\n width: 600,\n height: 500\n }\n }\n };\n\n // check profile and set profile\n empty_vulns = this.setProfile(empty_vulns, profile);\n\n // Encrypt\n const ciphertext = Crypto.AES.encrypt(JSON.stringify(empty_vulns), pass);\n const reportid = uuid();\n const data = {\n report_id: reportid,\n report_name: title,\n report_createdate: today,\n report_lastupdate: '',\n encrypted_data: ciphertext.toString()\n };\n\n\n // tslint:disable-next-line:max-line-length\n this.apiService.APISend(apiurl, apikey, 'savereport', 'reportdata=' + btoa(JSON.stringify(data))).then(resp => {\n if (resp) {\n\n if (resp.STORAGE === 'NOSPACE') {\n this.snackBar.open('API ERROR: NO SPACE LEFT!', 'OK', {\n duration: 3000,\n panelClass: ['notify-snackbar-fail']\n });\n } else {\n sessionStorage.setItem(reportid, pass);\n this.router.navigate(['/my-reports']);\n }\n\n }\n });\n\n\n }\n\n }\n\n }\n\n importReport(data) {\n data = JSON.parse(data);\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n store.put(data);\n\n tx.oncomplete = function () {\n db.close();\n };\n };\n\n this.router.navigate(['/my-reports']);\n\n }\n\n importReportfromfile(data) {\n data = JSON.parse(data);\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n store.put(data);\n\n tx.oncomplete = function () {\n db.close();\n };\n };\n\n }\n\n\n importReportfromfileSettings(data) {\n\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n store.put(data);\n\n tx.oncomplete = function () {\n db.close();\n };\n };\n\n }\n\n\n deleteReport(item: any) {\n return new Promise<any>((resolve, reject) => {\n this.getkeybyReportID(item.report_id).then(data => {\n if (data) {\n\n if (data.NotFound === 'NOOK') {\n console.log('no locally report');\n } else {\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n store.delete(data.key);\n\n tx.oncomplete = function () {\n db.close();\n resolve(true);\n };\n };\n }\n\n }\n });\n });\n }\n\n\n checkifreportexist(report_id: string) {\n return new Promise<any>((resolve, reject) => {\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n const request = store.getAll();\n request.onsuccess = function (evt) {\n request.result.forEach((item) => {\n if(item.report_id === report_id) {\n resolve(item);\n }\n });\n };\n tx.oncomplete = function () {\n db.close();\n resolve(false);\n };\n request.onerror = function (e) {\n reject(e);\n };\n };\n });\n }\n\n decrypt(pass: string, report_id: string): Promise<any> {\n return this.checkifreportexist(report_id).then(data => {\n if (data) {\n return this.decodeAES(data, pass);\n }\n });\n }\n\n\n\n decodeAES(data: any, pass: string) {\n\n try {\n // Decrypt\n const bytes = Crypto.AES.decrypt(data.encrypted_data.toString(), pass);\n const decryptedData = JSON.parse(bytes.toString(Crypto.enc.Utf8));\n if (decryptedData) {\n sessionStorage.setItem(data.report_id, pass);\n }\n this.updateEncStatus(true);\n this.messageService.sendDecrypted(decryptedData);\n return true;\n\n } catch (except) {\n console.log('wrong pass');\n }\n }\n\n getstatusencryption(): Observable<any> {\n return this.decryptstatusObs.asObservable();\n }\n\n updateEncStatus(message: any) {\n this.decryptstatusObs.next(message);\n }\n\n getkeybyReportID(reportid) {\n return new Promise<any>((resolve, reject) => {\n\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n // add, clear, count, delete, get, getAll, getAllKeys, getKey, put\n const request = store.openCursor();\n\n request.onsuccess = function (evt) {\n\n const cursor = request.result;\n if (cursor) {\n const key = cursor.primaryKey;\n const value = cursor.value.report_id;\n\n if (reportid === value) {\n const finded = { key, value };\n resolve(finded);\n }\n cursor.continue();\n } else {\n // no more results\n\n }\n\n };\n\n tx.oncomplete = function () {\n db.close();\n resolve({ 'NotFound': 'NOOK' });\n };\n request.onerror = function (e) {\n reject(e);\n };\n };\n\n });\n }\n\n\n updatereportDB(key, value) {\n return new Promise<any>((resolve, reject) => {\n\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n // add, clear, count, delete, get, getAll, getAllKeys, getKey, put\n const request = store.put(value, key);\n\n request.onsuccess = function (evt) {\n resolve('encrypted:ok');\n };\n\n tx.oncomplete = function () {\n db.close();\n };\n request.onerror = function (e) {\n reject(e);\n };\n };\n\n });\n }\n\n prepareupdatereport(data: any, pass: string, reportid: any, reportname: any, reportcreatedate: any, reportorder: any) {\n return new Promise<any>((resolve, reject) => {\n try {\n // Encrypt\n const ciphertext = Crypto.AES.encrypt(JSON.stringify(data), pass);\n const now: number = Date.now();\n const to_update = {\n report_id: reportid,\n report_name: reportname,\n report_createdate: reportcreatedate,\n report_lastupdate: now,\n encrypted_data: ciphertext.toString()\n };\n\n\n this.updatereportDB(reportorder, to_update).then(retu => {\n if (retu === 'encrypted:ok') {\n resolve(now);\n }\n });\n\n } catch (except) {\n console.log(except);\n }\n\n });\n\n }\n\n\n prepareupdateAPIreport(apiurl: string, apikey: string, data: any, pass: string, reportid: any, reportname: any, reportcreatedate: any) {\n return new Promise<any>((resolve, reject) => {\n try {\n // Encrypt\n const ciphertext = Crypto.AES.encrypt(JSON.stringify(data), pass);\n const now: number = Date.now();\n const to_update = {\n report_id: reportid,\n report_name: reportname,\n report_createdate: reportcreatedate,\n report_lastupdate: now,\n encrypted_data: ciphertext.toString()\n };\n\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n // tslint:disable-next-line:max-line-length\n this.apiService.APISend(apiurl, apikey, 'updatereport', 'reportdata=' + btoa(JSON.stringify(to_update))).then(resp => {\n if (resp.STORAGE === 'NOSPACE') {\n this.snackBar.open('API ERROR: NO SPACE LEFT!', 'OK', {\n duration: 3000,\n panelClass: ['notify-snackbar-fail']\n });\n resolve('NOSPACE');\n } else if (resp.REPORT_UPDATE === 'OK') {\n resolve(now);\n }\n });\n }\n\n } catch (except) {\n console.log(except);\n }\n\n });\n\n }\n\n\n downloadEncryptedReport(report_id) {\n\n this.checkifreportexist(report_id).then(data => {\n if (data) {\n this.preparedownload(data);\n } else {\n this.checkAPIreport(report_id).then(re => {\n this.preparedownload(re);\n });\n }\n\n });\n\n }\n\n preparedownload(data) {\n const enc = btoa(JSON.stringify(data));\n const blob = new Blob([encodeURIComponent(enc)], { type: 'text/plain' });\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', data.report_name + ' ' + data.report_id + ' (vulnrepo.com).vulnr');\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n cloneReportadd(report: any) {\n return new Promise<any>((resolve, reject) => {\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-db', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('reports', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('reports', 'readwrite');\n const store = tx.objectStore('reports');\n\n store.put(report);\n\n tx.oncomplete = function () {\n db.close();\n resolve(true);\n };\n };\n\n });\n }\n\n encryptKEY(key, pass) {\n return new Promise<any>((resolve, reject) => {\n const ciphertext = Crypto.AES.encrypt(key, pass);\n resolve(ciphertext.toString());\n });\n }\n\n decryptKEY(key, pass) {\n return new Promise<any>((resolve, reject) => {\n const bytes = Crypto.AES.decrypt(key.toString(), pass);\n const decryptedData = bytes.toString(Crypto.enc.Utf8);\n resolve(decryptedData.toString());\n });\n }\n\n saveKEYinDB(key) {\n return new Promise<any>((resolve, reject) => {\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-api', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('api');\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('api', 'readwrite');\n const store = tx.objectStore('api');\n\n store.put(key, 'vulnrepo-api-vault');\n\n tx.oncomplete = function () {\n db.close();\n resolve(true);\n };\n };\n\n });\n }\n\n retrieveAPIkey() {\n return new Promise<any>((resolve, reject) => {\n\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-api', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('api', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('api', 'readwrite');\n const store = tx.objectStore('api');\n\n // add, clear, count, delete, get, getAll, getAllKeys, getKey, put\n const request = store.get('vulnrepo-api-vault');\n\n request.onsuccess = function (evt) {\n resolve(request.result);\n };\n\n tx.oncomplete = function () {\n db.close();\n };\n request.onerror = function (e) {\n reject(e);\n };\n };\n\n });\n }\n\n checkAPIreport(reportid) {\n return new Promise<any>((resolve, reject) => {\n\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n\n const vaultobj = JSON.parse(localkey);\n\n vaultobj.forEach( (element) => {\n this.apiService.APISend(element.value, element.apikey, 'getreport', 'reportid=' + reportid).then(resp => {\n\n if (resp) {\n if (resp.length > 0) {\n console.log('Report exist in API: OK');\n resolve(resp[0]);\n } else {\n resolve(false);\n }\n }\n\n });\n\n });\n\n } else {\n resolve(false);\n }\n\n\n });\n }\n\n searchAPIreport(reportid) {\n return new Promise<any>((resolve, reject) => {\n\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n\n const vaultobj = JSON.parse(localkey);\n\n vaultobj.forEach( (element) => {\n\n let check = false;\n\n this.apiService.APISend(element.value, element.apikey, 'getreport', 'reportid=' + reportid).then(resp => {\n\n if (resp) {\n if (resp.length > 0) {\n check = true;\n console.log('Report exist in API: OK');\n resolve({data: resp[0], api: element.value, apikey: element.apikey});\n }\n } else {\n check = false;\n }\n\n }).then((resp) => {\n if (check !== true) {\n resolve('API_ERROR');\n }\n });\n\n });\n\n }\n\n\n });\n }\n\n saveReportProfileinDB(key) {\n return new Promise<any>((resolve, reject) => {\n // indexeddb communication\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-settings', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('report-profiles', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('report-profiles', 'readwrite');\n const store = tx.objectStore('report-profiles');\n\n store.put(key, 'vulnrepo-report-profiles-items');\n\n tx.oncomplete = function () {\n db.close();\n resolve(true);\n };\n };\n\n });\n }\n\n retrieveReportProfile() {\n return new Promise<any>((resolve, reject) => {\n\n const indexedDB = window.indexedDB;\n const open = indexedDB.open('vulnrepo-settings', 1);\n\n open.onupgradeneeded = function () {\n const db = open.result;\n db.createObjectStore('report-profiles', { autoIncrement: true });\n };\n\n open.onsuccess = function () {\n const db = open.result;\n const tx = db.transaction('report-profiles', 'readwrite');\n const store = tx.objectStore('report-profiles');\n\n // add, clear, count, delete, get, getAll, getAllKeys, getKey, put\n const request = store.get('vulnrepo-report-profiles-items');\n\n request.onsuccess = function (evt) {\n resolve(request.result);\n };\n\n tx.oncomplete = function () {\n db.close();\n };\n request.onerror = function (e) {\n reject(e);\n };\n };\n\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class MessageService {\n\n constructor() { }\n\n private subject = new Subject<any>();\n\n sendDecrypted(message: string) {\n this.subject.next(message);\n }\n\n clearDecrypted() {\n this.subject.next(false);\n }\n\n getDecrypted(): Observable<any> {\n return this.subject.asObservable();\n }\n\n}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { IndexeddbService } from '../indexeddb.service';\nimport { DialogEditComponent } from '../dialog-edit/dialog-edit.component';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { v4 as uuid } from 'uuid';\nimport { DialogApikeyComponent } from '../dialog-apikey/dialog-apikey.component';\nimport { ApiService } from '../api.service';\nimport {MatSnackBar} from '@angular/material/snack-bar';\n\nexport interface MyReportElement {\n select: any;\n position: number;\n report_name: string;\n report_id: string;\n report_createdate: number;\n encrypted_data: string;\n report_lastupdate: number;\n}\n\n@Component({\n selector: 'app-myreports',\n templateUrl: './myreports.component.html',\n styleUrls: ['./myreports.component.scss']\n})\nexport class MyreportsComponent implements OnInit {\n dialogRef: MatDialogRef<DialogEditComponent>;\n displayedColumns: string[] = ['select', 'source', 'report_name', 'report_createdate', 'report_lastupdate', 'settings'];\n dataSource = new MatTableDataSource([]);\n selection = new SelectionModel<MyReportElement>(true, []);\n msg = '';\n keyfound = false;\n apilist = [];\n list = [];\n private paginator: MatPaginator;\n private sort: MatSort;\n\n @ViewChild(MatSort) set matSort(ms: MatSort) {\n this.sort = ms;\n this.setDataSourceAttributes();\n }\n\n @ViewChild(MatPaginator) set matPaginator(mp: MatPaginator) {\n this.paginator = mp;\n this.setDataSourceAttributes();\n }\n\n setDataSourceAttributes() {\n this.dataSource.paginator = this.paginator;\n this.dataSource.sort = this.sort;\n }\n\n constructor(public dialog: MatDialog, private indexeddbService: IndexeddbService, private apiService: ApiService,\n private snackBar: MatSnackBar) {\n\n }\n\n ngOnInit() {\n this.getallreports();\n }\n\n getallreports() {\n this.list = [];\n this.indexeddbService.getReports().then(data => {\n if (data) {\n this.list.push(...data);\n this.dataSource.data = this.list;\n this.dataSource.sort = this.sort;\n this.dataSource.paginator = this.paginator;\n }\n });\n this.getAPIallreports();\n }\n\n getAPIallreports() {\n this.apilist = [];\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n this.msg = 'API connection please wait...';\n\n this.keyfound = true;\n const vaultobj = JSON.parse(localkey);\n\n vaultobj.forEach( (element) => {\n\n this.apilist.push({value: element.value, apikey: element.apikey, viewValue: element.viewValue});\n this.apiService.APISend(element.value, element.apikey, 'getreportslist', '').then(resp => {\n\n if (resp.length > 0) {\n resp.forEach((ele) => {\n ele.api = 'remote';\n ele.apiurl = element.value;\n ele.apikey = element.apikey;\n ele.apiname = element.viewValue;\n });\n this.list.push(...resp);\n }\n\n }).then(() => {\n this.dataSource.data = this.list;\n this.dataSource.sort = this.sort;\n this.dataSource.paginator = this.paginator;\n this.msg = '';\n }).catch(() => {});\n\n\n setTimeout(() => {\n // console.log('hide progress timeout');\n this.msg = '';\n }, 10000);\n\n });\n\n\n \n\n } else {\n\n this.indexeddbService.retrieveAPIkey().then(ret => {\n if (ret) {\n\n if (sessionStorage.getItem('hidedialog') !== 'true') {\n setTimeout(_ => this.openDialog(ret));\n }\n\n }\n });\n\n }\n }\n\n\n\n openDialog(data: any): void {\n\n const dialogRef = this.dialog.open(DialogApikeyComponent, {\n width: '400px',\n disableClose: true,\n data: data\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The security key dialog was closed');\n if (result) {\n sessionStorage.setItem('VULNREPO-API', result);\n this.getAPIallreports();\n }\n\n });\n\n }\n\n shareReport(report_id) {\n this.indexeddbService.downloadEncryptedReport(report_id);\n }\n\n removeReport(item) {\n\n const remo = 'removereport';\n const dialogRef = this.dialog.open(DialogEditComponent, {\n width: '400px',\n data: [{ remo }, { item }],\n });\n\n dialogRef.afterClosed().subscribe(result => {\n\n if (result) {\n this.indexeddbService.deleteReport(result).then(data => {\n if (data) {\n this.getallreports();\n }\n });\n\n if (result.api && result.apiurl && result.apikey) {\n\n // tslint:disable-next-line:max-line-length\n this.apiService.APISend(result.apiurl, result.apikey, 'removereport', 'reportid=' + result.report_id).then(resp => {\n if (resp.REMOVE_REPORT === 'OK') {\n this.getallreports();\n }\n });\n\n\n }\n }\n\n });\n\n }\n\n\n cloneReport(item) {\n\n item.report_name = 'Clone of ' + item.report_name;\n item.report_id = uuid();\n\n this.indexeddbService.cloneReportadd(item).then(data => {\n if (data) {\n this.getallreports();\n }\n });\n\n }\n\n fromAPIcloneReport(item) {\n\n item.report_name = 'Clone of ' + item.report_name;\n item.report_id = uuid();\n delete item.api;\n\n this.indexeddbService.cloneReportadd(item).then(data => {\n if (data) {\n this.getallreports();\n }\n });\n\n }\n\n toAPIcloneReport(item, apiurl, apikey) {\n\n item.report_id = uuid();\n item.api = 'remote';\n item.apiurl = apiurl;\n item.apikey = apikey;\n\n // tslint:disable-next-line:max-line-length\n this.apiService.APISend(apiurl, apikey, 'savereport', 'reportdata=' + btoa(JSON.stringify(item))).then(resp => {\n if (resp) {\n\n if (resp.STORAGE === 'NOSPACE') {\n this.snackBar.open('API ERROR: NO SPACE LEFT!', 'OK', {\n duration: 3000,\n panelClass: ['notify-snackbar-fail']\n });\n }\n\n this.getallreports();\n }\n });\n\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n isAllSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n masterToggle() {\n this.isAllSelected() ?\n this.selection.clear() :\n this.dataSource.data.forEach(row => this.selection.select(row));\n }\n\n /** The label for the checkbox on the passed row */\n checkboxLabel(row?: MyReportElement): string {\n if (!row) {\n return `${this.isAllSelected() ? 'select' : 'deselect'} all`;\n }\n return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.position + 1}`;\n }\n\n removeSelecteditems() {\n if (this.selection.selected.length > 0) {\n this.selection.selected.forEach((item) => {\n this.removeReport(item);\n });\n }\n\n }\n}\n","\n<div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <h1 class=\"mat-display-2\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">list_alt</mat-icon> My Reports\n </h1>\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\" fxLayoutAlign=\"flex-end\">\n\n <div fxFlex=\"40%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <a style=\"width: 100%;\" routerLink=\"/new-report\" href=\"/new-report\" mat-raised-button color=\"accent\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">add_circle_outline</mat-icon> Create new report\n </a>\n </div>\n \n <div fxFlex=\"40%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <a style=\"width: 100%;\" routerLink=\"/import-report\" href=\"/import-report\" mat-raised-button color=\"primary\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">playlist_add</mat-icon> Import report\n </a>\n </div>\n \n </div>\n\n </div>\n\n</div>\n\n<mat-card>\n\n\n <mat-table *ngIf=\"dataSource.data.length != 0\" mat-table [dataSource]=\"dataSource\" matSort matSortActive=\"report_createdate\" matSortDirection=\"desc\" class=\"mat-elevation-z8\">\n\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\">\n <mat-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selection.toggle(row) : null\"\n [checked]=\"selection.isSelected(row)\"\n [aria-label]=\"checkboxLabel(row)\">\n </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"source\">\n <mat-header-cell *matHeaderCellDef><mat-icon title=\"Where reports are stored\">folder</mat-icon></mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"!element.api\"><mat-icon title=\"Local Host\">computer</mat-icon></span>\n <span *ngIf=\"element.api == 'remote'\"><mat-icon color=\"accent\" title=\"Remote API: {{element.apiname}} - [{{element.apiurl}}] \">public</mat-icon></span>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"report_name\">\n <mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]=\"'w-70 th-left'\"> TITLE </mat-header-cell>\n <mat-cell *matCellDef=\"let element\" [ngClass]=\"'w-70 th-left'\">\n <a mat-button class=\"active-link\" routerLink=\"/report/{{element.report_id}}/\" href=\"#\">{{element.report_name}}</a>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"report_createdate\">\n <mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]=\"'w-75 th-right'\"> CREATE DATE </mat-header-cell>\n <mat-cell *matCellDef=\"let element\" [ngClass]=\"'w-75 th-right'\"> \n <span *ngIf=\"element.report_createdate == 0\"></span>\n <span *ngIf=\"element.report_createdate != 0\">{{element.report_createdate | date:'medium'}} </span>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"report_lastupdate\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> LAST UPDATE </mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"element.report_lastupdate == 0\"></span>\n <span *ngIf=\"element.report_lastupdate != 0\">{{element.report_lastupdate | date:'medium'}} </span>\n </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"settings\">\n <mat-header-cell *matHeaderCellDef class=\"mat-column-2\"><mat-icon title=\"Settings\">settings</mat-icon></mat-header-cell>\n <mat-cell *matCellDef=\"let element\">\n <button mat-icon-button style=\"width: 25px; height: 25px; flex-shrink: 0; line-height: 5px; border-radius: 70%;\" [matMenuTriggerFor]=\"myreportssettings\"><mat-icon>more_vert</mat-icon></button>\n <mat-menu #myreportssettings=\"matMenu\">\n <a [routerLink]=\"[]\" (click)=\"shareReport(element.report_id)\" class=\"active-link\" title=\"Download report\" mat-menu-item><mat-icon class=\"vertical-align-middle\">cloud_download</mat-icon> Download report</a>\n <a *ngIf=\"!element.api\" [routerLink]=\"[]\" (click)=\"cloneReport(element)\" class=\"active-link\" title=\"Clone report\" mat-menu-item><mat-icon class=\"vertical-align-middle\">flip_to_front</mat-icon> Clone report</a>\n <a *ngIf=\"!element.api && keyfound\" [routerLink]=\"[]\" [matMenuTriggerFor]=\"fish\" title=\"Save report on API\" mat-menu-item><mat-icon class=\"vertical-align-middle\">public</mat-icon> Save on API</a>\n <a *ngIf=\"element.api\" [routerLink]=\"[]\" (click)=\"fromAPIcloneReport(element)\" class=\"active-link\" title=\"Save report locally\" mat-menu-item><mat-icon class=\"vertical-align-middle\">save_alt</mat-icon> Save locally</a>\n <a [routerLink]=\"[]\" (click)=\"removeReport(element)\" class=\"active-link\" title=\"Remove report\" mat-menu-item><mat-icon class=\"vertical-align-middle\">delete_forever</mat-icon> Remove report</a>\n </mat-menu>\n <mat-menu #fish=\"matMenu\">\n <span *ngFor=\"let apis of apilist\">\n <a [routerLink]=\"[]\" (click)=\"toAPIcloneReport(element, apis.value, apis.apikey)\" class=\"active-link\" title=\"API: {{apis.value}}\" mat-menu-item><mat-icon class=\"vertical-align-middle\">public</mat-icon> {{apis.viewValue}}</a>\n </span>\n \n </mat-menu>\n \n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\n </mat-table>\n\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <div *ngIf=\"dataSource.data.length != 0 && selection.selected.length > 0\" style=\"padding: 20px 0px 0px 20px;\">\n <button title=\"Remove selected items\" mat-icon-button color=\"warn\" (click)=\"removeSelecteditems()\">\n <mat-icon>delete_forever</mat-icon> Remove selected ({{selection.selected.length}})\n </button>\n </div>\n\n <div *ngIf=\"msg != ''\" style=\"padding: 30px 0px 0px 20px;\">\n {{msg}}<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <br *ngIf=\"dataSource.data.length != 0\">\n <mat-paginator *ngIf=\"dataSource.data.length != 0\" [pageSizeOptions]=\"[10, 20, 30]\" showFirstLastButtons></mat-paginator>\n </div>\n\n</div>\n\n <p *ngIf=\"dataSource.data.length == 0\"><mat-icon title=\"sad :-(\" class=\"vertical-align-middle padding-bottom-3 size-45\">sentiment_very_dissatisfied</mat-icon> Your reports list is empty.</p>\n</mat-card>","import { Component, OnInit } from '@angular/core';\nimport { IndexeddbService } from '../indexeddb.service';\nimport { SeckeyValidatorService } from '../seckey-validator.service';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressBarMode } from '@angular/material/progress-bar';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-newreport',\n templateUrl: './newreport.component.html',\n styleUrls: ['./newreport.component.scss']\n})\nexport class NewreportComponent implements OnInit {\n\n hide = true;\n alert: string;\n inppass: string;\n localkeys = [];\n inppass2: string;\n color: ThemePalette = 'warn';\n mode: ProgressBarMode = 'buffer';\n selectEDAPI = [];\n selectEDAPI_apikey = '';\n selectEDAPI_apiurl = '';\n value = 20;\n bufferValue = 20;\n str = '';\n selected = 'local';\n selected_profile = '';\n ReportProfilesList = [];\n apiReports = [];\n profileSettingsselected: any;\n\n constructor(private indexeddbService: IndexeddbService, private passwordService: SeckeyValidatorService,\n public router: Router) {\n\n }\n\n ngOnInit() {\n\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n this.localkeys = JSON.parse(localkey);\n }\n\n // get report profiles\n this.indexeddbService.retrieveReportProfile().then(ret => {\n if (ret) {\n this.ReportProfilesList = ret;\n }\n });\n\n }\n\n generatePassword() {\n const length = 20;\n const string = 'abcdefghijklmnopqrstuvwxyz';\n const numeric = '0123456789';\n const punctuation = '!@#$%^&*()_+~`|}{[]\\:;?><,./-=';\n let password = '', character = '', ent1 = 0, ent2 = 0, ent3 = 0, hold = '', pass = '';\n while ( password.length < length ) {\n ent1 = Math.ceil(string.length * Math.random() * Math.random());\n ent2 = Math.ceil(numeric.length * Math.random() * Math.random());\n ent3 = Math.ceil(punctuation.length * Math.random() * Math.random());\n hold = string.charAt( ent1 );\n hold = (password.length % 2 === 0) ? (hold.toUpperCase()) : (hold);\n character += hold;\n character += numeric.charAt( ent2 );\n character += punctuation.charAt( ent3 );\n password = character;\n }\n password = password.split('').sort(function() {return 0.5 - Math.random(); }).join('');\n pass = password.substr(0, length);\n // set gen pass\n this.inppass = pass;\n this.inppass2 = pass;\n this.passCheck(pass);\n this.hide = false;\n }\n\n\n passCheck(pass) {\n\n switch (this.passwordService.checkPasswordStrength(pass)) {\n case 0:\n this.str = 'Too short';\n this.color = 'warn';\n this.value = 20;\n this.bufferValue = 20;\n break;\n case 1:\n this.str = 'Common';\n this.color = 'warn';\n this.value = 40;\n this.bufferValue = 40;\n break;\n case 2:\n this.str = 'Weak';\n this.color = 'primary';\n this.value = 60;\n this.bufferValue = 60;\n break;\n case 3:\n this.str = 'It\\'s OK';\n this.color = 'accent';\n this.value = 80;\n this.bufferValue = 80;\n break;\n case 4:\n this.color = 'accent';\n this.str = 'Strong';\n this.value = 100;\n this.bufferValue = 100;\n break;\n }\n\n }\n\n\n addnewReport(title: string, pass: string, pass2: string) {\n\n if (title.length >= 1) {\n\n // tslint:disable-next-line:max-line-length\n if ((pass.length >= 8) && (pass2.length >= 8) && (this.passwordService.checkPasswordStrength(pass) >= 2) && (this.passwordService.checkPasswordStrength(pass2) >= 2)) {\n\n if (pass === pass2) {\n if (this.selected === 'local') {\n this.indexeddbService.addnewReport(title, pass, this.profileSettingsselected);\n } else {\n this.indexeddbService.addnewReportonAPI(this.selectEDAPI_apiurl, this.selectEDAPI_apikey, title, pass, this.profileSettingsselected);\n }\n } else {\n this.alert = 'The given security keys do not match. Try again.';\n }\n\n } else {\n this.alert = 'Security key is too weak. Try again.';\n }\n\n } else {\n this.alert = 'Empty title!';\n }\n\n }\n\n selectchange(event) {\n this.selectEDAPI = [];\n if (event.value === 'local') {\n console.log('Local');\n this.selectEDAPI_apikey = '';\n this.selectEDAPI_apiurl = '';\n } else {\n this.selectEDAPI_apikey = event.value.apikey;\n this.selectEDAPI_apiurl = event.value.value;\n }\n\n }\n\n selectchangeProfiles(event) {\n this.profileSettingsselected = event.value;\n }\n\n}\n","<h1 class=\"mat-display-2\" fxLayoutAlign=\"start\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">add</mat-icon> Create new report\n</h1>\n\n<div fxLayoutAlign=\"start\">\n <form class=\"example-full-width\">\n <mat-card>\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Report title (e.g: External penetration testing report)\" #title value=\"\">\n </mat-form-field>\n\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n\n <md-card fxFlex=\"50%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input [(ngModel)]=\"inppass\" (keyup)=\"passCheck(pass.value)\" matInput placeholder=\"Set report security key (min. 8 char length)\" #pass [type]=\"hide ? 'password' : 'text'\" [ngModelOptions]=\"{standalone: true}\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input [(ngModel)]=\"inppass2\" (keyup)=\"passCheck(pass2.value)\" matInput placeholder=\"Re-enter report security key (min. 8 char length)\" #pass2 [type]=\"hide ? 'password' : 'text'\" [ngModelOptions]=\"{standalone: true}\">\n <mat-icon matSuffix (click)=\"hide = !hide\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\n </mat-form-field>\n\n <mat-form-field *ngIf=\"localkeys.length > 0\" appearance=\"fill\" color=\"accent\">\n <mat-label>Select where save report:</mat-label>\n <mat-select (selectionChange)=\"selectchange($event)\" [(value)]=\"selected\">\n <mat-option value=\"local\">Local Host</mat-option>\n <mat-optgroup [label]=\"'API'\">\n <mat-option *ngFor=\"let apis of localkeys\" [value]=\"apis\">{{apis.viewValue}}</mat-option>\n </mat-optgroup>\n </mat-select>\n </mat-form-field>\n \n <br>\n\n <mat-form-field *ngIf=\"ReportProfilesList.length > 0\" appearance=\"fill\" color=\"accent\">\n <mat-label>Select settings profile:</mat-label>\n <mat-select (selectionChange)=\"selectchangeProfiles($event)\" [(value)]=\"selected_profile\">\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let profile of ReportProfilesList\" [value]=\"profile\">{{profile.profile_name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n </md-card>\n\n <md-card fxFlex=\"50%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"center\">\n <div style=\"width: 100%\">\n\n <p *ngIf=\"str != ''\" fxLayoutAlign=\"center\">Strength validation: {{str}}.</p>\n <mat-progress-bar *ngIf=\"str != ''\" [color]=\"color\" [mode]=\"mode\" [value]=\"value\" [bufferValue]=\"bufferValue\"></mat-progress-bar>\n <p fxLayoutAlign=\"center\">\n <a class=\"active-link\" [routerLink]=\"[]\" (click)=\"generatePassword()\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-25\">lock</mat-icon> Generate strong key!</a>\n </p>\n\n </div>\n </md-card>\n </div>\n\n <p><mat-icon style=\"color: red\" class=\"vertical-align-middle padding-bottom-3 size-45\">warning</mat-icon> Do not lose your security key! cause access to the report will be impossible!</p>\n <p *ngIf=\"alert\"><br><span class=\"label danger\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-25\">error</mat-icon> {{alert}}</span><br></p><br>\n <button mat-raised-button color=\"accent\" (click)=\"addnewReport(title.value,pass.value,pass2.value)\"><mat-icon class=\"vertical-align-middle padding-bottom-3 size-25\">save</mat-icon> Create new report</button>\n\n </mat-card>\n </form>\n\n</div>","import { Component, OnInit, OnDestroy, ViewChild, KeyValueChanges, KeyValueDiffer, KeyValueDiffers } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { IndexeddbService } from '../indexeddb.service';\nimport { DialogPassComponent } from '../dialog-pass/dialog-pass.component';\nimport { DialogAddissueComponent } from '../dialog-addissue/dialog-addissue.component';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { MessageService } from '../message.service';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { DialogImportComponent } from '../dialog-import/dialog-import.component';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { DialogEditComponent } from '../dialog-edit/dialog-edit.component';\nimport { DialogExportissuesComponent } from '../dialog-exportissues/dialog-exportissues.component';\nimport { DialogChangelogComponent } from '../dialog-changelog/dialog-changelog.component';\nimport { DialogChangekeyComponent } from '../dialog-changekey/dialog-changekey.component';\nimport { DialogRemoveitemsComponent } from '../dialog-removeitems/dialog-removeitems.component';\nimport { DialogCvssComponent } from '../dialog-cvss/dialog-cvss.component';\nimport { DialogCveComponent } from '../dialog-cve/dialog-cve.component';\nimport { DialogCustomcontentComponent } from '../dialog-customcontent/dialog-customcontent.component';\nimport { DialogApierrorComponent } from '../dialog-apierror/dialog-apierror.component';\nimport { marked } from 'marked'\nimport { sha256 } from 'js-sha256';\nimport {MatSnackBar} from '@angular/material/snack-bar';\nimport {MatChipInputEvent} from '@angular/material/chips';\nimport {COMMA, ENTER} from '@angular/cdk/keycodes';\nimport { HttpClient } from '@angular/common/http';\nimport * as Crypto from 'crypto-js';\nimport { v4 as uuid } from 'uuid';\n\nexport interface Tags {\n name: string;\n}\n\n@Component({\n selector: 'app-report',\n templateUrl: './report.component.html',\n styleUrls: ['./report.component.scss']\n})\n\nexport class ReportComponent implements OnInit, OnDestroy {\n\n // Pie\n public pieChartLabels: string[] = ['Critical', 'High', 'Medium', 'Low', 'Info'];\n public chartcolors: any[] = [{\n backgroundColor: ['#FF0039', '#FF7518', '#F9EE06', '#3FB618', '#2780E3']\n }];\n\n private reportDiffer: KeyValueDiffer<string, any>;\n private reportDifferlogo: KeyValueDiffer<string, any>;\n private reportDiffersettings: KeyValueDiffer<string, any>;\n private reportTitleDiffer: KeyValueDiffer<any, any>;\n private objDiffers: Array<KeyValueDiffer<string, any>>;\n private objDiffersFiles: Array<KeyValueDiffer<string, any>>;\n private objDiffersResearcher: Array<KeyValueDiffer<string, any>>;\n public pieChartData: number[] = [0, 0, 0, 0, 0];\n public pieChartType = 'pie';\n \n dialogRef: MatDialogRef<DialogPassComponent>;\n displayedColumns: string[] = ['date', 'desc', 'settings'];\n dataSource = new MatTableDataSource();\n listchangelog: any[];\n @ViewChild(MatSort) sort: MatSort;\n @ViewChild(MatPaginator) paginator: MatPaginator;\n\n advhtml = '';\n report_css: any;\n bugbountylist = [];\n report_id: string;\n report_info: any;\n lastsavereportdata = '';\n reportdesc: any;\n selecteditem = false;\n BBmsg = '';\n selecteditems = [];\n selected3 = [];\n ReportProfilesList = [];\n pok = 0;\n timerCounter = 0;\n savemsg = '';\n report_decryption_in_progress: boolean;\n report_encryption_in_progress: boolean;\n upload_in_progress = false;\n youhaveunsavedchanges = false;\n decryptedReportData: any;\n decryptedReportDataChanged: any;\n subscription: Subscription;\n displayedSeverityColumns: string[] = ['severity', 'count'];\n dataSourceforseverity = [\n { severity: 'Critical', count: 0 },\n { severity: 'High', count: 0 },\n { severity: 'Medium', count: 0 },\n { severity: 'Low', count: 0 },\n { severity: 'Info', count: 0 }\n ];\n issueStatus = [\n { status: 'Open (Waiting for review)', value: 1},\n { status: 'Fix In Progress', value: 2},\n { status: 'Fixed', value: 3},\n { status: 'Won\\'t Fix', value: 4}\n ];\n selectedtheme = 'white';\n uploadlogoprev = '';\n adv_html: any;\n advlogo: any;\n advlogo_saved: any;\n\n visible = true;\n selectable = true;\n removable = true;\n addOnBlur = true;\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n constructor(private route: ActivatedRoute,\n public dialog: MatDialog,\n private http: HttpClient,\n private indexeddbService: IndexeddbService,\n private differs: KeyValueDiffers,\n public router: Router,\n private messageService: MessageService,\n private snackBar: MatSnackBar) {\n\n // console.log(route);\n this.subscription = this.messageService.getDecrypted().subscribe(message => {\n this.decryptedReportData = message;\n this.decryptedReportDataChanged = this.decryptedReportData;\n this.adv_html = this.decryptedReportDataChanged.report_settings.report_html;\n this.advlogo_saved = this.decryptedReportDataChanged.report_settings.report_logo.logo;\n\n this.reportDiffer = this.differs.find(this.decryptedReportData).create();\n this.reportDifferlogo = this.differs.find({report_logo: this.decryptedReportDataChanged.report_settings.report_logo.logo}).create();\n this.reportDiffersettings = this.differs.find(this.decryptedReportDataChanged.report_settings).create();\n\n this.objDiffers = new Array<KeyValueDiffer<string, any>>();\n this.decryptedReportDataChanged.report_vulns.forEach((itemGroup, index) => {\n this.objDiffers[index] = this.differs.find(itemGroup).create();\n });\n\n\n this.objDiffersFiles = new Array<KeyValueDiffer<string, any>>();\n this.decryptedReportDataChanged.report_vulns.forEach((itemGroup, index) => {\n this.objDiffersFiles[index] = this.differs.find(itemGroup.files).create();\n });\n \n\n\n this.objDiffersResearcher = new Array<KeyValueDiffer<string, any>>();\n this.decryptedReportDataChanged.researcher.forEach((itemGroup, index) => {\n this.objDiffersResearcher[index] = this.differs.find(itemGroup).create();\n });\n\n \n if (this.report_info) {\n this.reportTitleDiffer = this.differs.find({report_name: this.report_info.report_name}).create();\n }\n \n this.doStats();\n\n let i = 0;\n do {\n this.selected3.push(false);\n i++;\n }\n while (i < this.decryptedReportDataChanged.report_vulns.length);\n\n });\n\n }\n\n ngOnInit() {\n this.report_id = this.route.snapshot.params['report_id'];\n\n // check if report exist\n this.indexeddbService.checkifreportexist(this.report_id).then(data => {\n if (data) {\n console.log('Report exist: OK');\n this.report_info = data;\n this.reportdesc = data;\n // check if pass in sessionStorage\n if (sessionStorage.getItem(data.report_id) !== null) {\n this.report_decryption_in_progress = true;\n const pass = sessionStorage.getItem(data.report_id);\n this.indexeddbService.decrypt(pass, data.report_id).then(returned => {\n\n if (returned) {\n this.report_decryption_in_progress = false;\n }\n\n });\n } else {\n setTimeout(_ => this.openDialog(data)); // BUGFIX: https://github.com/angular/angular/issues/6005#issuecomment-165911194\n }\n\n } else {\n console.log('Report not exist locally: YES');\n this.indexeddbService.checkAPIreport(this.report_id).then(re => {\n if (re) {\n this.report_info = re;\n this.reportdesc = re;\n // check if pass in sessionStorage\n if (sessionStorage.getItem(re.report_id) !== null) {\n this.report_decryption_in_progress = true;\n const pass = sessionStorage.getItem(re.report_id);\n\n if (this.indexeddbService.decodeAES(re, pass)) {\n this.report_decryption_in_progress = false;\n }\n } else {\n setTimeout(_ => this.openDialog(re)); // BUGFIX: https://github.com/angular/angular/issues/6005#issuecomment-165911194\n }\n } else {\n this.router.navigate(['/my-reports']);\n }\n });\n }\n });\n\n // get css style\n this.http.get('/assets/bootstrap.min.css', {responseType: 'text'}).subscribe(res => {\n this.report_css = res;\n });\n \n // get bug bountys programs list, full credits: https://github.com/projectdiscovery/public-bugbounty-programs\n this.http.get<any>('/assets/chaos-bugbounty-list.json?v=' + + new Date()).subscribe(res => {\n this.bugbountylist = res.programs;\n });\n\n\n // get report profiles\n this.indexeddbService.retrieveReportProfile().then(ret => {\n if (ret) {\n this.ReportProfilesList = ret;\n }\n });\n }\n\n\n dataChanged(changes: KeyValueChanges<any, any[]>) {\n /* If you want to see details then use\n changes.forEachRemovedItem((record) => ...);\n changes.forEachAddedItem((record) => ...);\n changes.forEachChangedItem((record) => ...);\n */\n\n changes.forEachAddedItem((record) => {\n // console.log('ADDED: ',record);\n if (record.previousValue !== null) {\n this.afterDetection();\n }\n });\n\n changes.forEachChangedItem((record) => {\n // console.log('CHANGED: ',record);\n if (record.key !== 'report_version') {\n // console.log('Detection start');\n this.afterDetection();\n }\n });\n\n }\n\n callListener(e) {\n e.preventDefault();\n e.returnValue = '';\n }\n timeout(e) {\n e.preventDefault();\n e.returnValue = '';\n }\n\n sureYouWanttoLeave() {\n window.addEventListener('beforeunload', this.callListener, true);\n this.youhaveunsavedchanges = true;\n }\n\n removeSureYouWanttoLeave() {\n window.removeEventListener('beforeunload', this.callListener, true);\n this.youhaveunsavedchanges = false;\n let id = window.setTimeout(function() {}, 0);\n while (id--) {\n window.clearTimeout(id); // will do nothing if no timeout with id is present\n }\n }\n\n afterDetectionNow() {\n this.reportDiffer = this.differs.find(this.decryptedReportData).create();\n this.reportDifferlogo = this.differs.find({report_logo: this.decryptedReportDataChanged.report_settings.report_logo.logo}).create();\n this.reportDiffersettings = this.differs.find({...this.decryptedReportDataChanged.report_settings}).create();\n\n this.objDiffers = new Array<KeyValueDiffer<string, any>>();\n this.decryptedReportDataChanged.report_vulns.forEach((itemGroup, index) => {\n this.objDiffers[index] = this.differs.find(itemGroup).create();\n });\n\n this.objDiffersFiles = new Array<KeyValueDiffer<string, any>>();\n this.decryptedReportDataChanged.report_vulns.forEach((itemGroup, index) => {\n this.objDiffersFiles[index] = this.differs.find(itemGroup.files).create();\n });\n\n this.objDiffersResearcher = new Array<KeyValueDiffer<string, any>>();\n this.decryptedReportDataChanged.researcher.forEach((itemGroup, index) => {\n this.objDiffersResearcher[index] = this.differs.find(itemGroup).create();\n });\n\n if (this.report_info) {\n this.reportTitleDiffer = this.differs.find({report_name: this.report_info.report_name}).create();\n }\n\n this.sureYouWanttoLeave();\n }\n\n afterDetection() {\n if (this.timerCounter >= 60) {\n setTimeout(() => { this.afterDetectionNow() }, 10000);\n this.timerCounter = 0;\n }\n this.timerCounter++;\n this.sureYouWanttoLeave();\n }\n\n ngDoCheck(): void {\n\n if (this.decryptedReportDataChanged) {\n\n const changes = this.reportDiffer.diff(this.decryptedReportDataChanged);\n if (changes) {\n this.dataChanged(changes);\n }\n\n if (this.reportDifferlogo) {\n const changeslogo = this.reportDifferlogo.diff({report_logo: this.decryptedReportDataChanged.report_settings.report_logo.logo});\n if (changeslogo) {\n this.dataChanged(changeslogo);\n }\n }\n\n if (this.reportDiffersettings) {\n const changessettings = this.reportDiffersettings.diff(this.decryptedReportDataChanged.report_settings);\n if (changessettings) {\n this.dataChanged(changessettings);\n }\n }\n\n if (this.objDiffers) {\n this.decryptedReportDataChanged.report_vulns.forEach((itemGroup, index) => {\n if (this.objDiffers[index]) {\n const objDiffer = this.objDiffers[index];\n const objChanges = objDiffer.diff(itemGroup);\n if (objChanges) {\n this.dataChanged(objChanges);\n }\n }\n });\n }\n \n if (this.objDiffersFiles) {\n this.decryptedReportDataChanged.report_vulns.forEach((itemGroup, index) => {\n if (this.objDiffersFiles[index]) {\n const objDiffer2 = this.objDiffersFiles[index];\n const objChanges2 = objDiffer2.diff(itemGroup.files);\n if (objChanges2) {\n this.dataChanged(objChanges2);\n }\n }\n });\n }\n\n if (this.objDiffersResearcher) {\n this.decryptedReportDataChanged.researcher.forEach((itemGroup, index) => {\n if (this.objDiffersResearcher[index]) {\n const objDiffer3 = this.objDiffersResearcher[index];\n const objChanges3 = objDiffer3.diff(itemGroup);\n if (objChanges3) {\n this.dataChanged(objChanges3);\n }\n }\n });\n }\n\n }\n\n if (this.reportTitleDiffer && this.report_info) {\n const changesName = this.reportTitleDiffer.diff({report_name: this.report_info.report_name});\n if (changesName) {\n this.dataChanged(changesName);\n }\n }\n\n }\n\n // events\n public chartClicked(e: any): void {\n // console.log(e);\n }\n\n public chartHovered(e: any): void {\n // console.log(e);\n }\n\n toggle() {\n\n if (this.selected3.indexOf(true) !== -1) {\n this.pok = 1;\n } else {\n this.pok = 0;\n }\n\n }\n\n selectall() {\n this.selecteditems = [];\n this.selected3 = [];\n\n let i = 0;\n do {\n this.selected3.push(true);\n i++;\n }\n while (i < this.decryptedReportDataChanged.report_vulns.length);\n\n }\n\n deselectall() {\n this.selecteditems = [];\n this.selected3 = [];\n this.pok = 0;\n let i = 0;\n do {\n this.selected3.push(false);\n i++;\n }\n while (i < this.decryptedReportDataChanged.report_vulns.length);\n\n }\n\n removeSelecteditems(array) {\n\n const dialogRef = this.dialog.open(DialogRemoveitemsComponent, {\n width: '400px',\n data: { sel: array, orig: this.decryptedReportDataChanged.report_vulns }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n\n if (result) {\n result.forEach(eachObj => {\n const index: number = this.decryptedReportDataChanged.report_vulns.indexOf(eachObj);\n if (index !== -1) {\n this.decryptedReportDataChanged.report_vulns.splice(index, 1);\n this.addtochangelog('Remove issue: ' + eachObj.title);\n this.afterDetectionNow();\n }\n });\n this.deselectall();\n this.doStats();\n }\n });\n\n }\n\n\n openDialogCVSS(data: any): void {\n\n const dialogRef = this.dialog.open(DialogCvssComponent, {\n width: '800px',\n disableClose: false,\n data: data\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The CVSS dialog was closed');\n this.doStats();\n });\n\n }\n\n\n openDialogCVE(data: any): void {\n\n const dialogRef = this.dialog.open(DialogCveComponent, {\n width: '600px',\n disableClose: false,\n data: data\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The CVE dialog was closed');\n });\n\n }\n\n\n openDialog(data: any): void {\n\n const dialogRef = this.dialog.open(DialogPassComponent, {\n width: '400px',\n disableClose: true,\n data: data\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The security key dialog was closed');\n });\n\n }\n\n addtablescope(): void {\n\n this.decryptedReportDataChanged.report_scope = this.decryptedReportDataChanged.report_scope + ' \\\n\\n\\\nIP | hostname | role | comments\\n\\\n------|--------------|-------|---------------\\n\\\n127.0.0.1 | localhost.localdomain | PROD | client asked to test this one with care\\n\\\n255.255.255.255 | N/A | DMZ | test you can go do whatever you want on it\\n\\\n';\n\n }\n\n addcodescope(): void {\n\n this.decryptedReportDataChanged.report_scope = this.decryptedReportDataChanged.report_scope + ' \\\n\\n\\\n```\\n\\\nSample code here\\n\\\n```\\n\\\n';\n\n }\n\n doStats() {\n\n const critical = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'Critical');\n });\n\n const high = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'High');\n });\n\n const medium = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'Medium');\n });\n\n const low = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'Low');\n });\n\n const info = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'Info');\n });\n\n this.dataSourceforseverity = [\n { severity: 'Critical', count: critical.length },\n { severity: 'High', count: high.length },\n { severity: 'Medium', count: medium.length },\n { severity: 'Low', count: low.length },\n { severity: 'Info', count: info.length }\n ];\n\n this.pieChartData = [critical.length, high.length, medium.length, low.length, info.length];\n\n this.listchangelog = this.decryptedReportData.report_changelog;\n this.dataSource = new MatTableDataSource(this.decryptedReportData.report_changelog);\n setTimeout(() => this.dataSource.sort = this.sort);\n setTimeout(() => this.dataSource.paginator = this.paginator);\n\n // this.reportdesc.report_lastupdate = this.decryptedReportDataChanged.report_lastupdate;\n\n }\n\n addissue() {\n console.log('Add issue');\n const dialogRef = this.dialog.open(DialogAddissueComponent, {\n width: '600px'\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n\n if (result !== undefined) {\n if (result.title !== '') {\n this.decryptedReportDataChanged.report_vulns.push(result);\n this.addtochangelog('Create issue: ' + result.title);\n this.afterDetectionNow();\n this.doStats();\n }\n }\n\n });\n\n }\n\n import_issues() {\n console.log('Import issues');\n const dialogRef = this.dialog.open(DialogImportComponent, {\n width: '500px'\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n\n if (result !== undefined) {\n result.forEach(eachObj => {\n\n if (eachObj.title !== '' && eachObj.title !== undefined && eachObj.cvss !== 'Active') {\n this.decryptedReportDataChanged.report_vulns.push(eachObj);\n this.addtochangelog('Create issue: ' + eachObj.title);\n this.afterDetectionNow();\n }\n\n });\n\n this.doStats();\n }\n\n });\n\n }\n\n export_by_severity(exportitem, severity) {\n\n const bySeverity = exportitem.filter(item => item.severity === severity);\n\n if (bySeverity.length > 0) {\n console.log('Export issues');\n const dialogRef = this.dialog.open(DialogExportissuesComponent, {\n width: '500px',\n data: bySeverity\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n });\n }\n }\n\n export_issues(selected, original) {\n console.log('Export issues');\n\n const selecteditems = selected.find(i => i === true);\n if (selecteditems) {\n\n const dialogRef = this.dialog.open(DialogExportissuesComponent, {\n width: '500px',\n data: { sel: selected, orig: original }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n });\n \n } else {\n\n const dialogRef = this.dialog.open(DialogExportissuesComponent, {\n width: '500px',\n data: original\n });\n \n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n });\n\n }\n }\n\n drop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.decryptedReportDataChanged.report_vulns, event.previousIndex, event.currentIndex);\n moveItemInArray(this.selecteditems, event.previousIndex, event.currentIndex);\n moveItemInArray(this.selected3, event.previousIndex, event.currentIndex);\n }\n\n saveReportChanges(report_id: any) {\n this.report_encryption_in_progress = true;\n this.savemsg = 'Please wait, report is encrypted...';\n const pass = sessionStorage.getItem(report_id);\n let useAPI = false;\n\n this.indexeddbService.getkeybyReportID(report_id).then(data => {\n if (data) {\n\n if (data.NotFound === 'NOOK') {\n console.log('no locally report');\n useAPI = true;\n } else {\n\n // update report\n this.decryptedReportDataChanged.report_version = this.decryptedReportDataChanged.report_version + 1;\n this.addtochangelog('Save report v.' + this.decryptedReportDataChanged.report_version);\n // tslint:disable-next-line:max-line-length\n this.indexeddbService.prepareupdatereport(this.decryptedReportDataChanged, pass, this.report_info.report_id, this.report_info.report_name, this.report_info.report_createdate, data.key).then(retu => {\n if (retu) {\n this.reportdesc.report_lastupdate = retu;\n this.report_encryption_in_progress = false;\n this.savemsg = 'All changes saved successfully!';\n this.lastsavereportdata = retu;\n this.doStats();\n\n this.removeSureYouWanttoLeave();\n\n this.snackBar.open('All changes saved successfully!', 'OK', {\n duration: 3000,\n panelClass: ['notify-snackbar-success']\n });\n }\n });\n\n }\n\n }\n }).then(() => {\n\n if (useAPI === true) {\n this.indexeddbService.searchAPIreport(this.report_info.report_id).then(ret => {\n\n if (ret === 'API_ERROR') {\n console.log('api problems');\n \n const dialogRef = this.dialog.open(DialogApierrorComponent, {\n width: '400px',\n disableClose: true\n });\n \n dialogRef.afterClosed().subscribe(result => {\n \n if (result === 'tryagain') {\n console.log('User select: try again');\n this.saveReportChanges(this.report_info.report_id);\n }\n \n if (result === 'savelocally') {\n console.log('User select: save locally');\n try {\n this.decryptedReportDataChanged.report_version = this.decryptedReportDataChanged.report_version + 1;\n this.addtochangelog('Save report v.' + this.decryptedReportDataChanged.report_version);\n // Encrypt\n const ciphertext = Crypto.AES.encrypt(JSON.stringify(this.decryptedReportDataChanged), pass);\n const now: number = Date.now();\n const to_update = {\n report_id: uuid(),\n report_name: this.report_info.report_name,\n report_createdate: this.report_info.report_createdate,\n report_lastupdate: now,\n encrypted_data: ciphertext.toString()\n };\n \n this.indexeddbService.cloneReportadd(to_update).then(data => {\n if (data) {\n this.removeSureYouWanttoLeave();\n this.router.navigate(['/my-reports']);\n }\n });\n \n } catch (except) {\n console.log(except);\n }\n \n }\n });\n \n } else {\n this.decryptedReportDataChanged.report_version = this.decryptedReportDataChanged.report_version + 1;\n this.addtochangelog('Save report v.' + this.decryptedReportDataChanged.report_version);\n // tslint:disable-next-line:max-line-length\n this.indexeddbService.prepareupdateAPIreport(ret.api, ret.apikey, this.decryptedReportDataChanged, pass, this.report_info.report_id, this.report_info.report_name, this.report_info.report_createdate).then(retu => {\n if (retu === 'NOSPACE') {\n this.savemsg = '';\n this.report_encryption_in_progress = false;\n } else {\n this.report_encryption_in_progress = false;\n this.reportdesc.report_lastupdate = retu;\n this.savemsg = 'All changes saved on remote API successfully!';\n this.lastsavereportdata = retu;\n this.doStats();\n this.removeSureYouWanttoLeave();\n \n this.snackBar.open('All changes saved on remote API successfully!', 'OK', {\n duration: 3000,\n panelClass: ['notify-snackbar-success']\n });\n }\n \n });\n \n }\n \n });\n }\n \n });\n\n }\n\n sortbycvss() {\n this.deselectall();\n this.decryptedReportDataChanged.report_vulns = this.decryptedReportDataChanged.report_vulns.sort((a, b) => b.cvss - a.cvss);\n }\n\n sortbyseverity() {\n this.deselectall();\n\n const critical = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'Critical');\n });\n\n const high = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'High');\n });\n\n const medium = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'Medium');\n });\n\n const low = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'Low');\n });\n\n const info = this.decryptedReportDataChanged.report_vulns.filter(function (el) {\n return (el.severity === 'Info');\n });\n\n const merge = [...critical, ...high, ...medium, ...low, ...info];\n this.decryptedReportDataChanged.report_vulns = merge;\n }\n\n addCustomcontent(item) {\n\n const dialogRef = this.dialog.open(DialogCustomcontentComponent, {\n width: '550px',\n height: '450px',\n data: item\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n });\n\n }\n\n editreporttitle(item) {\n\n const dialogRef = this.dialog.open(DialogEditComponent, {\n width: '350px',\n data: item\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n if (result) {\n if (result !== 'nochanges') {\n this.report_info.report_name = result;\n }\n }\n });\n\n }\n\n changesecuritykey(report_id: string) {\n\n const dialogRef = this.dialog.open(DialogChangekeyComponent, {\n width: '450px'\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n\n if (result) {\n this.updateSecKey(report_id, result);\n }\n\n });\n\n }\n\n updateSecKey(report_id, pass) {\n\n this.savemsg = 'Please wait, report is encrypted...';\n sessionStorage.setItem(report_id, pass);\n\n // update report\n this.addtochangelog('Change report security key');\n this.decryptedReportDataChanged.report_version = this.decryptedReportDataChanged.report_version + 1;\n this.addtochangelog('Save report v.' + this.decryptedReportDataChanged.report_version);\n\n this.indexeddbService.getkeybyReportID(report_id).then(data => {\n if (data) {\n\n if (data.NotFound === 'NOOK') {\n console.log('no locally report');\n } else {\n // tslint:disable-next-line:max-line-length\n this.indexeddbService.prepareupdatereport(this.decryptedReportDataChanged, pass, this.report_info.report_id, this.report_info.report_name, this.report_info.report_createdate, data.key).then(retu => {\n if (retu) {\n this.savemsg = 'All changes saved successfully!';\n this.lastsavereportdata = retu;\n this.doStats();\n }\n });\n }\n\n }\n });\n\n }\n\n editissuetitle(item) {\n const dialogRef = this.dialog.open(DialogEditComponent, {\n width: '350px',\n data: item\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n if (result) {\n if (result !== 'nochanges') {\n const index: number = this.decryptedReportDataChanged.report_vulns.indexOf(result);\n if (index !== -1) {\n this.decryptedReportDataChanged.report_vulns[index].title = result.title;\n this.afterDetectionNow();\n }\n }\n }\n });\n }\n ngOnDestroy() {\n // unsubscribe to ensure no memory leaks\n this.subscription.unsubscribe();\n }\n\n addresearcher() {\n\n const add = {\n reportername: '',\n reportersocial: '',\n reporterwww: '',\n reporteremail: ''\n };\n\n this.decryptedReportDataChanged.researcher.push(add);\n this.afterDetectionNow();\n\n }\n\n removeresearcher(item) {\n\n const index: number = this.decryptedReportDataChanged.researcher.indexOf(item);\n\n if (index !== -1) {\n this.decryptedReportDataChanged.researcher.splice(index, 1);\n this.afterDetectionNow();\n }\n\n }\n\n\n addchangelog() {\n const dialogRef = this.dialog.open(DialogChangelogComponent, {\n width: '500px'\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n\n if (result !== undefined) {\n this.decryptedReportDataChanged.report_changelog.push(result);\n this.doStats();\n }\n\n });\n }\n\n\n editchangelog(item) {\n const dialogRef = this.dialog.open(DialogChangelogComponent, {\n width: '500px',\n data: item\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n\n if (result) {\n const index: number = this.decryptedReportDataChanged.report_changelog.indexOf(result.origi);\n\n if (index !== -1) {\n this.decryptedReportDataChanged.report_changelog[index] = { date: result.date, desc: result.desc };\n this.doStats();\n }\n }\n\n });\n }\n\n\n addtochangelog(item) {\n const today: number = Date.now();\n const add_changelog = {\n date: today,\n desc: item\n };\n\n this.decryptedReportDataChanged.report_changelog.push(add_changelog);\n this.doStats();\n }\n removefromchangelog(item) {\n const remo = 'changelog';\n const dialogRef = this.dialog.open(DialogEditComponent, {\n width: '350px',\n data: [{ remo }, { item }],\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n\n const index: number = this.decryptedReportDataChanged.report_changelog.indexOf(result);\n\n if (index !== -1) {\n this.decryptedReportDataChanged.report_changelog.splice(index, 1);\n this.doStats();\n }\n });\n }\n\n\n removeIssiue(item) {\n const remo = 'remove';\n const dialogRef = this.dialog.open(DialogEditComponent, {\n width: '350px',\n data: [{ remo }, { item }],\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n\n const index: number = this.decryptedReportDataChanged.report_vulns.indexOf(result);\n\n if (index !== -1) {\n this.decryptedReportDataChanged.report_vulns.splice(index, 1);\n this.addtochangelog('Remove issue: ' + result.title);\n this.afterDetectionNow();\n this.doStats();\n }\n\n });\n }\n\n\n\n shareReport(report_id) {\n this.indexeddbService.downloadEncryptedReport(report_id);\n }\n\n downloadASCII(report_details, metadata) {\n\n function addNewlines(str) {\n return stringDivider(str, 100, '\\n');\n }\n\n function stringDivider(str, width, spaceReplacer) {\n if (str.length > width) {\n let p = width;\n for (; p > 0 && str[p] !== ' '; p--) { }\n if (p > 0) {\n const left = str.substring(0, p);\n const right = str.substring(p + 1);\n return left + spaceReplacer + stringDivider(right, width, spaceReplacer);\n }\n }\n return str;\n }\n\n let report_ascii_head = '######################################################\\n\\\n# Report Title: ' + metadata.report_name + '\\n\\\n# Report ID: ' + metadata.report_id + '\\n\\\n# Create Date: ' + new Date(metadata.report_createdate).toLocaleString() + '\\n\\\n# Last Update: ' + new Date(metadata.report_lastupdate).toLocaleString() + '\\n';\n\n if (report_details.researcher.length > 0) {\n\n report_ascii_head = report_ascii_head + '#####\\n# Author: \\n';\n\n report_details.researcher.forEach(function (value, key) {\n\n if (value.reportername !== '') {\n report_ascii_head = report_ascii_head + '# ' + value.reportername + '';\n }\n\n if (value.reporteremail !== '') {\n report_ascii_head = report_ascii_head + ' - E-mail: ' + value.reporteremail + '';\n }\n\n if (value.reportersocial !== '') {\n report_ascii_head = report_ascii_head + ' - Social: ' + value.reportersocial + '';\n }\n\n if (value.reporterwww !== '') {\n report_ascii_head = report_ascii_head + ' - WWW: ' + value.reporterwww + '';\n }\n\n report_ascii_head = report_ascii_head + '\\n';\n }, this);\n\n }\n\n if (report_details.report_scope !== '') {\n report_ascii_head = report_ascii_head + '# Report scope: \\n' + addNewlines(report_details.report_scope);\n }\n\n report_ascii_head = report_ascii_head + '######################################################\\n\\\n# Vulnerabilities:\\n\\n';\n\n let report_ascii_vulns = '';\n report_details.report_vulns.forEach(function (value, key) {\n\n report_ascii_vulns += report_ascii_vulns = '\\n-> ' + Number(key + 1) + '. ' + value.title;\n\n if (value.severity !== '') {\n report_ascii_vulns = report_ascii_vulns + '\\n# Severity: ' + value.severity + '\\n';\n }\n\n if (value.date !== '') {\n report_ascii_vulns = report_ascii_vulns + '# Find Date: ' + value.date + '\\n';\n }\n\n if (value.cvss !== '') {\n report_ascii_vulns = report_ascii_vulns + '# CVSS: ' + value.cvss + '\\n';\n }\n\n if (value.cve !== '') {\n report_ascii_vulns = report_ascii_vulns + '# CVE: ' + addNewlines(value.cve) + '\\n';\n }\n\n report_ascii_vulns = report_ascii_vulns + '# Description: \\n' + addNewlines(value.desc) + '\\n';\n\n if (value.poc !== '') {\n report_ascii_vulns = report_ascii_vulns + '# PoC: \\n' + addNewlines(value.poc) + '\\n';\n }\n\n if (value.ref !== '') {\n report_ascii_vulns = report_ascii_vulns + '# References: \\n' + value.ref + '\\n\\n';\n }\n\n\n }, this);\n\n const report_ascii_end = '\\n# Report generated by vulnrepo.com \\n######################################################\\n';\n const report_ascii = report_ascii_head + report_ascii_vulns + report_ascii_end;\n\n // download ascii report\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(report_ascii));\n element.setAttribute('download', metadata.report_name + ' ' + metadata.report_id + ' ASCII (vulnrepo.com).txt');\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n\n }\n\n themechange(event) {\n\n let theme = '';\n if (event.value === 'dark') {\n theme = '_dark';\n } else {\n theme = '';\n }\n\n this.http.get('/assets/bootstrap' + theme + '.min.css', {responseType: 'text'}).subscribe(res3 => {\n this.report_css = res3;\n });\n\n }\n\n embedVideo(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_video_embed = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_video_embed = true;\n }\n }\n\n removeGeninfo(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_remove_lastpage = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_remove_lastpage = true;\n }\n }\n\n removechangelogpage(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_changelog_page = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_changelog_page = true;\n }\n }\n\n parsingdescnewline(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_parsing_desc = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_parsing_desc = true;\n }\n }\n\n removeResearchers(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_remove_researchers = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_remove_researchers = true;\n }\n }\n\n removeIssuestatus(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_remove_issuestatus = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_remove_issuestatus = true;\n }\n }\n\n removeIssuecvss(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_remove_issuecvss = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_remove_issuecvss = true;\n }\n }\n\n removeIssuecve(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_remove_issuecve = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_remove_issuecve = true;\n }\n }\n\n removetagsfromreport(event) {\n if (event.checked === false) {\n this.decryptedReportDataChanged.report_settings.report_remove_issuetags = false;\n }\n if (event.checked === true) {\n this.decryptedReportDataChanged.report_settings.report_remove_issuetags = true;\n }\n }\n\n DownloadHTML(report_data, report_metadata, issueStatus) {\n\n function escapeHtml(unsafe) {\n return unsafe.toString()\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n function parse_newline(text) {\n return text.toString().replace(/(?:\\r\\n|\\r|\\n)/g, '<br>');\n }\n\n function statusDesc(status) {\n const ret = issueStatus.filter(function (el) {\n return (el.value === status);\n });\n return ret[0].status;\n }\n\n function parse_links(text) {\n const urlRegex = /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/ig;\n // tslint:disable-next-line:no-shadowed-variable\n return text.replace(urlRegex, function (url) {\n return '<a target=\"_blank\" href=\"' + url + '\">' + url + '</a>';\n });\n }\n\n let report_html = `\n <html>\n <head>\n <meta charset=\"utf-8\"/>\n <style>\n\n ` + this.report_css + `\n\n\n @import \"compass/css3\";\n * {\n padding: 0;\n margin: 0;\n }\n body {\n margin: 20 10 20 10;\n }\n .pagebreak { page-break-before: always; }\n\n\n .label {\n color: white;\n display: inline-block;\n font-family: verdana, sans-serif;\n padding: 4px;\n }\n /*critical*/\n .critical {\n border-color: #FF0039;\n background-color: #FF0039;\n }\n /*high*/\n .high {\n border-color: #FF7518;\n background-color: #FF7518;\n }\n /*medium*/\n .medium {\n color: #000;\n border-color: #F9EE06;\n background-color: #F9EE06;\n }\n /*low*/\n .low {\n border-color: #3FB618;\n background-color: #3FB618;\n }\n /*information*/\n .info {\n border-color: #2780E3;\n background-color: #2780E3;\n }\n .strbreak {\n word-break: break-word;\n }\n ul {\n list-style-position: inside;\n }\n .row {\n margin-left: 0px;\n }\n </style>\n </head>\n <body class=\"container\">\n <br><br>`;\n\n // report settings\n const advlogo = report_data.report_settings.report_logo.logo;\n if (advlogo !== '') {\n const er = '<center><img src=\"' + escapeHtml(advlogo) + '\" width=\"' + escapeHtml(report_data.report_settings.report_logo.width) + '\" height=\"' + escapeHtml(report_data.report_settings.report_logo.height) + '\"></center><br><br>';\n report_html = report_html + er;\n }\n\n const advhtml = report_data.report_settings.report_html;\n if (advhtml !== '') {\n this.advhtml = advhtml;\n }\n\n\n let intro = ' \\\n <div id=\"row\"> \\\n <center> \\\n <div class=\"card border-light mb-3\" style=\"max-width: 30rem;\"> \\\n <div class=\"card-header\">Security Report</div> \\\n <div class=\"card-body\"> \\\n <h4 class=\"card-title\">' + escapeHtml(report_metadata.report_name) + '</h4> \\\n <p class=\"card-text\">Report Version: ' + escapeHtml(report_data.report_version) + '</p> \\\n <p class=\"card-text\">Report ID: ' + escapeHtml(report_metadata.report_id) + '</p>';\n\n if (report_data.report_metadata.starttest !== '' && report_data.report_metadata.endtest !== '') {\n\n const stringToSplit = new Date(report_data.report_metadata.starttest).toLocaleString();\n const x = stringToSplit.split(',');\n\n const stringToSplit2 = new Date(report_data.report_metadata.endtest).toLocaleString();\n const y = stringToSplit2.split(',');\n\n // tslint:disable-next-line:max-line-length\n const cond0 = '<p class=\"card-text\">Date: ' + escapeHtml(x[0]) + ' - ' + escapeHtml(y[0]) + '</p>';\n intro = intro + cond0;\n }\n\n const cond5 = ' \\\n </div> \\\n </div> \\\n </center> \\\n </div> \\\n <br> \\\n <br> \\\n <br> \\\n <div class=\"d-flex justify-content-center\"><div style=\"width: 500px; text-align: center;\" class=\"label Critical\"><h2>CONFIDENTIAL</h2></div></div> \\\n <div class=\"pagebreak\"></div> \\\n <br>';\n intro = intro + cond5;\n\n const tableofcontent_one = ' \\\n <div id=\"row\"> \\\n <h2>Table of contents</h2> \\\n <ul class=\"list-group\">';\n\n let tableofcontentlist = '<li class=\"list-group-item d-flex justify-content-between align-items-center\"> \\\n <a href=\"#Scope\">Scope</a> \\\n </li> \\\n <li class=\"list-group-item d-flex justify-content-between align-items-center\"> \\\n <a href=\"#Statistics and Risk\">Statistics and Risk</a> \\\n </li> \\\n <li class=\"list-group-item d-flex justify-content-between align-items-center\"> \\\n <a href=\"#Results\">Results (' + report_data.report_vulns.length + ')</a> \\\n </li>';\n\n report_data.report_vulns.forEach((item, index) => {\n let tags = '';\n if (report_data.report_settings.report_remove_issuetags === false) {\n if (item.tags.length > 0) {\n item.tags.forEach((ite, ind) => {\n tags = tags + '<span style=\"color: #fff\" class=\"badge rounded-pill bg-dark\">' + escapeHtml(ite.name) + '</span> ';\n });\n\n }\n }\n\n tableofcontentlist = tableofcontentlist + ' \\\n <li class=\"list-group-item d-flex justify-content-between align-items-center\"> \\\n <a href=\"#' + index + '\"> \\\n <span class=\"label ' + escapeHtml(item.severity) + '\">' + escapeHtml(item.severity) + '</span> ' + escapeHtml(item.title) + ' \\\n </a> \\\n <span>' + tags + '</span> \\\n </li>';\n\n });\n\n\n let summarycomment = '';\n if (report_data.report_summary !== '') {\n summarycomment = '<li class=\"list-group-item d-flex justify-content-between align-items-center\"> \\\n <a href=\"#Report summary comment\">Report summary comment</a> \\\n </li>';\n }\n\n let authors = '';\n if (report_data.report_settings.report_remove_researchers === false) {\n if (report_data.researcher.length > 0 && report_data.researcher[0].reportername !== '') {\n authors = '<li class=\"list-group-item d-flex justify-content-between align-items-center\"> \\\n <a href=\"#Report authors\">Report authors</a> \\\n </li>';\n }\n }\n\n let tableofcontent_1 = '';\n if (report_data.report_settings.report_changelog_page === false) {\n tableofcontent_1 = '<li class=\"list-group-item d-flex justify-content-between align-items-center\"> \\\n <a href=\"#Changelog\">Changelog</a> \\\n </li>';\n }\n\n const endtable = ' \\\n </ul> \\\n </div> \\\n <br> \\\n <div class=\"pagebreak\"></div> \\\n <br><br>';\n const tableofcontent = tableofcontent_one + tableofcontentlist + summarycomment + authors + tableofcontent_1 + endtable;\n\n const critical = report_data.report_vulns.filter(function (el) {\n return (el.severity === 'Critical');\n });\n\n const high = report_data.report_vulns.filter(function (el) {\n return (el.severity === 'High');\n });\n\n const medium = report_data.report_vulns.filter(function (el) {\n return (el.severity === 'Medium');\n });\n\n const low = report_data.report_vulns.filter(function (el) {\n return (el.severity === 'Low');\n });\n\n const info = report_data.report_vulns.filter(function (el) {\n return (el.severity === 'Info');\n });\n\n const stats = '<table class=\"table table-hover\"> \\\n <thead> \\\n <tr> \\\n <th>Severity</th> \\\n <th>Number</th> \\\n </tr> \\\n </thead> \\\n <tbody> \\\n <tr> \\\n <td><span class=\"label Critical\">Critical</span></td> \\\n <td>' + critical.length + '</td> \\\n </tr> \\\n <tr> \\\n <td><span class=\"label High\">High</span></td> \\\n <td>' + high.length + '</td> \\\n </tr> \\\n <tr> \\\n <td><span class=\"label Medium\">Medium</span></td> \\\n <td>' + medium.length + '</td> \\\n </tr> \\\n <tr> \\\n <td><span class=\"label Low\">Low</span></td> \\\n <td>' + low.length + '</td> \\\n </tr> \\\n <tr> \\\n <td><span class=\"label Info\">Info</span></td> \\\n <td>' + info.length + '</td> \\\n </tr> \\\n </tbody> \\\n </table>';\n\n\n const risktable = '<table class=\"table table-hover\"> \\\n<thead> \\\n <tr> \\\n <th colspan=\"5\" class=\"text-center\">Overall Risk Severity</th> \\\n </tr> \\\n</thead> \\\n<tbody> \\\n <tr> \\\n <td rowspan=\"4\" class=\"text-center\"><b>Impact</b></td> \\\n <td class=\"text-center\" style=\"color: #EB7F30;\"><b>HIGH</b></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label Medium\">Medium</span></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label High\">High</span></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label Critical\">Critical</span></td> \\\n </tr> \\\n <tr> \\\n <td class=\"text-center\" style=\"color: #FFFB01;\"><b>MEDIUM</b></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label Low\">Low</span></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label Medium\">Medium</span></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label High\">High</span></td> \\\n </tr> \\\n <tr> \\\n <td class=\"text-center\" style=\"color: #91D054;\"><b>LOW</b></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label Info\">Info</span></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label Low\">Low</span></td> \\\n <td class=\"text-center\"><span style=\"width: 100%;\" class=\"label Medium\">Medium</span></td> \\\n </tr> \\\n <tr> \\\n <td> </td> \\\n <td class=\"text-center\" style=\"color: #91D054;\"><b>LOW</b></td> \\\n <td class=\"text-center\" style=\"color: #FFFB01;\"><b>MEDIUM</b></td> \\\n <td class=\"text-center\" style=\"color: #EB7F30;\"><b>HIGH</b></td> \\\n </tr> \\\n</tbody> \\\n<tfoot> \\\n <tr> \\\n <td> </td> \\\n <td colspan=\"4\" class=\"text-center\"><b>Likelihood</b></td> \\\n </tr> \\\n</tfoot> \\\n</table>';\n\n // add Markdown rendering\n const renderer = new marked.Renderer();\n renderer.table = function (header, body) {\n const table = `\n <table class=\"table\">\n <thead>${header}</thead>\n <tbody>${body}</tbody>\n </table>\n `;\n return table;\n };\n const scopemarked = marked(report_data.report_scope, { renderer: renderer });\n\n // advanced text\n let projscope = '<h2 id=\"Scope\">Scope</h2><p>' + scopemarked + '</p>';\n\n if (this.advhtml !== '') {\n const reportHTMLmarked = marked(this.advhtml, { renderer: renderer });\n projscope = projscope + '<br>' + reportHTMLmarked + '<br>';\n }\n\n const statsandrisk = '<h2 id=\"Statistics and Risk\">Statistics and Risk</h2> \\\n <p>' + stats + '</p><br> \\\n <p>The risk of application security vulnerabilities discovered during an assessment will be rated according to a custom-tailored version the <a target=\"_blank\" href=\"https://www.owasp.org/index.php/OWASP_Risk_Rating_Methodology\">OWASP Risk Rating Methodology</a>. \\\n Risk severity is determined based on the estimated technical and business impact of the vulnerability, and on the estimated likelihood of the vulnerability being exploited:<br><br> \\\n ' + risktable + '<br>Our Risk rating is based on this calculation: <b>Risk = Likelihood * Impact</b>.</p><div class=\"pagebreak\"></div><br>';\n\n const advtext = projscope + statsandrisk;\n\n let issues = '<div class=\"card border-light mb-3\"><div class=\"card-header\"><center><h3 id=\"Results\">Results (' + report_data.report_vulns.length + ')</h3></center></div><div class=\"card-body\">';\n report_data.report_vulns.forEach((item, index) => {\n\n let iscve = '';\n if (report_data.report_settings.report_remove_issuecve === false) {\n if (item.cve) {\n iscve = '<dt>CVE:</dt> \\\n <dd>' + item.cve + '</dd><br>';\n }\n }\n\n let iscvss = '';\n if (report_data.report_settings.report_remove_issuecvss === false) {\n if (item.cvss) {\n iscvss = '<dt>CVSS v3.1 (Base score):</dt> \\\n <dd>' + item.cvss + '</dd><br>';\n }\n }\n\n let issstatus = '';\n if (report_data.report_settings.report_remove_issuestatus === false) {\n if (item.status) {\n issstatus = '<dt>Status:</dt> \\\n <dd>' + statusDesc(item.status) + '</dd><br>';\n }\n }\n\n\n let issuetags = '';\n if (report_data.report_settings.report_remove_issuetags === false) {\n if (item.tags.length > 0) {\n let tags = '';\n item.tags.forEach((ite, ind) => {\n tags = tags + '<span style=\"color: #fff\" class=\"badge rounded-pill bg-dark\">' + escapeHtml(ite.name) + '</span> ';\n });\n\n issuetags = '<dt>TAGs:</dt> \\\n <dd>' + tags + '</dd><br>';\n\n }\n }\n\n let desc = '';\n if (report_data.report_settings.report_parsing_desc === false) {\n desc = '<dt>Description:</dt> \\\n <dd class=\"strbreak\">' + escapeHtml(item.desc) + '</dd><br>';\n } else {\n desc = '<dt>Description:</dt> \\\n <dd class=\"strbreak\">' + parse_newline(escapeHtml(item.desc)) + '</dd><br>';\n }\n\n issues = issues + ' \\\n <div class=\"row\"> \\\n <h4 id=\"' + index + '\"> \\\n <span class=\"label ' + escapeHtml(item.severity) + '\">' + escapeHtml(item.severity) + '</span> \\\n ' + escapeHtml(item.title) + '</h4> \\\n <dl>' + iscve + iscvss + issstatus + desc;\n\n\n\n if (item.poc !== '' || item.files.length !== 0) {\n const ewe = ' \\\n <dt>Proof of Concept:</dt> \\\n <dd class=\"strbreak\"> \\\n <div style=\"white-space: pre-wrap;\">' + escapeHtml(item.poc) + '</div>';\n\n let fil = '';\n item.files.forEach((ite, ind) => {\n\n\n let shac = '';\n if (ite.sha256checksum) {\n shac = '<br><small>(SHA256 File Checksum: ' + escapeHtml(ite.sha256checksum) + ')</small>';\n }\n\n let fsize = '';\n if (ite.size) {\n fsize = ' <small>(Size: ' + escapeHtml(ite.size) + ' bytes)</small>';\n }\n\n if (ite.type.includes('image')) {\n // tslint:disable-next-line:max-line-length\n fil = fil + '<b>Attachment: <i>' + escapeHtml(ite.title) + '</i></b>' + fsize + shac + '<br><img src=\"' + escapeHtml(ite.data) + '\" title=\"' + escapeHtml(ite.title) + '\" class=\"img-fluid\"><br><br>';\n } else if (ite.type === 'video/mp4' || ite.type === 'video/ogg' || ite.type === 'video/webm') {\n if (report_data.report_settings.report_video_embed === true) {\n // tslint:disable-next-line:max-line-length\n fil = fil + '<b>Attachment: <i>' + escapeHtml(ite.title) + '</i></b>' + fsize + shac + '<br><video width=\"100%\" height=\"600\" controls><source src=\"' + escapeHtml(ite.data) + '\" type=\"' + escapeHtml(ite.type) + '\">Your browser does not support the video tag.</video><br><br>';\n }\n if (report_data.report_settings.report_video_embed === false) {\n fil = fil + '<b>Attachment: <a href=\"' + escapeHtml(ite.data) + '\" download=\"' + escapeHtml(ite.title) + '\"><i>' + escapeHtml(ite.title) + '</i></a></b>' + fsize + shac + '<br><br>';\n }\n } else if (ite.type === 'text/plain') {\n const byteString = atob(ite.data.split(',')[1]);\n // tslint:disable-next-line:max-line-length\n fil = fil + '<b>Attachment: <i>' + escapeHtml(ite.title) + '</i></b>' + fsize + shac + '<br><b>[file content]:</b><pre style=\"white-space: pre-wrap;\">' + escapeHtml(byteString) + '</pre><br><br>';\n } else {\n fil = fil + '<b>Attachment: <a href=\"' + escapeHtml(ite.data) + '\" download=\"' + escapeHtml(ite.title) + '\"><i>' + escapeHtml(ite.title) + '</i></a></b>' + fsize + shac + '<br><br>';\n }\n\n });\n\n const ewe2 = '</dd><br>';\n issues = issues + ewe + fil + ewe2;\n }\n\n if (item.ref !== '') {\n const reference_item = ' \\\n <dt>References:</dt> \\\n <dd class=\"strbreak\">' + parse_links(parse_newline(escapeHtml(item.ref))) + '</dd><br>';\n issues = issues + issuetags + reference_item;\n }\n\n const end_issues = '</dl></div>';\n issues = issues + end_issues;\n });\n\n issues = issues + '</div></div><div class=\"pagebreak\"></div>';\n\n let summarycomment_value = '';\n if (report_data.report_summary !== '') {\n // tslint:disable-next-line:max-line-length\n summarycomment_value = '<h2 id=\"Report summary comment\">Report summary comment</h2><p>' + parse_newline(escapeHtml(report_data.report_summary)) + '</p><br>';\n }\n\n\n let authors_value = '';\n if (report_data.researcher.length > 0 && report_data.researcher[0].reportername !== '') {\n if (report_data.report_settings.report_remove_researchers === false) {\n\n let aut = '';\n\n report_data.researcher.forEach((ite, ind) => {\n\n if (ite.reportername !== '') {\n aut = aut + '<i class=\"bi bi-alarm\"></i><div class=\"col-lg-4\"> \\\n <figure>\\\n <blockquote class=\"blockquote\">' + (ite.reportername !== '' ? '<p class=\"mb-0\">' + escapeHtml(ite.reportername) + '</p>' : '') + '</blockquote>\\\n ' + (ite.reporteremail !== '' ? '<figcaption class=\"blockquote-footer\">E-Mail: <cite>' + escapeHtml(ite.reporteremail) + '</cite></figcaption>' : '') + '\\\n ' + (ite.reportersocial !== '' ? '<figcaption class=\"blockquote-footer\">Social: <cite>' + parse_links(escapeHtml(ite.reportersocial)) + '</cite></figcaption>' : '') + '\\\n ' + (ite.reporterwww !== '' ? '<figcaption class=\"blockquote-footer\">WWW: <cite>' + parse_links(escapeHtml(ite.reporterwww)) + '</cite></figcaption>' : '') + '\\\n </figure>\\\n </div>';\n }\n });\n\n // tslint:disable-next-line:max-line-length\n authors_value = '<h2 id=\"Report authors\">Report authors</h2><p><div class=\"row\">' + aut + '</div></p><br>';\n\n }\n\n }\n\n\n let changeloghtml = '';\n if (report_data.report_settings.report_changelog_page === false) {\n\n changeloghtml = summarycomment_value + '<h2 id=\"Changelog\">Changelog</h2> \\\n <p><table class=\"table table-hover\"> \\\n <thead> \\\n <tr> \\\n <th>Date</th> \\\n <th>Description</th> \\\n </tr> \\\n </thead> \\\n <tbody>';\n\n report_data.report_changelog.forEach((item, index) => {\n\n changeloghtml = changeloghtml + '<tr> \\\n <td>' + escapeHtml(new Date(item.date).toLocaleString()) + '</td> \\\n <td>' + escapeHtml(item.desc) + '</td> \\\n </tr>';\n });\n changeloghtml = changeloghtml + '</tbody></table></p>';\n\n }\n\n let report_gen_info = '';\n if (report_data.report_settings.report_remove_lastpage === false) {\n report_gen_info = `<div class=\"pagebreak\"></div>\n <p>Generated by <a href=\"https://vulnrepo.com/\">VULNRΞPO</a></p>\n `;\n }\n\n const report_close = '</body></html>';\n\n // tslint:disable-next-line:max-line-length\n const download_report_complete = report_html + intro + tableofcontent + advtext + issues + authors_value + changeloghtml + report_gen_info + report_close;\n\n // download HTML report\n const blob = new Blob([download_report_complete], { type: 'text/html' });\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', report_metadata.report_name + ' ' + report_metadata.report_id + ' HTML (vulnrepo.com).html');\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n }\n\n checksumfile(dataurl, files, dec_data) {\n let file_sha2 = '';\n // sha256 file checksum\n const reader = new FileReader();\n reader.onloadend = (e) => {\n file_sha2 = sha256(reader.result);\n this.proccessUpload(dataurl, files[0].name, files[0].type, files[0].size, file_sha2, dec_data);\n };\n reader.readAsArrayBuffer(files[0]);\n\n }\n\n proccessUpload(data, name, type, size, sha256check, dec_data) {\n\n const index: number = this.decryptedReportDataChanged.report_vulns.indexOf(dec_data);\n const today: number = Date.now();\n\n function escapeHtml(unsafe) {\n return unsafe.toString()\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n this.upload_in_progress = false;\n const linkprev = data;\n // tslint:disable-next-line:max-line-length\n this.decryptedReportDataChanged.report_vulns[index].files.push({ 'data': linkprev, 'title': escapeHtml(name), 'type': escapeHtml(type), 'size': size, 'sha256checksum': sha256check, 'date': today });\n this.afterDetectionNow();\n\n }\n\n uploadAttach(input: HTMLInputElement, dec_data) {\n\n const files = input.files;\n if (files && files.length) {\n this.upload_in_progress = true;\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = (e) => {\n this.checksumfile(fileReader.result, files, dec_data);\n };\n fileReader.readAsDataURL(fileToRead);\n\n }\n\n }\n\n downloadAttach(data, name) {\n\n // convert base64 to raw binary data held in a string\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n const byteString = atob(data.split(',')[1]);\n\n // separate out the mime component\n const mimeString = data.split(',')[0].split(':')[1].split(';')[0];\n\n // write the bytes of the string to an ArrayBuffer\n const ab = new ArrayBuffer(byteString.length);\n\n // create a view into the buffer\n const ia = new Uint8Array(ab);\n\n // set the bytes of the buffer to the correct values\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n\n // write the ArrayBuffer to a blob, and you're done\n const blob = new Blob([ab], { type: mimeString });\n\n const fileName = name;\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', fileName);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n }\n\n\n removeAttach(data, dec_data) {\n const index: number = this.decryptedReportDataChanged.report_vulns.indexOf(dec_data);\n const ind: number = this.decryptedReportDataChanged.report_vulns[index].files.indexOf(data);\n if (ind !== -1) {\n this.decryptedReportDataChanged.report_vulns[index].files.splice(ind, 1);\n this.afterDetectionNow();\n }\n }\n\n\n parselogo(data) {\n const linkprev = 'data:image/png;base64,' + btoa(data);\n this.uploadlogoprev = '<img src=\"' + linkprev + '\" width=\"100px\">';\n this.advlogo = linkprev;\n this.decryptedReportDataChanged.report_settings.report_logo.logo = this.advlogo;\n }\n\n clearlogo() {\n this.decryptedReportDataChanged.report_settings.report_logo.logo = '';\n this.uploadlogoprev = '';\n this.advlogo = '';\n this.advlogo_saved = '';\n console.log('Logo cleared!');\n }\n\n importlogo(input: HTMLInputElement) {\n\n const files = input.files;\n if (files && files.length) {\n /*\n console.log(\"Filename: \" + files[0].name);\n console.log(\"Type: \" + files[0].type);\n console.log(\"Size: \" + files[0].size + \" bytes\");\n */\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = (e) => {\n this.parselogo(fileReader.result);\n\n };\n fileReader.readAsBinaryString(fileToRead);\n }\n\n }\n\n\n TAGadd(event: MatChipInputEvent, dec_data): void {\n\n const value = (event.value || '').trim();\n\n if (value) {\n const index: number = this.decryptedReportDataChanged.report_vulns.indexOf(dec_data);\n this.decryptedReportDataChanged.report_vulns[index].tags.push({name: value});\n }\n\n // Reset the input value\n if (event.input) {\n event.input.value = '';\n }\n\n }\n\n TAGremove(tag: Tags, dec_data): void {\n\n const index: number = this.decryptedReportDataChanged.report_vulns.indexOf(dec_data);\n const ind: number = this.decryptedReportDataChanged.report_vulns[index].tags.indexOf(tag);\n if (ind !== -1) {\n this.decryptedReportDataChanged.report_vulns[index].tags.splice(ind, 1);\n }\n\n }\n\n setReportProfile(profile: any) {\n\n this.uploadlogoprev = '<img src=\"' + profile.logo + '\" width=\"100px\">';\n this.advlogo = profile.logo;\n this.advlogo_saved = '';\n\n this.selectedtheme = profile.theme;\n\n // make changes\n this.decryptedReportDataChanged.researcher = [{reportername: profile.ResName, reportersocial: profile.ResSocial, reporterwww: profile.ResWeb, reporteremail: profile.ResEmail}];\n this.decryptedReportDataChanged.report_settings.report_logo.logo = profile.logo;\n this.decryptedReportDataChanged.report_settings.report_logo.width = profile.logow;\n this.decryptedReportDataChanged.report_settings.report_logo.height = profile.logoh;\n\n this.decryptedReportDataChanged.report_settings.report_theme = profile.theme;\n\n this.decryptedReportDataChanged.report_settings.report_video_embed = profile.video_embed;\n this.decryptedReportDataChanged.report_settings.report_remove_lastpage = profile.remove_lastpage;\n this.decryptedReportDataChanged.report_settings.report_remove_issuestatus = profile.remove_issueStatus;\n this.decryptedReportDataChanged.report_settings.report_remove_issuecvss = profile.remove_issuecvss;\n this.decryptedReportDataChanged.report_settings.report_remove_issuecve = profile.remove_issuecve;\n this.decryptedReportDataChanged.report_settings.report_remove_researchers = profile.remove_researcher;\n this.decryptedReportDataChanged.report_settings.report_changelog_page = profile.remove_changelog;\n this.decryptedReportDataChanged.report_settings.report_remove_issuetags = profile.remove_tags;\n this.decryptedReportDataChanged.report_settings.report_parsing_desc = profile.report_parsing_desc;\n \n }\n\n searchBounty(poc) {\n this.fastsearchBB(poc, true);\n }\n\n fastsearchBB(poc, showsnack) {\n this.BBmsg = 'Please wait, searching...';\n let scope = [];\n this.bugbountylist.forEach(function(item){ \n scope = scope.concat(item.domains);\n });\n\n const regex = /(?:[\\w-]+\\.)+[\\w-]+/g;\n let m;\n const arr = [];\n while ((m = regex.exec(poc.poc)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n \n m.forEach((match) => {\n // get only scope & search\n const findedbounty = scope.find(x => x == match);\n if (findedbounty) {\n this.bugbountylist.forEach(function(item){ \n const findedbounty2 = item.domains.find(x => x == findedbounty);\n if (findedbounty2) {\n arr.push(item);\n }\n });\n\n }\n });\n }\n\n if (showsnack !== false) {\n if (arr.length == 0) {\n this.snackBar.open('No bug-bounty program found :-( !', 'OK', {\n duration: 2000,\n panelClass: ['notify-snackbar-fail']\n });\n } else {\n this.snackBar.open('Found bug-bounty program !!! :-)', 'OK', {\n duration: 2000,\n panelClass: ['notify-snackbar-success']\n });\n }\n }\n\n const uniqueArray = arr.filter(function(item, pos) {\n return arr.indexOf(item) == pos;\n });\n\n const index: number = this.decryptedReportDataChanged.report_vulns.indexOf(poc);\n this.decryptedReportDataChanged.report_vulns[index].bounty = [];\n this.decryptedReportDataChanged.report_vulns[index].bounty = this.decryptedReportDataChanged.report_vulns[index].bounty.concat(uniqueArray);\n\n this.decryptedReportDataChanged.report_vulns[index].bounty = arr.filter(function(item, pos) {\n return arr.indexOf(item) == pos;\n });\n\n this.BBmsg = '';\n \n\n }\n\n redirectBounty(url){\n window.open(url, \"_blank\");\n }\n\n changePoC(poc){\n this.fastsearchBB(poc, false);\n }\n}\n","\n<div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n <div fxLayoutAlign=\"center center\" fxFlex=\"10%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <img title=\"VULNRΞPO REPORT\" width=\"60px\" src=\"assets/issue.png\">\n </div>\n <div fxLayoutAlign=\"start center\" fxFlex=\"90%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <h1 style=\"margin: 0 0 0;\" class=\"mat-display-2\">{{reportdesc?.report_name}} <a\n *ngIf=\"decryptedReportDataChanged\" title=\"Edit report name\" [routerLink]=\"[]\" (click)=\"editreporttitle(reportdesc)\">\n <mat-icon class=\"vertical-align-middle valign-center padding-bottom-3\">edit</mat-icon></a>\n </h1>\n </div>\n</div>\n\n<br><br>\n<!-- Report info -->\n<mat-card>\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>fingerprint</mat-icon>\n </div>\n <mat-card-title style=\"display: flex\">Report information\n \n <button *ngIf=\"decryptedReportDataChanged\" mat-icon-button style=\"width: 25px; height: 25px; flex-shrink: 0; line-height: 5px; border-radius: 70%;\" [matMenuTriggerFor]=\"reportsetting\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #reportsetting=\"matMenu\">\n <a [routerLink]=\"[]\" (click)=\"changesecuritykey(reportdesc.report_id)\" class=\"active-link\" title=\"Change report security key\" mat-menu-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">security</mat-icon> Change report securty key\n </a>\n </mat-menu>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <p>Created: {{reportdesc?.report_createdate | date:'medium'}}</p>\n <p *ngIf=\"reportdesc?.report_lastupdate\">Last Update: {{reportdesc?.report_lastupdate | date:'medium'}}</p>\n <p>Report ID: {{reportdesc?.report_id}}</p>\n <p *ngIf=\"decryptedReportDataChanged\">Report Version: <b>V.{{decryptedReportDataChanged?.report_version}}</b></p>\n <p *ngIf=\"report_decryption_in_progress\">Report is decrypted please wait...<mat-progress-bar style=\"width: 300px;\" color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n <p *ngIf=\"report_encryption_in_progress\">Report is encrypted please wait...<mat-progress-bar style=\"width: 300px;\" color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n </div>\n \n <div *ngIf=\"decryptedReportDataChanged\" style=\"text-align: center;\" fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n\n <span *ngIf=\"reportdesc?.report_lastupdate !== '' && reportdesc?.report_lastupdate !== 0 && lastsavereportdata == ''\">\n {{savemsg}}<br>Last save: <b><i>{{reportdesc?.report_lastupdate | date: 'medium'}}</i></b>\n </span>\n <span *ngIf=\"lastsavereportdata !== ''\">\n {{savemsg}}<br>Last save: <b class=\"active-link\"><i>{{lastsavereportdata | date: 'medium'}}</i></b>\n </span>\n\n <p>\n <button mat-raised-button color=\"primary\" (click)=\"saveReportChanges(reportdesc.report_id)\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">save</mat-icon> Save all changes and release version!\n </button>\n </p>\n <span *ngIf=\"youhaveunsavedchanges\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">notifications_active</mat-icon> You have unsaved changes! <mat-icon class=\"vertical-align-middle padding-bottom-3\" color=\"accent\">arrow_upward</mat-icon>\n </span>\n \n </div>\n \n </div>\n\n\n </mat-card-content>\n</mat-card>\n\n<div *ngIf=\"decryptedReportDataChanged\">\n\n <br>\n <!-- Report details -->\n <mat-card>\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>description</mat-icon>\n </div>\n <mat-card-title>Report details</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field appearance=\"outline\" class=\"example-full-width\" color=\"accent\">\n <mat-label>Scope</mat-label>\n <textarea matInput rows=\"6\" [(ngModel)]=\"decryptedReportDataChanged.report_scope\"\n value=\"{{decryptedReportDataChanged?.report_scope}}\"></textarea>\n <mat-hint>You can use Markdown or HTML. \n <a class=\"active-link\" href=\"javascript:void(0);\" (click)=\"addtablescope()\" title=\"Insert table to scope.\">[T]</a> \n <a class=\"active-link\" href=\"javascript:void(0);\" (click)=\"addcodescope()\" title=\"Insert code to scope.\">[C]</a>\n </mat-hint>\n </mat-form-field>\n </div>\n \n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field appearance=\"outline\" class=\"example-full-width\" color=\"accent\">\n <mat-label>Report summary comment</mat-label>\n <textarea matInput rows=\"1\" [(ngModel)]=\"decryptedReportDataChanged.report_summary\"\n value=\"{{decryptedReportDataChanged?.report_summary}}\"></textarea>\n </mat-form-field>\n </div>\n \n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Research start date\"\n [(ngModel)]=\"decryptedReportDataChanged.report_metadata.starttest\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n \n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput [matDatepicker]=\"pickerend\" placeholder=\"Research end date\"\n [(ngModel)]=\"decryptedReportDataChanged.report_metadata.endtest\">\n <mat-datepicker-toggle matSuffix [for]=\"pickerend\"></mat-datepicker-toggle>\n <mat-datepicker #pickerend></mat-datepicker>\n </mat-form-field>\n </div>\n \n </div>\n\n </div>\n \n </div>\n\n </div>\n \n </div>\n\n </mat-card-content>\n </mat-card>\n\n\n <br>\n <!-- Issues list -->\n <mat-card>\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>bug_report</mat-icon>\n </div>\n <mat-card-title class=\"card-container-left\">\n <span matBadge=\"{{decryptedReportDataChanged.report_vulns.length}}\" matBadgeOverlap=\"false\">Issues</span>\n </mat-card-title>\n <mat-card-title class=\"card-container-right\">\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\" fxLayoutAlign=\"flex-end\">\n\n <div fxFlex.xs=\"100%\">\n <button style=\"width: 100%;\" mat-button (click)=\"import_issues()\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">playlist_add</mat-icon>Import issues\n </button>\n </div>\n \n <div fxFlex.xs=\"100%\">\n\n <mat-button-toggle-group>\n <mat-button-toggle class=\"split-button-1\">\n\n <button style=\"width: 80%;\" *ngIf=\"decryptedReportDataChanged.report_vulns.length != 0\" mat-button\n (click)=\"export_issues(selected3, decryptedReportDataChanged.report_vulns)\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">arrow_downward</mat-icon>Export issues</button>\n\n </mat-button-toggle>\n\n <mat-button-toggle [matMenuTriggerFor]=\"dropdownMenuOne\">\n\n <button class=\"exportbutton\" *ngIf=\"decryptedReportDataChanged.report_vulns.length != 0\" mat-button><mat-icon>arrow_drop_down</mat-icon></button>\n\n </mat-button-toggle>\n </mat-button-toggle-group>\n \n <mat-menu #dropdownMenuOne=\"matMenu\">\n <button mat-menu-item [matMenuTriggerFor]=\"bysev\">Export by Severity</button>\n </mat-menu>\n\n <mat-menu #bysev=\"matMenu\">\n <button mat-menu-item (click)=\"export_by_severity(decryptedReportDataChanged.report_vulns, 'Critical')\">Critical</button>\n <button mat-menu-item (click)=\"export_by_severity(decryptedReportDataChanged.report_vulns, 'High')\">High</button>\n <button mat-menu-item (click)=\"export_by_severity(decryptedReportDataChanged.report_vulns, 'Medium')\">Medium</button>\n <button mat-menu-item (click)=\"export_by_severity(decryptedReportDataChanged.report_vulns, 'Low')\">Low</button>\n <button mat-menu-item (click)=\"export_by_severity(decryptedReportDataChanged.report_vulns, 'Info')\">Info</button>\n </mat-menu>\n </div>\n \n <div fxFlex.xs=\"100%\">\n\n <button *ngIf=\"decryptedReportDataChanged.report_vulns.length > 1\" mat-button [matMenuTriggerFor]=\"menu\" color=\"accent\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">swap_vert</mat-icon> Sort by</button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"sortbyseverity()\">Severity</button>\n <button mat-menu-item (click)=\"sortbycvss()\">CVSS</button>\n </mat-menu>\n\n </div>\n \n </div>\n\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <mat-accordion cdkDropList (cdkDropListDropped)=\"drop($event)\" multi=\"true\">\n\n <mat-expansion-panel class=\"mat-elevation-z9\"\n *ngFor=\"let dec_data of decryptedReportDataChanged.report_vulns; let i=index\" (opened)=\"panelOpenState = true\"\n (closed)=\"panelOpenState = false\" cdkDrag>\n\n\n <mat-expansion-panel-header cdkDragHandle>\n <mat-panel-title fxLayoutAlign=\"start center\">\n <div style=\"display: block ruby;\">\n <mat-checkbox style=\"margin-left: 5px;\" [(ngModel)]=\"selected3[i]\" (change)=\"toggle()\" (click)=\"$event.stopPropagation()\"></mat-checkbox> \n <span\n class=\"label {{dec_data.severity | lowercase}}\">{{dec_data.severity}}</span> {{dec_data.title}}\n <a *ngIf=\"decryptedReportDataChanged\" title=\"Edit issue title\" [routerLink]=\"[]\"\n (click)=\"editissuetitle(dec_data);$event.stopPropagation();\">\n <mat-icon class=\"vertical-align-middle valign-issues-center padding-bottom-3\">edit</mat-icon>\n </a>\n </div>\n </mat-panel-title>\n <mat-panel-description fxLayoutAlign=\"center center\">\n <span style=\"pointer-events:none;\">\n <mat-chip-list>\n <mat-chip *ngFor=\"let tag of dec_data.tags\" [selectable]=\"false\" ngDefaultControl>\n {{tag.name}}\n </mat-chip>\n </mat-chip-list> \n </span>\n {{ (dec_data.cve.length>30) ? (dec_data.cve | slice:0:30)+'..':(dec_data.cve) }}\n </mat-panel-description>\n\n <mat-panel-description *ngIf=\"dec_data?.status\" fxLayoutAlign=\"end center\">\n <div *ngIf=\"dec_data?.bounty\">\n <mat-icon *ngIf=\"dec_data?.bounty.length > 0\" title=\"Found bug-bounty program related to the issue\" color=\"accent\">attach_money</mat-icon>\n </div>\n <div *ngIf=\"dec_data?.status === 1\">\n <mat-icon style=\"color:red\" title=\"Issue status: Open (Waiting for review)\" class=\"vertical-align-middle valign-issues-center padding-bottom-3\">report</mat-icon>\n </div>\n <div *ngIf=\"dec_data?.status === 2\">\n <mat-icon style=\"color:yellow\" title=\"Issue status: Fix In Progress\" class=\"vertical-align-middle valign-issues-center padding-bottom-3\">warning</mat-icon>\n </div>\n <div *ngIf=\"dec_data?.status === 3\">\n <mat-icon style=\"color:green\" title=\"Issue status: Fixed\" class=\"vertical-align-middle valign-issues-center padding-bottom-3\">check_circle</mat-icon>\n </div>\n <div *ngIf=\"dec_data?.status === 4\">\n <mat-icon style=\"color:grey\" title=\"Issue status: Won't Fix\" class=\"vertical-align-middle valign-issues-center padding-bottom-3\">check_circle</mat-icon>\n </div>\n </mat-panel-description>\n\n </mat-expansion-panel-header>\n <mat-expansion-panel-header *cdkDragPlaceholder></mat-expansion-panel-header>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"70%\" fxFlex.sm=\"70%\" fxFlex.xs=\"100%\">\n <mat-form-field appearance=\"outline\" class=\"example-full-width\" color=\"accent\">\n <mat-label>Proof of Concept</mat-label>\n <textarea [(ngModel)]=\"dec_data.poc\" (change)=\"changePoC(dec_data)\" matInput rows=\"8\"></textarea>\n </mat-form-field>\n </div>\n \n <div fxFlex=\"30%\" fxFlex.sm=\"30%\" fxFlex.xs=\"100%\">\n\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <mat-select placeholder=\"Severity\" [(value)]=\"dec_data.severity\" [ngModel]=\"dec_data.severity\" (ngModelChange)=\"doStats()\">\n <mat-option *ngFor=\"let sev of dataSourceforseverity\" [value]=\"sev.severity\">\n {{sev.severity}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <mat-select placeholder=\"Issue status\" [(value)]=\"dec_data.status\" [ngModel]=\"dec_data.status\" (ngModelChange)=\"doStats()\">\n <mat-option *ngFor=\"let issuestat of issueStatus\" [value]=\"issuestat.value\">\n {{issuestat.status}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Find date\" [(ngModel)]=\"dec_data.date\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n\n </div>\n\n </div>\n \n </div>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxLayout=\"row wrap\" fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field appearance=\"outline\" class=\"example-full-width\" color=\"accent\">\n <mat-label>Description</mat-label>\n <textarea [(ngModel)]=\"dec_data.desc\" matInput rows=\"6\"></textarea>\n </mat-form-field>\n </div>\n \n <div *ngIf=\"dec_data.tags\" fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field appearance=\"outline\" class=\"example-tags-list\" color=\"accent\">\n <mat-label>TAGs</mat-label>\n <mat-chip-list #tagList aria-label=\"Tags\">\n <mat-chip *ngFor=\"let tag of dec_data.tags\" [(ngModel)]=\"dec_data.tags\" [selectable]=\"selectable\"\n [removable]=\"removable\" (removed)=\"TAGremove(tag, dec_data)\" ngDefaultControl>\n {{tag.name}}\n <mat-icon matChipRemove *ngIf=\"removable\">cancel</mat-icon>\n </mat-chip>\n <input placeholder=\"New tag...\"\n [matChipInputFor]=\"tagList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"TAGadd($event, dec_data)\">\n </mat-chip-list>\n </mat-form-field>\n </div>\n\n </div>\n \n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-form-field appearance=\"outline\" class=\"example-full-width\" color=\"accent\">\n <mat-label>References</mat-label>\n <textarea [(ngModel)]=\"dec_data.ref\" matInput rows=\"2\"></textarea>\n </mat-form-field>\n </div>\n \n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"CVSS\" [(ngModel)]=\"dec_data.cvss\" value=\"{{dec_data.cvss}}\">\n <button mat-button (click)=\"openDialogCVSS(dec_data)\" style=\"line-height: 25px;\" color=\"accent\" matSuffix><mat-icon matSuffix>add_circle_outline</mat-icon> CVSS calculator</button>\n </mat-form-field>\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"50%\" fxFlex.xs=\"100%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"CVE\" [(ngModel)]=\"dec_data.cve\" value=\"{{dec_data.cve}}\">\n <button mat-button (click)=\"openDialogCVE(dec_data)\" style=\"line-height: 25px;\" color=\"accent\" matSuffix><mat-icon matSuffix>explore</mat-icon> CVE Info</button>\n </mat-form-field>\n </div>\n\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"5px grid\" *ngIf=\"dec_data?.bounty\" fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <div style=\"display: inline;text-align: end;\" fxFlex=\"80%\" fxFlex.sm=\"80%\" fxFlex.xs=\"100%\">\n <div *ngIf=\"BBmsg != ''\">\n <p>{{BBmsg}}<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></p>\n </div>\n <button *ngFor=\"let bounty of dec_data?.bounty\" mat-stroked-button color=\"accent\" (click)=\"redirectBounty(bounty?.url)\" title=\"{{bounty?.url}}\"><mat-icon>attach_money</mat-icon>{{bounty?.name}}</button>\n </div>\n\n <div fxLayoutAlign=\"end start\" fxFlex=\"20%\" fxFlex.sm=\"20%\" fxFlex.xs=\"100%\">\n <button mat-raised-button color=\"primary\" matBadge=\"{{dec_data?.bounty.length}}\" matBadgeColor=\"accent\" (click)=\"searchBounty(dec_data)\" title=\"Search for bug bounty program\">\n <mat-icon>attach_money</mat-icon><mat-icon>search</mat-icon> \n </button>\n </div>\n \n </div>\n \n </div>\n\n </div>\n \n </div>\n\n\n <mat-action-row align=\"end\">\n\n\n <button mat-fab (click)=\"fileuploadInput.click()\" color=\"primary\" title=\"Upload file\">\n <i class=\"material-icons\">attach_file</i>\n <input type=\"file\" #fileuploadInput id=\"file\" accept=\".*\" (change)=\"uploadAttach($event.target, dec_data)\"\n style=\"display:none;\">\n </button>\n\n <div fxFlex></div>\n\n <span align=\"start\" *ngIf=\"upload_in_progress\">Upload please wait...<mat-progress-bar style=\"width: 300px;\" color=\"accent\" mode=\"indeterminate\"></mat-progress-bar></span>\n\n <div fxFlex></div>\n \n <button mat-button color=\"warn\" (click)=\"removeIssiue(dec_data)\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\" matSuffix>remove_circle</mat-icon> REMOVE\n </button>\n\n </mat-action-row>\n\n <div fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutGap=\"10px grid\">\n <div *ngFor=\"let key of dec_data.files\">\n\n <div *ngIf=\"key.type.includes('image')\" class=\"mat-elevation-z4\" style=\"padding: 5px; text-align: center;\">\n <img [src]=\"key.data\" title=\"{{key.title}}\" width=\"200px\" height=\"100px\"><br>\n <a [routerLink]=\"[]\" (click)=\"downloadAttach(key.data, key.title)\" title=\"Download file\">\n <mat-hint><mat-icon class=\"vertical-align-middle padding-bottom-3\" matSuffix>get_app</mat-icon> {{key.title}}</mat-hint>\n </a> <a style=\"float: right;\" [routerLink]=\"[]\" (click)=\"removeAttach(key, dec_data)\"\n title=\"Remove file\">\n <mat-icon style=\"color: red\">delete_forever</mat-icon>\n </a>\n </div>\n <div *ngIf=\"!key.type.includes('image')\" class=\"mat-elevation-z4\" style=\"padding: 5px; text-align: center;\">\n <img src=\"/assets/file.png\" title=\"{{key.title}}\" width=\"80px\" height=\"100px\"><br>\n <a [routerLink]=\"[]\" (click)=\"downloadAttach(key.data, key.title)\" title=\"Download file\">\n <mat-hint><mat-icon class=\"vertical-align-middle padding-bottom-3\" matSuffix>get_app</mat-icon> {{key.title}}</mat-hint>\n </a> <a style=\"float: right;\" [routerLink]=\"[]\" (click)=\"removeAttach(key, dec_data)\"\n title=\"Remove file\">\n <mat-icon style=\"color: red\">delete_forever</mat-icon>\n </a>\n </div>\n </div>\n </div>\n\n </mat-expansion-panel>\n\n </mat-accordion>\n <br>\n <div *ngIf=\"pok == 1\"><a class=\"active-link\" [routerLink]=\"[]\" (click)=\"selectall()\">Select all</a> / <a\n class=\"active-link\" [routerLink]=\"[]\" (click)=\"deselectall()\">Unselect all</a> <button\n title=\"Remove selected items\" mat-icon-button color=\"warn\" (click)=\"removeSelecteditems(selected3)\">\n <mat-icon>delete_forever</mat-icon>\n </button></div>\n\n <div class=\"banner\">\n <div class=\"center-me\"><button class=\"mat-elevation-z9\" mat-raised-button color=\"accent\" (click)=\"addissue()\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">add</mat-icon> Add custom issue\n </button></div>\n </div>\n </mat-card-content>\n\n </mat-card>\n\n <br>\n <!-- Stats -->\n <mat-card *ngIf=\"decryptedReportDataChanged.report_vulns.length !== 0\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>insert_chart</mat-icon>\n </div>\n <mat-card-title>Statistics</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"40%\" fxFlex.xs=\"100%\">\n <table mat-table [dataSource]=\"dataSourceforseverity\" id=\"stats\" class=\"mat-elevation-z8\">\n\n <!-- Severity Column -->\n <ng-container matColumnDef=\"severity\">\n <th mat-header-cell *matHeaderCellDef> Severity </th>\n <td mat-cell *matCellDef=\"let element\"> <span\n class=\"label {{element.severity | lowercase}}\">{{element.severity}}</span> </td>\n <td mat-footer-cell *matFooterCellDef> Total </td>\n </ng-container>\n\n <!-- Count Column -->\n <ng-container matColumnDef=\"count\">\n <th mat-header-cell *matHeaderCellDef> Number </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.count}} </td>\n <td mat-footer-cell *matFooterCellDef> {{ decryptedReportDataChanged.report_vulns.length }} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedSeverityColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedSeverityColumns;\"></tr>\n <tr mat-footer-row *matFooterRowDef=\"displayedSeverityColumns\"></tr>\n </table>\n </div>\n \n <div fxFlex=\"50%\" fxFlex.sm=\"60%\" fxFlex.xs=\"100%\">\n <div style=\"display: block\">\n <canvas baseChart [data]=\"pieChartData\" [labels]=\"pieChartLabels\" [colors]=\"chartcolors\"\n [chartType]=\"pieChartType\" (chartHover)=\"chartHovered($event)\"\n (chartClick)=\"chartClicked($event)\"></canvas>\n </div>\n </div>\n \n </div>\n\n </mat-card-content>\n </mat-card>\n\n <br>\n <!-- Researcher -->\n <mat-card>\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>face</mat-icon>\n </div>\n <mat-card-title>Researcher \n <button mat-icon-button style=\"width: 25px; height: 25px; flex-shrink: 0; line-height: 5px; border-radius: 70%;\" [matMenuTriggerFor]=\"researchermenu\"><mat-icon>more_vert</mat-icon></button>\n <mat-menu #researchermenu=\"matMenu\">\n <a [routerLink]=\"[]\" (click)=\"addresearcher()\" class=\"active-link\" title=\"Add new researcher\" mat-menu-item><mat-icon class=\"vertical-align-middle\">add</mat-icon> Add researcher</a>\n </mat-menu>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <div *ngFor=\"let researchers of decryptedReportDataChanged.researcher\" fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"24%\" fxFlex.sm=\"49%\" fxFlex.xs=\"99%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Name\" [(ngModel)]=\"researchers.reportername\"\n value=\"{{researchers.reportername}}\">\n <mat-icon matSuffix>person_pin</mat-icon>\n </mat-form-field>\n </div>\n\n <div fxFlex=\"24%\" fxFlex.sm=\"49%\" fxFlex.xs=\"99%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"E-mail\" [(ngModel)]=\"researchers.reporteremail\"\n value=\"{{researchers.reporteremail}}\">\n <mat-icon matSuffix>email</mat-icon>\n </mat-form-field>\n </div>\n \n <div fxFlex=\"24%\" fxFlex.sm=\"49%\" fxFlex.xs=\"99%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Social links\"\n [(ngModel)]=\"researchers.reportersocial\"\n value=\"{{researchers.reportersocial}}\">\n <mat-icon matSuffix>share</mat-icon>\n </mat-form-field>\n </div>\n \n <div fxFlex=\"24%\" fxFlex.sm=\"44%\" fxFlex.xs=\"94%\">\n <mat-form-field class=\"example-full-width\" color=\"accent\">\n <input matInput placeholder=\"Website\" [(ngModel)]=\"researchers.reporterwww\"\n value=\"{{researchers.reporterwww}}\">\n <mat-icon matSuffix>public</mat-icon>\n </mat-form-field>\n </div>\n\n <div fxFlex=\"4%\" fxFlex.sm=\"4%\" fxFlex.xs=\"4%\">\n <button mat-icon-button color=\"warn\" (click)=\"removeresearcher(researchers)\" title=\"Remove researcher\">\n <mat-icon>delete_forever</mat-icon>\n </button>\n </div>\n\n </div>\n\n </mat-card-content>\n\n\n\n </mat-card>\n\n <br>\n <!-- changelog -->\n <mat-card>\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>track_changes</mat-icon>\n </div>\n <mat-card-title style=\"display: flex\">Changelog\n \n <button mat-icon-button style=\"width: 25px; height: 25px; flex-shrink: 0; line-height: 5px; border-radius: 70%;\" [matMenuTriggerFor]=\"changelogmenu\"><mat-icon>more_vert</mat-icon></button>\n <mat-menu #changelogmenu=\"matMenu\">\n <a [routerLink]=\"[]\" (click)=\"addchangelog()\" class=\"active-link\" title=\"Add event to changelog\" mat-menu-item><mat-icon class=\"vertical-align-middle\">add</mat-icon> Add event to changelog</a>\n </mat-menu>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <table *ngIf=\"listchangelog != 0\" mat-table [dataSource]=\"dataSource\" class=\"changelogTab\" matSort matSortActive=\"date\"\n matSortDirection=\"desc\" class=\"mat-elevation-z8\">\n\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Date </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.date | date:'medium'}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"desc\">\n <th mat-header-cell *matHeaderCellDef> Description </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.desc}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"settings\">\n <th mat-header-cell *matHeaderCellDef> <mat-icon title=\"Settings\">settings</mat-icon> </th>\n <td mat-cell *matCellDef=\"let element\">\n\n <button mat-icon-button style=\"width: 25px; height: 25px; flex-shrink: 0; line-height: 5px; border-radius: 70%;\" [matMenuTriggerFor]=\"changelogsettings\"><mat-icon>more_vert</mat-icon></button>\n <mat-menu #changelogsettings=\"matMenu\">\n <a [routerLink]=\"[]\" (click)=\"editchangelog(element)\" class=\"active-link\" title=\"Edit event\" mat-menu-item><mat-icon class=\"vertical-align-middle\">edit</mat-icon> Edit event</a>\n <a [routerLink]=\"[]\" (click)=\"removefromchangelog(element)\" class=\"active-link\" title=\"Remove event\" mat-menu-item><mat-icon class=\"vertical-align-middle\">delete_forever</mat-icon> Remove event</a>\n </mat-menu>\n\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10\">\n <div fxFlex=\"30%\" fxFlex.sm=\"20%\" fxFlex.xs=\"10%\">\n\n <div *ngIf=\"listchangelog == 0\">\n <p>Your changelog list is empty :-( </p>\n </div>\n\n </div>\n\n <div fxFlex=\"70%\" fxFlex.sm=\"80%\" fxFlex.xs=\"90%\" *ngIf=\"listchangelog != 0\">\n <p>\n <mat-paginator [pageSizeOptions]=\"[5, 15, 30]\" showFirstLastButtons></mat-paginator>\n </p>\n </div>\n\n </div>\n\n </mat-card-content>\n </mat-card>\n <br>\n\n <!-- Report Settings -->\n <mat-card *ngIf=\"decryptedReportDataChanged\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>settings</mat-icon>\n </div>\n\n <mat-card-title style=\"display: flex\" fxLayoutAlign=\"start\">Report Settings \n \n <button mat-icon-button style=\"width: 25px; height: 25px; flex-shrink: 0; line-height: 5px; border-radius: 70%;\" [matMenuTriggerFor]=\"Settingsmenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #Settingsmenu=\"matMenu\">\n <a [routerLink]=\"[]\" (click)=\"addCustomcontent(decryptedReportDataChanged)\" class=\"active-link\" title=\"Add custom content to report\" mat-menu-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">add_circle</mat-icon> Add custom content to report\n </a>\n <button *ngIf=\"ReportProfilesList.length > 0\" mat-menu-item [matMenuTriggerFor]=\"reportProfiles\">Select settings profile</button>\n </mat-menu>\n <mat-menu #reportProfiles=\"matMenu\">\n <span *ngFor=\"let profile of ReportProfilesList\">\n <button mat-menu-item (click)=\"setReportProfile(profile)\">{{profile.profile_name}}</button>\n </span>\n </mat-menu>\n </mat-card-title>\n\n </mat-card-header>\n <mat-card-content>\n\n\n <mat-tab-group [selectedIndex]=\"0\" dynamicHeight color=\"accent\">\n <mat-tab>\n <ng-template mat-tab-label>\n <mat-icon class=\"example-tab-icon\">image</mat-icon>\n Logo\n </ng-template>\n <div style=\"padding: 10px!important;\">\n\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"100%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"start center\">\n\n <button mat-flat-button style=\"margin-right: 10px!important;\" (click)=\"fileuploadInput.click()\" color=\"primary\" title=\"Upload report logo\">\n <i class=\"material-icons\">attach_file</i> HTML Report logo\n <input type=\"file\" #fileuploadInput id=\"file\" accept=\"image/*\" (change)=\"importlogo($event.target)\" name=\"myfiles\" style=\"display:none;\">\n </button>\n\n <img *ngIf=\"advlogo_saved\" src=\"{{advlogo_saved}}\" width=\"100px\">\n <div [innerHTML]=\"uploadlogoprev\"></div>\n\n <button *ngIf=\"advlogo_saved || advlogo\" mat-icon-button color=\"warn\" (click)=\"clearlogo()\" title=\"Remove report logo\">\n <mat-icon>delete_forever</mat-icon>\n </button>\n\n <div fxLayout=\"column\" style=\"margin-top: 5px; height: 125px;\">\n <mat-form-field appearance=\"outline\" color=\"accent\" [style.width.px]=\"75\">\n <mat-label>Width (px)</mat-label>\n <input matInput [(ngModel)]=\"decryptedReportDataChanged.report_settings.report_logo.width\" value=\"{{decryptedReportDataChanged.report_settings.report_logo.width}}\">\n </mat-form-field>\n \n <mat-form-field appearance=\"outline\" color=\"accent\" [style.width.px]=\"75\">\n <mat-label>Height (px)</mat-label>\n <input matInput [(ngModel)]=\"decryptedReportDataChanged.report_settings.report_logo.height\" value=\"{{decryptedReportDataChanged.report_settings.report_logo.height}}\">\n </mat-form-field>\n </div>\n\n </div>\n \n </div>\n\n </div>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <mat-icon class=\"example-tab-icon\">palette</mat-icon>\n Theme colors\n </ng-template>\n <div style=\"padding: 10px!important;\">\n <mat-form-field appearance=\"fill\" color=\"accent\">\n <mat-label>HTML theme colors:</mat-label>\n <mat-select (selectionChange)=\"themechange($event)\" [(value)]=\"selectedtheme\">\n <mat-option value=\"white\">White (default)</mat-option>\n <mat-option value=\"dark\">Dark</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n <mat-icon class=\"example-tab-icon\">tune</mat-icon>\n Other settings\n </ng-template>\n <div style=\"padding: 10px!important;\">\n\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"25%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_video_embed\" (change)=\"embedVideo($event)\">Embed video in report<br>(MP4, WebM, and OGG)</mat-checkbox>\n </div>\n <div fxFlex=\"25%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_parsing_desc\" (change)=\"parsingdescnewline($event)\">(Parsing: Description)<br>Add new line</mat-checkbox>\n </div>\n <div fxFlex=\"25%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_changelog_page\" (change)=\"removechangelogpage($event)\">Remove Changelog</mat-checkbox><br>\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_remove_issuestatus\" (change)=\"removeIssuestatus($event)\">Remove Issue status</mat-checkbox><br>\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_remove_issuecvss\" (change)=\"removeIssuecvss($event)\">Remove Issue CVSS</mat-checkbox><br>\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_remove_issuecve\" (change)=\"removeIssuecve($event)\">Remove Issue CVE</mat-checkbox><br>\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_remove_researchers\" (change)=\"removeResearchers($event)\">Remove Researcher</mat-checkbox>\n </div>\n \n <div fxFlex=\"25%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_remove_issuetags\" (change)=\"removetagsfromreport($event)\">Remove TAGs</mat-checkbox>\n <mat-checkbox [checked]=\"decryptedReportDataChanged.report_settings.report_remove_lastpage\" (change)=\"removeGeninfo($event)\">Remove Last page<br>(Generated by VULNRΞPO)</mat-checkbox>\n </div>\n \n </div>\n\n </div>\n </mat-tab>\n\n </mat-tab-group>\n \n\n\n </mat-card-content>\n </mat-card>\n <br>\n\n <!-- Download -->\n <mat-card *ngIf=\"decryptedReportDataChanged\">\n <mat-card-header>\n <div mat-card-avatar>\n <mat-icon>cloud_download</mat-icon>\n </div>\n <mat-card-title>Download</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"7%\" fxFlex.sm=\"7%\" fxFlex.xs=\"7%\">\n <mat-icon title=\"Encrypted report\" class=\"vertical-align-middle padding-bottom-3\">enhanced_encryption</mat-icon>\n </div>\n \n <div fxFlex=\"60%\" fxFlex.sm=\"80%\" fxFlex.xs=\"100%\">\n <button style=\"width: 100%;\" class=\"mat-elevation-z9\" mat-raised-button color=\"accent\"\n (click)=\"shareReport(report_info.report_id)\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">share</mat-icon> Share encrypted\n </button>\n </div>\n \n </div>\n\n\n </div>\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <div fxLayout=\"row wrap\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"7%\" fxFlex.sm=\"7%\" fxFlex.xs=\"7%\">\n <mat-icon title=\"Unencrypted report\" class=\"vertical-align-middle padding-bottom-3\">no_encryption</mat-icon>\n </div>\n\n <div fxFlex=\"60%\" fxFlex.sm=\"40%\" fxFlex.xs=\"100%\">\n\n <button mat-raised-button style=\"width: 100%;\" color=\"warn\" [matMenuTriggerFor]=\"aboveMenu\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">file_download</mat-icon> Download decrypted</button>\n <mat-menu #aboveMenu=\"matMenu\" yPosition=\"above\">\n <button mat-menu-item (click)=\"DownloadHTML(decryptedReportDataChanged,report_info,issueStatus)\"><mat-icon>description</mat-icon>HTML</button>\n <button mat-menu-item (click)=\"downloadASCII(decryptedReportDataChanged,report_info)\"><mat-icon>text_format</mat-icon>TEXT</button>\n </mat-menu>\n\n </div>\n\n \n </div>\n\n\n\n </div>\n\n\n\n </div>\n\n </mat-card-content>\n </mat-card>\n\n <br>\n <br>\n</div>\n<br>","import { Injectable } from '@angular/core';\n// Author: https://gist.github.com/leewinder/a1f6bc5100fc2573b47bb2e0b7937f34\n\nexport const enum PasswordCheckStrength {\n Short,\n Common,\n Weak,\n Ok,\n Strong\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SeckeyValidatorService {\n\n constructor() { }\n\n public static get MinimumLength(): number {\n return 8;\n }\n private commonPasswordPatterns = /passw.*|12345.*|09876.*|qwert.*|asdfg.*|zxcvb.*/;\n\n public isPasswordCommon(password: string): boolean {\n return this.commonPasswordPatterns.test(password);\n }\n\n public checkPasswordStrength(password: string): PasswordCheckStrength {\n\n let numberOfElements = 0;\n numberOfElements = /.*[a-z].*/.test(password) ? ++numberOfElements : numberOfElements; // Lowercase letters\n numberOfElements = /.*[A-Z].*/.test(password) ? ++numberOfElements : numberOfElements; // Uppercase letters\n numberOfElements = /.*[0-9].*/.test(password) ? ++numberOfElements : numberOfElements; // Numbers\n numberOfElements = /[^a-zA-Z0-9]/.test(password) ? ++numberOfElements : numberOfElements; // Special characters (inc. space)\n\n let currentPasswordStrength = 0;\n if (password === null || password.length < SeckeyValidatorService.MinimumLength) {\n currentPasswordStrength = PasswordCheckStrength.Short;\n } else if (this.isPasswordCommon(password) === true) {\n currentPasswordStrength = PasswordCheckStrength.Common;\n } else if (numberOfElements === 0 || numberOfElements === 1 || numberOfElements === 2) {\n currentPasswordStrength = PasswordCheckStrength.Weak;\n } else if (numberOfElements === 3) {\n currentPasswordStrength = PasswordCheckStrength.Ok;\n } else {\n currentPasswordStrength = PasswordCheckStrength.Strong;\n }\n return currentPasswordStrength;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { IndexeddbService } from '../indexeddb.service';\nimport { Router } from '@angular/router';\nimport { ApiService } from '../api.service';\nimport { DialogApikeyComponent } from '../dialog-apikey/dialog-apikey.component';\nimport { DialogApiaddComponent } from '../dialog-apiadd/dialog-apiadd.component';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { DialogAddreportprofileComponent } from '../dialog-addreportprofile/dialog-addreportprofile.component';\n\nexport interface ApiList {\n apikey: string;\n apiname: string;\n apiurl: string;\n status: string;\n created: string;\n expires: string;\n current_storage: number;\n}\n\n@Component({\n selector: 'app-settings',\n templateUrl: './settings.component.html',\n styleUrls: ['./settings.component.scss']\n})\n\nexport class SettingsComponent implements OnInit {\n color = 'accent';\n info = '';\n listkey = false;\n checked = false;\n hide = true;\n remain: any;\n tryconnectdb = false;\n wipechecked = false;\n enableAPI = true;\n wipehide = false;\n showregapi = true;\n wipeall = false;\n apiconneted = false;\n user = '';\n today = new Date().toISOString().slice(0, 10);\n createdate: any;\n pro: any;\n expirydate: any;\n current_storage: any;\n max_storage: any;\n status = 'Not connected!';\n reportProfileList = [];\n\n ReportProfilesdisplayedColumns: string[] = ['profile_name', 'profile_settings'];\n ReportProfilesdataSource = new MatTableDataSource([]);\n\n displayedColumns: string[] = ['apiname', 'status', 'created', 'expires', 'storage', 'settings'];\n dataSource = new MatTableDataSource([]);\n\n\n constructor(public router: Router, private indexeddbService: IndexeddbService, private apiService: ApiService,\n public dialog: MatDialog) { }\n\n ngOnInit() {\n\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n\n console.log('Key found');\n this.apiconnect(localkey);\n this.listkey = true;\n this.showregapi = false;\n\n } else {\n\n this.indexeddbService.retrieveAPIkey().then(ret => {\n if (ret) {\n this.tryconnectdb = true;\n this.listkey = true;\n this.showregapi = false;\n \n if (sessionStorage.getItem('hidedialog') !== 'true') {\n setTimeout(_ => this.openDialog(ret));\n }\n\n } else {\n this.showregapi = true;\n }\n });\n\n }\n\n this.getReportProfiles();\n\n }\n \n wipeDatachanged() {\n\n if (this.wipechecked === true) {\n this.wipehide = true;\n }\n if (this.wipechecked === false) {\n this.wipehide = false;\n }\n\n }\n\n\n wipealldata() {\n indexedDB.deleteDatabase('vulnrepo-settings');\n indexedDB.deleteDatabase('vulnrepo-api');\n indexedDB.deleteDatabase('vulnrepo-db');\n window.location.href = window.location.protocol + '//' + window.location.host;\n }\n\n dumpallmyreports() {\n\n this.indexeddbService.getReports().then(data => {\n if (data) {\n // download dump\n const blob = new Blob([JSON.stringify(data)], { type: 'text/plain' });\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', 'Dumped My Reports (vulnrepo.com).txt');\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n } else {\n console.log('DB read error');\n }\n\n });\n\n }\n\n parseandrestorereports(array) {\n const parsed = JSON.parse(array);\n for (let _i = 0; _i < parsed.length; _i++) {\n const num = parsed[_i];\n console.log(num);\n this.indexeddbService.importReportfromfileSettings(num);\n\n if (_i + 1 === parsed.length) {\n this.router.navigate(['/my-reports']);\n }\n }\n\n\n }\n\n restoreMyReports(input: HTMLInputElement) {\n\n const files = input.files;\n if (files && files.length) {\n\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = (e) => {\n this.parseandrestorereports(fileReader.result);\n\n };\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n\n }\n\n gettimebetweendates(date11, date22) {\n let date1 = date11;\n let date2 = date22;\n date1 = date1.split('-');\n date2 = date2.split('-');\n date1 = new Date(date1[0], date1[1], date1[2]);\n date2 = new Date(date2[0], date2[1], date2[2]);\n const oneDay = 24 * 60 * 60 * 1000;\n const diffDays = Math.round(Math.abs((date1 - date2) / oneDay));\n return diffDays;\n }\n\n apiconnect(vault: string) {\n\n const elementlist: ApiList[] = [];\n const vaultobj = JSON.parse(vault);\n\n vaultobj.forEach( (element) => {\n\n if (element.apikey !== undefined && element.apikey !== '') {\n\n this.apiService.APISend(element.value, element.apikey, 'apiconnect', '').then(resp => {\n if (resp !== undefined && resp !== null && resp.AUTH === 'OK') {\n this.apiconneted = true;\n this.listkey = false;\n this.createdate = resp.CREATEDATE;\n this.expirydate = resp.EXPIRYDATE;\n this.remain = this.gettimebetweendates(this.today, this.expirydate);\n this.user = resp.WELCOME;\n this.max_storage = resp.MAX_STORAGE;\n this.current_storage = resp.CURRENT_STORAGE;\n const stor = this.current_storage / this.max_storage * 100;\n\n // tslint:disable-next-line:max-line-length\n const elementdata = { apikey: element.apikey, apiname: element.viewValue, apiurl: element.value, status: 'Connected', created: resp.CREATEDATE, expires: resp.EXPIRYDATE + ' (' + this.remain + ' days left)', current_storage: stor };\n elementlist.push(elementdata);\n this.dataSource.data = elementlist;\n this.tryconnectdb = false;\n } else {\n\n if (resp === null) {\n // tslint:disable-next-line:max-line-length\n const elementdata = { apikey: element.apikey, apiname: element.viewValue, apiurl: element.value, status: 'Not connected: wrong API key?', created: '', expires: '', current_storage: 0 };\n elementlist.push(elementdata);\n this.dataSource.data = elementlist;\n } else {\n // tslint:disable-next-line:max-line-length\n const elementdata = { apikey: element.apikey, apiname: element.viewValue, apiurl: element.value, status: 'Not connected', created: '', expires: '', current_storage: 0 };\n elementlist.push(elementdata);\n this.dataSource.data = elementlist;\n }\n\n }\n\n }).catch(error => {\n console.log('API error: ', error);\n });\n }\n\n });\n\n\n sessionStorage.setItem('VULNREPO-API', JSON.stringify(vaultobj));\n\n }\n\n removeapikey() {\n\n indexedDB.deleteDatabase('vulnrepo-api');\n this.showregapi = true;\n this.listkey = false;\n this.apiconneted = false;\n this.tryconnectdb = false;\n this.status = 'Not connected!';\n }\n\n apidisconnect() {\n sessionStorage.removeItem('VULNREPO-API');\n this.showregapi = false;\n this.listkey = true;\n this.apiconneted = false;\n this.status = 'Not connected!';\n this.tryconnectdb = true;\n }\n\n tryconnect() {\n this.indexeddbService.retrieveAPIkey().then(ret => {\n if (ret) {\n this.listkey = true;\n this.showregapi = false;\n this.tryconnectdb = true;\n setTimeout(_ => this.openDialog(ret));\n } else {\n this.showregapi = true;\n }\n });\n }\n\n openDialog(data: any): void {\n\n const dialogRef = this.dialog.open(DialogApikeyComponent, {\n width: '400px',\n disableClose: true,\n data: data\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The security key dialog was closed');\n if (result) {\n this.apiconnect(result);\n if (data) {\n this.indexeddbService.saveKEYinDB(data).then(ret => {});\n }\n this.tryconnectdb = false;\n this.showregapi = false;\n }\n\n });\n\n }\n\n openDialogAPIADD(): void {\n\n const dialogRef = this.dialog.open(DialogApiaddComponent, {\n width: '400px',\n disableClose: true,\n data: ''\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The security key dialog was closed');\n if (result === 'OK') {\n this.apiconneted = true;\n this.tryconnectdb = false;\n this.listkey = false;\n this.showregapi = false;\n\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n this.apiconnect(localkey);\n }\n\n\n }\n\n });\n\n }\n\n openDialogAPIaddtovault(): void {\n\n const dialogRef = this.dialog.open(DialogApikeyComponent, {\n width: '400px',\n disableClose: true,\n data: 'addtovault'\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n\n const dialogRef2 = this.dialog.open(DialogApiaddComponent, {\n width: '400px',\n disableClose: true,\n data: result\n });\n\n dialogRef2.afterClosed().subscribe(resul => {\n console.log('The security key dialog was closed');\n if (resul === 'OK') {\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n this.apiconnect(localkey);\n }\n }\n\n });\n\n }\n });\n\n }\n\n openDialogAPIremove(drem): any {\n\n const dialogRef = this.dialog.open(DialogApikeyComponent, {\n width: '400px',\n disableClose: true,\n data: 'addtovault'\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n sessionStorage.setItem('VULNREPO-API', JSON.stringify(drem));\n this.saveAPIKEY(drem, result);\n this.apiconnect(JSON.stringify(drem));\n }\n });\n\n }\n\n exportvault() {\n\n this.indexeddbService.retrieveAPIkey().then(data => {\n if (data) {\n const today = new Date().toLocaleString();\n // download dump\n const blob = new Blob([JSON.stringify(data)], { type: 'application/json;charset=utf-8' });\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', 'VULNREPO Vault Dump ' + today + ' (vulnrepo.com).json');\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n } else {\n console.log('DB read error');\n }\n\n });\n\n }\n\n onFileLoad(fileLoadedEvent) {\n }\n\n importvault(input: HTMLInputElement) {\n console.log('import vault');\n\n const files = input.files;\n if (files && files.length) {\n\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n\n fileReader.onload = (e) => {\n this.Processimportfile(fileReader.result);\n };\n\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n\n }\n\n Processimportfile(file) {\n file = file.replace(/^\"(.*)\"$/, '$1');\n this.openDialog(file);\n }\n\n removeApi(element) {\n\n const localkey = sessionStorage.getItem('VULNREPO-API');\n if (localkey) {\n const result = JSON.parse(localkey);\n const index = result.map(function(e) { return e.apikey; }).indexOf(element);\n if (index !== -1) {\n this.openDialogAPIremove(result);\n result.splice(index, 1);\n }\n\n }\n\n }\n\n saveAPIKEY(key, pass) {\n\n this.indexeddbService.encryptKEY(JSON.stringify(key), pass).then(data => {\n if (data) {\n this.indexeddbService.saveKEYinDB(data).then(ret => {});\n }\n });\n\n }\n\n\ngetReportProfiles() {\n this.indexeddbService.retrieveReportProfile().then(ret => {\n if (ret) {\n this.ReportProfilesdataSource = new MatTableDataSource(ret);\n this.reportProfileList = this.ReportProfilesdataSource.data;\n }\n });\n}\n\n openDialogReportProfiles(data: any): void {\n\n const dialogRef = this.dialog.open(DialogAddreportprofileComponent, {\n width: '600px',\n disableClose: true,\n data: data\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('Report Settings Profile dialog was closed');\n if (result) {\n this.reportProfileList = this.reportProfileList.concat(result);\n this.ReportProfilesdataSource.data = this.reportProfileList;\n this.indexeddbService.saveReportProfileinDB(this.reportProfileList).then(ret => {});\n this.getReportProfiles();\n }\n\n });\n\n }\n\n removeProfileItem(item: any): void {\n const index: number = this.reportProfileList.indexOf(item as never);\n if (index !== -1) {\n this.reportProfileList.splice(index, 1);\n this.ReportProfilesdataSource.data = this.reportProfileList;\n this.indexeddbService.saveReportProfileinDB(this.reportProfileList).then(ret => {});\n this.getReportProfiles();\n }\n }\n\n editProfileItem(item: any): void {\n\n const dialogRef = this.dialog.open(DialogAddreportprofileComponent, {\n width: '600px',\n disableClose: true,\n data: item\n });\n\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('Report Settings Profile dialog was closed');\n if (result) {\n const index: number = this.reportProfileList.indexOf(result.original[0]);\n\n if (index !== -1) {\n this.reportProfileList[index] = {\n profile_name: result.profile_name,\n logo: result.logo,\n logow: result.logow,\n logoh: result.logoh,\n theme: result.profile_theme,\n video_embed: result.video_embed,\n remove_lastpage: result.remove_lastpage,\n remove_issueStatus: result.remove_issueStatus,\n remove_issuecvss: result.remove_issuecvss,\n remove_issuecve: result.remove_issuecve,\n remove_researcher: result.remove_researcher,\n remove_changelog: result.remove_changelog,\n remove_tags: result.remove_tags,\n ResName: result.ResName,\n ResEmail: result.ResEmail,\n ResSocial: result.ResSocial,\n ResWeb: result.ResWeb\n };\n this.ReportProfilesdataSource.data = this.reportProfileList;\n this.indexeddbService.saveReportProfileinDB(this.reportProfileList).then(ret => {});\n this.getReportProfiles();\n }\n }\n\n });\n\n }\n\n exportprofiles(): void {\n\n this.indexeddbService.retrieveReportProfile().then(ret => {\n if (ret) {\n const blob = new Blob([JSON.stringify(ret)], { type: 'text/plain' });\n const link = document.createElement('a');\n const url = window.URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', 'Backup Report Profiles (vulnrepo.com).txt');\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n });\n\n\n }\n\n importReportProfile(input: HTMLInputElement) {\n console.log('import profile');\n\n const files = input.files;\n if (files && files.length) {\n\n const fileToRead = files[0];\n const fileReader = new FileReader();\n fileReader.onload = this.onFileLoad;\n\n fileReader.onload = (e) => {\n this.parseprofile(fileReader.result);\n \n };\n\n fileReader.readAsText(fileToRead, 'UTF-8');\n }\n\n }\n\nparseprofile(profile){\n const parsed = JSON.parse(profile);\n this.reportProfileList = this.reportProfileList.concat(parsed);\n this.ReportProfilesdataSource.data = this.reportProfileList;\n this.indexeddbService.saveReportProfileinDB(this.reportProfileList).then(ret => {});\n this.getReportProfiles();\n}\n\n}\n","<h1 class=\"mat-display-2\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">settings</mat-icon> Settings\n</h1>\n\n<div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-card>\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">restore</mat-icon>\n <mat-card-title>Backup & Import</mat-card-title>\n <mat-card-subtitle>Save or import saved \"My Reports\"</mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-actions>\n <button mat-raised-button color=\"primary\" (click)=\"dumpallmyreports()\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">file_download</mat-icon> Backup\n </button>\n <button mat-raised-button type=\"button\" color=\"primary\" (click)=\"myreportimporall.click()\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">playlist_add</mat-icon> Import\n </button>\n <input hidden type=\"file\" accept=\".txt\" #myreportimporall (change)=\"restoreMyReports($event.target)\"/>\n </mat-card-actions>\n\n </mat-card>\n<br>\n <mat-card>\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">delete_forever</mat-icon>\n <mat-card-title>Remove all stored data</mat-card-title>\n <mat-card-subtitle>Wipe all stored data in browser: reports and settings</mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"90%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"start end\">\n Are you sure you want to delete all data, this is <b style=\"margin-left:5px;color: red\"> irreversible decision </b>!?\n </div>\n <div fxFlex=\"10%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"end start\">\n <mat-checkbox [(ngModel)]=\"wipeall\">YES</mat-checkbox>\n </div>\n </div>\n\n \n </mat-card-content>\n <mat-card-actions>\n <button *ngIf=\"wipeall == true\" mat-raised-button color=\"warn\" (click)=\"wipealldata()\"><mat-icon>clear</mat-icon> Yes, do it!</button>\n </mat-card-actions>\n </mat-card>\n\n </div>\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n <mat-card>\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">settings_applications</mat-icon>\n <mat-card-title>Report Profiles</mat-card-title>\n <mat-card-subtitle>Save your settings for report</mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <table mat-table *ngIf=\"reportProfileList.length > 0\" style=\"width: 100%;\" [dataSource]=\"ReportProfilesdataSource\" class=\"mat-elevation-z8\">\n\n <ng-container matColumnDef=\"profile_name\">\n <th mat-header-cell *matHeaderCellDef> Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.profile_name}} </td>\n </ng-container>\n \n <ng-container matColumnDef=\"profile_settings\">\n <th mat-header-cell *matHeaderCellDef> <mat-icon title=\"Settings\">settings</mat-icon> </th>\n <td mat-cell *matCellDef=\"let element\">\n\n <button mat-icon-button style=\"width: 25px; height: 25px; flex-shrink: 0; line-height: 5px; border-radius: 70%;\" [matMenuTriggerFor]=\"reportprofilesettings\"><mat-icon>more_vert</mat-icon></button>\n <mat-menu #reportprofilesettings=\"matMenu\">\n <a [routerLink]=\"[]\" (click)=\"editProfileItem(element)\" class=\"active-link\" title=\"Edit\" mat-menu-item><mat-icon class=\"vertical-align-middle\">edit</mat-icon> Edit profile</a>\n <a [routerLink]=\"[]\" (click)=\"removeProfileItem(element)\" class=\"active-link\" title=\"Remove\" mat-menu-item><mat-icon class=\"vertical-align-middle\">delete_forever</mat-icon> Remove</a>\n </mat-menu>\n\n </td>\n </ng-container>\n \n <tr mat-header-row *matHeaderRowDef=\"ReportProfilesdisplayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ReportProfilesdisplayedColumns;\"></tr>\n </table>\n\n </mat-card-content>\n <mat-card-actions>\n\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"start end\">\n <button mat-raised-button color=\"primary\" (click)=\"openDialogReportProfiles('open')\" title=\"Add report profile\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">add_circle</mat-icon> Add\n </button>\n </div>\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\" fxLayoutAlign=\"end start\">\n <button mat-raised-button color=\"primary\"(click)=\"imreportprofiles.click()\" title=\"Import report profile\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">playlist_add</mat-icon> Import\n </button>\n <button *ngIf=\"reportProfileList.length > 0\" mat-raised-button color=\"primary\" (click)=\"exportprofiles()\" title=\"Export report profiles\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">file_download</mat-icon> Export\n </button>\n <input hidden type=\"file\" accept=\".txt\" #imreportprofiles (change)=\"importReportProfile($event.target)\"/>\n </div>\n </div>\n\n </mat-card-actions>\n \n </mat-card>\n\n </div>\n\n</div>\n<br>\n<div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n\n </div>\n</div>\n\n<div>\n <div fxLayout=\"row\" fxLayout.xs=\"column\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"50%\" fxFlex.sm=\"100%\" fxFlex.xs=\"100%\">\n <mat-card>\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"vertical-align-middle padding-bottom-3 size-45\">public</mat-icon>\n <mat-card-title>VULNRΞPO API VAULT ACCESS</mat-card-title>\n <mat-card-subtitle>Save your reports on external API</mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div *ngIf=\"listkey\">\n <p>Found existing vault access!\n <button mat-icon-button color=\"warn\" (click)=\"removeapikey()\" title=\"Remove current Vault\">\n <mat-icon>delete_forever</mat-icon>\n </button>\n </p>\n </div>\n <div fxLayout=\"row\" fxLayoutGap=\"10px grid\">\n <div fxFlex=\"50%\" fxLayoutAlign=\"start\">\n <button *ngIf=\"!apiconneted && !tryconnectdb\" mat-raised-button color=\"accent\" (click)=\"openDialogAPIADD()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">cloud_upload</mat-icon> Add API</button>\n <button *ngIf=\"tryconnectdb\" mat-raised-button color=\"accent\" (click)=\"tryconnect()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">lock_open</mat-icon> Access to Vault</button> <br><br>\n <button *ngIf=\"apiconneted\" mat-raised-button color=\"warn\" (click)=\"apidisconnect()\">Disconnect</button>\n \n </div>\n <div fxFlex=\"50%\" fxLayoutAlign=\"end end\">\n <button *ngIf=\"apiconneted || tryconnectdb\" mat-raised-button color=\"primary\" (click)=\"exportvault()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">file_download</mat-icon> Export Vault</button> \n <button type=\"button\" *ngIf=\"!apiconneted && !tryconnectdb\" mat-raised-button color=\"primary\" (click)=\"VaultFileInput.click()\"><mat-icon class=\"vertical-align-middle padding-bottom-3\">playlist_add</mat-icon> Import Vault</button>\n <input hidden type=\"file\" accept=\".json\" #VaultFileInput (change)=\"importvault($event.target)\"/>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n\n <br>\n <mat-card *ngIf=\"!tryconnectdb && !showregapi\">\n <h3>\n VULNRΞPO API List \n <button mat-icon-button style=\"width: 25px; height: 25px; flex-shrink: 0; line-height: 5px; border-radius: 70%;\" [matMenuTriggerFor]=\"apimenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #apimenu=\"matMenu\">\n <a [routerLink]=\"[]\" (click)=\"openDialogAPIaddtovault()\" class=\"active-link\" title=\"Add API\" mat-menu-item>\n <mat-icon class=\"vertical-align-middle padding-bottom-3\">add_circle</mat-icon> Add API\n </a>\n <a target=\"_blank\" class=\"active-link\" rel=\"noopener noreferrer\" href=\"https://github.com/kac89/vulnrepo/blob/master/API-INTEGRATION.md\" mat-menu-item><mat-icon class=\"vertical-align-middle padding-bottom-3\">build</mat-icon> Build own API</a>\n </mat-menu>\n </h3>\n\n<div>\n\n <div *ngIf=\"dataSource.data.length == 0\" style=\"padding: 30px 0px 0px 20px; width: 500px;\">\n Please wait...<mat-progress-bar color=\"accent\" mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <table mat-table *ngIf=\"dataSource.data.length > 0\" style=\"width: 100%;\" [dataSource]=\"dataSource\" class=\"mat-elevation-z8\">\n\n <ng-container matColumnDef=\"apiname\">\n <th mat-header-cell *matHeaderCellDef> API Name </th>\n <td mat-cell *matCellDef=\"let element\"> <a target=\"_blank\" class=\"active-link\" rel=\"noopener noreferrer\" href=\"https://{{element.apiurl}}/\">{{element.apiname}}</a> </td>\n </ng-container>\n \n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef> Status </th>\n <td mat-cell *matCellDef=\"let element\">\n <mat-icon *ngIf=\"element.status == 'Connected'\" color=\"accent\" class=\"vertical-align-middle\">check_circle</mat-icon>\n <mat-icon *ngIf=\"element.status == 'Not connected'\" color=\"warn\" class=\"vertical-align-middle\">warning</mat-icon>\n <mat-icon *ngIf=\"element.status == 'Not connected: wrong API key?'\" color=\"warn\" class=\"vertical-align-middle\">warning</mat-icon> \n {{element.status}}\n </td>\n </ng-container>\n \n <ng-container matColumnDef=\"created\">\n <th mat-header-cell *matHeaderCellDef> Created </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.created}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"expires\">\n <th mat-header-cell *matHeaderCellDef> Expires </th>\n <td mat-cell *matCellDef=\"let element\">\n <span *ngIf=\"element.expires == '0 (NaN days left)'\">\n <span class=\"material-icons\">all_inclusive</span>\n </span>\n <span *ngIf=\"element.expires != '0 (NaN days left)'\">{{element.expires}} </span>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"storage\">\n <th mat-header-cell *matHeaderCellDef> Storage </th>\n <td mat-cell *matCellDef=\"let element\">\n <mat-progress-bar \n title=\"Storage used: {{element.current_storage}}%\"\n color=\"warn\"\n mode=\"determinate\"\n value=\"{{element.current_storage}}\"\n bufferValue=\"100\">\n </mat-progress-bar>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"settings\">\n <th mat-header-cell *matHeaderCellDef> <mat-icon title=\"Settings\">settings</mat-icon> </th>\n <td mat-cell *matCellDef=\"let element\"> <a [routerLink]=\"[]\" (click)=\"removeApi(element.apikey)\" title=\"Remove\"><mat-icon color=\"warn\" class=\"vertical-align-middle\">delete_forever</mat-icon></a> </td>\n </ng-container>\n \n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n \n \n\n</div>\n\n\n </mat-card>\n\n</div>\n\n<br>\n<br>\n<br>\n","import {Component, OnInit, ViewChild} from '@angular/core';\nimport {MatPaginator} from '@angular/material/paginator';\nimport {MatTableDataSource} from '@angular/material/table';\nimport { HttpClient } from '@angular/common/http';\nimport { MatSort } from '@angular/material/sort';\nimport {\n animate,\n state,\n style,\n transition,\n trigger\n} from '@angular/animations';\n\n@Component({\n selector: 'app-vuln-list',\n templateUrl: './vuln-list.component.html',\n styleUrls: ['./vuln-list.component.scss'],\n animations: [\n trigger('detailExpand', [\n state('collapsed', style({ height: '0px', minHeight: '0' })),\n state('expanded', style({ height: '*' })),\n transition(\n 'expanded <=> collapsed',\n animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')\n )\n ])\n ]\n})\nexport class VulnListComponent implements OnInit {\n\n displayedColumns: string[] = ['title', 'severity', 'cvss', 'cve'];\n dataSource = new MatTableDataSource<VulnsList[]>();\n getvulnlistStatus = '';\n countvulns = [];\n expandedElement: VulnsList | null;\n\n @ViewChild(MatPaginator) paginator: MatPaginator;\n @ViewChild(MatSort) sort: MatSort;\n\n constructor(private http: HttpClient) { }\n\n ngOnInit() {\n this.getvulnlistStatus = 'Loading...';\n this.http.get<any>('/assets/vulns.json?v=' + + new Date()).subscribe(res => {\n\n this.dataSource = new MatTableDataSource<VulnsList[]>(res);\n this.countvulns = res;\n this.dataSource.sort = this.sort;\n this.dataSource.paginator = this.paginator;\n this.getvulnlistStatus = '';\n\n });\n\n }\n\n}\n\nexport interface VulnsList {\n title: string;\n poc: string;\n desc: string;\n severity: string;\n ref: string;\n cvss: number;\n cve: string;\n expanded?: boolean;\n}\n","<h1 class=\"mat-display-2\">\n <mat-icon class=\"vertical-align-middle padding-bottom-3 size-45\">bug_report</mat-icon> Vulnerability List\n ({{this.countvulns.length}})\n</h1>\n\n<mat-card>\n <p>List contains bugs templates used during creating a report. You can share own templates use <a class=\"active-link\"\n target=\"_blank\" href=\"https://github.com/kac89/vulnrepo/blob/master/src/assets/vulns.json\">vulns.json</a>, is\n super easy! Push your changes to your fork and submit a pull request on github.</p>\n <p>Click on vuln to expand.</p>\n\n <div class=\"mat-elevation-z8\">\n\n\n <table mat-table [dataSource]=\"dataSource\" multiTemplateDataRows matSort matSortActive=\"cvss\"\n matSortDirection=\"desc\">\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Title </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.title}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"severity\">\n <th mat-header-cell *matHeaderCellDef> Severity </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.severity}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"cvss\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> CVSS </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.cvss}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"cve\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> CVE </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.cve}} </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element;let i=index\" [attr.colspan]=\"displayedColumns.length\">\n <div class=\"example-element-detail\" [@detailExpand]=\"element.expanded ? 'expanded' : 'collapsed'\">\n <div class=\"example-element-description\">\n <b>Description: </b>{{element.desc}}<br>\n <b *ngIf=\"element.cve\">CVE: {{element.cve}}</b><br>\n <b>Reference:</b>{{element.ref}}<br>\n </div>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\" class=\"example-element-row\"\n [class.example-expanded-row]=\"element.expanded\" (click)=\"element.expanded = !element.expanded\">\n </tr>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n </table>\n\n <!--<mat-paginator [pageSizeOptions]=\"[10,20,30]\" showFirstLastButtons></mat-paginator>-->\n\n </div>\n <p *ngIf=\"getvulnlistStatus\">{{getvulnlistStatus}}</p>\n</mat-card>\n<br>\n<br>\n<br>","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","export const version = { number: '' }","var map = {\n\t\"./af\": 58685,\n\t\"./af.js\": 58685,\n\t\"./ar\": 254,\n\t\"./ar-dz\": 4312,\n\t\"./ar-dz.js\": 4312,\n\t\"./ar-kw\": 32614,\n\t\"./ar-kw.js\": 32614,\n\t\"./ar-ly\": 18630,\n\t\"./ar-ly.js\": 18630,\n\t\"./ar-ma\": 28674,\n\t\"./ar-ma.js\": 28674,\n\t\"./ar-sa\": 49032,\n\t\"./ar-sa.js\": 49032,\n\t\"./ar-tn\": 24730,\n\t\"./ar-tn.js\": 24730,\n\t\"./ar.js\": 254,\n\t\"./az\": 53052,\n\t\"./az.js\": 53052,\n\t\"./be\": 60150,\n\t\"./be.js\": 60150,\n\t\"./bg\": 63069,\n\t\"./bg.js\": 63069,\n\t\"./bm\": 13466,\n\t\"./bm.js\": 13466,\n\t\"./bn\": 18516,\n\t\"./bn-bd\": 90557,\n\t\"./bn-bd.js\": 90557,\n\t\"./bn.js\": 18516,\n\t\"./bo\": 26273,\n\t\"./bo.js\": 26273,\n\t\"./br\": 9588,\n\t\"./br.js\": 9588,\n\t\"./bs\": 19815,\n\t\"./bs.js\": 19815,\n\t\"./ca\": 83331,\n\t\"./ca.js\": 83331,\n\t\"./cs\": 21320,\n\t\"./cs.js\": 21320,\n\t\"./cv\": 72219,\n\t\"./cv.js\": 72219,\n\t\"./cy\": 68266,\n\t\"./cy.js\": 68266,\n\t\"./da\": 66427,\n\t\"./da.js\": 66427,\n\t\"./de\": 67435,\n\t\"./de-at\": 52871,\n\t\"./de-at.js\": 52871,\n\t\"./de-ch\": 12994,\n\t\"./de-ch.js\": 12994,\n\t\"./de.js\": 67435,\n\t\"./dv\": 82357,\n\t\"./dv.js\": 82357,\n\t\"./el\": 95649,\n\t\"./el.js\": 95649,\n\t\"./en-au\": 59961,\n\t\"./en-au.js\": 59961,\n\t\"./en-ca\": 19878,\n\t\"./en-ca.js\": 19878,\n\t\"./en-gb\": 3924,\n\t\"./en-gb.js\": 3924,\n\t\"./en-ie\": 70864,\n\t\"./en-ie.js\": 70864,\n\t\"./en-il\": 91579,\n\t\"./en-il.js\": 91579,\n\t\"./en-in\": 30940,\n\t\"./en-in.js\": 30940,\n\t\"./en-nz\": 16181,\n\t\"./en-nz.js\": 16181,\n\t\"./en-sg\": 44301,\n\t\"./en-sg.js\": 44301,\n\t\"./eo\": 85291,\n\t\"./eo.js\": 85291,\n\t\"./es\": 54529,\n\t\"./es-do\": 53764,\n\t\"./es-do.js\": 53764,\n\t\"./es-mx\": 12584,\n\t\"./es-mx.js\": 12584,\n\t\"./es-us\": 63425,\n\t\"./es-us.js\": 63425,\n\t\"./es.js\": 54529,\n\t\"./et\": 35203,\n\t\"./et.js\": 35203,\n\t\"./eu\": 70678,\n\t\"./eu.js\": 70678,\n\t\"./fa\": 83483,\n\t\"./fa.js\": 83483,\n\t\"./fi\": 96262,\n\t\"./fi.js\": 96262,\n\t\"./fil\": 52521,\n\t\"./fil.js\": 52521,\n\t\"./fo\": 34555,\n\t\"./fo.js\": 34555,\n\t\"./fr\": 63131,\n\t\"./fr-ca\": 88239,\n\t\"./fr-ca.js\": 88239,\n\t\"./fr-ch\": 21702,\n\t\"./fr-ch.js\": 21702,\n\t\"./fr.js\": 63131,\n\t\"./fy\": 267,\n\t\"./fy.js\": 267,\n\t\"./ga\": 23821,\n\t\"./ga.js\": 23821,\n\t\"./gd\": 71753,\n\t\"./gd.js\": 71753,\n\t\"./gl\": 4074,\n\t\"./gl.js\": 4074,\n\t\"./gom-deva\": 92762,\n\t\"./gom-deva.js\": 92762,\n\t\"./gom-latn\": 5969,\n\t\"./gom-latn.js\": 5969,\n\t\"./gu\": 82809,\n\t\"./gu.js\": 82809,\n\t\"./he\": 45402,\n\t\"./he.js\": 45402,\n\t\"./hi\": 315,\n\t\"./hi.js\": 315,\n\t\"./hr\": 10410,\n\t\"./hr.js\": 10410,\n\t\"./hu\": 38288,\n\t\"./hu.js\": 38288,\n\t\"./hy-am\": 67928,\n\t\"./hy-am.js\": 67928,\n\t\"./id\": 71334,\n\t\"./id.js\": 71334,\n\t\"./is\": 86959,\n\t\"./is.js\": 86959,\n\t\"./it\": 34864,\n\t\"./it-ch\": 51124,\n\t\"./it-ch.js\": 51124,\n\t\"./it.js\": 34864,\n\t\"./ja\": 36141,\n\t\"./ja.js\": 36141,\n\t\"./jv\": 29187,\n\t\"./jv.js\": 29187,\n\t\"./ka\": 42136,\n\t\"./ka.js\": 42136,\n\t\"./kk\": 94332,\n\t\"./kk.js\": 94332,\n\t\"./km\": 18607,\n\t\"./km.js\": 18607,\n\t\"./kn\": 84305,\n\t\"./kn.js\": 84305,\n\t\"./ko\": 70234,\n\t\"./ko.js\": 70234,\n\t\"./ku\": 16003,\n\t\"./ku.js\": 16003,\n\t\"./ky\": 75061,\n\t\"./ky.js\": 75061,\n\t\"./lb\": 32786,\n\t\"./lb.js\": 32786,\n\t\"./lo\": 66183,\n\t\"./lo.js\": 66183,\n\t\"./lt\": 50029,\n\t\"./lt.js\": 50029,\n\t\"./lv\": 24169,\n\t\"./lv.js\": 24169,\n\t\"./me\": 68577,\n\t\"./me.js\": 68577,\n\t\"./mi\": 68177,\n\t\"./mi.js\": 68177,\n\t\"./mk\": 50337,\n\t\"./mk.js\": 50337,\n\t\"./ml\": 65260,\n\t\"./ml.js\": 65260,\n\t\"./mn\": 52325,\n\t\"./mn.js\": 52325,\n\t\"./mr\": 14695,\n\t\"./mr.js\": 14695,\n\t\"./ms\": 75334,\n\t\"./ms-my\": 37151,\n\t\"./ms-my.js\": 37151,\n\t\"./ms.js\": 75334,\n\t\"./mt\": 63570,\n\t\"./mt.js\": 63570,\n\t\"./my\": 97963,\n\t\"./my.js\": 97963,\n\t\"./nb\": 88028,\n\t\"./nb.js\": 88028,\n\t\"./ne\": 86638,\n\t\"./ne.js\": 86638,\n\t\"./nl\": 50302,\n\t\"./nl-be\": 66782,\n\t\"./nl-be.js\": 66782,\n\t\"./nl.js\": 50302,\n\t\"./nn\": 33501,\n\t\"./nn.js\": 33501,\n\t\"./oc-lnc\": 50563,\n\t\"./oc-lnc.js\": 50563,\n\t\"./pa-in\": 50869,\n\t\"./pa-in.js\": 50869,\n\t\"./pl\": 65302,\n\t\"./pl.js\": 65302,\n\t\"./pt\": 49687,\n\t\"./pt-br\": 74884,\n\t\"./pt-br.js\": 74884,\n\t\"./pt.js\": 49687,\n\t\"./ro\": 79107,\n\t\"./ro.js\": 79107,\n\t\"./ru\": 33627,\n\t\"./ru.js\": 33627,\n\t\"./sd\": 30355,\n\t\"./sd.js\": 30355,\n\t\"./se\": 83427,\n\t\"./se.js\": 83427,\n\t\"./si\": 11848,\n\t\"./si.js\": 11848,\n\t\"./sk\": 54590,\n\t\"./sk.js\": 54590,\n\t\"./sl\": 20184,\n\t\"./sl.js\": 20184,\n\t\"./sq\": 56361,\n\t\"./sq.js\": 56361,\n\t\"./sr\": 78965,\n\t\"./sr-cyrl\": 81287,\n\t\"./sr-cyrl.js\": 81287,\n\t\"./sr.js\": 78965,\n\t\"./ss\": 25456,\n\t\"./ss.js\": 25456,\n\t\"./sv\": 70451,\n\t\"./sv.js\": 70451,\n\t\"./sw\": 77558,\n\t\"./sw.js\": 77558,\n\t\"./ta\": 51356,\n\t\"./ta.js\": 51356,\n\t\"./te\": 73693,\n\t\"./te.js\": 73693,\n\t\"./tet\": 21243,\n\t\"./tet.js\": 21243,\n\t\"./tg\": 42500,\n\t\"./tg.js\": 42500,\n\t\"./th\": 55768,\n\t\"./th.js\": 55768,\n\t\"./tk\": 77761,\n\t\"./tk.js\": 77761,\n\t\"./tl-ph\": 35780,\n\t\"./tl-ph.js\": 35780,\n\t\"./tlh\": 29590,\n\t\"./tlh.js\": 29590,\n\t\"./tr\": 33807,\n\t\"./tr.js\": 33807,\n\t\"./tzl\": 93857,\n\t\"./tzl.js\": 93857,\n\t\"./tzm\": 60654,\n\t\"./tzm-latn\": 8806,\n\t\"./tzm-latn.js\": 8806,\n\t\"./tzm.js\": 60654,\n\t\"./ug-cn\": 30845,\n\t\"./ug-cn.js\": 30845,\n\t\"./uk\": 19232,\n\t\"./uk.js\": 19232,\n\t\"./ur\": 47052,\n\t\"./ur.js\": 47052,\n\t\"./uz\": 77967,\n\t\"./uz-latn\": 32233,\n\t\"./uz-latn.js\": 32233,\n\t\"./uz.js\": 77967,\n\t\"./vi\": 98615,\n\t\"./vi.js\": 98615,\n\t\"./x-pseudo\": 12320,\n\t\"./x-pseudo.js\": 12320,\n\t\"./yo\": 31313,\n\t\"./yo.js\": 31313,\n\t\"./zh-cn\": 64490,\n\t\"./zh-cn.js\": 64490,\n\t\"./zh-hk\": 55910,\n\t\"./zh-hk.js\": 55910,\n\t\"./zh-mo\": 98262,\n\t\"./zh-mo.js\": 98262,\n\t\"./zh-tw\": 44223,\n\t\"./zh-tw.js\": 44223\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;"],"names":[],"sourceRoot":"webpack:///","x_google_ignoreList":[57]}