diff pkg/controllers/srimports.go @ 1221:c193649d4f11

Add an area for temp uploads on the server to be addressed by tokens. If unused they will me thrown away after 45 minutes. There could be max 100 of them. If there are more to upload the oldest are removed first.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 19 Nov 2018 16:15:30 +0100
parents 49eead4fad3a
children bc4b642c8d04
line wrap: on
line diff
--- a/pkg/controllers/srimports.go	Mon Nov 19 16:02:34 2018 +0100
+++ b/pkg/controllers/srimports.go	Mon Nov 19 16:15:30 2018 +0100
@@ -15,16 +15,19 @@
 
 import (
 	"bufio"
+	"encoding/hex"
 	"io"
 	"io/ioutil"
 	"log"
 	"net/http"
 	"os"
 	"path/filepath"
+	"time"
 
 	"gemma.intevation.de/gemma/pkg/auth"
 	"gemma.intevation.de/gemma/pkg/config"
 	"gemma.intevation.de/gemma/pkg/imports"
+	"gemma.intevation.de/gemma/pkg/misc"
 )
 
 const (
@@ -34,6 +37,24 @@
 
 func downloadSoundingResult(req *http.Request) (string, error) {
 
+	// Check first if we have a token.
+	if token := req.FormValue("token"); token != "" {
+		if _, err := hex.DecodeString(token); err != nil {
+			return "", err
+		}
+		dir := config.TmpDir()
+		if dir == "" {
+			dir = os.TempDir()
+		}
+		// XXX: This should hopefully be race-free enough.
+		now := time.Now().Format("2006-15-04-05")
+		dst := filepath.Join(dir, soundingResultName+"-"+token+"-"+now)
+		if err := misc.UnmakeTempFile(token, dst); err != nil {
+			return "", err
+		}
+	}
+
+	// Check for direct upload.
 	f, _, err := req.FormFile(soundingResultName)
 	if err != nil {
 		return "", err