package web import ( "io" "log/slog" "net/http" "git.jmbit.de/jmb/scanfile/server/internal/database" "git.jmbit.de/jmb/scanfile/server/internal/processing" "github.com/spf13/viper" ) func IndexWebHandler(w http.ResponseWriter, r *http.Request) { files, err := database.GetAllFiles() if err != nil { slog.Error("Error in IndexWebHandler", "error", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } component := Index(files) err = component.Render(r.Context(), w) if err != nil { slog.Error("Error rendering in IndexWebHandler", "error", err) http.Error(w, err.Error(), http.StatusBadRequest) return } } // IndexUploadHandler handles the upload of a new file func IndexUploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Only POST allowed", http.StatusBadRequest) return } maxUploadSize := viper.GetInt64("web.maxfilesizemb") * 1024 * 1024 r.Body = http.MaxBytesReader(w, r.Body, maxUploadSize) defer r.Body.Close() fileData, fileHeader, err := r.FormFile("file") if err != nil { slog.Error("Error parsing form in IndexUploadHandler", "error", err) http.Error(w, err.Error(), http.StatusBadRequest) return } slog.Debug("File form submitted", "file-name", fileHeader.Filename, "file-size", fileHeader.Size) fileBytes, err := io.ReadAll(fileData) if err != nil { slog.Error("Error reading file in IndexUploadHandler", "error", err) http.Error(w, err.Error(), http.StatusBadRequest) return } slog.Debug("File from form read", "file-name", fileHeader.Filename, "file-size", len(fileBytes)) file, err := database.CreateFile(r.Context(), fileHeader.Filename, fileBytes) if err != nil { slog.Error("Error saving file in IndexUploadHandler", "error", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } err = processing.Submit(r.Context(), file.ID) if err != nil { slog.Error("Error submitting file for processing in IndexUploadHandler", "error", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } //w.Header().Set("HX-Redirect", fmt.Sprintf("/files/%s", file.ID.String())) component := UploadSuccessCard(file) err = component.Render(r.Context(), w) if err != nil { slog.Error("Error rendering in IndexUploadHandler", "error", err) http.Error(w, err.Error(), http.StatusBadRequest) return } }