upload.go 768 B

123456789101112131415161718192021222324252627282930313233
  1. package api
  2. import (
  3. "net/http"
  4. executor "github.com/OliveTin/OliveTin/internal/executor"
  5. )
  6. // GetActionArgumentUploadHandler serves POST multipart uploads for file_upload action arguments.
  7. func GetActionArgumentUploadHandler(ex *executor.Executor) http.HandlerFunc {
  8. api := &oliveTinAPI{
  9. executor: ex,
  10. cfg: ex.Cfg,
  11. streamingClients: make(map[*streamingClient]struct{}),
  12. }
  13. return api.handleActionArgumentUpload
  14. }
  15. func (api *oliveTinAPI) handleActionArgumentUpload(w http.ResponseWriter, r *http.Request) {
  16. if !api.uploadPrelude(w, r) {
  17. return
  18. }
  19. if !api.parseUploadForm(w, r) {
  20. return
  21. }
  22. defer api.uploadCleanupForm(r)
  23. token, ok := api.tryProcessUpload(w, r)
  24. if !ok {
  25. return
  26. }
  27. api.writeUploadTokenResponse(w, token)
  28. }