diff --git a/utils/checkChannel.js b/utils/checkChannel.js index 8cb3503..4644d7b 100644 --- a/utils/checkChannel.js +++ b/utils/checkChannel.js @@ -1,8 +1,9 @@ require('dotenv').config() -const validateToken = require('./validateToken') -const refreshToken = require('./refreshToken') -const writeEnv = require('./writeEnv') +const dbRefreshToken = require('./dbRefreshToken') +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 @@ -12,7 +13,10 @@ module.exports = checkChannel = (async (channel_access_token) => { // Check if channel_access_token is valid if (!await validateToken(channel_access_token)) { - result = await refreshToken(client_id, client_secret, process.env.TWITCH_CHANNEL_REFRESH_TOKEN) + let channel_refresh_token = await dbRefreshToken('get', 'channel') + if (channel_refresh_token.error) return channel_refresh_token.error + + result = await refreshToken(client_id, client_secret, channel_refresh_token) if (result.status) return result = ['no_refresh', result.message] else { @@ -20,6 +24,8 @@ module.exports = checkChannel = (async (channel_access_token) => { writeEnv('TWITCH_CHANNEL_ACCESS_TOKEN', channel_access_token) writeEnv('TWITCH_CHANNEL_REFRESH_TOKEN', channel_refresh_token) + await dbRefreshToken('update', 'channel', channel_refresh_token) + let channel_name = await getUserInfo(client_id, channel_access_token, 'login') writeEnv('TWITCH_CHANNEL_NAME', channel_name) } diff --git a/utils/checkUser.js b/utils/checkUser.js index daad505..4e747b2 100644 --- a/utils/checkUser.js +++ b/utils/checkUser.js @@ -1,8 +1,9 @@ require('dotenv').config() -const validateToken = require('./validateToken') -const refreshToken = require('./refreshToken') -const writeEnv = require('./writeEnv') +const dbRefreshToken = require('./dbRefreshToken') +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 @@ -12,7 +13,10 @@ module.exports = checkUser = (async (user_access_token) => { // Check if user_access_token is valid if (!await validateToken(user_access_token)) { - result = await refreshToken(client_id, client_secret, process.env.TWITCH_USER_REFRESH_TOKEN) + let user_refresh_token = await dbRefreshToken('get', 'user') + if (user_refresh_token.error) return user_refresh_token.error + + result = await refreshToken(client_id, client_secret, user_refresh_token) if (result.status) return result = ['no_refresh', result.message] else { @@ -20,6 +24,8 @@ module.exports = checkUser = (async (user_access_token) => { writeEnv('TWITCH_USER_ACCESS_TOKEN', user_access_token) writeEnv('TWITCH_USER_REFRESH_TOKEN', user_refresh_token) + await dbRefreshToken('update', 'user', user_refresh_token) + let user_name = await getUserInfo(client_id, user_access_token, 'login') writeEnv('TWITCH_USER_NAME', user_name) } diff --git a/utils/dbRefreshToken.js b/utils/dbRefreshToken.js new file mode 100644 index 0000000..a353874 --- /dev/null +++ b/utils/dbRefreshToken.js @@ -0,0 +1,40 @@ +const mysql = require('mysql2/promise') +require('dotenv').config() + +module.exports = dbRefreshToken = (async (action, type, token) => { + // Create a connection to the MySQL database + const connection = await mysql.createConnection({ + host: process.env.MYSQL_HOST, + port: process.env.MYSQL_PORT, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE + }) + + if (action === 'get') { + // Get the refresh token from the database + let results = await connection.query('SELECT value FROM env WHERE refresh_token = ?', [type]) + .then(async ([rows, fields]) => { return rows[0].value }) + .catch(error => { console.error(error) }) + + // Terminate the connection to the database + await connection.end() + + if (!results) return { error: "Can't get the refresh token !" } + return results + } + else if (action === 'update') { + // Update the refresh token in the database + let results = await connection.query('UPDATE env SET value = ? WHERE refresh_token = ?', [token, type]) + .then(async ([rows, fields]) => { return rows }) + .catch(error => { console.error(error) }) + + // Terminate the connection to the database + await connection.end() + + if (!results) return { error: "Can't update the refresh token !" } + return results + } + + return result +}) \ No newline at end of file diff --git a/utils/rewardRedemption.js b/utils/rewardRedemption.js index 9e45cd3..cca1651 100644 --- a/utils/rewardRedemption.js +++ b/utils/rewardRedemption.js @@ -40,6 +40,7 @@ module.exports = rewardRedemption = (async (viewer_id, viewer_name, client_id, a // Fullfil the reward redemption if (result.status === 'insert_entry' || result.status === 'update_entry') { + /* await axios.patch(`https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?id=${id}&broadcaster_id=${broadcaster_id}&reward_id=${reward_id}`, { status: 'FULFILLED' }, { @@ -51,6 +52,7 @@ module.exports = rewardRedemption = (async (viewer_id, viewer_name, client_id, a }).then(response => { //return response.data.data[0].status }).catch(error => { console.error(error.response.data) }) + */ } return result