Mercurial > gemma
view pkg/controllers/geostyling.go @ 1840:e3311c18a8e3
Translated using Weblate (Romanian)
Currently translated at 5.7% (7 of 123 strings)
Translation: Gemma/client
Translate-URL: https://hosted.weblate.org/projects/gemma/client/ro/
author | Fadi Abbud <fadi.abbud@intevation.de> |
---|---|
date | Thu, 17 Jan 2019 11:19:15 +0000 |
parents | 22148eb0f986 |
children | 4a9a1e323e11 |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2018 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package controllers import ( "bytes" "fmt" "io" "log" "net/http" "github.com/gorilla/mux" "gemma.intevation.de/gemma/pkg/geoserver" "gemma.intevation.de/gemma/pkg/models" ) const ( maxStyleSize = 5 * 1024 * 1024 styleName = "style" ) func extractStyle(req *http.Request) (string, error) { f, _, err := req.FormFile(styleName) if err != nil { return "", err } defer f.Close() var buf bytes.Buffer if _, err := io.Copy(&buf, io.LimitReader(f, maxStyleSize)); err != nil { return "", err } return buf.String(), nil } func supportedWMSFeature(name string) bool { return len(models.InternalServices.Filter( models.IntAnd( models.IntWMS, models.IntByName(name)))) > 0 } func uploadStyle(rw http.ResponseWriter, req *http.Request) { feature := mux.Vars(req)["feature"] // only allow internal WMS features if !supportedWMSFeature(feature) { http.Error(rw, fmt.Sprintf("WMS feature %s is not found.", feature), http.StatusNotFound) return } style, err := extractStyle(req) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusBadRequest) return } log.Printf("info: uploaded file length: %d\n", len(style)) if err := models.UpdateInternalStyle(req, feature, style); err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } geoserver.ReconfigureStyle(feature) // Nothing to return rw.WriteHeader(http.StatusNoContent) }