88 lines
2.6 KiB
JavaScript
88 lines
2.6 KiB
JavaScript
const { LogType } = require('loguix');
|
|
const alog = new LogType("GoogleOAuth2");
|
|
const { google } = require('googleapis');
|
|
const config = require("../../utils/Database/Configuration");
|
|
const Users = require('../../server/auth/User');
|
|
|
|
const clientId = config.getYoutubeApiClientId();
|
|
const clientSecret = config.getYoutubeApiClientSecret();
|
|
const redirectUri = config.getWebsiteLink() + "/oauth2callback";
|
|
|
|
|
|
const oAuth2Map = new Map();
|
|
|
|
function createAuthUrl(userId) {
|
|
if(!checkCredientials()) return null;
|
|
var oAuth2Client;
|
|
const user = Users.getUserById(userId);
|
|
if (!user) {
|
|
alog.error(`User with ID ${userId} not found.`);
|
|
return null;
|
|
}
|
|
if (!clientId || !clientSecret) {
|
|
alog.error("YouTube API client ID or secret is not set in the configuration.");
|
|
} else {
|
|
oAuth2Client = new google.auth.OAuth2(
|
|
clientId,
|
|
clientSecret,
|
|
redirectUri
|
|
);
|
|
|
|
alog.log("Google OAuth2 client initialized successfully.");
|
|
}
|
|
|
|
if (!oAuth2Client) {
|
|
alog.error("OAuth2 client is not initialized. Please check your configuration.");
|
|
return null;
|
|
}
|
|
oAuth2Map.set(userId, oAuth2Client);
|
|
alog.log(`OAuth2 client created for user ${userId}.`);
|
|
return oAuth2Client.generateAuthUrl({
|
|
access_type: 'offline',
|
|
scope: SCOPES,
|
|
});
|
|
}
|
|
|
|
async function getAuthorization(userId, code) {
|
|
if(!checkCredientials()) return null;
|
|
try {
|
|
const user = Users.getUserById(userId);
|
|
if (!user) {
|
|
alog.error(`User with ID ${userId} not found.`);
|
|
return null;
|
|
}
|
|
oAuth2Client = oAuth2Map.get(userId);
|
|
if (!oAuth2Client) {
|
|
alog.error(`OAuth2 client for user ${userId} not found. Please create an OAuth2 client first.`);
|
|
return null;
|
|
}
|
|
const { tokens } = await oAuth2Client.getToken(code);
|
|
oAuth2Client.setCredentials(tokens);
|
|
alog.log(`OAuth2 client credentials set for user ${userId}.`);
|
|
return oAuth2Client;
|
|
} catch (error) {
|
|
alog.error(`Error during OAuth2 authorization for user ${userId}:`, error);
|
|
return null;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function checkCredientials() {
|
|
if (!clientId || !clientSecret) {
|
|
alog.error("YouTube API client ID or secret is not set in the configuration.");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
module.exports = {
|
|
createAuthUrl,
|
|
getAuthorization,
|
|
getOAuth2Client: (userId) => oAuth2Map.get(userId),
|
|
oAuth2Map
|
|
};
|
|
|
|
const SCOPES = ['https://www.googleapis.com/auth/youtube.readonly'];
|
|
|