Update .gitignore and add new dependencies and routes
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -4,4 +4,5 @@
|
||||
/user.json
|
||||
/setup.json
|
||||
/file_info.json
|
||||
/node_modules/
|
||||
/node_modules/
|
||||
/data/
|
||||
13
DockerCompse.template
Normal file
13
DockerCompse.template
Normal file
@@ -0,0 +1,13 @@
|
||||
version: '3'
|
||||
services:
|
||||
app:
|
||||
image: swiftlogiclabs/cdn-app-insider:latest
|
||||
ports:
|
||||
- "5053:5053"
|
||||
volumes:
|
||||
- app-data:/app/cdn-app-insider/cdn-files
|
||||
- app-data:/app/cdn-app-insider/report
|
||||
- app-data:/app/cdn-app-insider/data
|
||||
|
||||
volumes:
|
||||
app-data:
|
||||
@@ -1,7 +1,7 @@
|
||||
const fs = require('fs').promises;
|
||||
const path = require('path');
|
||||
|
||||
const filePath = path.join(__dirname, '../user.json');
|
||||
const filePath = path.join(__dirname, '../data/user.json');
|
||||
|
||||
async function getUserData() {
|
||||
try {
|
||||
@@ -15,9 +15,14 @@ async function getUserData() {
|
||||
|
||||
async function checkUserExistsAD(req, res, next) {
|
||||
let userData = await getUserData();
|
||||
console.log('User data:', userData);
|
||||
|
||||
if (!req.user || (!req.user.name && !req.user.id)) {
|
||||
return res.status(500).send('Internal Server Error');
|
||||
if (Array.isArray(req.user)) {
|
||||
req.user = req.user.find(u => u._json && u._json.sAMAccountName);
|
||||
}
|
||||
|
||||
if (req.user && req.user._json && req.user._json.sAMAccountName) {
|
||||
req.user.name = req.user._json.sAMAccountName;
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -40,7 +45,7 @@ async function checkUserExistsAD(req, res, next) {
|
||||
users.push(newUser);
|
||||
|
||||
try {
|
||||
await fs.promises.writeFile(filePath, JSON.stringify(users, null, 2), 'utf8');
|
||||
await fs.writeFile(filePath, JSON.stringify(users, null, 2), 'utf8');
|
||||
} catch (error) {
|
||||
console.error(`Failed to write to ${filePath}: ${error}`);
|
||||
return next(error);
|
||||
|
||||
@@ -1,30 +1,41 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { logger, logRequestInfo, ErrorLogger, authLogger } = require('../config/logs');
|
||||
const debug = require('debug')('app:authMiddleware');
|
||||
|
||||
const authMiddleware = async (req, res, next) => {
|
||||
if (req.isAuthenticated() || (req.user && req.user.name)) {
|
||||
const data = await fs.promises.readFile('user.json', 'utf8');
|
||||
const users = JSON.parse(data);
|
||||
const user = users.find(user => user.name === req.user.name);
|
||||
debug('Checking if user is authenticated...');
|
||||
if (req.isAuthenticated() || (req.session && req.session.user && req.session.user.name)) {
|
||||
debug('User is authenticated, reading user data...');
|
||||
const data = await fs.promises.readFile(path.join(__dirname, '../data', 'user.json'), 'utf8');
|
||||
const users = JSON.parse(data);
|
||||
debug('User data:', users);
|
||||
const user = users.find(user => user.name === (req.session.user && req.session.user.name));
|
||||
|
||||
if (!user) {
|
||||
authLogger.info('User is not authenticated and user name is not set');
|
||||
return res.redirect('/auth/login');
|
||||
}
|
||||
debug('User name from session:', req.session.user && req.session.user.name);
|
||||
|
||||
if (!req.session.user) {
|
||||
authLogger.info('User connection attempt in progress, verification in progress...');
|
||||
authLogger.info(`Login successfully completed, logged in user is: id=${user.id}, name=${user.name}, role=${user.role}, IP: ${req.ip}, User Agent: ${req.headers['user-agent']}`);
|
||||
}
|
||||
|
||||
res.locals.user = user;
|
||||
req.session.user = user;
|
||||
req.userData = user;
|
||||
return next();
|
||||
} else {
|
||||
authLogger.info(`Authentication failed for IP: ${req.ip}, User Agent: ${req.headers['user-agent']}. Redirecting to login.`);
|
||||
res.redirect('/auth/login');
|
||||
if (!user) {
|
||||
authLogger.info('User is not authenticated and user name is not set');
|
||||
debug('User not found in user data, redirecting to login...');
|
||||
return res.redirect('/auth/login');
|
||||
}
|
||||
|
||||
if (!req.session.user) {
|
||||
authLogger.info('User connection attempt in progress, verification in progress...');
|
||||
authLogger.info(`Login successfully completed, logged in user is: id=${user.id}, name=${user.name}, role=${user.role}, IP: ${req.ip}, User Agent: ${req.headers['user-agent']}`);
|
||||
}
|
||||
|
||||
debug('Setting user data in session and locals...');
|
||||
res.locals.user = user;
|
||||
req.session.user = user;
|
||||
req.userData = user;
|
||||
debug('User data set, calling next middleware...');
|
||||
return next();
|
||||
} else {
|
||||
authLogger.info(`Authentication failed for IP: ${req.ip}, User Agent: ${req.headers['user-agent']}. Redirecting to login.`);
|
||||
debug('User is not authenticated, redirecting to login...');
|
||||
res.redirect('/auth/login');
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = authMiddleware;
|
||||
@@ -3,23 +3,46 @@ const chokidar = require('chokidar');
|
||||
const fs = require('fs');
|
||||
const { logger, ErrorLogger, logRequestInfo } = require('../config/logs');
|
||||
|
||||
let userData = require(path.resolve(__dirname, '../user.json'));
|
||||
let setupData = require(path.resolve(__dirname, '../setup.json'));
|
||||
const userFilePath = path.resolve(__dirname, '../data/user.json');
|
||||
const setupFilePath = path.resolve(__dirname, '../data/setup.json');
|
||||
|
||||
const watcher = chokidar.watch([path.resolve(__dirname, '../user.json'), path.resolve(__dirname, '../setup.json')], {
|
||||
let userData, setupData;
|
||||
|
||||
try {
|
||||
userData = JSON.parse(fs.readFileSync(userFilePath, 'utf-8'));
|
||||
} catch (error) {
|
||||
ErrorLogger.error(`Error parsing user.json: ${error}`);
|
||||
}
|
||||
|
||||
try {
|
||||
setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8'));
|
||||
} catch (error) {
|
||||
ErrorLogger.error(`Error parsing setup.json: ${error}`);
|
||||
}
|
||||
|
||||
const watcher = chokidar.watch([userFilePath, setupFilePath], {
|
||||
persistent: true
|
||||
});
|
||||
|
||||
watcher.on('change', (filePath) => {
|
||||
delete require.cache[require.resolve(filePath)];
|
||||
|
||||
if (filePath === path.resolve(__dirname, '../user.json')) {
|
||||
userData = require(filePath);
|
||||
} else if (filePath === path.resolve(__dirname, '../setup.json')) {
|
||||
setupData = require(filePath);
|
||||
let modifiedFile;
|
||||
if (filePath === userFilePath) {
|
||||
try {
|
||||
userData = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
||||
modifiedFile = 'user.json';
|
||||
} catch (error) {
|
||||
logger.error(`Error parsing user.json: ${error}`);
|
||||
}
|
||||
} else if (filePath === setupFilePath) {
|
||||
try {
|
||||
setupData = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
||||
modifiedFile = 'setup.json';
|
||||
} catch (error) {
|
||||
logger.error(`Error parsing setup.json: ${error}`);
|
||||
}
|
||||
}
|
||||
|
||||
logger.info('File', filePath, 'has been changed');
|
||||
logger.info(`File ${modifiedFile} has been modified`);
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -4,16 +4,17 @@ const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { getUserData } = require('../Middlewares/watcherMiddleware');
|
||||
|
||||
const setupFilePath = path.join('setup.json');
|
||||
const setupFilePath = path.join(__dirname, '../data', 'setup.json');
|
||||
|
||||
const setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8'));
|
||||
|
||||
passport.use('ActiveDirectory', new ActiveDirectoryStrategy({
|
||||
integrated: false,
|
||||
ldap: {
|
||||
url: setupData.ldap.url,
|
||||
baseDN: setupData.ldap.baseDN,
|
||||
username: setupData.ldap.username,
|
||||
password: setupData.ldap.password
|
||||
url: setupData[0].ldap.url,
|
||||
baseDN: setupData[0].ldap.baseDN,
|
||||
username: setupData[0].ldap.username,
|
||||
password: setupData[0].ldap.password
|
||||
}
|
||||
}, function (profile, ad, done) {
|
||||
ad.isUserMemberOf(profile._json.dn, 'CDN-Access', function (err, isMember) {
|
||||
@@ -44,3 +45,4 @@ passport.deserializeUser(async (id, done) => {
|
||||
});
|
||||
|
||||
module.exports = passport;
|
||||
|
||||
|
||||
@@ -3,13 +3,13 @@ const DiscordStrategy = require('passport-discord').Strategy;
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const setupFilePath = path.join('setup.json');
|
||||
const setupFilePath = path.join(__dirname, '../data', 'setup.json');
|
||||
const setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8'));
|
||||
|
||||
passport.use(new DiscordStrategy({
|
||||
clientID: setupData.discord.clientID,
|
||||
clientSecret: setupData.discord.clientSecret,
|
||||
callbackURL: `http://${setupData.domain}/auth/discord/callback`
|
||||
clientID: setupData[0].discord.clientID,
|
||||
clientSecret: setupData[0].discord.clientSecret,
|
||||
callbackURL: `http://${setupData[0].domain}/auth/discord/callback`
|
||||
}, (accessToken, refreshToken, profile, done) => {
|
||||
fs.readFile('user.json', 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
@@ -19,7 +19,7 @@ passport.use(new DiscordStrategy({
|
||||
const users = JSON.parse(data);
|
||||
const user = users.find(user => user.id === profile.id);
|
||||
|
||||
if (setupData.discord.authorizedIDs.length > 0 && !setupData.discord.authorizedIDs.includes(profile.id)) {
|
||||
if (setupData[0].discord.authorizedIDs.length > 0 && !setupData[0].discord.authorizedIDs.includes(profile.id)) {
|
||||
return done(null, false, { message: 'L\'utilisateur n\'est pas autorisé.' });
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ passport.serializeUser((user, done) => {
|
||||
});
|
||||
|
||||
passport.deserializeUser((id, done) => {
|
||||
fs.readFile('user.json', 'utf8', (err, data) => {
|
||||
fs.readFile('/data', 'user.json', 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
@@ -43,4 +43,4 @@ passport.deserializeUser((id, done) => {
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = passport;
|
||||
module.exports = passport;
|
||||
@@ -1,11 +1,14 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { logger, ErrorLogger, logRequestInfo } = require('../config/logs');
|
||||
|
||||
const dataFolderPath = path.join(__dirname, '../data');
|
||||
const filesToCreate = ['setup.json', 'user.json', 'file_info.json'];
|
||||
|
||||
filesToCreate.forEach((fileName) => {
|
||||
if (!fs.existsSync(fileName)) {
|
||||
fs.writeFileSync(fileName, '{}');
|
||||
const filePath = path.join(dataFolderPath, fileName);
|
||||
if (!fs.existsSync(filePath)) {
|
||||
fs.writeFileSync(filePath, '[]');
|
||||
logger.info(`${fileName} created successfully.`);
|
||||
} else {
|
||||
logger.info(`${fileName} already exists.`);
|
||||
|
||||
631
package-lock.json
generated
631
package-lock.json
generated
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"name": "@cdn/app-insider-swiftlogic-labs-dinawo",
|
||||
"version": "1.0.9-beta",
|
||||
"version": "1.0.0-beta.10",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@cdn/app-insider-swiftlogic-labs-dinawo",
|
||||
"version": "1.0.9-beta",
|
||||
"version": "1.0.0-beta.10",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@auth/express": "^0.5.1",
|
||||
"adm-zip": "^0.5.10",
|
||||
"ansi-to-html": "^0.7.2",
|
||||
"axios": "^1.6.3",
|
||||
@@ -39,6 +40,7 @@
|
||||
"os-utils": "^0.0.14",
|
||||
"passport": "^0.6.0",
|
||||
"passport-activedirectory": "^1.4.0",
|
||||
"passport-ad": "^0.0.3",
|
||||
"passport-discord": "^0.1.4",
|
||||
"path": "^0.12.7",
|
||||
"pg": "^8.11.3",
|
||||
@@ -70,6 +72,60 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/@auth/core": {
|
||||
"version": "0.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@auth/core/-/core-0.28.1.tgz",
|
||||
"integrity": "sha512-gvp74mypYZADpTlfGRp6HE0G3pIHWvtJpy+KZ+8FvY0cmlIpHog+jdMOdd29dQtLtN25kF2YbfHsesCFuGUQbg==",
|
||||
"dependencies": {
|
||||
"@panva/hkdf": "^1.1.1",
|
||||
"@types/cookie": "0.6.0",
|
||||
"cookie": "0.6.0",
|
||||
"jose": "^5.1.3",
|
||||
"oauth4webapi": "^2.4.0",
|
||||
"preact": "10.11.3",
|
||||
"preact-render-to-string": "5.2.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@simplewebauthn/browser": "^9.0.1",
|
||||
"@simplewebauthn/server": "^9.0.2",
|
||||
"nodemailer": "^6.8.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@simplewebauthn/browser": {
|
||||
"optional": true
|
||||
},
|
||||
"@simplewebauthn/server": {
|
||||
"optional": true
|
||||
},
|
||||
"nodemailer": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@auth/core/node_modules/@types/cookie": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
|
||||
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
|
||||
},
|
||||
"node_modules/@auth/core/node_modules/cookie": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
|
||||
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@auth/express": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@auth/express/-/express-0.5.1.tgz",
|
||||
"integrity": "sha512-Vn5cuy/QVDwnWtzk91pS3pOVOI9ly9jf8KKOu2/SvucHWQlfhbD5r9Gaih1OVxHuh/5UyI5TiAhNVn9XYS6OxA==",
|
||||
"dependencies": {
|
||||
"@auth/core": "0.28.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"express": "^4.18.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@colors/colors": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz",
|
||||
@@ -268,6 +324,14 @@
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/@panva/hkdf": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz",
|
||||
"integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/panva"
|
||||
}
|
||||
},
|
||||
"node_modules/@pkgjs/parseargs": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
||||
@@ -357,6 +421,20 @@
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/activedirectory": {
|
||||
"version": "0.7.2",
|
||||
"resolved": "https://registry.npmjs.org/activedirectory/-/activedirectory-0.7.2.tgz",
|
||||
"integrity": "sha512-xksgl4iSV3BVw2TmM0zUrFBMS9q/j2b7U77d0RQB67AcQb+xk7BFFB10FEfASb2DEFBKUC5SoMCeMZwYRwiQ4A==",
|
||||
"dependencies": {
|
||||
"async": ">= 0.1.22",
|
||||
"bunyan": ">= 1.3.5",
|
||||
"ldapjs": ">= 0.7.1",
|
||||
"underscore": ">= 1.4.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/activedirectory2": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/activedirectory2/-/activedirectory2-2.2.0.tgz",
|
||||
@@ -371,6 +449,100 @@
|
||||
"node": ">=4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ad": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/ad/-/ad-0.3.2.tgz",
|
||||
"integrity": "sha512-I1hrkfUrHVtJVSvaBarlENNLsmNTMM/+jFFGhBR73Txk6cLLWXrGHprFwXQag9PI+agYOvXudMVInXxnjuHhcA==",
|
||||
"dependencies": {
|
||||
"activedirectory": "^0.7.2",
|
||||
"ldapjs": "^1.0.1",
|
||||
"lodash.orderby": "^4.6.0",
|
||||
"node-ssha256": "^0.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/ad/node_modules/asn1": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
|
||||
"integrity": "sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w=="
|
||||
},
|
||||
"node_modules/ad/node_modules/extsprintf": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz",
|
||||
"integrity": "sha512-T3PYC6HucmF4OfunfZb5d1nRvTSvWYhsr/Og33HANcCuCtGPUtWVyt/tTs8SU9sR0SGh5Z/xQCuX/D72ph2H+A==",
|
||||
"engines": [
|
||||
"node >=0.6.0"
|
||||
]
|
||||
},
|
||||
"node_modules/ad/node_modules/ldap-filter": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
|
||||
"integrity": "sha512-HDnDRNY/z0E3qljSjDWtu7xXCUdiXzwadz7m1jIwl3XHhPMrqUyurOd32YWH5IZ3zZMP4PrG7gKdRIB2uZHKGA==",
|
||||
"dependencies": {
|
||||
"assert-plus": "0.1.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/ad/node_modules/ldap-filter/node_modules/assert-plus": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
|
||||
"integrity": "sha512-brU24g7ryhRwGCI2y+1dGQmQXiZF7TtIj583S96y0jjdajIe6wn8BuXyELYhvD22dtIxDQVFk04YTJwwdwOYJw==",
|
||||
"engines": {
|
||||
"node": ">=0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/ad/node_modules/ldapjs": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz",
|
||||
"integrity": "sha512-Y8fRYFXOWWKBs9I2QRNXb0FncDcG0Gjc7YU6XI3kIV9hLMRaFKH5QHi2TZeB7FrpgXuabOgL0GdYALbssHxH5Q==",
|
||||
"dependencies": {
|
||||
"asn1": "0.2.3",
|
||||
"assert-plus": "^1.0.0",
|
||||
"backoff": "^2.5.0",
|
||||
"bunyan": "^1.8.3",
|
||||
"dashdash": "^1.14.0",
|
||||
"ldap-filter": "0.2.2",
|
||||
"once": "^1.4.0",
|
||||
"vasync": "^1.6.4",
|
||||
"verror": "^1.8.1"
|
||||
},
|
||||
"bin": {
|
||||
"ldapjs-add": "bin/ldapjs-add",
|
||||
"ldapjs-compare": "bin/ldapjs-compare",
|
||||
"ldapjs-delete": "bin/ldapjs-delete",
|
||||
"ldapjs-modify": "bin/ldapjs-modify",
|
||||
"ldapjs-search": "bin/ldapjs-search"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"dtrace-provider": "~0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/ad/node_modules/vasync": {
|
||||
"version": "1.6.4",
|
||||
"resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz",
|
||||
"integrity": "sha512-3oQMomVgQgHzNe5iKuT8PGOhMCQcg1wfh00Nh/Kl39ERdTlw/uNS7kbrhEraDMDKWHdDdc0iBFahPEd/Ft2b+A==",
|
||||
"engines": [
|
||||
"node >=0.6.0"
|
||||
],
|
||||
"dependencies": {
|
||||
"verror": "1.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ad/node_modules/vasync/node_modules/verror": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz",
|
||||
"integrity": "sha512-bIOaZx4+Bf6a7sIORfmYnyKLDLk/lhVym6rjYlq+vkitYKnhFmUpmPpDTCltWFrUTlGKs6sCeoDWfMA0oOOneA==",
|
||||
"engines": [
|
||||
"node >=0.6.0"
|
||||
],
|
||||
"dependencies": {
|
||||
"extsprintf": "1.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/adm-zip": {
|
||||
"version": "0.5.10",
|
||||
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz",
|
||||
@@ -713,6 +885,23 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/bunyan": {
|
||||
"version": "1.8.15",
|
||||
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
|
||||
"integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==",
|
||||
"engines": [
|
||||
"node >=0.10.0"
|
||||
],
|
||||
"bin": {
|
||||
"bunyan": "bin/bunyan"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"dtrace-provider": "~0.8",
|
||||
"moment": "^2.19.3",
|
||||
"mv": "~2",
|
||||
"safe-json-stringify": "~1"
|
||||
}
|
||||
},
|
||||
"node_modules/busboy": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
|
||||
@@ -1072,6 +1261,17 @@
|
||||
"url": "https://opencollective.com/daisyui"
|
||||
}
|
||||
},
|
||||
"node_modules/dashdash": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||
"integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
|
||||
"dependencies": {
|
||||
"assert-plus": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
@@ -1234,6 +1434,19 @@
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/dtrace-provider": {
|
||||
"version": "0.8.8",
|
||||
"resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
|
||||
"integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
|
||||
"hasInstallScript": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"nan": "^2.14.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/eastasianwidth": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
||||
@@ -2279,6 +2492,14 @@
|
||||
"jiti": "bin/jiti.js"
|
||||
}
|
||||
},
|
||||
"node_modules/jose": {
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/jose/-/jose-5.2.3.tgz",
|
||||
"integrity": "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/panva"
|
||||
}
|
||||
},
|
||||
"node_modules/json-buffer": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
|
||||
@@ -2350,6 +2571,11 @@
|
||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
||||
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
|
||||
},
|
||||
"node_modules/lodash.orderby": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz",
|
||||
"integrity": "sha512-T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg=="
|
||||
},
|
||||
"node_modules/logform": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz",
|
||||
@@ -2596,6 +2822,48 @@
|
||||
"node": ">= 6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mv": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
|
||||
"integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"mkdirp": "~0.5.1",
|
||||
"ncp": "~2.0.0",
|
||||
"rimraf": "~2.4.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mv/node_modules/glob": {
|
||||
"version": "6.0.4",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
|
||||
"integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "2 || 3",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/mv/node_modules/rimraf": {
|
||||
"version": "2.4.5",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
|
||||
"integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"glob": "^6.0.1"
|
||||
},
|
||||
"bin": {
|
||||
"rimraf": "bin.js"
|
||||
}
|
||||
},
|
||||
"node_modules/mysql2": {
|
||||
"version": "3.9.2",
|
||||
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.2.tgz",
|
||||
@@ -2654,6 +2922,12 @@
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/nan": {
|
||||
"version": "2.19.0",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
|
||||
"integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.7",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
|
||||
@@ -2714,6 +2988,15 @@
|
||||
"node": "4.x || >=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/node-ssha256": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/node-ssha256/-/node-ssha256-0.1.1.tgz",
|
||||
"integrity": "sha512-Mn2k/WpFsHoWWqLtMFre71xNUw0GpUZR/Kgrv6NNjWgdfbfG5WGnlx19rcGLMHQo3TdCJQM1b1vFz6gzPdwgZw==",
|
||||
"bin": {
|
||||
"ssha256_check": "bin/ssha256_check",
|
||||
"ssha256_create": "bin/ssha256_create"
|
||||
}
|
||||
},
|
||||
"node_modules/nodemailer": {
|
||||
"version": "6.9.11",
|
||||
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.11.tgz",
|
||||
@@ -2820,6 +3103,14 @@
|
||||
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz",
|
||||
"integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q=="
|
||||
},
|
||||
"node_modules/oauth4webapi": {
|
||||
"version": "2.10.4",
|
||||
"resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-2.10.4.tgz",
|
||||
"integrity": "sha512-DSoj8QoChzOCQlJkRmYxAJCIpnXFW32R0Uq7avyghIeB6iJq0XAblOD7pcq3mx4WEBDwMuKr0Y1qveCBleG2Xw==",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/panva"
|
||||
}
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
@@ -2934,6 +3225,38 @@
|
||||
"passport": "^0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/passport-ad": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/passport-ad/-/passport-ad-0.0.3.tgz",
|
||||
"integrity": "sha512-HKpQQO/58urydwN/VG4XHQmyC5A0nAPD3+w2wBK3AFcPd9OYzlR27w4M5RjqPqlzA+kvuD3o7788fmjM1qergA==",
|
||||
"dependencies": {
|
||||
"ad": "^0.3.2",
|
||||
"passport": "^0.4.1",
|
||||
"passport-strategy": "^1.0.0",
|
||||
"uuid": "^3.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/passport-ad/node_modules/passport": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
|
||||
"integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
|
||||
"dependencies": {
|
||||
"passport-strategy": "1.x.x",
|
||||
"pause": "0.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/passport-ad/node_modules/uuid": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||
"deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
|
||||
"bin": {
|
||||
"uuid": "bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/passport-discord": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/passport-discord/-/passport-discord-0.1.4.tgz",
|
||||
@@ -3345,6 +3668,26 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/preact": {
|
||||
"version": "10.11.3",
|
||||
"resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz",
|
||||
"integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==",
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/preact"
|
||||
}
|
||||
},
|
||||
"node_modules/preact-render-to-string": {
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz",
|
||||
"integrity": "sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==",
|
||||
"dependencies": {
|
||||
"pretty-format": "^3.8.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"preact": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/precond": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz",
|
||||
@@ -3353,6 +3696,11 @@
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/pretty-format": {
|
||||
"version": "3.8.0",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
|
||||
"integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
|
||||
},
|
||||
"node_modules/process": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
|
||||
@@ -3617,6 +3965,12 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"node_modules/safe-json-stringify": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
|
||||
"integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/safe-stable-stringify": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
|
||||
@@ -4279,6 +4633,11 @@
|
||||
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/underscore": {
|
||||
"version": "1.13.6",
|
||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
|
||||
"integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "5.26.5",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||
@@ -4686,6 +5045,40 @@
|
||||
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
||||
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="
|
||||
},
|
||||
"@auth/core": {
|
||||
"version": "0.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@auth/core/-/core-0.28.1.tgz",
|
||||
"integrity": "sha512-gvp74mypYZADpTlfGRp6HE0G3pIHWvtJpy+KZ+8FvY0cmlIpHog+jdMOdd29dQtLtN25kF2YbfHsesCFuGUQbg==",
|
||||
"requires": {
|
||||
"@panva/hkdf": "^1.1.1",
|
||||
"@types/cookie": "0.6.0",
|
||||
"cookie": "0.6.0",
|
||||
"jose": "^5.1.3",
|
||||
"oauth4webapi": "^2.4.0",
|
||||
"preact": "10.11.3",
|
||||
"preact-render-to-string": "5.2.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/cookie": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
|
||||
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
|
||||
},
|
||||
"cookie": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
|
||||
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@auth/express": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@auth/express/-/express-0.5.1.tgz",
|
||||
"integrity": "sha512-Vn5cuy/QVDwnWtzk91pS3pOVOI9ly9jf8KKOu2/SvucHWQlfhbD5r9Gaih1OVxHuh/5UyI5TiAhNVn9XYS6OxA==",
|
||||
"requires": {
|
||||
"@auth/core": "0.28.1"
|
||||
}
|
||||
},
|
||||
"@colors/colors": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz",
|
||||
@@ -4832,6 +5225,11 @@
|
||||
"fastq": "^1.6.0"
|
||||
}
|
||||
},
|
||||
"@panva/hkdf": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz",
|
||||
"integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA=="
|
||||
},
|
||||
"@pkgjs/parseargs": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
||||
@@ -4906,6 +5304,17 @@
|
||||
"negotiator": "0.6.3"
|
||||
}
|
||||
},
|
||||
"activedirectory": {
|
||||
"version": "0.7.2",
|
||||
"resolved": "https://registry.npmjs.org/activedirectory/-/activedirectory-0.7.2.tgz",
|
||||
"integrity": "sha512-xksgl4iSV3BVw2TmM0zUrFBMS9q/j2b7U77d0RQB67AcQb+xk7BFFB10FEfASb2DEFBKUC5SoMCeMZwYRwiQ4A==",
|
||||
"requires": {
|
||||
"async": ">= 0.1.22",
|
||||
"bunyan": ">= 1.3.5",
|
||||
"ldapjs": ">= 0.7.1",
|
||||
"underscore": ">= 1.4.3"
|
||||
}
|
||||
},
|
||||
"activedirectory2": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/activedirectory2/-/activedirectory2-2.2.0.tgz",
|
||||
@@ -4917,6 +5326,79 @@
|
||||
"merge-options": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"ad": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/ad/-/ad-0.3.2.tgz",
|
||||
"integrity": "sha512-I1hrkfUrHVtJVSvaBarlENNLsmNTMM/+jFFGhBR73Txk6cLLWXrGHprFwXQag9PI+agYOvXudMVInXxnjuHhcA==",
|
||||
"requires": {
|
||||
"activedirectory": "^0.7.2",
|
||||
"ldapjs": "^1.0.1",
|
||||
"lodash.orderby": "^4.6.0",
|
||||
"node-ssha256": "^0.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"asn1": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
|
||||
"integrity": "sha512-6i37w/+EhlWlGUJff3T/Q8u1RGmP5wgbiwYnOnbOqvtrPxT63/sYFyP9RcpxtxGymtfA075IvmOnL7ycNOWl3w=="
|
||||
},
|
||||
"extsprintf": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz",
|
||||
"integrity": "sha512-T3PYC6HucmF4OfunfZb5d1nRvTSvWYhsr/Og33HANcCuCtGPUtWVyt/tTs8SU9sR0SGh5Z/xQCuX/D72ph2H+A=="
|
||||
},
|
||||
"ldap-filter": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
|
||||
"integrity": "sha512-HDnDRNY/z0E3qljSjDWtu7xXCUdiXzwadz7m1jIwl3XHhPMrqUyurOd32YWH5IZ3zZMP4PrG7gKdRIB2uZHKGA==",
|
||||
"requires": {
|
||||
"assert-plus": "0.1.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"assert-plus": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
|
||||
"integrity": "sha512-brU24g7ryhRwGCI2y+1dGQmQXiZF7TtIj583S96y0jjdajIe6wn8BuXyELYhvD22dtIxDQVFk04YTJwwdwOYJw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ldapjs": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz",
|
||||
"integrity": "sha512-Y8fRYFXOWWKBs9I2QRNXb0FncDcG0Gjc7YU6XI3kIV9hLMRaFKH5QHi2TZeB7FrpgXuabOgL0GdYALbssHxH5Q==",
|
||||
"requires": {
|
||||
"asn1": "0.2.3",
|
||||
"assert-plus": "^1.0.0",
|
||||
"backoff": "^2.5.0",
|
||||
"bunyan": "^1.8.3",
|
||||
"dashdash": "^1.14.0",
|
||||
"dtrace-provider": "~0.8",
|
||||
"ldap-filter": "0.2.2",
|
||||
"once": "^1.4.0",
|
||||
"vasync": "^1.6.4",
|
||||
"verror": "^1.8.1"
|
||||
}
|
||||
},
|
||||
"vasync": {
|
||||
"version": "1.6.4",
|
||||
"resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz",
|
||||
"integrity": "sha512-3oQMomVgQgHzNe5iKuT8PGOhMCQcg1wfh00Nh/Kl39ERdTlw/uNS7kbrhEraDMDKWHdDdc0iBFahPEd/Ft2b+A==",
|
||||
"requires": {
|
||||
"verror": "1.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"verror": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz",
|
||||
"integrity": "sha512-bIOaZx4+Bf6a7sIORfmYnyKLDLk/lhVym6rjYlq+vkitYKnhFmUpmPpDTCltWFrUTlGKs6sCeoDWfMA0oOOneA==",
|
||||
"requires": {
|
||||
"extsprintf": "1.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"adm-zip": {
|
||||
"version": "0.5.10",
|
||||
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz",
|
||||
@@ -5188,6 +5670,17 @@
|
||||
"resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
|
||||
"integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
|
||||
},
|
||||
"bunyan": {
|
||||
"version": "1.8.15",
|
||||
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
|
||||
"integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==",
|
||||
"requires": {
|
||||
"dtrace-provider": "~0.8",
|
||||
"moment": "^2.19.3",
|
||||
"mv": "~2",
|
||||
"safe-json-stringify": "~1"
|
||||
}
|
||||
},
|
||||
"busboy": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
|
||||
@@ -5453,6 +5946,14 @@
|
||||
"postcss-js": "^4"
|
||||
}
|
||||
},
|
||||
"dashdash": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||
"integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
@@ -5557,6 +6058,15 @@
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
|
||||
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg=="
|
||||
},
|
||||
"dtrace-provider": {
|
||||
"version": "0.8.8",
|
||||
"resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
|
||||
"integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"nan": "^2.14.0"
|
||||
}
|
||||
},
|
||||
"eastasianwidth": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
||||
@@ -6342,6 +6852,11 @@
|
||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
|
||||
"integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q=="
|
||||
},
|
||||
"jose": {
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/jose/-/jose-5.2.3.tgz",
|
||||
"integrity": "sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA=="
|
||||
},
|
||||
"json-buffer": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
|
||||
@@ -6402,6 +6917,11 @@
|
||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
||||
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
|
||||
},
|
||||
"lodash.orderby": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz",
|
||||
"integrity": "sha512-T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg=="
|
||||
},
|
||||
"logform": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz",
|
||||
@@ -6574,6 +7094,41 @@
|
||||
"xtend": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"mv": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
|
||||
"integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==",
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"mkdirp": "~0.5.1",
|
||||
"ncp": "~2.0.0",
|
||||
"rimraf": "~2.4.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob": {
|
||||
"version": "6.0.4",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
|
||||
"integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==",
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "2 || 3",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "2.4.5",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
|
||||
"integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==",
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"glob": "^6.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mysql2": {
|
||||
"version": "3.9.2",
|
||||
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.2.tgz",
|
||||
@@ -6624,6 +7179,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"nan": {
|
||||
"version": "2.19.0",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
|
||||
"integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
|
||||
"optional": true
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "3.3.7",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
|
||||
@@ -6660,6 +7221,11 @@
|
||||
"whatwg-url": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"node-ssha256": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/node-ssha256/-/node-ssha256-0.1.1.tgz",
|
||||
"integrity": "sha512-Mn2k/WpFsHoWWqLtMFre71xNUw0GpUZR/Kgrv6NNjWgdfbfG5WGnlx19rcGLMHQo3TdCJQM1b1vFz6gzPdwgZw=="
|
||||
},
|
||||
"nodemailer": {
|
||||
"version": "6.9.11",
|
||||
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.11.tgz",
|
||||
@@ -6734,6 +7300,11 @@
|
||||
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz",
|
||||
"integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q=="
|
||||
},
|
||||
"oauth4webapi": {
|
||||
"version": "2.10.4",
|
||||
"resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-2.10.4.tgz",
|
||||
"integrity": "sha512-DSoj8QoChzOCQlJkRmYxAJCIpnXFW32R0Uq7avyghIeB6iJq0XAblOD7pcq3mx4WEBDwMuKr0Y1qveCBleG2Xw=="
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
@@ -6817,6 +7388,33 @@
|
||||
"passport": "^0.6.0"
|
||||
}
|
||||
},
|
||||
"passport-ad": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/passport-ad/-/passport-ad-0.0.3.tgz",
|
||||
"integrity": "sha512-HKpQQO/58urydwN/VG4XHQmyC5A0nAPD3+w2wBK3AFcPd9OYzlR27w4M5RjqPqlzA+kvuD3o7788fmjM1qergA==",
|
||||
"requires": {
|
||||
"ad": "^0.3.2",
|
||||
"passport": "^0.4.1",
|
||||
"passport-strategy": "^1.0.0",
|
||||
"uuid": "^3.4.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"passport": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
|
||||
"integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
|
||||
"requires": {
|
||||
"passport-strategy": "1.x.x",
|
||||
"pause": "0.0.1"
|
||||
}
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"passport-discord": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/passport-discord/-/passport-discord-0.1.4.tgz",
|
||||
@@ -7079,11 +7677,29 @@
|
||||
"xtend": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"preact": {
|
||||
"version": "10.11.3",
|
||||
"resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz",
|
||||
"integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg=="
|
||||
},
|
||||
"preact-render-to-string": {
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz",
|
||||
"integrity": "sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==",
|
||||
"requires": {
|
||||
"pretty-format": "^3.8.0"
|
||||
}
|
||||
},
|
||||
"precond": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz",
|
||||
"integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ=="
|
||||
},
|
||||
"pretty-format": {
|
||||
"version": "3.8.0",
|
||||
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
|
||||
"integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
|
||||
},
|
||||
"process": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
|
||||
@@ -7250,6 +7866,12 @@
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
|
||||
},
|
||||
"safe-json-stringify": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
|
||||
"integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
|
||||
"optional": true
|
||||
},
|
||||
"safe-stable-stringify": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
|
||||
@@ -7748,6 +8370,11 @@
|
||||
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
|
||||
"dev": true
|
||||
},
|
||||
"underscore": {
|
||||
"version": "1.13.6",
|
||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
|
||||
"integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "5.26.5",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"author": "Dinawo - Group SwiftLogic Labs",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@auth/express": "^0.5.1",
|
||||
"adm-zip": "^0.5.10",
|
||||
"ansi-to-html": "^0.7.2",
|
||||
"axios": "^1.6.3",
|
||||
@@ -40,6 +41,7 @@
|
||||
"os-utils": "^0.0.14",
|
||||
"passport": "^0.6.0",
|
||||
"passport-activedirectory": "^1.4.0",
|
||||
"passport-ad": "^0.0.3",
|
||||
"passport-discord": "^0.1.4",
|
||||
"path": "^0.12.7",
|
||||
"pg": "^8.11.3",
|
||||
|
||||
@@ -7,36 +7,44 @@ const { checkUserExistsDiscord } = require('../Middlewares/UserIDMiddlewareDisco
|
||||
const path = require('path');
|
||||
const { getUserData, getSetupData } = require('../Middlewares/watcherMiddleware');
|
||||
|
||||
let setupData = getSetupData();
|
||||
let userData = getUserData();
|
||||
|
||||
let setupData;
|
||||
let adStrategy;
|
||||
if (setupData.ldap !== undefined) {
|
||||
adStrategy = require('../models/Passport-ActiveDirectory');
|
||||
}
|
||||
|
||||
let DiscordStrategy;
|
||||
if (setupData.discord !== undefined) {
|
||||
DiscordStrategy = require('../models/Passport-Discord');
|
||||
}
|
||||
getSetupData().then(data => {
|
||||
setupData = data;
|
||||
|
||||
if (setupData[0].ldap !== undefined) {
|
||||
adStrategy = require('../models/Passport-ActiveDirectory');
|
||||
adStrategy.name = 'active-directory';
|
||||
passport.use(adStrategy);
|
||||
} else {
|
||||
console.log('LDAP data is not defined in setup data');
|
||||
}
|
||||
|
||||
if (setupData[0].discord !== undefined) {
|
||||
const DiscordStrategy = require('../models/Passport-Discord');
|
||||
}
|
||||
});
|
||||
|
||||
let user = userData;
|
||||
if (user.identifyURL) {
|
||||
app.get("/auth/discord", (req, res) => {
|
||||
res.redirect(user.identifyURL);
|
||||
});
|
||||
} else {
|
||||
}
|
||||
|
||||
router.use(passport.initialize());
|
||||
router.use(passport.session());
|
||||
|
||||
router.get('/login', function(req, res) {
|
||||
const setupFilePath = path.join('setup.json');
|
||||
const setupFilePath = path.join('data', 'setup.json');
|
||||
const setupData = JSON.parse(fs.readFileSync(setupFilePath, 'utf-8'));
|
||||
res.render('AuthLogin', { setupData, isAuthenticated: false, errorMessage: '', showActiveDirectoryForm: true, currentUrl: req.originalUrl });
|
||||
const showActiveDirectoryForm = setupData.ldap && setupData.ldap.enabled === 'on';
|
||||
res.render('AuthLogin', { setupData, isAuthenticated: false, errorMessage: '', showActiveDirectoryForm, currentUrl: req.originalUrl });
|
||||
});
|
||||
|
||||
|
||||
passport.deserializeUser((user, done) => {
|
||||
done(null, user);
|
||||
});
|
||||
@@ -55,9 +63,11 @@ var opts = { failWithError: true }
|
||||
router.post('/activedirectory', (req, res, next) => {
|
||||
passport.authenticate('ActiveDirectory', (err, user) => {
|
||||
if (err) {
|
||||
console.log('Authentication error:', err); // Debug log
|
||||
return res.render('AuthLogin', { isAuthenticated: false, errorMessage: err.message, setupData: {}, showActiveDirectoryForm: true, currentUrl: req.originalUrl });
|
||||
}
|
||||
if (!user) {
|
||||
console.log('User not authorized'); // Debug log
|
||||
return res.render('AuthLogin', { isAuthenticated: false, errorMessage: 'L\'utilisateur n\'est pas autorisé.', setupData: {}, showActiveDirectoryForm: true, currentUrl: req.originalUrl });
|
||||
}
|
||||
req.user = {
|
||||
@@ -65,8 +75,16 @@ router.post('/activedirectory', (req, res, next) => {
|
||||
name: user._json.sAMAccountName,
|
||||
id: user._json.sAMAccountName,
|
||||
};
|
||||
console.log('User object:', req.user); // Debug log
|
||||
req.logIn(req.user, function(err) {
|
||||
if (err) { return next(err); }
|
||||
if (err) {
|
||||
console.log('Login error:', err); // Debug log
|
||||
return next(err);
|
||||
}
|
||||
console.log('User logged in successfully'); // Debug log
|
||||
|
||||
req.session.user = req.user;
|
||||
|
||||
return next();
|
||||
});
|
||||
})(req, res, next);
|
||||
|
||||
@@ -6,7 +6,7 @@ const fileUpload = require('express-fileupload');
|
||||
const authMiddleware = require('../Middlewares/authMiddleware');
|
||||
const { loggers } = require('winston');
|
||||
const ncp = require('ncp').ncp;
|
||||
const configFile = fs.readFileSync('setup.json');
|
||||
const configFile = fs.readFileSync(path.join(__dirname, '../data', 'setup.json'), 'utf-8')
|
||||
const config = JSON.parse(configFile);
|
||||
const bodyParser = require('body-parser');
|
||||
const crypto = require('crypto');
|
||||
@@ -42,8 +42,10 @@ router.get('/dashboard', authMiddleware, async (req, res) => {
|
||||
|
||||
let fileInfoNames = [];
|
||||
try {
|
||||
const fileInfo = JSON.parse(fs.readFileSync('file_info.json', 'utf8'));
|
||||
const fileInfo = JSON.parse(fs.readFileSync(path.join(__dirname, '../data', 'setup.json'), 'utf-8'))
|
||||
fileInfoNames = fileInfo.map(file => file.fileName);
|
||||
|
||||
fileInfo.map(/* ... */);
|
||||
} catch (err) {
|
||||
console.error('Error reading file_info.json:', err);
|
||||
}
|
||||
@@ -88,8 +90,20 @@ router.get('/dashboard/folder/:folderName', authMiddleware, async (req, res) =>
|
||||
const domain = config.domain || 'mydomain.com';
|
||||
const currentFolderName = folderName || '';
|
||||
|
||||
const data = await fs.promises.readFile('user.json', 'utf8');
|
||||
const users = JSON.parse(data);
|
||||
const data = await fs.readFileSync(path.join(__dirname, '../data', 'setup.json'), 'utf-8')
|
||||
let users;
|
||||
try {
|
||||
users = JSON.parse(data);
|
||||
} catch (error) {
|
||||
console.error('Error parsing setup.json:', error);
|
||||
users = [];
|
||||
}
|
||||
|
||||
if (!Array.isArray(users)) {
|
||||
console.error('Error: users is not an array. Check the contents of setup.json');
|
||||
users = [];
|
||||
}
|
||||
|
||||
const user = users.find(user => user.name === userId);
|
||||
|
||||
if (!user) {
|
||||
@@ -98,8 +112,20 @@ router.get('/dashboard/folder/:folderName', authMiddleware, async (req, res) =>
|
||||
|
||||
const userRealId = user.id;
|
||||
|
||||
const fileInfoData = await fs.promises.readFile('file_info.json', 'utf8');
|
||||
const fileInfo = JSON.parse(fileInfoData);
|
||||
const fileInfoData = await fs.readFileSync(path.join(__dirname, '../data', 'file_info.json'), 'utf-8')
|
||||
let fileInfo;
|
||||
try {
|
||||
fileInfo = JSON.parse(fileInfoData);
|
||||
} catch (error) {
|
||||
console.error('Error parsing file_info.json:', error);
|
||||
fileInfo = [];
|
||||
}
|
||||
|
||||
// Check if fileInfo is an array
|
||||
if (!Array.isArray(fileInfo)) {
|
||||
console.error('Error: fileInfo is not an array. Check the contents of file_info.json');
|
||||
fileInfo = []; // Default to an empty array to prevent further errors
|
||||
}
|
||||
|
||||
const fileInfoNames = fileInfo.map(file => file.fileName);
|
||||
|
||||
@@ -219,7 +245,7 @@ router.post('/dashboard/rename', authMiddleware, async (req, res) => {
|
||||
try {
|
||||
await fs.promises.rename(currentPath, newPath);
|
||||
|
||||
const data = await fs.promises.readFile('file_info.json', 'utf8');
|
||||
const data = await fs.promise.readFileSync(path.join(__dirname, '../data', 'file_info.json'), 'utf-8')
|
||||
let fileInfo = JSON.parse(data);
|
||||
|
||||
let found = false;
|
||||
@@ -232,7 +258,7 @@ router.post('/dashboard/rename', authMiddleware, async (req, res) => {
|
||||
}
|
||||
|
||||
if (found) {
|
||||
await fs.promises.writeFile('file_info.json', JSON.stringify(fileInfo, null, 2), 'utf8');
|
||||
await fs.promises.writeFile(path.join(__dirname, '../data', 'file_info.json'), JSON.stringify(fileInfo, null, 2), 'utf8');
|
||||
}
|
||||
|
||||
res.status(200).send('L\'opération a été effectuée avec succès.');
|
||||
@@ -257,7 +283,7 @@ router.post('/dashboard/rename/:filePath*', authMiddleware, async (req, res) =>
|
||||
try {
|
||||
await fs.promises.rename(currentPath, newPath);
|
||||
|
||||
const data = await fs.promises.readFile('file_info.json', 'utf8');
|
||||
const data = await fs.promises.readFile(path.join(__dirname, '../data', 'file_info.json'), 'utf8');
|
||||
let fileInfo = JSON.parse(data);
|
||||
|
||||
let found = false;
|
||||
@@ -270,7 +296,7 @@ router.post('/dashboard/rename/:filePath*', authMiddleware, async (req, res) =>
|
||||
}
|
||||
|
||||
if (found) {
|
||||
await fs.promises.writeFile('file_info.json', JSON.stringify(fileInfo, null, 2), 'utf8');
|
||||
await fs.promises.writeFile(path.join(__dirname, '../data', 'file_info.json'), JSON.stringify(fileInfo, null, 2), 'utf8');
|
||||
}
|
||||
|
||||
res.status(200).send('L\'opération a été effectuée avec succès.');
|
||||
@@ -338,7 +364,7 @@ router.post('/dashboard/movefile', authMiddleware, async (req, res) => {
|
||||
const fileName = req.body.fileName;
|
||||
const folderName = req.body.folderName;
|
||||
|
||||
const data = await fs.promises.readFile('user.json', 'utf8');
|
||||
const data = await fs.readFileSync(path.join(__dirname, '../data', 'user.json.json'), 'utf-8')
|
||||
const users = JSON.parse(data);
|
||||
const user = users.find(user => user.id === req.user.id);
|
||||
|
||||
@@ -526,12 +552,12 @@ router.post('/upload', authMiddleware, async (req, res) => {
|
||||
|
||||
if (expiryDate || password) {
|
||||
let data = [];
|
||||
if (fs.existsSync('file_info.json')) {
|
||||
const existingData = await fs.promises.readFile('file_info.json', 'utf8');
|
||||
if (fs.existsSync(path.join(__dirname, '../data', 'file_info.json'))) {
|
||||
const existingData = await fs.promises.readFile(path.join(__dirname, '../data', 'file_info.json'), 'utf8');
|
||||
data = JSON.parse(existingData);
|
||||
}
|
||||
data.push(fileInfo);
|
||||
await fs.promises.writeFile('file_info.json', JSON.stringify(data, null, 2));
|
||||
await fs.promises.writeFile(path.join(__dirname, '../data', 'file_info.json'), JSON.stringify(data, null, 2));
|
||||
}
|
||||
|
||||
res.redirect('/dpanel/dashboard');
|
||||
@@ -542,8 +568,8 @@ router.post('/upload', authMiddleware, async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
const User = require('../user.json');
|
||||
const setup = JSON.parse(fs.readFileSync(path.join(__dirname, '../setup.json'), 'utf8'));
|
||||
const User = require('../data/user.json');
|
||||
const setup = JSON.parse(fs.readFileSync(path.join(__dirname, '../data', 'setup.json'), 'utf-8'));
|
||||
|
||||
router.get('/dashboard/admin', authMiddleware, async (req, res) => {
|
||||
try {
|
||||
@@ -560,7 +586,7 @@ router.get('/dashboard/admin/users', authMiddleware, async (req, res) => {
|
||||
let currentPage = Number(req.query.page) || 1;
|
||||
let limit = Number(req.query.limit) || 10;
|
||||
|
||||
let rawdata = fs.readFileSync(path.join(__dirname, '../user.json'));
|
||||
let rawdata = fs.readFileSync(path.join(__dirname, '../data/user.json'));
|
||||
let users = JSON.parse(rawdata);
|
||||
|
||||
let totalUsers = users.length;
|
||||
@@ -591,7 +617,7 @@ const osUtils = require('os-utils');
|
||||
const Convert = require('ansi-to-html');
|
||||
const convert = new Convert();
|
||||
|
||||
router.get('/dashboard/admin/stats&logs', authMiddleware, async (req, res) => {
|
||||
router.get('/dashboard/admin/stats-logs', authMiddleware, async (req, res) => {
|
||||
try {
|
||||
const uptime = os.uptime();
|
||||
const memoryUsage = process.memoryUsage().heapUsed / 1024 / 1024;
|
||||
@@ -626,7 +652,7 @@ router.get('/dashboard/admin/stats&logs', authMiddleware, async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/dashboard/admin/Privacy&Security', authMiddleware, async (req, res) => {
|
||||
router.get('/dashboard/admin/Privacy-Security', authMiddleware, async (req, res) => {
|
||||
try {
|
||||
const files = await fs.promises.readdir('./report');
|
||||
const reports = files.filter(file => file.endsWith('.json')).map(file => {
|
||||
@@ -658,7 +684,7 @@ router.post('/dashboard/update-role', authMiddleware, async (req, res) => {
|
||||
user.role = role;
|
||||
}
|
||||
|
||||
fs.writeFileSync(path.join(__dirname, '../user.json'), JSON.stringify(User, null, 2));
|
||||
fs.writeFileSync(path.join(__dirname, '../data/user.json'), JSON.stringify(User, null, 2));
|
||||
|
||||
res.redirect('/dpanel/dashboard/admin');
|
||||
} catch (err) {
|
||||
@@ -669,7 +695,7 @@ router.post('/dashboard/update-role', authMiddleware, async (req, res) => {
|
||||
|
||||
router.post('/dashboard/update-setup', authMiddleware, async (req, res) => {
|
||||
try {
|
||||
let setup = JSON.parse(fs.readFileSync(path.join(__dirname, '../setup.json')));
|
||||
let setup = JSON.parse(fs.readFileSync(path.join(__dirname, '../data', 'setup.json'), 'utf-8'));
|
||||
|
||||
if (!req.body.ldap || !req.body.ldap.enabled) {
|
||||
delete setup.ldap;
|
||||
@@ -686,7 +712,7 @@ router.post('/dashboard/update-setup', authMiddleware, async (req, res) => {
|
||||
setup.domain = req.body.domain;
|
||||
setup.uptime = req.body.uptime;
|
||||
|
||||
fs.writeFileSync(path.join(__dirname, '../setup.json'), JSON.stringify(setup, null, 2));
|
||||
fs.writeFileSync(path.join(__dirname, '../data', 'setup.json'), 'utf-8'), JSON.stringify(setup, null, 2);
|
||||
|
||||
res.redirect('/dpanel/dashboard/admin');
|
||||
} catch (err) {
|
||||
|
||||
@@ -71,7 +71,7 @@ router.get('/translateAll', async (req, res) => {
|
||||
});
|
||||
|
||||
router.get('/setup', (req, res) => {
|
||||
fs.readFile(path.join(__dirname, '../setup.json'), 'utf8', (err, data) => {
|
||||
fs.readFile(path.join(__dirname, '../data/setup.json'), 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
ErrorLogger.error('Error reading setup.json:', err);
|
||||
return res.status(500).json({ success: false, message: 'Error reading setup.json.' });
|
||||
@@ -101,7 +101,7 @@ router.post('/setup/save', (req, res) => {
|
||||
setupData.discord = req.body.discord;
|
||||
}
|
||||
|
||||
fs.writeFile(path.join(__dirname, '../setup.json'), JSON.stringify(setupData, null, 2), (err) => {
|
||||
fs.writeFile(path.join(__dirname, '../data/setup.json'), JSON.stringify(setupData, null, 2), (err) => {
|
||||
if (err) {
|
||||
ErrorLogger.error('Error writing to setup.json:', err);
|
||||
return res.status(500).json({ success: false, message: 'Error writing to setup.json.' });
|
||||
|
||||
@@ -16,7 +16,7 @@ require('./models/fileCreated.js');
|
||||
|
||||
let setup;
|
||||
try {
|
||||
setup = JSON.parse(fs.readFileSync('setup.json', 'utf8'));
|
||||
setup = JSON.parse(fs.readFileSync(path.join('/data', 'setup.json'), 'utf8'));
|
||||
} catch (err) {
|
||||
console.error('Error reading setup.json:', err);
|
||||
process.exit(1);
|
||||
@@ -32,7 +32,7 @@ if (setup.ldap !== undefined) {
|
||||
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
app.get(['/user.json', '/file_info.json', '/setup.json'], (req, res) => {
|
||||
app.get(['/data/user.json', '/data/file_info.json', '/data/setup.json'], (req, res) => {
|
||||
res.status(403).send('Access Denied');
|
||||
});app.use(express.urlencoded({ extended: true }));
|
||||
|
||||
|
||||
95
setup.py
95
setup.py
@@ -1,95 +0,0 @@
|
||||
import json
|
||||
import os
|
||||
from getpass import getpass
|
||||
|
||||
setup_file_path = '/home/cdn-app/setup.json' # Specify the full path for setup.json
|
||||
|
||||
setup_data = {}
|
||||
|
||||
def print_with_color(text, color):
|
||||
colors = {
|
||||
'reset': '\033[0m',
|
||||
'green': '\033[92m',
|
||||
'yellow': '\033[93m',
|
||||
'cyan': '\033[96m',
|
||||
'bold': '\033[1m'
|
||||
}
|
||||
print(f"{colors[color]}{text}{colors['reset']}")
|
||||
|
||||
def create_service():
|
||||
service_name = 'cdn.service'
|
||||
# Create the service file
|
||||
service_file_path = f'/etc/systemd/system/{service_name}'
|
||||
with open(service_file_path, 'w') as service_file:
|
||||
service_file.write(f'''
|
||||
[Unit]
|
||||
Description=CDN-APP, dinawoSR Inc
|
||||
Documentation=https://cdn-app.dinawo.fr
|
||||
|
||||
[Service]
|
||||
ExecStart=/root/.nvm/versions/node/v16.9.0/bin/node /home/cdn-app/server.js
|
||||
Restart=always
|
||||
User=root
|
||||
Environment=PATH=/usr/bin:/usr/local/bin:/root/.nvm/versions/node/v16.9.0/bin
|
||||
Environment=NODE_ENV=production
|
||||
WorkingDirectory=/home/cdn-app
|
||||
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
''')
|
||||
|
||||
# Restart systemd to acknowledge the new service
|
||||
os.system('systemctl daemon-reload')
|
||||
os.system('systemctl enable cdn.service')
|
||||
os.system('systemctl start cdn.service')
|
||||
|
||||
print_with_color(f"Service {service_name} created successfully.", 'green')
|
||||
|
||||
# Loader
|
||||
print_with_color("Welcome to server configuration script.", 'cyan')
|
||||
|
||||
# Change the current working directory to /home/cdn-app
|
||||
os.chdir('/home/cdn-app')
|
||||
|
||||
# LDAP information input
|
||||
setup_data['ldap'] = {
|
||||
'url': input("LDAP server URL (ldap://your-ip): "),
|
||||
'baseDN': input("Base DN (DC=DINAWOSRINC,DC=LAN): "),
|
||||
'username': input("Username (Account Sync): "),
|
||||
'password': getpass("Password (Password Account Sync): ")
|
||||
}
|
||||
|
||||
# Prompt for domain name
|
||||
setup_data['domain'] = input("Enter the domain name (cdn.domain.com): ")
|
||||
|
||||
# Prompt for uptime link
|
||||
setup_data['uptime'] = input("Enter the uptime link (uptime.domain.com): ")
|
||||
|
||||
# Check Node.js version
|
||||
node_version = os.popen('node -v').read().strip()
|
||||
required_node_version = 'v16.9.0'
|
||||
if node_version != required_node_version:
|
||||
print_with_color(f"Error: Incorrect Node.js version. Required: {required_node_version}, Found: {node_version}.", 'yellow')
|
||||
exit(1)
|
||||
|
||||
|
||||
# Update npm packages with proper permissions
|
||||
os.system('npm install')
|
||||
|
||||
|
||||
# Set full permissions for /home/cdn-app
|
||||
os.system('chown -R root:root /home/cdn-app')
|
||||
os.system('chmod -R 777 /home/cdn-app')
|
||||
|
||||
# Check and modify file permissions
|
||||
os.system('chmod +x /home/cdn-app/server.js')
|
||||
|
||||
# Save information in the setup.json file
|
||||
with open(setup_file_path, 'w') as file:
|
||||
json.dump(setup_data, file)
|
||||
|
||||
print_with_color(f"Configuration saved in the {setup_file_path} file.", 'green')
|
||||
|
||||
# Create the service
|
||||
create_service()
|
||||
@@ -64,10 +64,10 @@
|
||||
<a class="dropdown-item text-center text-white no-hover custom-btn" href="/dpanel/dashboard/admin/settingsetup" id="adminLink2">
|
||||
<i class="fas fa-cogs"></i> Modifier les parametres de configuration
|
||||
</a><br>
|
||||
<a class="dropdown-item text-center text-white no-hover custom-btn" href="/dpanel/dashboard/admin/stats&logs" id="adminLink3">
|
||||
<a class="dropdown-item text-center text-white no-hover custom-btn" href="/dpanel/dashboard/admin/stats-logs" id="adminLink3">
|
||||
<i class="fas fa-chart-bar"></i> Afficher les statistiques & les logs
|
||||
</a><br>
|
||||
<a class="dropdown-item text-center text-white no-hover custom-btn" href="/dpanel/dashboard/admin/Privacy&Security" id="adminLink4">
|
||||
<a class="dropdown-item text-center text-white no-hover custom-btn" href="/dpanel/dashboard/admin/Privacy-Security" id="adminLink4">
|
||||
<i class="fas fa-shield-alt"></i> Confidentialité & Sécurité
|
||||
</a><br><br>
|
||||
<a class="dropdown-item text-center text-white no-hover custom-btn" href="/dpanel/dashboard/" id="adminLink5">
|
||||
|
||||
Reference in New Issue
Block a user