Mercurial > gemma
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