mirror of
https://github.com/amir20/dozzle.git
synced 2025-12-21 13:23:07 +01:00
@@ -5,9 +5,13 @@
|
|||||||
<li v-for="(value, name) in validValues" :key="name" class="inline-flex">
|
<li v-for="(value, name) in validValues" :key="name" class="inline-flex">
|
||||||
<span class="text-light">{{ name }}=</span>
|
<span class="text-light">{{ name }}=</span>
|
||||||
<span class="font-bold" v-if="value === null"><null></span>
|
<span class="font-bold" v-if="value === null"><null></span>
|
||||||
<template v-else-if="Array.isArray(value)">
|
<span v-else-if="Array.isArray(value)" class="font-bold">
|
||||||
<span class="font-bold" v-html="JSON.stringify(value)"></span>
|
[<span v-for="(item, index) in value" :key="index">
|
||||||
</template>
|
<span v-html="stripAnsi(item.toString())" v-if="typeof item === 'string'"></span>
|
||||||
|
<span v-else>{{ JSON.stringify(item) }}</span>
|
||||||
|
<span v-if="index < value.length - 1">, </span></span
|
||||||
|
>]
|
||||||
|
</span>
|
||||||
<span class="font-bold" v-html="stripAnsi(value.toString())" v-else></span>
|
<span class="font-bold" v-html="stripAnsi(value.toString())" v-else></span>
|
||||||
</li>
|
</li>
|
||||||
<li class="text-light" v-if="Object.keys(validValues).length === 0">all values are hidden</li>
|
<li class="text-light" v-if="Object.keys(validValues).length === 0">all values are hidden</li>
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import (
|
|||||||
var urlMarkerRegex = regexp.MustCompile(URLMarkerStart + "(.*?)" + URLMarkerEnd)
|
var urlMarkerRegex = regexp.MustCompile(URLMarkerStart + "(.*?)" + URLMarkerEnd)
|
||||||
|
|
||||||
func EscapeHTMLValues(logEvent *container.LogEvent) {
|
func EscapeHTMLValues(logEvent *container.LogEvent) {
|
||||||
// Mark URLs before HTML escaping
|
|
||||||
MarkURLs(logEvent)
|
MarkURLs(logEvent)
|
||||||
|
|
||||||
switch value := logEvent.Message.(type) {
|
switch value := logEvent.Message.(type) {
|
||||||
@@ -43,7 +42,6 @@ func escapeAndProcessMarkers(value string) string {
|
|||||||
value = html.EscapeString(value)
|
value = html.EscapeString(value)
|
||||||
value = strings.ReplaceAll(value, MarkerStart, "<mark>")
|
value = strings.ReplaceAll(value, MarkerStart, "<mark>")
|
||||||
value = strings.ReplaceAll(value, MarkerEnd, "</mark>")
|
value = strings.ReplaceAll(value, MarkerEnd, "</mark>")
|
||||||
// Process URL markers
|
|
||||||
value = urlMarkerRegex.ReplaceAllString(value, "<a href=\"$1\" target=\"_blank\" rel=\"noopener noreferrer external\">$1</a>")
|
value = urlMarkerRegex.ReplaceAllString(value, "<a href=\"$1\" target=\"_blank\" rel=\"noopener noreferrer external\">$1</a>")
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
@@ -61,6 +59,11 @@ func escapeAnyMap(orderedMap *orderedmap.OrderedMap[string, any]) {
|
|||||||
escapeMapStringInterface(value)
|
escapeMapStringInterface(value)
|
||||||
case map[string]string:
|
case map[string]string:
|
||||||
escapeStringMapString(value)
|
escapeStringMapString(value)
|
||||||
|
case []interface{}:
|
||||||
|
escapeSlice(value)
|
||||||
|
orderedMap.Set(pair.Key, value)
|
||||||
|
default:
|
||||||
|
log.Warn().Type("type", value).Msg("unknown logEvent type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,6 +83,8 @@ func escapeMapStringInterface(value map[string]interface{}) {
|
|||||||
escapeMapStringInterface(val)
|
escapeMapStringInterface(val)
|
||||||
case map[string]string:
|
case map[string]string:
|
||||||
escapeStringMapString(val)
|
escapeStringMapString(val)
|
||||||
|
case []interface{}:
|
||||||
|
escapeSlice(val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -89,3 +94,22 @@ func escapeStringMapString(value map[string]string) {
|
|||||||
value[key] = escapeAndProcessMarkers(val)
|
value[key] = escapeAndProcessMarkers(val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func escapeSlice(slice []interface{}) {
|
||||||
|
for i, val := range slice {
|
||||||
|
switch val := val.(type) {
|
||||||
|
case string:
|
||||||
|
slice[i] = escapeAndProcessMarkers(val)
|
||||||
|
case *orderedmap.OrderedMap[string, any]:
|
||||||
|
escapeAnyMap(val)
|
||||||
|
case *orderedmap.OrderedMap[string, string]:
|
||||||
|
escapeStringMap(val)
|
||||||
|
case map[string]interface{}:
|
||||||
|
escapeMapStringInterface(val)
|
||||||
|
case map[string]string:
|
||||||
|
escapeStringMapString(val)
|
||||||
|
case []interface{}:
|
||||||
|
escapeSlice(val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user