diff --git a/docker-compose.yml b/docker-compose.yml index 9786118..0c0087e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,15 +5,4 @@ services: restart: unless-stopped container_name: cdn-app-container ports: - - "5053:5053" - volumes: - - /home/cdn-app:/home/cdn-app - - cdn-files:/home/cdn-app/cdn-files - - report:/home/cdn-app/report - - data:/home/cdn-app/data - command: sh -c "if [ ! -f /home/cdn-app/moved_files ]; then mv /app/cdn-app-insider/* /home/cdn-app && touch /home/cdn-app/moved_files; fi && node server.js" - -volumes: - cdn-files: - report: - data: + - "5053:5053" \ No newline at end of file diff --git a/models/fileCreated.js b/models/fileCreated.js index f36f7f4..b13aadb 100644 --- a/models/fileCreated.js +++ b/models/fileCreated.js @@ -3,7 +3,7 @@ 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']; +const filesToCreate = ['setup.json', 'user.json', 'file_info.json', 'banData.json']; filesToCreate.forEach((fileName) => { const filePath = path.join(dataFolderPath, fileName); diff --git a/package-lock.json b/package-lock.json index 08c9b4a..127b743 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "express-session": "^1.17.3", "fs": "^0.0.1-security", "fs-extra": "^11.2.0", + "get-folder-size": "^4.0.0", "ip": "^2.0.1", "mime-types": "^2.1.35", "multer": "^1.4.5-lts.1", @@ -1926,6 +1927,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz", + "integrity": "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -1953,6 +1960,20 @@ "is-property": "^1.0.2" } }, + "node_modules/get-folder-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-4.0.0.tgz", + "integrity": "sha512-Z6sv92povPRhGTNv1j8pMOzkXCcJOYWFTSrulKzoF9qbIRHXtR2Vfjw964jsWVMrIKnwHzm/0jl8IFONbBbEKw==", + "dependencies": { + "gar": "^1.0.4" + }, + "bin": { + "get-folder-size": "bin/get-folder-size.js" + }, + "engines": { + "node": ">=14.13.0" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -6416,6 +6437,11 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, + "gar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz", + "integrity": "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==" + }, "gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -6440,6 +6466,14 @@ "is-property": "^1.0.2" } }, + "get-folder-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-4.0.0.tgz", + "integrity": "sha512-Z6sv92povPRhGTNv1j8pMOzkXCcJOYWFTSrulKzoF9qbIRHXtR2Vfjw964jsWVMrIKnwHzm/0jl8IFONbBbEKw==", + "requires": { + "gar": "^1.0.4" + } + }, "get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", diff --git a/package.json b/package.json index ff1723d..4f23b70 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "express-session": "^1.17.3", "fs": "^0.0.1-security", "fs-extra": "^11.2.0", + "get-folder-size": "^4.0.0", "ip": "^2.0.1", "mime-types": "^2.1.35", "multer": "^1.4.5-lts.1", diff --git a/public/css/styles.css b/public/css/styles.css index ddac636..e0e3893 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -166,4 +166,5 @@ body.dark-theme .navbar-toggler-icon { .btn-icon { border-radius: 50%; padding: 0.5em; -} \ No newline at end of file +} + diff --git a/public/js/dashboard.js b/public/js/dashboard.js index 4136cd1..964de4d 100644 --- a/public/js/dashboard.js +++ b/public/js/dashboard.js @@ -470,12 +470,14 @@ async function getUserIdFromFolder(username) { async function showFileInfo(fileLink) { let data; try { - let response = await fetch(`/file_info.json`); + let response = await fetch('/data/file_info.json'); if (!response.ok) { - throw new Error('Network response was not ok'); + throw new Error(`HTTP error! status: ${response.status}`); } - data = await response.json(); + let fileContent = await response.text(); + data = JSON.parse(fileContent); } catch (error) { + console.log(error); Swal.fire({ position: 'top', icon: 'error', @@ -487,9 +489,8 @@ async function showFileInfo(fileLink) { return; } - let fileName = fileLink.split('/').pop(); let pathParts = fileLink.split('/'); - if (pathParts.length < 2) { + if (pathParts.length < 4) { Swal.fire({ position: 'top', icon: 'error', @@ -500,18 +501,16 @@ async function showFileInfo(fileLink) { }); return; } - let username = pathParts[1].replace('.', ''); - console.log('Extracted username:', username); - - let userId = await getUserIdFromFolder(username); - console.log('Obtained userId:', userId); + let fileName = pathParts.pop(); + let userId = pathParts.pop(); let fileInfo = data.find(file => file.fileName === fileName && file.Id === userId); + console.log('Found fileInfo:', fileInfo); if (!fileInfo) { Swal.fire({ position: 'top', icon: 'error', - title: `Aucune information trouvée pour le fichier ${fileName} pour l'utilisateur ${username}.`, + title: `Aucune information trouvée pour le fichier ${fileName} pour l'utilisateur avec l'ID ${userId}.`, showConfirmButton: false, timer: 1800, toast: true, @@ -534,3 +533,32 @@ async function showFileInfo(fileLink) { confirmButtonText: 'Fermer' }); } + +async function displayMetadata() { + const response = await fetch('/build-metadata'); + if (!response.ok) { + console.error('Failed to fetch metadata'); + return; + } + + const metadata = await response.json(); + if (!metadata) { + console.error('No metadata provided'); + return; + } + + document.getElementById('buildVersion').textContent = metadata.build_version; + document.getElementById('nodeVersion').textContent = metadata.node_version; + document.getElementById('expressVersion').textContent = metadata.express_version; + document.getElementById('buildSha').textContent = metadata.build_sha; + document.getElementById('osType').textContent = metadata.os_type; + document.getElementById('osRelease').textContent = metadata.os_release; + + const modal = document.getElementById('metadataModal'); + modal.style.display = 'block'; +} + +function closeModal() { + const modal = document.getElementById('metadataModal'); + modal.style.display = 'none'; +} diff --git a/routes/BuildMetaData.js b/routes/BuildMetaData.js new file mode 100644 index 0000000..7fdb031 --- /dev/null +++ b/routes/BuildMetaData.js @@ -0,0 +1,67 @@ +const express = require('express'); +const router = express.Router(); +const os = require('os'); +const child_process = require('child_process'); +const packageJson = require('../package.json'); +const fs = require('fs'); +const path = require('path'); + +function getAllFiles(dirPath, arrayOfFiles) { + const files = fs.readdirSync(dirPath); + + arrayOfFiles = arrayOfFiles || []; + + files.forEach(function(file) { + if (fs.statSync(dirPath + "/" + file).isDirectory()) { + arrayOfFiles = getAllFiles(dirPath + "/" + file, arrayOfFiles); + } else { + arrayOfFiles.push(path.join(dirPath, "/", file)); + } + }); + + return arrayOfFiles; +} + +function bytesToSize(bytes) { + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + if (bytes == 0) return '0 Byte'; + const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); + return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i]; +} + +function calculateBuildSize(files) { + let totalSize = 0; + + files.forEach(file => { + const stats = fs.statSync(file); + totalSize += stats.size; + }); + + return totalSize; +} + +router.get('/', async (req, res) => { + try { + + const clientIp = req.headers['cf-connecting-ip'] || req.ip; + const version = packageJson.version; + const expressVersion = require('express/package.json').version; + + const buildMetadata = { + build_version: version, + node_version: process.version, + express_version: expressVersion, + build_sha: child_process.execSync('git rev-parse HEAD').toString().trim(), + os_type: os.type(), + os_release: os.release(), + }; + + + res.json(buildMetadata); + } catch (error) { + console.error('Error in /build-metadata: ', error); + res.status(500).send('Error in /build-metadata: ' + error.toString()); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/routes/routes.js b/routes/routes.js index d8b1b45..b72d2db 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -1,12 +1,12 @@ const express = require('express'); const router = express.Router(); -const path = require('path'); const indexRoute = require('./index.js'); const DpanelDashboardRoute = require('./Dpanel/Dashboard/index.js'); const DpanelFolderRoute = require('./Dpanel/Folder/index.js'); const DpanelUploadRoute = require('./Dpanel/Upload.js'); const AttachmentsRoute = require('./attachments.js'); +const buildMetadataRoute = require('./BuildMetaData.js'); const NewFolderRoute = require('./Dpanel/API/NewFolder.js'); const RenameFileRoute = require('./Dpanel/API/RenameFile.js'); @@ -31,6 +31,7 @@ const AdminPrivacySecurityDpanelRoute = require('./Dpanel/Admin/Privacy-Security router.use('/', indexRoute); router.use('/attachments', AttachmentsRoute); +router.use('/build-metadata', buildMetadataRoute); router.use('/dpanel/dashboard', DpanelDashboardRoute); router.use('/dpanel/upload', DpanelUploadRoute); @@ -56,4 +57,6 @@ router.use('/auth/logout', logoutRoute); router.use('/auth/activedirectory', activeDirectoryRoute); router.use('/auth/discord', discordRoute); +router.use('/*', indexRoute) + module.exports = router; \ No newline at end of file diff --git a/views/acces-denied.ejs b/views/acces-denied.ejs index 5a68809..7161f11 100644 --- a/views/acces-denied.ejs +++ b/views/acces-denied.ejs @@ -1,92 +1,14 @@ - - - -
- - + + -
-
- The modern CDN for secure file transfer
-Power your project with our self-hosted CDN
-Experience exceptional performance and ultra-fast content distribution.
Created by SwiftLogic Labs.
- Join our Discord Server -Améliorations :
Remarque : Nous apprécions vos retours d'expérience et vos rapports de bogues pour continuer à améliorer notre plateforme. Merci pour votre soutien continu !