diff --git a/src/backend/routes/favicon.ts b/src/backend/routes/favicon.ts index 194f799..9049cd8 100644 --- a/src/backend/routes/favicon.ts +++ b/src/backend/routes/favicon.ts @@ -1,25 +1,28 @@ import config from 'config'; import uploadFavicon from '../utils/uploadFavicon'; -import path from 'path'; -import os from 'os'; -import fs from 'fs'; import express from 'express'; const router = express.Router(); +// Get url to upload favicon from config +const faviconURL: string = config.get('faviconURL'); + +// Favicon path +let filePath: string; + +// Upload favicon by url +uploadFavicon(faviconURL).then((res) => { + filePath = res; +}) + .catch( (err) => { + console.log(err); + }); + /** * Get favicon */ router.get('/favicon', (req, res) => { - const faviconURL: string = config.get('faviconURL'); - - uploadFavicon(faviconURL).then((file) => { - const filename = faviconURL.substring(faviconURL.lastIndexOf('/')+1); - const filePath = path.join(os.tmpdir(), filename); - - fs.writeFileSync(filePath, file); - res.sendFile(filePath); - }); + res.sendFile(filePath); } ); export default router; diff --git a/src/backend/utils/uploadFavicon.ts b/src/backend/utils/uploadFavicon.ts index b34d70e..44d884b 100644 --- a/src/backend/utils/uploadFavicon.ts +++ b/src/backend/utils/uploadFavicon.ts @@ -1,4 +1,7 @@ import { get } from 'https'; +import path from 'path'; +import os from 'os'; +import fs from 'fs'; // Create empty buffer for file let file: Buffer = Buffer.alloc(0); @@ -7,10 +10,11 @@ let file: Buffer = Buffer.alloc(0); * Upload favicon by url * * @param url - url for uploading favicon - * @returns { Promise } - Promise with whole file data + * @returns { Promise } - Promise with path of saved file */ -export default function uploadFavicon(url: string): Promise { - return new Promise(function (resolve, reject) { +export default async function uploadFavicon(url: string): Promise { + // Create prise of getting file data + const fileDataPromise = new Promise(function (resolve, reject) { const req = get(url, function ( res) { // Reject on bad status if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) { @@ -31,4 +35,16 @@ export default function uploadFavicon(url: string): Promise { }); req.end(); }); + const fileData = await fileDataPromise; + + // Get file name by url + const filename = url.substring(url.lastIndexOf('/')+1); + + // Get file path in temporary directory + const filePath = path.join(os.tmpdir(), filename); + + // Save file + fs.writeFileSync(filePath, fileData); + + return filePath; }