diff options
Diffstat (limited to 'src/helsinki.at/rhimportd/ctrlWebSimple.go')
-rw-r--r-- | src/helsinki.at/rhimportd/ctrlWebSimple.go | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/helsinki.at/rhimportd/ctrlWebSimple.go b/src/helsinki.at/rhimportd/ctrlWebSimple.go new file mode 100644 index 0000000..eb781dd --- /dev/null +++ b/src/helsinki.at/rhimportd/ctrlWebSimple.go @@ -0,0 +1,105 @@ +// +// rhimportd +// +// The Radio Helsinki Rivendell Import Daemon +// +// +// Copyright (C) 2015 Christian Pointner <equinox@helsinki.at> +// +// This file is part of rhimportd. +// +// rhimportd is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// rhimportd is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with rhimportd. If not, see <http://www.gnu.org/licenses/>. +// + +package main + +import ( + "encoding/json" + "helsinki.at/rhimport" + "html" + "net/http" + _ "net/http/pprof" + "fmt" +) + +type webSimpleRequestData struct { + UserName string `json:"LOGIN_NAME"` + Password string `json:"PASSWORD"` + GroupName string `json:"GROUP_NAME"` + Cart int `json:"CART_NUMBER"` + Channels int `json:"CHANNELS"` + NormalizationLevel int `json:"NORMALIZATION_LEVEL"` + AutotrimLevel int `json:"AUTOTRIM_LEVEL"` + UseMetaData bool `json:"USE_METADATA"` + SourceUri string `json:"SOURCE_URI"` +} + +type webSimpleResponseData struct { + ResponseCode int `json:"REPONSE_CODE"` + ErrorString string `json:"ERROR_STRING"` + AudioConvertError int `json:"AudioConvertError"` +} + +func webSimpleErrorResponse(w http.ResponseWriter, code int, error_str string, audio_err int) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusInternalServerError) + encoder := json.NewEncoder(w) + respdata := webSimpleResponseData{code, error_str, audio_err} + encoder.Encode(respdata) +} + +func webSimpleResponse(w http.ResponseWriter) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusInternalServerError) + encoder := json.NewEncoder(w) + respdata := webSimpleResponseData{200, "SUCCESS", 0} + encoder.Encode(respdata) +} + +func webSimpleHandler(conf *rhimport.Config, trusted bool, w http.ResponseWriter, r *http.Request) { + rhdl.Printf("SimpleHandler: request for '%s'", html.EscapeString(r.URL.Path)) + + decoder := json.NewDecoder(r.Body) + var reqdata webSimpleRequestData + if err := decoder.Decode(&reqdata); err != nil { + webSimpleErrorResponse(w, http.StatusInternalServerError, fmt.Sprintf("Error parsing JSON response: %s", err), 0) + return + } + + username := reqdata.UserName + if trusted { + username = r.Header.Get("X-Forwarded-User") + } + ctx := rhimport.NewImportContext(conf, username, reqdata.GroupName, reqdata.Cart) + ctx.Password = reqdata.Password + ctx.Trusted = trusted + ctx.Channels = reqdata.Channels + ctx.NormalizationLevel = reqdata.NormalizationLevel + ctx.AutotrimLevel = reqdata.AutotrimLevel + ctx.UseMetaData = reqdata.UseMetaData + + // TODO: call the fetcher + + // TODO: the following should be returned by the fetcher + ctx.SourceFile = "<undefined>" + ctx.DeleteSourceFile = true + + if err := rhimport.ImportFile(ctx); err != nil { + webSimpleErrorResponse(w, http.StatusInternalServerError, err.Error(), 0) + return + } + + webSimpleResponse(w) + return +} |