Add Athena's Shield configuration and CLI

Introduce AthenaShield class to manage configuration, CLI for user setup, and update package.json with new script. This enhances the application's configurability and user interaction.
This commit is contained in:
Sandro642 2024-10-23 17:33:39 +02:00
parent 3ee4c73790
commit 9813802b1c
4 changed files with 113 additions and 1 deletions

75
athshield/athshield.js Normal file
View File

@ -0,0 +1,75 @@
const fs = require('fs')
const readline = require('readline')
const path = require('path')
// Chemin vers le fichier de configuration
const configPath = path.join(__dirname, 'variables.athshield')
// Charger les variables depuis le fichier
function loadConfig() {
const rawData = fs.readFileSync(configPath)
return JSON.parse(rawData.toString()) // Convertir Buffer en string
}
// Sauvegarder les variables dans le fichier
function saveConfig(config) {
const data = JSON.stringify(config, null, 2)
fs.writeFileSync(configPath, data)
}
// Création de l'interface readline
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
// Fonction pour poser les questions à l'utilisateur
function startCLI() {
const config = loadConfig()
rl.question('Voulez-vous activer Athena\'s Shield ? (oui/non) : ', (answer) => {
if (answer.trim().startsWith('//')) {
console.log('Ceci est un commentaire, la ligne est ignorée.')
rl.close()
return
}
if (answer.toLowerCase() === 'oui') {
config.athenaShieldActivated = true
rl.question('Voulez-vous cacher ou bloquer le menu ? (cacher/bloquer) : ', (menuAnswer) => {
if (menuAnswer.trim().startsWith('//')) {
console.log('Ceci est un commentaire, la ligne est ignorée.')
rl.close()
return
}
if (menuAnswer.toLowerCase() === 'cacher' || menuAnswer.toLowerCase() === 'bloquer') {
config.menuVisibility = menuAnswer.toLowerCase()
console.log(`Athena's Shield activé. Menu ${config.menuVisibility === 'cacher' ? 'caché' : 'bloqué'}.`)
// Sauvegarder la configuration modifiée
saveConfig(config)
rl.close()
} else {
console.log('Option non valide pour le menu.')
rl.close()
}
})
} else if (answer.toLowerCase() === 'non') {
console.log('Athena\'s Shield non activé. Fermeture du CLI.')
config.athenaShieldActivated = false
config.menuVisibility = 'visible' // Remettre la valeur par défaut
// Sauvegarder la configuration modifiée
saveConfig(config)
rl.close()
} else {
console.log('Réponse non valide.')
rl.close()
}
})
}
// Lancer le CLI
startCLI()

View File

@ -0,0 +1,32 @@
const fs = require('fs')
const path = require('path')
// Chemin vers le fichier de configuration
const configPath = path.join(__dirname, 'variables.athshield')
// Classe pour gérer Athena's Shield
class AthenaShield {
constructor() {
this.config = this.loadConfig()
}
// Charger les variables depuis le fichier
loadConfig() {
const rawData = fs.readFileSync(configPath)
return JSON.parse(rawData.toString())
}
// Récupérer le statut d'Athena's Shield
get status() {
return this.config.athenaShieldActivated
}
// Récupérer la visibilité du menu
get view() {
return this.config.menuVisibility
}
}
// Exporter une instance de la classe
const athenaShieldInstance = new AthenaShield()
module.exports = athenaShieldInstance

View File

@ -0,0 +1,4 @@
{
"athenaShieldActivated": false,
"menuVisibility": "visible"
}

View File

@ -17,7 +17,8 @@
"dist:win": "npm run dist -- -w", "dist:win": "npm run dist -- -w",
"dist:mac": "npm run dist -- -m", "dist:mac": "npm run dist -- -m",
"dist:linux": "npm run dist -- -l", "dist:linux": "npm run dist -- -l",
"lint": "eslint --config .eslintrc.json ." "lint": "eslint --config .eslintrc.json .",
"athshield": "node ./athshield/athshield.js"
}, },
"engines": { "engines": {
"node": "20.x.x" "node": "20.x.x"