Twitch badge support implemented

This commit is contained in:
Luxferre
2024-09-20 12:21:28 +03:00
parent 4e972bd5f5
commit 56f7da4748
9 changed files with 180 additions and 16 deletions
+45
View File
@@ -0,0 +1,45 @@
/*
StreamGoose internal badge provider — Go reference implementation
Created by Luxferre in 2024, released into public domain
*/
package main
import (
"net/http"
)
/* platform-specific badge provider implementations */
func badge_provider_impls() map[string]interface{} {
return map[string]interface{} {
"tw": func(badgename string) string { /* Twitch implementation */
if _, ok := TW_BADGE_CACHE[badgename]; ok { /* found */
return TW_BADGE_CACHE[badgename]
} else { /* not found */
return ""
}
},
/* "kk": func(badgename string) {}, */
}
}
/* serve the GET /badge/{platform}/{badgename} request */
/* returns a 301-type redirect to the resolved URL or 404 if unresolved */
func bp_handle_request(w http.ResponseWriter, r *http.Request) {
platform := r.PathValue("platform")
badgename := r.PathValue("badgename")
impls := badge_provider_impls()
if _, ok := impls[platform]; ok { /* process the badge and return 301 */
badgeurl := impls[platform].(func(string) string)(badgename)
if len(badgeurl) > 0 { /* return 301 redirect */
http.Redirect(w, r, badgeurl, http.StatusMovedPermanently)
} else { /* return 404 */
http.Error(w, "404 - Badge not found", http.StatusNotFound)
w.Write([]byte("404 - Badge not found"))
}
} else { /* return 404 */
http.Error(w, "404 - Badge provider not found", http.StatusNotFound)
}
}