111 lines
3.8 KiB
Go
111 lines
3.8 KiB
Go
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
|
|
}
|
|
diec, err := database.GetFileDiec(file.ID)
|
|
if err != nil {
|
|
slog.Error("Error getting Detect-It-Easy in FileViewWebHandler", "error", err, "file-uuid", r.PathValue("uuid"))
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
component := FileView(file, fileProperties, diec)
|
|
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 FileViewCapaWebHandler(w http.ResponseWriter, r *http.Request) {
|
|
result, err := database.GetFileCapa(r.PathValue("uuid"))
|
|
if err != nil {
|
|
slog.Error("Error getting Data in FileViewCapaWebHandler", "error", err, "file-uuid", r.PathValue("uuid"))
|
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
slog.Debug("FileViewCapaWebHandler", "file-uuid", result.FileID.String(), "data", result.Data)
|
|
component := FileViewCapa(result.Data)
|
|
err = component.Render(r.Context(), w)
|
|
if err != nil {
|
|
slog.Error("Error rendering in FileViewCapaWebHandler", "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)
|
|
}
|