@@ -11,6 +11,7 @@ import (
11
11
"fmt"
12
12
"log"
13
13
"net/http"
14
+ "net/url"
14
15
"os/exec"
15
16
"runtime"
16
17
"time"
@@ -64,9 +65,16 @@ const RefreshTokenURL = "https://id.twitch.tv/oauth2/token?grant_type=refresh_to
64
65
const RevokeTokenURL = "https://id.twitch.tv/oauth2/revoke"
65
66
66
67
func ClientCredentialsLogin (p LoginParameters ) (LoginResponse , error ) {
67
- twitchClientCredentialsURL := fmt .Sprintf (`%s&client_id=%s&client_secret=%s` , p .URL , p .ClientID , p .ClientSecret )
68
+ u , err := url .Parse (p .URL )
69
+ if err != nil {
70
+ log .Fatal (err )
71
+ }
72
+ q := u .Query ()
73
+ q .Set ("client_id" , p .ClientID )
74
+ q .Set ("client_secret" , p .ClientSecret )
75
+ u .RawQuery = q .Encode ()
68
76
69
- resp , err := loginRequest (http .MethodPost , twitchClientCredentialsURL , nil )
77
+ resp , err := loginRequest (http .MethodPost , u . String () , nil )
70
78
if err != nil {
71
79
log .Fatal (err .Error ())
72
80
}
@@ -87,21 +95,27 @@ func ClientCredentialsLogin(p LoginParameters) (LoginResponse, error) {
87
95
}
88
96
89
97
func UserCredentialsLogin (p LoginParameters ) (LoginResponse , error ) {
90
- twitchAuthorizeURL := fmt .Sprintf (`%s&client_id=%s&redirect_uri=%s&force_verify=true` , p .AuthorizeURL , p .ClientID , p .RedirectURL )
91
-
98
+ u , err := url .Parse (p .AuthorizeURL )
99
+ if err != nil {
100
+ log .Fatal (err )
101
+ }
102
+ q := u .Query ()
103
+ q .Set ("client_id" , p .ClientID )
104
+ q .Set ("redirect_uri" , p .RedirectURL )
92
105
if p .Scopes != "" {
93
- twitchAuthorizeURL += "& scope=" + p .Scopes
106
+ q . Set ( " scope" , p .Scopes )
94
107
}
95
108
96
109
state , err := generateState ()
97
110
if err != nil {
98
111
log .Fatal (err .Error ())
99
112
}
100
113
101
- twitchAuthorizeURL += "&state=" + state
114
+ q .Set ("state" , state )
115
+ u .RawQuery = q .Encode ()
102
116
103
117
fmt .Println ("Opening browser. Press Ctrl+C to cancel..." )
104
- openBrowser (twitchAuthorizeURL )
118
+ openBrowser (u . String () )
105
119
106
120
ur , err := userAuthServer ()
107
121
if err != nil {
@@ -112,8 +126,15 @@ func UserCredentialsLogin(p LoginParameters) (LoginResponse, error) {
112
126
log .Fatal ("state mismatch" )
113
127
}
114
128
115
- twitchUserTokenURL := fmt .Sprintf (`%s&client_id=%s&client_secret=%s&redirect_uri=%s&code=%s` , p .URL , p .ClientID , p .ClientSecret , p .RedirectURL , ur .Code )
116
- resp , err := loginRequest (http .MethodPost , twitchUserTokenURL , nil )
129
+ u2 , err := url .Parse (p .URL )
130
+ q = u2 .Query ()
131
+ q .Set ("client_id" , p .ClientID )
132
+ q .Set ("client_secret" , p .ClientSecret )
133
+ q .Set ("redirect_uri" , p .RedirectURL )
134
+ q .Set ("code" , ur .Code )
135
+ u2 .RawQuery = q .Encode ()
136
+
137
+ resp , err := loginRequest (http .MethodPost , u2 .String (), nil )
117
138
if err != nil {
118
139
log .Fatalf ("Error reading body: %v" , err )
119
140
}
@@ -129,9 +150,16 @@ func UserCredentialsLogin(p LoginParameters) (LoginResponse, error) {
129
150
}
130
151
131
152
func CredentialsLogout (p LoginParameters ) (LoginResponse , error ) {
132
- twitchClientCredentialsURL := fmt .Sprintf (`%s?client_id=%s&token=%s` , p .URL , p .ClientID , p .Token )
153
+ u , err := url .Parse (p .URL )
154
+ if err != nil {
155
+ log .Fatal (err )
156
+ }
157
+ q := u .Query ()
158
+ q .Set ("client_id" , p .ClientID )
159
+ q .Set ("token" , p .Token )
160
+ u .RawQuery = q .Encode ()
133
161
134
- resp , err := loginRequest (http .MethodPost , twitchClientCredentialsURL , nil )
162
+ resp , err := loginRequest (http .MethodPost , u . String () , nil )
135
163
if err != nil {
136
164
log .Printf (err .Error ())
137
165
return LoginResponse {}, err
@@ -147,8 +175,17 @@ func CredentialsLogout(p LoginParameters) (LoginResponse, error) {
147
175
}
148
176
149
177
func RefreshUserToken (p RefreshParameters ) (LoginResponse , error ) {
150
- twitchRefreshTokenURL := fmt .Sprintf (`%s&client_id=%s&client_secret=%s&redirect_uri=&refresh_token=%s` , p .URL , p .ClientID , p .ClientSecret , p .RefreshToken )
151
- resp , err := loginRequest (http .MethodPost , twitchRefreshTokenURL , nil )
178
+ u , err := url .Parse (p .URL )
179
+ if err != nil {
180
+ log .Fatal (err )
181
+ }
182
+ q := u .Query ()
183
+ q .Set ("client_id" , p .ClientID )
184
+ q .Set ("client_secret" , p .ClientSecret )
185
+ q .Set ("refresh_token" , p .RefreshToken )
186
+ u .RawQuery = q .Encode ()
187
+
188
+ resp , err := loginRequest (http .MethodPost , u .String (), nil )
152
189
if err != nil {
153
190
return LoginResponse {}, err
154
191
}
0 commit comments