added option to use proxy for oauth

This commit is contained in:
Djeeberjr 2023-09-05 21:01:24 +02:00
parent cd07570ec3
commit e650bde5a5
3 changed files with 37 additions and 1 deletions

View File

@ -12,6 +12,8 @@ type args struct {
PlaylistID string `arg:"--playlist-id,required,env:SPOTIFY_PLAYLIST_ID" help:"Just the id" placeholder:"SPOTIFY_PLAYLIST_ID"`
RedirectURL string `arg:"--redirect-url,required,env:SPOTIFY_REDIRECT_URL" help:"Must be the same as in the Spotify developer dashboard." placeholder:"SPOTIFY_REDIRECT_URL"`
ListenAddr string `arg:"--listen-addr,env:LISTEN_ADDR" help:"Address to listen on" placeholder:"LISTEN_ADDR" default:":3000"`
OAuthProxyURL string `arg:"--oauth-proxy-url,env:OAUTH_PROXY_URL" help:"URL of the oauth proxy" placeholder:"OAUTH_PROXY_URL"`
OAuthProxyAPIKey string `arg:"--oauth-proxy-api-key,env:OAUTH_PROXY_API_KEY" help:"API key for the oauth proxy" placeholder:"OAUTH_PROXY_API_KEY"`
}
func main() {
@ -25,5 +27,7 @@ func main() {
PlaylistID: args.PlaylistID,
RedirectURL: args.RedirectURL,
ListenAddr: args.ListenAddr,
OAuthProxyURL: args.OAuthProxyURL,
OAuthProxyAPIKey: args.OAuthProxyAPIKey,
}).Start()
}

View File

@ -19,6 +19,8 @@ type MorningAlarmConfig struct {
PlaylistID string `json:"wakeupContext"`
RedirectURL string `json:"redirectUrl"`
ListenAddr string `json:"listenAddr"`
OAuthProxyURL string `json:"oauthProxyUrl"`
OAuthProxyAPIKey string `json:"oauthProxyApiKey"`
}
type MorningAlarm struct {
@ -42,7 +44,11 @@ func (ma *MorningAlarm) Start() {
ma.ro = gin.Default()
ma.setupSpotify()
if ma.config.OAuthProxyURL != "" {
ma.setupSpotifyWithProxy()
} else {
ma.setupSpotify()
}
ma.setupWebserver()

View File

@ -16,6 +16,32 @@ import (
const redirectURI = "/api/spotifycb"
type headerTransport struct {
baseTransport http.RoundTripper
headers map[string]string
}
func (t *headerTransport) RoundTrip(req *http.Request) (*http.Response, error) {
for key, value := range t.headers {
req.Header.Set(key, value)
}
return t.baseTransport.RoundTrip(req)
}
func (ma *MorningAlarm) setupSpotifyWithProxy() {
client := &http.Client{
Transport: &headerTransport{
baseTransport: http.DefaultTransport,
headers: map[string]string{
"X-API-KEY": ma.config.OAuthProxyAPIKey,
},
},
}
ma.sp = spotify.New(client, spotify.WithBaseURL(ma.config.OAuthProxyURL))
}
func (ma *MorningAlarm) setupSpotify() error {
auth := spotifyauth.New(
spotifyauth.WithRedirectURL(ma.config.RedirectURL+redirectURI),