package web import ( "log/slog" "net/http" "git.jmbit.de/jmb/scanfile/server/internal/database" "git.jmbit.de/jmb/scanfile/server/internal/store" ) func FileViewWebHandler(w http.ResponseWriter, r *http.Request) { file, err := database.GetFileByID(r.PathValue("uuid")) if err != nil { slog.Error("Error getting File in FileViewWebHandler", "error", err, "file-uuid", r.PathValue("uuid")) if err.Error() == "no rows in result set" { http.Error(w, err.Error(), http.StatusNotFound) } else { http.Error(w, err.Error(), http.StatusBadRequest) } return } fileProperties, err := database.GetFileProperties(file.ID) if err != nil { slog.Error("Error getting FileProperties in FileViewWebHandler", "error", err, "file-uuid", r.PathValue("uuid")) http.Error(w, err.Error(), http.StatusInternalServerError) return } component := FileView(file, fileProperties) err = component.Render(r.Context(), w) if err != nil { slog.Error("Error rendering in FileViewWebHandler", "error", err) http.Error(w, err.Error(), http.StatusBadRequest) return } } func FileViewMSOWebHandler(w http.ResponseWriter, r *http.Request) { data, err := database.GetMSOfficeResults(r.PathValue("uuid")) if err != nil { slog.Error("Error getting Data in FileViewMSOWebHandler", "error", err, "file-uuid", r.PathValue("uuid")) http.Error(w, err.Error(), http.StatusBadRequest) return } component := FileViewMsoffice(data) err = component.Render(r.Context(), w) if err != nil { slog.Error("Error rendering in FileViewMSOWebHandler", "error", err) http.Error(w, err.Error(), http.StatusBadRequest) return } } func FileViewDeleteWebHandler(w http.ResponseWriter, r *http.Request) { fileID := r.PathValue("uuid") err := database.DeleteFileByID(fileID) if err != nil { slog.Error("Error deleting File in FileViewDeleteHandler", "error", err, "file-uuid", fileID) http.Error(w, err.Error(), http.StatusInternalServerError) return } err = store.DeleteFile(fileID) if err != nil { slog.Error("Error deleting File in FileViewDeleteHandler", "error", err, "file-uuid", fileID) http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("HX-Redirect", "/") } func FileViewDownloadWebHandler(w http.ResponseWriter, r *http.Request) { file, err := database.GetFileByID(r.PathValue("uuid")) if err != nil { slog.Error("Error getting file info in FileViewDownloadWebHandler", "error", err, "file-uuid", r.PathValue("uuid")) http.Error(w, err.Error(), http.StatusBadRequest) return } filePath, err := store.AbsPath(file.ID.String()) if err != nil { slog.Error("Error getting absolute path in FileViewDownloadWebHandler", "error", err, "file-uuid", r.PathValue("uuid")) http.Error(w, err.Error(), http.StatusBadRequest) return } w.Header().Set("Content-Disposition", "attachment; filename="+file.Name) w.Header().Set("Content-Type", file.Mimetype) http.ServeFile(w, r, filePath) }