package view import ( "net/http" "arimelody.me/arimelody.me/admin" "arimelody.me/arimelody.me/global" "arimelody.me/arimelody.me/music/model" ) // HTTP HANDLER METHODS func Handler() http.Handler { mux := http.NewServeMux() mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { ServeCatalog().ServeHTTP(w, r) return } ServeGateway().ServeHTTP(w, r) })) return mux } func ServeCatalog() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { releases := []*model.Release{} authorised := admin.GetSession(r) != nil for _, release := range global.Releases { if !release.IsReleased() && !authorised { continue } releases = append(releases, release) } global.ServeTemplate("music.html", releases).ServeHTTP(w, r) }) } /* func ServeArtwork() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { http.NotFound(w, r) return } if !strings.HasSuffix(r.URL.Path, ".png") { http.NotFound(w, r) return } releaseID := r.URL.Path[1:len(r.URL.Path) - 4] var release = GetRelease(releaseID) if release == nil { http.NotFound(w, r) return } // only allow authorised users to view unreleased releases authorised := r.Context().Value("role") != nil && r.Context().Value("role") == "admin" if !release.IsReleased() && !authorised { admin.MustAuthorise(ServeArtwork()).ServeHTTP(w, r) return } fp := filepath.Join("data", "music-artwork", releaseID + ".png") info, err := os.Stat(fp) if err != nil { if os.IsNotExist(err) { http.NotFound(w, r) return } } length := info.Size() file, err := os.Open(fp) if err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } defer file.Close() var bytes = make([]byte, length) file.Read(bytes) w.Header().Add("Content-Type", "image/png") w.WriteHeader(http.StatusOK) w.Write(bytes) }) } */