package routes import ( "bytes" "encoding/json" "io" "log" "net/http" "tomatentum.net/svg-templater/pkg/svg/actions" ) func CreateSVG(w http.ResponseWriter, r *http.Request) { if err := r.ParseMultipartForm(128000000); err != nil { http.Error(w, "Couldn't parse form data.", http.StatusBadRequest) return } fileheaders := r.MultipartForm.File["files"] files := make([][]byte, len(fileheaders)) for i, fileh := range fileheaders { file, err := fileh.Open() if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } buf, err := io.ReadAll(file) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } if ok, err := validateSVG(buf); err != nil || !ok { http.Error(w, err.Error(), http.StatusUnsupportedMediaType) log.Println("Wrong Media Type was uploaded\n", err) return } files[i] = buf } name := r.URL.Query().Get("name") data, err := actions.Create(files, name) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) log.Println("Failed creating SVG template\n", err) return } w.Header().Add("Content-Type", "application/json") json.NewEncoder(w).Encode(data) } func validateSVG(svgbuf []byte) (bool, error) { return bytes.Contains(svgbuf[:512], []byte("