Mercurial > public > pacobot
annotate auth/auth.go @ 8:e9df3bb010f4
fix issues
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 13 Mar 2025 17:41:42 +0000 |
parents | cmd/auth.go@a8aab75f68c9 |
children | aaf85ae1f942 |
rev | line source |
---|---|
8 | 1 package auth |
6 | 2 |
3 import ( | |
4 "encoding/json" | |
5 "log" | |
6 "net/http" | |
7 "net/url" | |
8 ) | |
9 | |
10 // TODO: Change unmarshall to JSON DECODE | |
11 | |
12 func GetAuthUrl() string { | |
8 | 13 config := ReadConfig() |
6 | 14 |
15 baseUrl := &url.URL{ | |
16 Scheme: "https", | |
17 Host: "id.twitch.tv", | |
18 Path: "/oauth2/authorize", | |
19 } | |
20 | |
21 params := url.Values{} | |
22 params.Add("client_id", config.ClientId) | |
23 params.Add("force_verify", "true") | |
24 params.Add("redirect_uri", "http://localhost:8080/twitch-auth-code-callback") | |
25 params.Add("response_type", "code") | |
26 params.Add("scope", "channel:bot user:read:chat") | |
27 params.Add("state", "c3ab8aa609ea11e793ae92361f002671") | |
28 | |
29 baseUrl.RawQuery = params.Encode() | |
30 | |
31 return baseUrl.String() | |
32 } | |
33 | |
34 func GetAuthToken(authCode string) AuthRes { | |
8 | 35 config := ReadConfig() |
6 | 36 |
37 baseUrl := &url.URL{ | |
38 Scheme: "https", | |
39 Host: "id.twitch.tv", | |
40 Path: "/oauth2/token", | |
41 } | |
42 | |
43 formData := url.Values{} | |
44 formData.Add("client_id", config.ClientId) | |
45 formData.Add("client_secret", config.ClientSecret) | |
46 formData.Add("code", authCode) | |
47 formData.Add("grant_type", "authorization_code") | |
48 formData.Add("redirect_uri", "http://localhost:8080/twitch-auth-code-callback") | |
49 | |
50 res, err := http.PostForm(baseUrl.String(), formData) | |
51 | |
52 if err != nil { | |
53 log.Fatal(err) | |
54 } | |
55 | |
56 defer res.Body.Close() | |
57 | |
58 if res.StatusCode != 200 { | |
59 log.Fatal("GetAuthToken") | |
60 } | |
61 | |
62 var authRes AuthRes | |
63 | |
64 err = json.NewDecoder(res.Body).Decode(&authRes) | |
65 | |
66 if err != nil { | |
67 log.Fatal(err) | |
68 } | |
69 | |
70 return authRes | |
71 } | |
72 | |
73 func IsAuthTokenValid(authToken string) bool { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
74 baseUrl := &url.URL{ |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
75 Scheme: "https", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
76 Host: "id.twitch.tv", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
77 Path: "oauth2/validate", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
78 } |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
79 |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
80 req, err := http.NewRequest("GET", baseUrl.String(), nil) |
6 | 81 |
82 if err != nil { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
83 log.Fatal(err) |
6 | 84 } |
85 | |
86 req.Header.Set("Authorization", "OAuth "+authToken) | |
87 | |
88 client := &http.Client{} | |
89 resp, err := client.Do(req) | |
90 | |
91 if err != nil { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
92 log.Fatal(err) |
6 | 93 } |
94 | |
95 defer resp.Body.Close() | |
96 | |
97 return resp.StatusCode == 200 | |
98 } | |
99 | |
100 func RevokeAuthToken(authToken string) { | |
8 | 101 config := ReadConfig() |
6 | 102 |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
103 baseUrl := &url.URL{ |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
104 Scheme: "https", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
105 Host: "id.twitch.tv", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
106 Path: "oauth2/revoke", |
6 | 107 } |
108 | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
109 data := url.Values{} |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
110 data.Add("client_id", config.ClientId) |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
111 data.Add("token", authToken) |
6 | 112 |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
113 res, err := http.PostForm(baseUrl.String(), data) |
6 | 114 |
115 if err != nil { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
116 log.Fatal(err) |
6 | 117 } |
118 | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
119 defer res.Body.Close() |
6 | 120 } |
121 | |
122 func RefreshAuthToken(authToken, refreshToken string) AuthRes { | |
8 | 123 config := ReadConfig() |
6 | 124 |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
125 baseUrl := &url.URL{ |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
126 Scheme: "https", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
127 Host: "id.twitch.tv", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
128 Path: "oauth2/token", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
129 } |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
130 |
6 | 131 data := url.Values{} |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
132 data.Add("grant_type", "refresh_token") |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
133 data.Add("refresh_token", refreshToken) |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
134 data.Add("client_id", config.ClientId) |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
135 data.Add("client_secret", config.ClientSecret) |
6 | 136 |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
137 res, err := http.PostForm(baseUrl.String(), data) |
6 | 138 |
139 if err != nil { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
140 log.Fatal(err) |
6 | 141 } |
142 | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
143 defer res.Body.Close() |
6 | 144 |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
145 var authRes AuthRes |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
146 |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
147 err = json.NewDecoder(res.Body).Decode(&authRes) |
6 | 148 |
149 if err != nil { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
150 log.Fatal(err) |
6 | 151 } |
152 | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
153 return authRes |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
154 } |
6 | 155 |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
156 func GetUser(userName, authToken string) UserRes { |
8 | 157 config := ReadConfig() |
6 | 158 |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
159 baseUrl := &url.URL{ |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
160 Scheme: "https", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
161 Host: "api.twitch.tv", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
162 Path: "helix/users", |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
163 } |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
164 |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
165 params := url.Values{} |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
166 params.Add("login", userName) |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
167 |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
168 req, err := http.NewRequest("GET", baseUrl.String(), nil) |
6 | 169 |
170 if err != nil { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
171 log.Fatal(err) |
6 | 172 } |
173 | |
174 req.Header.Set("Client-ID", config.ClientId) | |
175 req.Header.Set("Authorization", "Bearer "+authToken) | |
176 | |
177 client := &http.Client{} | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
178 res, err := client.Do(req) |
6 | 179 |
180 if err != nil { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
181 log.Fatal(err) |
6 | 182 } |
183 | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
184 defer res.Body.Close() |
6 | 185 |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
186 var userRes UserRes |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
187 |
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
188 err = json.NewDecoder(res.Body).Decode(&userRes) |
6 | 189 |
190 if err != nil { | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
191 log.Fatal(err) |
6 | 192 } |
193 | |
7
a8aab75f68c9
cmd/auth.go: refactor code
Dennis C. M. <dennis@denniscm.com>
parents:
6
diff
changeset
|
194 return userRes |
6 | 195 } |