41 lines
1.4 KiB
Markdown
41 lines
1.4 KiB
Markdown
---
|
|
name: file_delete
|
|
kind: function
|
|
lang: go
|
|
domain: infra
|
|
version: "1.0.0"
|
|
purity: impure
|
|
signature: "func FileDelete(path string) error"
|
|
description: "Elimina un archivo del disco. Rechaza paths con \"..\" para evitar path traversal. Retorna error si el archivo no existe o si falla el remove."
|
|
tags: [file, delete, disk, storage, security, infra]
|
|
uses_functions: []
|
|
uses_types: []
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: [fmt, os, path/filepath, strings]
|
|
params:
|
|
- name: path
|
|
desc: "ruta del archivo a eliminar (no debe contener \"..\")"
|
|
output: "nil si el archivo se elimino correctamente, error si el path es vacio, contiene path traversal, no existe o falla la operacion"
|
|
tested: true
|
|
tests: ["elimina archivo existente", "rechaza path con ..", "rechaza path vacio", "retorna error si no existe"]
|
|
test_file_path: "functions/infra/file_delete_test.go"
|
|
file_path: "functions/infra/file_delete.go"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```go
|
|
err := FileDelete("./uploads/a1b2c3d4.png")
|
|
if err != nil {
|
|
log.Printf("delete fallo: %v", err)
|
|
}
|
|
```
|
|
|
|
## Notas
|
|
|
|
La proteccion contra path traversal es defensiva pero NO es suficiente por si sola: la app debe pasar paths que ya estan resueltos al directorio de storage (usar `filepath.Join(baseDir, storedName)`). Esta funcion es un cinturon adicional contra bugs en la app que llamaria.
|
|
|
|
NO sigue symlinks de forma especial — `os.Remove` borra el symlink, no el target.
|