Ctrl K
ComunidadGuías…

internal/server/recovery.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package restapi

import (
	"io"
	"strings"
)

// secretHeaderPrefixes are the request header lines that the recovery dump
// must not print. gin masks Authorization itself but keeps the others, so
// X-API-Key would be written to the log in clear. The names are in the
// canonical form that net/http uses in a request dump.
var secretHeaderPrefixes = []string{
	"X-Api-Key:",
	"Cookie:",
	"Proxy-Authorization:",
}

// redactRequestDump masks the value of each secret header line in text.
func redactRequestDump(text string) string {
	lines := strings.Split(text, "\r\n")
	for i, line := range lines {
		for _, prefix := range secretHeaderPrefixes {
			if strings.HasPrefix(line, prefix) {
				lines[i] = prefix + " *"
				break
			}
		}
	}
	return strings.Join(lines, "\r\n")
}

// RedactingWriter masks secret request headers in what gin.Recovery writes.
// Recovery prints the whole request dump in one Write call, for both the
// debug-mode panic dump and the broken-pipe dump.
type RedactingWriter struct {
	out io.Writer
}

func (w RedactingWriter) Write(p []byte) (int, error) {
	if _, err := io.WriteString(w.out, redactRequestDump(string(p))); err != nil {
		return 0, err
	}
	return len(p), nil
}