Panel terminé + Refresh token auto

This commit is contained in:
Zachary Guénot
2023-05-11 00:37:16 +02:00
parent de01c981f8
commit 8846299424
18 changed files with 251 additions and 64 deletions

25
utils/checkChannel.js Normal file
View File

@@ -0,0 +1,25 @@
require('dotenv').config()
const validateToken = require('./validateToken')
const refreshToken = require('./refreshToken')
const writeEnv = require('./writeEnv')
let client_id = process.env.TWITCH_APP_ID
let client_secret = process.env.TWITCH_APP_SECRET
module.exports = async function (channel_access_token) {
let channel_refresh_token = ''
// Check if channel_access_token is valid
if (!await validateToken(channel_access_token)) {
// If not, refresh it
[channel_access_token, channel_refresh_token] = await refreshToken(client_id, client_secret, channel_access_token)
writeEnv('TWITCH_CHANNEL_ACCESS_TOKEN', channel_access_token)
writeEnv('TWITCH_CHANNEL_REFRESH_TOKEN', channel_refresh_token)
let channel_name = await getUserInfo(client_id, channel_access_token).login
writeEnv('TWITCH_CHANNEL_USERNAME', channel_name)
}
return [channel_access_token, channel_name]
}

25
utils/checkUser.js Normal file
View File

@@ -0,0 +1,25 @@
require('dotenv').config()
const validateToken = require('./validateToken')
const refreshToken = require('./refreshToken')
const writeEnv = require('./writeEnv')
let client_id = process.env.TWITCH_APP_ID
let client_secret = process.env.TWITCH_APP_SECRET
module.exports = async function (user_access_token) {
let user_refresh_token = ''
// Check if user_access_token is valid
if (!await validateToken(user_access_token)) {
// If not, refresh it
[user_access_token, user_refresh_token ] = await refreshToken(client_id, client_secret, user_access_token)
writeEnv('TWITCH_USER_ACCESS_TOKEN', user_access_token)
writeEnv('TWITCH_USER_REFRESH_TOKEN', user_refresh_token)
let user_name = await getUserInfo(client_id, user_access_token).login
writeEnv('TWITCH_USER_USERNAME', user_name)
}
return [user_access_token, user_name]
}

View File

@@ -1,4 +1,5 @@
const mysql = require('mysql2/promise')
require('dotenv').config()
module.exports = async function () {
// Create a connection to the MySQL database

View File

@@ -7,6 +7,7 @@ module.exports = async function (client_id, access_token, broadcaster_id, reward
'Client-Id': client_id
}
}).then(response => {
//console.log(response.data)
let reward = response.data.data.find(reward => reward.title === reward_name)
return reward.id
}).catch(error => { console.log(error.response.data) })

View File

@@ -8,7 +8,7 @@ module.exports = async function (client_id, client_secret, code, redirect_uri) {
redirect_uri,
grant_type: 'authorization_code'
}).then(response => {
console.log(response.data)
if (response.data.token_type === 'bearer') return response.data.access_token
//console.log(response.data)
if (response.data.token_type === 'bearer') return [response.data.access_token, response.data.refresh_token]
}).catch(error => { console.log(error.response.data) })
}

View File

@@ -1,13 +0,0 @@
const axios = require('axios')
module.exports = async function (client_id, access_token) {
return await axios.get(`https://api.twitch.tv/helix/users`, {
headers: {
'Authorization': `Bearer ${access_token}`,
'Client-Id': client_id
}
}).then(response => {
//console.log(response.data)
return response.data.data[0].id
}).catch(error => { console.log(error.response.data) })
}

View File

@@ -1,13 +0,0 @@
const axios = require('axios')
module.exports = async function (client_id, access_token) {
return await axios.get(`https://api.twitch.tv/helix/users`, {
headers: {
'Authorization': `Bearer ${access_token}`,
'Client-Id': client_id
}
}).then(response => {
//console.log(response.data)
return response.data.data[0].login
}).catch(error => { console.log(error.response.data) })
}

View File

@@ -1,7 +1,7 @@
module.exports = async function (client_id, redirect_uri, scope) {
console.log(scope)
let queries = {
response_type: 'code',
response_type: 'code',
client_id,
redirect_uri,
scope: scope.join('+')

13
utils/refreshToken.js Normal file
View File

@@ -0,0 +1,13 @@
const axios = require('axios')
module.exports = async function (client_id, client_secret, refresh_token) {
return await axios.post('https://id.twitch.tv/oauth2/token', {
client_id,
client_secret,
refresh_token,
grant_type: 'refresh_token'
}).then(response => {
//console.log(response.data)
if (response.data.token_type === 'bearer') return [response.data.access_token, response.data.refresh_token]
}).catch(error => { console.log(error.response.data) })
}

View File

@@ -16,6 +16,7 @@ module.exports = async function (client_id, access_token, session_id, type, vers
'Content-Type': 'application/json'
}
}).then(response => {
//console.log(response.data)
return response.data.data[0].status
}).catch(error => { return error.response.data })
}

13
utils/validateToken.js Normal file
View File

@@ -0,0 +1,13 @@
const axios = require('axios')
module.exports = async function (access_token) {
return await axios.get('https://id.twitch.tv/oauth2/validate', {
headers: {
'Authorization': `OAuth ${access_token}`,
}
}).then(response => {
//console.log(response.data)
if (response.data.status === '401') return false
else return true
}).catch(error => { console.log(error.response.data) })
}

View File

@@ -1,7 +1,7 @@
const fs = require('fs')
module.exports = function (variable, value) {
let parsedFile = fs.readFileSync('./.env', 'utf8')
parsedFile = parsedFile.replace(new RegExp(`${variable}=.*`, 'g'), `${variable}=${value}`)
fs.writeFileSync('./.env', parsedFile)
let parsedFile = fs.readFileSync('./.env', 'utf8')
parsedFile = parsedFile.replace(new RegExp(`${variable}=.*`, 'g'), `${variable}=${value}`)
fs.writeFileSync('./.env', parsedFile)
}