fix(vcard): decir por qué falla la subida a OSS, y no armar la clave con texto crudo del cliente
El sistema que consume /v2/vcard/qr-url solo recibía "Error subiendo archivo a OSS": el motivo quedaba en nuestro log y del otro lado no había nada que hacer con eso. Ahora la respuesta incluye el error real del proveedor —es una API entre servidores y el que llama ya conoce la config de OSS que mandó— y el log dice además qué clave se intentó subir. La clave del objeto se armaba con el nombre tal como venía en el body. Un nombre con "/" o con caracteres que OSS no acepta producía justamente ese error genérico. Ahora se limpia. El mismo nombre crudo se usaba para el archivo temporal (/tmp/<nombre>.webp), o sea escritura de archivos en una ruta que elegía quien llamaba. Se fue entero: los tres endpoints suben desde memoria con UploadFromReader, que además saca el paso a disco y su limpieza. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
4674413257
commit
17ed57cb56
@@ -0,0 +1,26 @@
|
||||
package controllers
|
||||
|
||||
import "testing"
|
||||
|
||||
// La clave de objeto se arma con texto que manda el cliente. Antes iba tal
|
||||
// cual: un nombre con "/" o con acentos raros producía una clave que OSS
|
||||
// rechaza, y del otro lado solo se veía "error subiendo archivo a OSS".
|
||||
func TestClaveObjetoSegura(t *testing.T) {
|
||||
casos := map[string]string{
|
||||
"Juan Pérez": "Juan_Prez",
|
||||
"Ana/María": "AnaMara",
|
||||
"../../etc/pass": "etcpass",
|
||||
" ": "sin-nombre",
|
||||
"": "sin-nombre",
|
||||
"ok-nombre_1.2": "ok-nombre_1.2",
|
||||
"emoji 🚀 fin": "emoji__fin",
|
||||
}
|
||||
for in, want := range casos {
|
||||
if got := claveObjetoSegura(in); got != want {
|
||||
t.Errorf("claveObjetoSegura(%q) = %q, want %q", in, got, want)
|
||||
}
|
||||
}
|
||||
if got := claveObjetoSegura(string(make([]byte, 0)) + "a" + string(rune(0))); got != "a" {
|
||||
t.Errorf("caracter de control no filtrado: %q", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user