// // rhimportd // // The Radio Helsinki Rivendell Import Daemon // // // Copyright (C) 2015 Christian Pointner // // 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 . // 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 = "" ctx.DeleteSourceFile = true if err := rhimport.ImportFile(ctx); err != nil { webSimpleErrorResponse(w, http.StatusInternalServerError, err.Error(), 0) return } webSimpleResponse(w) return }