mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-15 06:33:55 +01:00
[web] Promisify two-factor-authentication (#19004)
* Fixup typos * Promisify `getPendingUser` * Promisify `getPendingUserWithExpectations` * Add promises to `AccessTokenEncryptor` * Promisify `TwoFactorAuthenticationHandler` * Promisify/Expressify `TwoFactorAuthenticationController` * Centralise `unprocessableEntity` error handling into a function * Fixup: entralise `unprocessableEntity` error handling into a function Avoid "responding to the query twice" * Remove unnecessary try/catch * Fixup: Add `async` to AccessTokenEncryptor promises * Add tests on `AccessTokenEncryptor.promises` * Revert "Fixup: entralise `unprocessableEntity` error handling into a function" This reverts commit 23bd9d73260733062908b98961846733c61171e9. * Revert "Centralise `unprocessableEntity` error handling into a function" This reverts commit 197ca3da02412d5224d411b29df1d7b9e5327d01. GitOrigin-RevId: 1a2864d28e87fd5e48cd3723a3da8047b79a1596
This commit is contained in:
@@ -92,6 +92,9 @@ class AccessTokenSchemeV3 extends AccessTokenSchemeWithGenericKeyFn {
|
||||
|
||||
class AccessTokenEncryptor {
|
||||
constructor(settings) {
|
||||
/**
|
||||
* @type {Map<string, AbstractAccessTokenScheme>}
|
||||
*/
|
||||
this.schemeByCipherLabel = new Map()
|
||||
for (const cipherLabel of Object.keys(settings.cipherPasswords)) {
|
||||
if (!cipherLabel) {
|
||||
@@ -128,25 +131,33 @@ class AccessTokenEncryptor {
|
||||
this.schemeByCipherLabel.set(cipherLabel, scheme)
|
||||
}
|
||||
|
||||
/** @type {AbstractAccessTokenScheme} */
|
||||
this.defaultScheme = this.schemeByCipherLabel.get(settings.cipherLabel)
|
||||
if (!this.defaultScheme) {
|
||||
throw new Error(`unknown default cipherLabel ${settings.cipherLabel}`)
|
||||
}
|
||||
}
|
||||
|
||||
promises = {
|
||||
encryptJson: async json => await this.defaultScheme.encryptJson(json),
|
||||
decryptToJson: async encryptedJson => {
|
||||
const [label] = encryptedJson.split(':', 1)
|
||||
const scheme = this.schemeByCipherLabel.get(label)
|
||||
if (!scheme) {
|
||||
throw new Error('unknown access-token-encryptor label ' + label)
|
||||
}
|
||||
return await scheme.decryptToJson(encryptedJson)
|
||||
},
|
||||
}
|
||||
|
||||
encryptJson(json, callback) {
|
||||
this.defaultScheme.encryptJson(json).then(s => callback(null, s), callback)
|
||||
this.promises.encryptJson(json).then(s => callback(null, s), callback)
|
||||
}
|
||||
|
||||
decryptToJson(encryptedJson, callback) {
|
||||
const [label] = encryptedJson.split(':', 1)
|
||||
const scheme = this.schemeByCipherLabel.get(label)
|
||||
if (!scheme) {
|
||||
return callback(
|
||||
new Error('unknown access-token-encryptor label ' + label)
|
||||
)
|
||||
}
|
||||
scheme.decryptToJson(encryptedJson).then(o => callback(null, o), callback)
|
||||
this.promises
|
||||
.decryptToJson(encryptedJson)
|
||||
.then(o => callback(null, o), callback)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user