@@ -6,6 +6,7 @@ import { useCookies } from "react-cookie";
6
6
7
7
function Index ( ) {
8
8
const [ user , setUser ] = useState < UserDataT > ( ) ;
9
+ const [ token , setToken ] = useState < string | null > ( null ) ;
9
10
const [ , navigate ] = useLocation ( ) ;
10
11
const [ cookies , , removeCookie ] = useCookies ( [ "session" ] ) ;
11
12
const [ showForm , setShowForm ] = useState < boolean > ( false ) ;
@@ -160,6 +161,52 @@ function Index() {
160
161
await fetchUser ( ) ;
161
162
} ;
162
163
164
+ const getToken = async ( ) => {
165
+ let resp : Response ;
166
+
167
+ if ( ! cookies . session ) {
168
+ return navigate ( "/login" ) ;
169
+ }
170
+
171
+ try {
172
+ resp = await fetch ( "/users/token" , { credentials : "include" } ) ;
173
+ } catch ( error ) {
174
+ console . error ( error ) ;
175
+ return navigate ( "/login" ) ;
176
+ }
177
+
178
+ if ( ! resp . ok ) {
179
+ throw new Error ( `Unable to fetch user data from API: ${ resp . status } ` ) ;
180
+ }
181
+
182
+ const data : UserDataT = await resp . json ( ) ;
183
+ if ( ! data ) {
184
+ removeCookie ( "session" , cookies . session ) ;
185
+ return navigate ( "/login" ) ;
186
+ }
187
+
188
+ setToken ( data . token ) ;
189
+ } ;
190
+
191
+ const getStatus = ( ) => {
192
+ if ( ! user ) {
193
+ return "No Application" ;
194
+ }
195
+
196
+ if ( user . applications . length === 0 ) {
197
+ return "No Application" ;
198
+ }
199
+
200
+ const app = user . applications [ 0 ] ;
201
+ const status = user . status ? < b className = "green" > Connected</ b > : < b className = "warningRed" > Not Connected</ b > ;
202
+ return (
203
+ < div className = "status" >
204
+ < b style = { { fontSize : "1.1em" } } > { app . application_name } </ b >
205
+ { status }
206
+ </ div >
207
+ ) ;
208
+ } ;
209
+
163
210
useEffect ( ( ) => {
164
211
fetchUser ( ) ;
165
212
} , [ ] ) ;
@@ -183,9 +230,17 @@ function Index() {
183
230
< b className = "lightPurple" > API Token</ b >
184
231
< span > Your access token to TwitchIO Token Relay.</ span >
185
232
< span > To view this token you must generate a new one. You must keep this token confidential.</ span >
186
- < button type = "button" className = "simpleButton" >
233
+ < button type = "button" className = "simpleButton" onClick = { getToken } >
187
234
Generate Token
188
235
</ button >
236
+ { token ? (
237
+ < div className = "appDetails" >
238
+ < span >
239
+ < b > API Token</ b >
240
+ < span className = "highlight" > { token } </ span >
241
+ </ span >
242
+ </ div >
243
+ ) : null }
189
244
</ div >
190
245
</ div >
191
246
@@ -220,6 +275,7 @@ function Index() {
220
275
221
276
< div className = "details" >
222
277
< h3 > Status</ h3 >
278
+ < div > { user ? getStatus ( ) : null } </ div >
223
279
< hr className = "hrW" />
224
280
</ div >
225
281
</ main >
0 commit comments