72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package webdebug
|
|
|
|
import (
|
|
"database/sql"
|
|
"net/http"
|
|
|
|
webutils "git.mstar.dev/mstar/goutils/http"
|
|
"git.mstar.dev/mstar/goutils/sliceutils"
|
|
"github.com/rs/zerolog/hlog"
|
|
|
|
"git.mstar.dev/mstar/linstrom/media"
|
|
"git.mstar.dev/mstar/linstrom/storage-new/dbgen"
|
|
"git.mstar.dev/mstar/linstrom/storage-new/models"
|
|
)
|
|
|
|
func uploadMedia(w http.ResponseWriter, r *http.Request) {
|
|
log := hlog.FromRequest(r)
|
|
_ = r.ParseMultipartForm(10 << 20) // 10MB
|
|
|
|
userId := r.FormValue("user-id")
|
|
blurred := r.FormValue("blurred") != ""
|
|
altText := r.FormValue("alt-text")
|
|
file, handler, err := r.FormFile("file")
|
|
if err != nil {
|
|
log.Warn().Err(err).Msg("Failed to get file from form")
|
|
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusBadRequest)
|
|
return
|
|
}
|
|
defer func() { _ = file.Close() }()
|
|
_, err = media.GlobalServer.AddFile(file, handler.Filename, userId, blurred, altText)
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to upload file to storage")
|
|
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
|
}
|
|
}
|
|
|
|
func forceMediaSync(w http.ResponseWriter, r *http.Request) {
|
|
go media.GlobalServer.ServiceEnsureFileSynchronisation()
|
|
}
|
|
|
|
func getOwnedFiles(w http.ResponseWriter, r *http.Request) {
|
|
type File struct {
|
|
Name, Id, Mime string
|
|
}
|
|
type Outbound struct {
|
|
Files []File
|
|
}
|
|
log := hlog.FromRequest(r)
|
|
userId := r.FormValue("id")
|
|
|
|
mm := dbgen.MediaMetadata
|
|
files, err := mm.Where(mm.OwnedById.Eq(sql.NullString{Valid: true, String: userId})).
|
|
Select(mm.Name, mm.Type, mm.ID).
|
|
Find()
|
|
if err != nil {
|
|
log.Error().Err(err).Str("user-id", userId).Msg("Failed to get files of user")
|
|
_ = webutils.ProblemDetailsStatusOnly(w, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
err = webutils.SendJson(w, Outbound{
|
|
Files: sliceutils.Map(files, func(t *models.MediaMetadata) File {
|
|
return File{
|
|
Name: t.Name,
|
|
Id: t.ID,
|
|
Mime: t.Type,
|
|
}
|
|
}),
|
|
})
|
|
if err != nil {
|
|
log.Error().Err(err).Msg("Failed to marshal response to json")
|
|
}
|
|
}
|