46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
/*
|
|
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)
|
|
}
|
|
}
|