49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
package routes
|
|
|
|
import (
|
|
"gifuu/tools"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"strconv"
|
|
)
|
|
|
|
func DELETE_Art_ID(w http.ResponseWriter, r *http.Request) {
|
|
ctx := r.Context()
|
|
query := r.URL.Query()
|
|
|
|
paramToken := query.Get("token")
|
|
paramID := tools.ParseSnowflake(r.PathValue("id"))
|
|
if paramToken == "" || paramID == 0 {
|
|
tools.SendClientError(w, r, tools.ERROR_BODY_INVALID_FIELD)
|
|
return
|
|
}
|
|
|
|
// Delete Art
|
|
tag, err := tools.Database.Exec(ctx,
|
|
`DELETE FROM gifuu.upload WHERE id = $1 AND upload_token_hash = $2`,
|
|
paramID,
|
|
tools.RequestHash(paramToken),
|
|
)
|
|
if err != nil {
|
|
tools.SendServerError(w, r, err)
|
|
return
|
|
}
|
|
if tag.RowsAffected() == 0 {
|
|
tools.SendClientError(w, r, tools.ERROR_GENERIC_UNAUTHORIZED)
|
|
return
|
|
}
|
|
|
|
go RemoveFilesForArt(paramID)
|
|
|
|
w.WriteHeader(http.StatusNoContent)
|
|
}
|
|
|
|
func RemoveFilesForArt(artID int64) {
|
|
normal := strconv.FormatInt(artID, 10)
|
|
target := path.Join(tools.STORAGE_DISK_PUBLIC, normal)
|
|
if err := os.RemoveAll(target); err != nil {
|
|
tools.LoggerStorage.Log(tools.WARN, "Failed to delete directory '%s': %s", target, err)
|
|
}
|
|
}
|