func routeGroup(r *http.Request, cfg config.Config) (int, http.Header, []byte, error) { //STANDARD DECLARATIONS START code := http.StatusOK h := http.Header{} output := []byte("") err := error(nil) charset := "utf-8" //STANDARD DECLARATIONS END // Handle response format based on Accept Header contentType := r.Header.Get("Accept") vars := mux.Vars(r) // Grab Tenant DB configuration from context tenantcfg := context.Get(r, "tenant_conf").(config.MongoConfig) session, err := mongo.OpenSession(tenantcfg) defer mongo.CloseSession(session) if err != nil { return code, h, output, err } requestedReport := reports.MongoInterface{} err = mongo.FindOne(session, tenantcfg.Db, "reports", bson.M{"info.name": vars["report_name"]}, &requestedReport) if err != nil { code = http.StatusNotFound message := "The report with the name " + vars["report_name"] + " does not exist" output, err := createErrorMessage(message, code, contentType) //Render the response into XML or JSON h.Set("Content-Type", fmt.Sprintf("%s; charset=%s", contentType, charset)) return code, h, output, err } selectedGroupType := requestedReport.DetermineGroupType(vars["group_type"]) if selectedGroupType == "endpoint" { if vars["lgroup_type"] == "" { vars["lgroup_type"] = vars["group_type"] vars["lgroup_name"] = vars["group_name"] vars["group_type"] = "" vars["group_name"] = "" } return ListEndpointGroupResults(r, cfg) } else if selectedGroupType == "group" { return ListSuperGroupResults(r, cfg) } code = http.StatusNotFound message := "The report " + vars["report_name"] + " does not define any group type: " + vars["group_type"] output, err = createErrorMessage(message, code, contentType) //Render the response into XML or JSON h.Set("Content-Type", fmt.Sprintf("%s; charset=%s", contentType, charset)) return code, h, output, err }
func routeGroup(r *http.Request, cfg config.Config) (int, http.Header, []byte, error) { //STANDARD DECLARATIONS START code := http.StatusOK h := http.Header{} output := []byte("") err := error(nil) contentType := "application/xml" charset := "utf-8" //STANDARD DECLARATIONS END // Handle response format based on Accept Header // Default is application/xml format := r.Header.Get("Accept") if strings.EqualFold(format, "application/json") { contentType = "application/json" } vars := mux.Vars(r) tenantcfg, err := authentication.AuthenticateTenant(r.Header, cfg) if err != nil { if err.Error() == "Unauthorized" { code = http.StatusUnauthorized message := err.Error() output, err = createErrorMessage(message, contentType) h.Set("Content-Type", fmt.Sprintf("%s; charset=%s", contentType, charset)) return code, h, output, err } code = http.StatusInternalServerError return code, h, output, err } session, err := mongo.OpenSession(tenantcfg) defer mongo.CloseSession(session) if err != nil { return code, h, output, err } requestedReport := reports.MongoInterface{} err = mongo.FindOne(session, tenantcfg.Db, "reports", bson.M{"info.name": vars["report_name"]}, &requestedReport) if err != nil { code = http.StatusBadRequest message := "The report with the name " + vars["report_name"] + " does not exist" output, err := createErrorMessage(message, contentType) //Render the response into XML or JSON h.Set("Content-Type", fmt.Sprintf("%s; charset=%s", contentType, charset)) return code, h, output, err } selectedGroupType := requestedReport.DetermineGroupType(vars["group_type"]) if selectedGroupType == "endpoint" { if vars["lgroup_type"] == "" { vars["lgroup_type"] = vars["group_type"] vars["lgroup_name"] = vars["group_name"] vars["group_type"] = "" vars["group_name"] = "" } return ListEndpointGroupResults(r, cfg) } else if selectedGroupType == "group" { return ListSuperGroupResults(r, cfg) } code = http.StatusBadRequest message := "The report " + vars["report_name"] + " does not define any group type: " + vars["group_type"] output, err = createErrorMessage(message, format) //Render the response into XML or JSON h.Set("Content-Type", fmt.Sprintf("%s; charset=%s", format, charset)) return code, h, output, err }