package server import ( "asapo_common/logger" "asapo_discovery/common" "asapo_discovery/protocols" "net/http" ) func getService(service string) (answer []byte, code int) { var err error if service == "asapo-receiver" { answer, err = requestHandler.GetReceivers(settings.Receiver.UseIBAddress) } else { answer, err = requestHandler.GetSingleService(service) } log_str := "processing get " + service + " request" if err != nil { logger.Error(log_str + " - " + err.Error()) return []byte(err.Error()), http.StatusInternalServerError } logger.WithFields(map[string]interface{}{ "service": service, "answer": string(answer), }).Debug("processing get service request") return answer, http.StatusOK } func validateProtocol(w http.ResponseWriter, r *http.Request, client string) bool { protocol, err := extractProtocol(r) log_str := "validating " + client + " protocol" if err != nil { w.WriteHeader(http.StatusBadRequest) w.Write([]byte(err.Error())) logger.Error(log_str + " - " + err.Error()) return false } if hint, ok := protocols.ValidateProtocol(client, protocol); !ok { w.WriteHeader(http.StatusUnsupportedMediaType) w.Write([]byte(hint)) logger.Error(log_str + " - " + hint) return false } return true } func routeGetReceivers(w http.ResponseWriter, r *http.Request) { if ok := checkDiscoveryApiVersion(w, r); !ok { return } if !validateProtocol(w, r, "producer") { return } answer, code := getService(common.NameReceiverService) w.WriteHeader(code) w.Write(answer) } func routeGetBroker(w http.ResponseWriter, r *http.Request) { if ok := checkDiscoveryApiVersion(w, r); !ok { return } if !validateProtocol(w, r, "consumer") { return } answer, code := getService(common.NameBrokerService) w.WriteHeader(code) w.Write(answer) } func routeGetMongo(w http.ResponseWriter, r *http.Request) { answer, code := getService(common.NameMongoService) w.WriteHeader(code) w.Write(answer) } func routeGetFileTransferService(w http.ResponseWriter, r *http.Request) { if ok := checkDiscoveryApiVersion(w, r); !ok { return } if !validateProtocol(w, r, "consumer") { return } answer, code := getService(common.NameFtsService) w.WriteHeader(code) w.Write(answer) }