From bd3aff9a7bc0e01d92c4e5ffdb6b8814d2988061 Mon Sep 17 00:00:00 2001 From: Sabir Hassan Date: Wed, 29 Mar 2023 20:10:55 +0500 Subject: [PATCH] chore: move secondsToHms to @sasjs/utils --- api/package-lock.json | 106 ++++++++++++++++---- api/package.json | 2 +- api/src/controllers/web.ts | 9 +- api/src/middlewares/bruteForceProtection.ts | 5 +- api/src/utils/index.ts | 1 - api/src/utils/secondsToHms.ts | 10 -- 6 files changed, 96 insertions(+), 37 deletions(-) delete mode 100644 api/src/utils/secondsToHms.ts diff --git a/api/package-lock.json b/api/package-lock.json index f0ded1d..c38adab 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.2", "dependencies": { "@sasjs/core": "^4.40.1", - "@sasjs/utils": "2.48.1", + "@sasjs/utils": "3.2.0", "bcryptjs": "^2.4.3", "connect-mongo": "^4.6.0", "cookie-parser": "^1.4.6", @@ -2028,6 +2028,24 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.18.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.42.tgz", + "integrity": "sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg==" + }, "node_modules/@hapi/hoek": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", @@ -2544,17 +2562,17 @@ "integrity": "sha512-hVEVnH8tej57Cran/X/iUoDms7EoL+2fwAPvjQMgHBHh8ynsF8aqYBreiRCwbrvdrjBsnmayOVh2RiQLtfHhoQ==" }, "node_modules/@sasjs/utils": { - "version": "2.48.1", - "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.48.1.tgz", - "integrity": "sha512-Eu9p66JKLeTj0KK3kfY7YLQYq+MDMS1Q1/FOFfRe9hV23mFsuzierVMrnEYGK0JaHOogdHLmwzg6iVLDT8Jssg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-3.2.0.tgz", + "integrity": "sha512-Hdt4t/ErAy9JeJAyH7sJ+tA3ipKYUwRAAWN1CGMG0+BK2/TUVjpPtP9xYCtKculzfHFadthNXTnFVTfe4D4MLw==", "hasInstallScript": true, "dependencies": { + "@fast-csv/format": "4.3.5", "@types/fs-extra": "9.0.13", "@types/prompts": "2.0.13", "chalk": "4.1.1", "cli-table": "0.3.6", "consola": "2.15.0", - "csv-stringify": "5.6.5", "find": "0.3.0", "fs-extra": "10.0.0", "jwt-decode": "3.1.2", @@ -4607,11 +4625,6 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, - "node_modules/csv-stringify": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", - "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==" - }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -8114,6 +8127,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -8124,11 +8142,26 @@ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==" + }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", @@ -12983,6 +13016,26 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "requires": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "14.18.42", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.42.tgz", + "integrity": "sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg==" + } + } + }, "@hapi/hoek": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", @@ -13382,16 +13435,16 @@ "integrity": "sha512-hVEVnH8tej57Cran/X/iUoDms7EoL+2fwAPvjQMgHBHh8ynsF8aqYBreiRCwbrvdrjBsnmayOVh2RiQLtfHhoQ==" }, "@sasjs/utils": { - "version": "2.48.1", - "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.48.1.tgz", - "integrity": "sha512-Eu9p66JKLeTj0KK3kfY7YLQYq+MDMS1Q1/FOFfRe9hV23mFsuzierVMrnEYGK0JaHOogdHLmwzg6iVLDT8Jssg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-3.2.0.tgz", + "integrity": "sha512-Hdt4t/ErAy9JeJAyH7sJ+tA3ipKYUwRAAWN1CGMG0+BK2/TUVjpPtP9xYCtKculzfHFadthNXTnFVTfe4D4MLw==", "requires": { + "@fast-csv/format": "4.3.5", "@types/fs-extra": "9.0.13", "@types/prompts": "2.0.13", "chalk": "4.1.1", "cli-table": "0.3.6", "consola": "2.15.0", - "csv-stringify": "5.6.5", "find": "0.3.0", "fs-extra": "10.0.0", "jwt-decode": "3.1.2", @@ -15088,11 +15141,6 @@ } } }, - "csv-stringify": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", - "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==" - }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -17714,6 +17762,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -17724,11 +17777,26 @@ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, "lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" }, + "lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==" + }, "lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", diff --git a/api/package.json b/api/package.json index 51a79eb..2f07963 100644 --- a/api/package.json +++ b/api/package.json @@ -49,7 +49,7 @@ "author": "4GL Ltd", "dependencies": { "@sasjs/core": "^4.40.1", - "@sasjs/utils": "2.48.1", + "@sasjs/utils": "3.2.0", "bcryptjs": "^2.4.3", "connect-mongo": "^4.6.0", "cookie-parser": "^1.4.6", diff --git a/api/src/controllers/web.ts b/api/src/controllers/web.ts index 67dc02b..ae61b61 100644 --- a/api/src/controllers/web.ts +++ b/api/src/controllers/web.ts @@ -1,7 +1,7 @@ import path from 'path' import express from 'express' import { Request, Route, Tags, Post, Body, Get, Example } from 'tsoa' -import { readFile } from '@sasjs/utils' +import { readFile, convertSecondsToHms } from '@sasjs/utils' import User from '../model/User' import Client from '../model/Client' @@ -10,8 +10,7 @@ import { generateAuthCode, RateLimiter, AuthProviderType, - LDAPClient, - secondsToHms + LDAPClient } from '../utils' import { InfoJWT } from '../types' import { AuthController } from './auth' @@ -111,7 +110,9 @@ const login = async ( if (retrySecs > 0) { throw { code: 429, - message: `Too Many Requests! Retry after ${secondsToHms(retrySecs)}` + message: `Too Many Requests! Retry after ${convertSecondsToHms( + retrySecs + )}` } } } diff --git a/api/src/middlewares/bruteForceProtection.ts b/api/src/middlewares/bruteForceProtection.ts index beeb695..82edc1a 100644 --- a/api/src/middlewares/bruteForceProtection.ts +++ b/api/src/middlewares/bruteForceProtection.ts @@ -1,5 +1,6 @@ import { RequestHandler } from 'express' -import { RateLimiter, secondsToHms } from '../utils' +import { convertSecondsToHms } from '@sasjs/utils' +import { RateLimiter } from '../utils' export const bruteForceProtection: RequestHandler = async (req, res, next) => { const ip = req.ip @@ -12,7 +13,7 @@ export const bruteForceProtection: RequestHandler = async (req, res, next) => { if (retrySecs > 0) { res .status(429) - .send(`Too Many Requests! Retry after ${secondsToHms(retrySecs)}`) + .send(`Too Many Requests! Retry after ${convertSecondsToHms(retrySecs)}`) return } diff --git a/api/src/utils/index.ts b/api/src/utils/index.ts index 3478447..987bfaf 100644 --- a/api/src/utils/index.ts +++ b/api/src/utils/index.ts @@ -24,7 +24,6 @@ export * from './parseLogToArray' export * from './rateLimiter' export * from './removeTokensInDB' export * from './saveTokensInDB' -export * from './secondsToHms' export * from './seedDB' export * from './setProcessVariables' export * from './setupFolders' diff --git a/api/src/utils/secondsToHms.ts b/api/src/utils/secondsToHms.ts deleted file mode 100644 index 7d8e8cb..0000000 --- a/api/src/utils/secondsToHms.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const secondsToHms = (seconds: number) => { - const h = Math.floor(seconds / 3600) - const m = Math.floor((seconds % 3600) / 60) - const s = Math.floor((seconds % 3600) % 60) - - const hDisplay = h > 0 ? h + (h == 1 ? ' hour, ' : ' hours, ') : '' - const mDisplay = m > 0 ? m + (m == 1 ? ' minute, ' : ' minutes, ') : '' - const sDisplay = s > 0 ? s + (s == 1 ? ' second' : ' seconds') : '' - return hDisplay + mDisplay + sDisplay -}