Skip to content

Bug: Template-Detail-Page preview-PNG wird durch html/template escaped (#ZgotmplZ) #87

@strausmann

Description

@strausmann

Symptom

Post-deploy Smoke-Test nach PR #82 + #83 zeigt: Template-Detail-Page rendert src=\"#ZgotmplZ\" statt src=\"data:image/png;base64,...\" für die Preview-Bild-img-tag.

Root Cause

Go html/template escaped data:image/png;base64,... URLs in src=-Attributen automatisch zu #ZgotmplZ als Security-Feature gegen data:text/html,<script> XSS-Vektoren. Das PreviewURI-Feld in TemplateDetailData ist als string typisiert (frontend/internal/handlers/template.go).

Fix

Type der PreviewURI von string auf template.URL ändern. Das markiert den String als trusted-URL, sodass html/template ihn unescaped lässt.

import "html/template"

type TemplateDetailData struct {
    TemplateData
    Template   *api.TemplateRead
    PreviewURI template.URL  // war: string
    YAMLSource string
}

Wieso CI das nicht gefangen hat

template_test.go prüft nur HTTP 200 + Container-Div-Existenz, nicht den src-Attribut-Inhalt. Regression-Test sollte ergänzt werden:

if !strings.Contains(body, \"data:image/png;base64\") {
    t.Errorf(\"preview src must be a data URL, got: %s\", body)
}

Backend-Endpoint funktioniert

POST /api/render/preview?template=grocy-12mm antwortet HTTP 200 + image/png direkt (710 Bytes für Sample-Template). Nur Frontend-Template-Rendering ist das Problem.

Detected

Production-Smoke nach Phase 7b/UI-Fix-Deploy auf hhdocker02 am 2026-05-17 ~23:30 UTC. Issue #22 enthält den vollständigen Smoke-Report.

Vorgeschlagene Lösung

Schneller Fix-PR (~3 Zeilen Go + 1 Test). Conventional Commit: fix(ui): preview-PNG data-URL must use template.URL type.

Refs #22

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions