web/src/modules/sub-auth.js
2023-09-13 23:29:37 +02:00

327 lines
7.5 KiB
JavaScript

const { resolve } = require("path");
const { __glob, __web } = require("../modules/global-variables");
const { LogType } = require('./sub-log');
const fs = require("fs")
const alog = new LogType("Authentification")
var users = new Map()
var sessions = new Array()
var betausers = new Array()
var packageJson = JSON.parse(fs.readFileSync(__glob.PACKAGE))
updateUsers()
module.exports.checkUser = function (token) {
if(users.has(token)) {
return true
} else {
return false
}
}
module.exports.getSession = function (session) {
if(sessions.includes(session)) {
return true
} else {
return false
}
}
module.exports.getDiscordUser = function (code, session) {
return new Promise((resolve, reject) => {
alog.log("Récupération de l'autorisation de récupération des informations de l'utilisateur associé à la session : " + session + " [ETAPE 2]")
var link = "https://subsonics.raphix.fr"
if(process.env.DEV == "true") {
link = "http://localhost:4000"
}
const params = new URLSearchParams();
params.append('client_id', "1094727789682380922");
params.append('client_secret', "uwtyPOPKCgw6ciBs20qiJ7LJrW9Ziclo");
params.append('grant_type', 'authorization_code');
params.append('code', code);
params.append('redirect_uri', link + "/internal/redirect");
params.append('scope', 'identify guilds');
fetch('https://discord.com/api/oauth2/token', {
method: "POST",
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}, body : params
}).then(resp1 => resp1.json()).then(authorizationKey => {
alog.log("Récupération des informations de l'utilisateur associé à l'autorisation : '" + authorizationKey.access_token + "' et associé à la session : " + session + " [ETAPE 3]")
fetch('https://discord.com/api/users/@me/guilds/137291455336022018/member', {
headers: {
authorization: `${authorizationKey.token_type} ${authorizationKey.access_token}`,
},
}).then(resp2 => resp2.json()).then(userInfo => {
var user = {}
if(typeof userInfo.joined_at == "undefined") {
reject("NOT_IN_CLP")
} else if(typeof userInfo.user == "undefined") {
reject("MIGRATE_ACCOUNT_ONLY")
} else {
if(packageJson.beta_on == false) {
user.auth = authorizationKey
Object.assign(user, userInfo)
resolve(user)
} else {
if(betausers.includes(userInfo.user.id)) {
user.beta = true
Object.assign(user, userInfo)
resolve(user)
} else {
reject("NOT_IN_BETA")
}
}
}
}).catch(error => reject(error))
}).catch(error => reject(error))
})
}
module.exports.saveSession = function (session) {
sessions.push(session)
alog.log("Nouvelle session enregistré : " + session)
}
module.exports.removeSession = function (session) {
const index = sessions.indexOf(session)
sessions.splice(index, 1)
alog.log("Supression de la session : " + session)
}
module.exports.getUsers = function () {
const userDB = JSON.parse(fs.readFileSync(__glob.USERS))
return userDB
}
module.exports.getUsersList = function () {
var userList = new Array()
const userDB = JSON.parse(fs.readFileSync(__glob.USERS))
for(var user of userDB) {
userList.push({"username": user.user.username, "global_name":user.user.global_name, "avatar": user.user.avatar, "id": user.user.id, "admin": user.admin})
}
return userList
}
module.exports.getSimpleUser = function (token) {
var user = users.get(token)
if(!user) {
return null
}
return ({"username": user.user.username, "global_name":user.user.global_name, "avatar": user.user.avatar, "id": user.user.id, "admin": user.admin})
}
module.exports.getUser = function (token) {
return users.get(token)
}
module.exports.addUser = function (user) {
if(!fs.existsSync(__glob.USERS)){
fs.writeFileSync(__glob.USERS, '[]')
}
const userDB = JSON.parse(fs.readFileSync(__glob.USERS))
var selectedUser = null
for(var userI of userDB) {
if(user.user.id == userI.user.id) {
selectedUser = userDB.indexOf(userI)
}
}
if(selectedUser != null) {
userDB[selectedUser].token = user.token
} else {
userDB.push(user)
}
fs.writeFileSync(__glob.USERS, JSON.stringify(userDB, null, 2))
updateUsers()
alog.log("Ajout de " + user.user.username + " en tant qu'utilisateur avec le token : " + user.token)
}
module.exports.setAdmin = function (user) {
if(!fs.existsSync(__glob.USERS)){
fs.writeFileSync(__glob.USERS, '[]')
}
const userDB = JSON.parse(fs.readFileSync(__glob.USERS))
var selectedUser = null
for(var userI of userDB) {
if(user.user.id == userI.user.id) {
selectedUser = userDB.indexOf(userI)
}
}
if(!userDB[selectedUser].admin) {
userDB[selectedUser].admin = true
console.log("[Personnal Quote] - New Admin")
} else {
userDB[selectedUser].admin = false
console.log("[Personnal Quote] - Remove Admin")
}
fs.writeFileSync(__glob.USERS, JSON.stringify(userDB, null, 2))
updateUsers()
alog.log("Ajout de " + user.user.username + " en tant qu'administrateur avec le token : " + user.token)
}
module.exports.removeUser = function (token) {
if(!fs.existsSync(__glob.USERS)){
fs.writeFileSync(__glob.USERS, '[]')
}
const userDB = JSON.parse(fs.readFileSync(__glob.USERS))
var selectedUser = null
for (const user of userDB) {
if(user.token == token) {
selectedUser = user
}
}
const index = userDB.indexOf(selectedUser)
alog.log("Supression de " + selectedUser.user.username + " en tant qu'utilisateur avec le token : " + selectedUser.token)
userDB.splice(index, 1)
fs.writeFileSync(__glob.USERS, JSON.stringify(userDB, null, 2))
updateUsers()
}
function updateUsers() {
if(!fs.existsSync(__glob.BETA_USERS)){
fs.writeFileSync(__glob.BETA_USERS, '[]')
}
if(!fs.existsSync(__glob.USERS)){
fs.writeFileSync(__glob.USERS, '[]')
}
const userDB = JSON.parse(fs.readFileSync(__glob.USERS))
const betausersDB = JSON.parse(fs.readFileSync(__glob.BETA_USERS))
for (const user of userDB) {
users.set(user.token, user)
}
for (const id of betausersDB) {
betausers.push(id)
}
alog.log("Actualisation de " + userDB.length + " utilisateurs depuis : " + __glob.USERS)
alog.log("Actualisation de " + betausersDB.length + " utilisateurs bêtas depuis : " + __glob.BETA_USERS)
}