package view import ( "encoding/json" "fmt" "net/http" "arimelody.me/arimelody.me/admin" "arimelody.me/arimelody.me/global" "arimelody.me/arimelody.me/music/model" db "arimelody.me/arimelody.me/music/controller" "arimelody.me/arimelody.me/templates" ) // HTTP HANDLERS func ServeRelease(release model.Release) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // only allow authorised users to view hidden releases authorised := admin.GetSession(r) != nil if !authorised && !release.Visible { http.NotFound(w, r) return } fullRelease := &model.FullRelease{ Release: &release, } if authorised || release.IsReleased() { fullerRelease, err := db.GetFullRelease(global.DB, &release) if err != nil { fmt.Printf("FATAL: Failed to pull full release data for %s: %s\n", release.ID, err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } fullRelease = fullerRelease } w.Header().Add("Content-Type", "application/json") err := json.NewEncoder(w).Encode(fullRelease) if err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } }) } func ServeGateway(release model.Release) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // only allow authorised users to view hidden releases authorised := admin.GetSession(r) != nil if !authorised && !release.Visible { http.NotFound(w, r) return } fullRelease := &model.FullRelease{ Release: &release, } if authorised || release.IsReleased() { fullerRelease, err := db.GetFullRelease(global.DB, &release) if err != nil { fmt.Printf("FATAL: Failed to pull full release data for %s: %s\n", release.ID, err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } fullRelease = fullerRelease } err := templates.Pages["music-gateway"].Execute(w, fullRelease) if err != nil { fmt.Printf("Error rendering music gateway for %s: %s\n", release.ID, err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } }) }