[web] Make SamlLogHandler.log() calls asynchronous (#17207)

* [web] Refactor exports in ErrorController

* [web] Make SamlLogHandler.log() async

* [web] await for SamlLogHandler.log() in ErrorController

* [web] await for SamlLogHandler.log() in SAMLMiddleware

* [web] await for SamlLogHandler.log() async controllers

* [web] await for SamlLogHandler.log() in SAMLManager

* [web] Remove explicit wait when testing SAML logs

After making the logs asynchronouse the wait
is no longer needed

* [web] Avoid using async with SamlLogHandler.log on callbacks

* Add expressifyErrorHandler to promise-utils

* Tighten assertion in SAMLMiddlewareTests

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>

* Updated SamlLogHandler.log to await for promise

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 3645923fae8096a9ba25dc9087f1a36231528569
This commit is contained in:
Miguel Serrano
2024-02-22 15:59:17 +01:00
committed by Copybot
parent 680c9b9570
commit f4454cfe7e
5 changed files with 163 additions and 117 deletions

View File

@@ -10,6 +10,7 @@ module.exports = {
callbackifyAll,
callbackifyMultiResult,
expressify,
expressifyErrorHandler,
promiseMapWithLimit,
}
@@ -208,6 +209,17 @@ function expressify(fn) {
}
}
/**
* Transform an async function into an Error Handling Express middleware
*
* Any error will be passed to the error middlewares via `next()`
*/
function expressifyErrorHandler(fn) {
return (err, req, res, next) => {
fn(err, req, res, next).catch(next)
}
}
/**
* Map values in `array` with the async function `fn`
*

View File

@@ -4,6 +4,8 @@ const {
promisifyClass,
callbackifyMultiResult,
callbackifyAll,
expressify,
expressifyErrorHandler,
} = require('../..')
describe('promisifyAll', function () {
@@ -324,3 +326,23 @@ describe('callbackifyAll', function () {
})
})
})
describe('expressify', function () {
it('should propagate any rejection to the "next" callback', function (done) {
const fn = () => Promise.reject(new Error('rejected'))
expressify(fn)({}, {}, error => {
expect(error.message).to.equal('rejected')
done()
})
})
})
describe('expressifyErrorHandler', function () {
it('should propagate any rejection to the "next" callback', function (done) {
const fn = () => Promise.reject(new Error('rejected'))
expressifyErrorHandler(fn)({}, {}, {}, error => {
expect(error.message).to.equal('rejected')
done()
})
})
})