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