From 7914fba52ad9ad0e68164775198dacf5f3763b63 Mon Sep 17 00:00:00 2001 From: ari melody Date: Mon, 5 Aug 2024 16:49:49 +0100 Subject: [PATCH] hide some information for visible but unreleased releases Signed-off-by: ari melody --- admin/admin.go | 8 ++++++++ admin/http.go | 6 +++--- music/model/release.go | 7 ++++--- music/view/music.go | 15 ++++++++------- music/view/release.go | 40 +++++++++++++++++++++++----------------- views/music-gateway.html | 35 ++++++++++------------------------- 6 files changed, 56 insertions(+), 55 deletions(-) diff --git a/admin/admin.go b/admin/admin.go index d5ab6e7..729cc93 100644 --- a/admin/admin.go +++ b/admin/admin.go @@ -18,6 +18,14 @@ type ( const TOKEN_LENGTH = 64 const TOKEN_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" +var ADMIN_BYPASS = func() bool { + if os.Getenv("ARIMELODY_ADMIN_BYPASS") == "true" { + fmt.Println("WARNING: Admin login is currently BYPASSED by ARIMELODY_ADMIN_BYPASS.") + return true + } + return false +}() + var ADMIN_ID_DISCORD = func() string { envvar := os.Getenv("DISCORD_ADMIN_ID") if envvar == "" { diff --git a/admin/http.go b/admin/http.go index 1fdd237..ec2981b 100644 --- a/admin/http.go +++ b/admin/http.go @@ -85,9 +85,9 @@ func MustAuthorise(next http.Handler) http.Handler { } func GetSession(r *http.Request) *Session { - if os.Getenv("ARIMELODY_ADMIN_BYPASS") == "true" { - return &Session{} - } + // if ADMIN_BYPASS { + // return &Session{} + // } var token = "" // is the session token in context? diff --git a/music/model/release.go b/music/model/release.go index 47dce6e..12eb15c 100644 --- a/music/model/release.go +++ b/music/model/release.go @@ -24,10 +24,11 @@ type ( ) const ( - Single ReleaseType = "Single" - Album ReleaseType = "Album" + Single ReleaseType = "single" + Album ReleaseType = "album" EP ReleaseType = "EP" - Compilation ReleaseType = "Compilation" + Compilation ReleaseType = "compilation" + Upcoming ReleaseType = "upcoming" ) // GETTERS diff --git a/music/view/music.go b/music/view/music.go index bcfcf29..aa9e255 100644 --- a/music/view/music.go +++ b/music/view/music.go @@ -3,7 +3,6 @@ package view import ( "net/http" - "arimelody.me/arimelody.me/admin" "arimelody.me/arimelody.me/global" "arimelody.me/arimelody.me/music/model" ) @@ -26,13 +25,15 @@ func Handler() http.Handler { 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 := []model.Release{} + for _, r := range global.Releases { + if r.Visible { + release := *r + if !release.IsReleased() { + release.ReleaseType = model.Upcoming + } + releases = append(releases, release) } - releases = append(releases, release) } global.ServeTemplate("music.html", releases).ServeHTTP(w, r) diff --git a/music/view/release.go b/music/view/release.go index 11b18e8..634c481 100644 --- a/music/view/release.go +++ b/music/view/release.go @@ -21,7 +21,8 @@ type ( gatewayRelease struct { *model.Release - Tracks []gatewayTrack + Tracks []gatewayTrack + Authorised bool } ) @@ -35,18 +36,23 @@ func ServeRelease() http.Handler { } releaseID := r.URL.Path[1:] - var release = global.GetRelease(releaseID) - if release == nil { + var releaseRef = global.GetRelease(releaseID) + if releaseRef == nil { http.NotFound(w, r) return } + var release = *releaseRef - // only allow authorised users to view unreleased releases - authorised := admin.GetSession(r) != nil - if !release.IsReleased() && !authorised { - admin.MustAuthorise(ServeRelease()).ServeHTTP(w, r) - return - } + // only allow authorised users to view hidden releases + authorised := admin.GetSession(r) != nil + if !authorised && !release.Visible { + http.NotFound(w, r) + return + } + if !authorised && !release.IsReleased() { + release.Tracks = nil + release.Credits = nil + } w.Header().Add("Content-Type", "application/json") err := json.NewEncoder(w).Encode(release) @@ -71,6 +77,13 @@ func ServeGateway() http.Handler { return } + // only allow authorised users to view hidden releases + authorised := admin.GetSession(r) != nil + if !release.Visible && !authorised { + http.NotFound(w, r) + return + } + tracks := []gatewayTrack{} for i, track := range release.Tracks { tracks = append([]gatewayTrack{{ @@ -80,16 +93,9 @@ func ServeGateway() http.Handler { }}, tracks...) } - // only allow authorised users to view unreleased releases - authorised := admin.GetSession(r) != nil - if !release.IsReleased() && !authorised { - admin.MustAuthorise(ServeGateway()).ServeHTTP(w, r) - return - } - lrw := global.LoggingResponseWriter{ResponseWriter: w, Code: http.StatusOK} - global.ServeTemplate("music-gateway.html", gatewayRelease{release, tracks}).ServeHTTP(&lrw, r) + global.ServeTemplate("music-gateway.html", gatewayRelease{release, tracks, authorised}).ServeHTTP(&lrw, r) if lrw.Code != http.StatusOK { fmt.Printf("Error rendering music gateway for %s\n", id) diff --git a/views/music-gateway.html b/views/music-gateway.html index 92e3b21..df71783 100644 --- a/views/music-gateway.html +++ b/views/music-gateway.html @@ -57,7 +57,11 @@ {{.GetReleaseYear}}

{{.PrintArtists true true}}

+ {{if .IsReleased}}

{{.ReleaseType}}

+ {{else}} +

upcoming

+ {{end}}