From 16cbf2615634b4ccf670743435dbfc4adc6c6415 Mon Sep 17 00:00:00 2001
From: jojohoch <joachim.hoch@iqb.hu-berlin.de>
Date: Wed, 13 Oct 2021 12:08:06 +0200
Subject: [PATCH] Sanitize `innerHTML` with pipe

---
 projects/common/app.module.ts                       |  7 +++++--
 .../pipes/safe-resource-html.pipe.ts                | 13 +++++++++++++
 .../common/element-components/text.component.ts     |  2 +-
 .../properties/element-properties.component.html    |  2 +-
 4 files changed, 20 insertions(+), 4 deletions(-)
 create mode 100644 projects/common/element-components/pipes/safe-resource-html.pipe.ts

diff --git a/projects/common/app.module.ts b/projects/common/app.module.ts
index 904e02173..355b7de05 100644
--- a/projects/common/app.module.ts
+++ b/projects/common/app.module.ts
@@ -34,6 +34,7 @@ import { AudioComponent } from './element-components/audio.component';
 import { SafeResourceUrlPipe } from './element-components/pipes/safe-resource-url.pipe';
 import { InputBackgroundColorDirective } from './element-components/directives/input-background-color.directive';
 import { ErrorTransformPipe } from './element-components/pipes/error-transform.pipe';
+import { SafeResourceHTMLPipe } from './element-components/pipes/safe-resource-html.pipe';
 
 @NgModule({
   imports: [
@@ -64,7 +65,8 @@ import { ErrorTransformPipe } from './element-components/pipes/error-transform.p
     DropdownComponent,
     SafeResourceUrlPipe,
     InputBackgroundColorDirective,
-    ErrorTransformPipe
+    ErrorTransformPipe,
+    SafeResourceHTMLPipe
   ],
   exports: [
     CommonModule,
@@ -97,7 +99,8 @@ import { ErrorTransformPipe } from './element-components/pipes/error-transform.p
     MatSnackBarModule,
     MatTooltipModule,
     MatDialogModule,
-    TranslateModule
+    TranslateModule,
+    SafeResourceHTMLPipe
   ]
 })
 export class SharedModule { }
diff --git a/projects/common/element-components/pipes/safe-resource-html.pipe.ts b/projects/common/element-components/pipes/safe-resource-html.pipe.ts
new file mode 100644
index 000000000..f7e63e0fb
--- /dev/null
+++ b/projects/common/element-components/pipes/safe-resource-html.pipe.ts
@@ -0,0 +1,13 @@
+import { Pipe, PipeTransform } from '@angular/core';
+import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
+
+@Pipe({
+  name: 'safeResourceHTML'
+})
+export class SafeResourceHTMLPipe implements PipeTransform {
+  constructor(private sanitizer: DomSanitizer) {}
+
+  transform(resourceUrl: string): SafeResourceUrl {
+    return this.sanitizer.bypassSecurityTrustHtml(resourceUrl);
+  }
+}
diff --git a/projects/common/element-components/text.component.ts b/projects/common/element-components/text.component.ts
index 829676bcf..42a88a8db 100644
--- a/projects/common/element-components/text.component.ts
+++ b/projects/common/element-components/text.component.ts
@@ -34,7 +34,7 @@ import { ElementComponent } from '../element-component.directive';
            [style.font-weight]="elementModel.bold ? 'bold' : ''"
            [style.font-style]="elementModel.italic ? 'italic' : ''"
            [style.text-decoration]="elementModel.underline ? 'underline' : ''"
-           [innerHTML]="sanitizer.bypassSecurityTrustHtml(elementModel.text)"
+           [innerHTML]="elementModel.text | safeResourceHTML"
            #container>
       </div>
     </div>
diff --git a/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.html b/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.html
index 52c15c332..448d95922 100644
--- a/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.html
+++ b/projects/editor/src/app/components/unit-view/page-view/properties/element-properties.component.html
@@ -20,7 +20,7 @@
 
         <ng-container *ngIf="combinedProperties.text">
           Text
-          <div class="text-text" [innerHTML]="sanitizer.bypassSecurityTrustHtml($any(combinedProperties.text))"
+          <div class="text-text" [innerHTML]="combinedProperties.text | safeResourceHTML"
                (click)="unitService.showDefaultEditDialog(selectedElements[0])">
           </div>
         </ng-container>
-- 
GitLab