1.9 KiB
1.9 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| file_unique_name | function | go | infra | 1.0.0 | pure | func FileUniqueName(originalName string) string | Genera un nombre de archivo unico combinando un UUID v4 con la extension sanitizada del nombre original. Evita colisiones y elimina problemas con caracteres especiales. |
|
false |
|
|
nombre unico {uuid}.{ext} con extension sanitizada (alfanumerica, minusculas, max 16 chars). Si no hay extension retorna solo el UUID | true |
|
functions/infra/file_unique_name_test.go | functions/infra/file_unique_name.go |
Ejemplo
n1 := FileUniqueName("vacaciones.PNG")
// n1 = "a1b2c3d4-e5f6-7890-abcd-ef1234567890.png"
n2 := FileUniqueName("contrato sin extension")
// n2 = "f9b6c2d1-..." (solo UUID)
n3 := FileUniqueName("malicious; rm -rf /.exe.txt")
// n3 = "{uuid}.txt"
Notas
Marcada como pure por contrato (no hace I/O ni depende de estado mutable explicitamente), pero internamente la generacion del UUID v4 usa un PRNG por lo que el resultado NO es determinista. Esto es aceptable en la convencion del registry: la pureza se refiere a la ausencia de side effects observables (no escribe a disco, red, ni globals), no al determinismo bit a bit.
La extension se sanitiza para evitar:
- Path traversal en disco (ej:
../../etc/passwd) - Inyeccion de comandos en logs/UI
- Ambiguedad de filesystem entre mayus/minus