package endpoints import ( "bytes" "encoding/json" "fmt" "log" "net/http" "os" settings "physick.ru/culture_exam/Settings" ) type getErr struct { Error string } func (base getErr) String() string { var outp, jsonErr = json.Marshal(base) if jsonErr != nil { return fmt.Sprintf("Failed to parse settings: %s", jsonErr.Error()) } return string(outp) } func getSong(w http.ResponseWriter, r *http.Request) { var songName = r.URL.Query().Get("name") if len(songName) == 0 { fmt.Fprint(w, getErr { Error: "No song name provided" }) w.WriteHeader(http.StatusBadRequest) return } var fullPath = fmt.Sprintf("%s/%s", settings.Current.SongsLocation, songName) var file, fopenErr = os.ReadFile(fullPath) if fopenErr != nil { fmt.Fprint(w, getErr { Error: fopenErr.Error()}) w.WriteHeader(http.StatusBadRequest) return } w.Header().Add("Content-Type", "audio/mpeg") var audioChunks = bytes.NewBuffer(file) if _, err := audioChunks.WriteTo(w); err != nil { log.Println(err) } }