diff --git a/src/server/admin/adminAPIRoutes.js b/src/server/admin/adminAPIRoutes.js index 35ed113..b043d75 100644 --- a/src/server/admin/adminAPIRoutes.js +++ b/src/server/admin/adminAPIRoutes.js @@ -12,6 +12,7 @@ const geth = require( './api/getHandler.js' ); const path = require( 'path' ); const bodyParser = require( 'body-parser' ); const mlt = require( 'multer' ); +const pngToIco = require( 'png-to-ico' ); const multer = mlt(); const fs = require( 'fs' ); const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../config/settings.config.json' ) ) ); @@ -83,6 +84,12 @@ module.exports = ( app ) => { app.post( '/admin/logo/upload', multer.array( 'image', 1 ), ( req, res ) => { if ( req.session.loggedInAdmin ) { fs.writeFileSync( path.join( __dirname + '/../assets/logo.png' ), req.files[ 0 ].buffer ); + + pngToIco( path.join( __dirname + '/../assets/logo.png' ) ).then( buf => { + fs.writeFileSync( path.join( __dirname + '/../webapp/main/dist/favicon.ico' ), buf ); + } ).catch( () => { + console.error( '[ ICON CONVERTER ] Failed to convert png to ico file' ); + } ); res.send( 'ok' ); } else { res.status( 403 ).send( 'unauthorized' ); diff --git a/src/server/package-lock.json b/src/server/package-lock.json index bb78bd5..405e530 100644 --- a/src/server/package-lock.json +++ b/src/server/package-lock.json @@ -23,6 +23,7 @@ "mysql": "^2.18.1", "nodemailer": "^6.9.3", "pdf-lib": "^1.17.1", + "png-to-ico": "^2.1.8", "qs": "^6.11.2", "serve-favicon": "^2.5.0", "serve-static": "^1.15.0", @@ -2226,10 +2227,39 @@ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, + "node_modules/png-to-ico": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/png-to-ico/-/png-to-ico-2.1.8.tgz", + "integrity": "sha512-Nf+IIn/cZ/DIZVdGveJp86NG5uNib1ZXMiDd/8x32HCTeKSvgpyg6D/6tUBn1QO/zybzoMK0/mc3QRgAyXdv9w==", + "dependencies": { + "@types/node": "^17.0.36", + "minimist": "^1.2.6", + "pngjs": "^6.0.0" + }, + "bin": { + "png-to-ico": "bin/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/png-to-ico/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "engines": { + "node": ">=12.13.0" + } + }, "node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -2912,9 +2942,9 @@ } }, "node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/server/package.json b/src/server/package.json index 7cf2b46..b511e35 100644 --- a/src/server/package.json +++ b/src/server/package.json @@ -56,6 +56,7 @@ "mysql": "^2.18.1", "nodemailer": "^6.9.3", "pdf-lib": "^1.17.1", + "png-to-ico": "^2.1.8", "qs": "^6.11.2", "serve-favicon": "^2.5.0", "serve-static": "^1.15.0",