fix(script): convert non-string header, param and cookie values to text

This commit is contained in:
aykhans committed 2026-09-26 01:17:49 +04:00
1 parent a30c862936
commit c32949c8e0
3 files changed
+51 -24

No files matched your search

+25 -11
View File
@@ -2,6 +2,7 @@ package script
import (
"errors"
"strconv"
"github.com/dop251/goja"
"go.aykhans.me/sarin/internal/types"
@@ -195,22 +196,23 @@ func (e *JsEngine) objectToStringSliceMap(obj *goja.Object) map[string][]string
result := make(map[string][]string)
for _, key := range obj.Keys() {
v := obj.Get(key)
if v == nil || goja.IsUndefined(v) || goja.IsNull(v) {
continue
}
// Check if it's an array
if arr, ok := v.Export().([]any); ok {
var values []string
for _, item := range arr {
if s, ok := item.(string); ok {
values = append(values, s)
if arr, ok := v.(*goja.Object); ok && arr.ClassName() == "Array" {
length := int(arr.Get("length").ToInteger())
values := make([]string, 0, length)
for i := range length {
if text, ok := jsStringValue(arr.Get(strconv.Itoa(i))); ok {
values = append(values, text)
}
}
result[key] = values
} else {
// Single value, wrap it in a slice
result[key] = []string{v.String()}
continue
}
// Single value, wrap it in a slice
if text, ok := jsStringValue(v); ok {
result[key] = []string{text}
}
}
return result
@@ -231,3 +233,15 @@ func (e *JsEngine) exceptionError(err error) error {
}
return errors.New(message)
}
// jsStringValue renders a JavaScript primitive the way the script would see it.
// Objects, arrays and functions have no useful text form, so they are skipped.
func jsStringValue(v goja.Value) (string, bool) {
if v == nil || goja.IsUndefined(v) || goja.IsNull(v) {
return "", false
}
if _, isObject := v.(*goja.Object); isObject {
return "", false
}
return v.String(), true
}