move addon config db code to addonconfigs.js

This commit is contained in:
Girish Ramakrishnan
2021-08-19 21:39:27 -07:00
parent 411cc7daa1
commit c5fff756d1
9 changed files with 300 additions and 339 deletions

View File

@@ -7,8 +7,8 @@ exports = module.exports = {
_MOCK_APP: null
};
const assert = require('assert'),
appdb = require('./appdb.js'),
const addonConfigs = require('./addonconfigs.js'),
assert = require('assert'),
apps = require('./apps.js'),
async = require('async'),
BoxError = require('./boxerror.js'),
@@ -628,24 +628,18 @@ function userSearchSftp(req, res, next) {
});
}
function verifyAppMailboxPassword(addonId, username, password, callback) {
async function verifyAppMailboxPassword(addonId, username, password) {
assert.strictEqual(typeof addonId, 'string');
assert.strictEqual(typeof username, 'string');
assert.strictEqual(typeof password, 'string');
assert.strictEqual(typeof callback, 'function');
const pattern = addonId === 'sendmail' ? 'MAIL_SMTP' : 'MAIL_IMAP';
appdb.getAppIdByAddonConfigValue(addonId, `%${pattern}_PASSWORD`, password, function (error, appId) { // search by password because this is unique for each app
if (error) return callback(error);
const appId = await addonConfigs.getAppIdByValue(addonId, `%${pattern}_PASSWORD`, password); // search by password because this is unique for each app
if (!appId) throw new BoxError(BoxError.NOT_FOUND);
appdb.getAddonConfig(appId, addonId, function (error, result) {
if (error) return callback(error);
const result = await addonConfigs.get(appId, addonId);
if (!result.some(r => r.name.endsWith(`${pattern}_USERNAME`) && r.value === username)) return callback(new BoxError(BoxError.INVALID_CREDENTIALS));
callback(null);
});
});
if (!result.some(r => r.name.endsWith(`${pattern}_USERNAME`) && r.value === username)) throw new BoxError(BoxError.INVALID_CREDENTIALS);
}
async function authenticateMailAddon(req, res, next) {
@@ -666,7 +660,7 @@ async function authenticateMailAddon(req, res, next) {
if (addonId === 'recvmail' && !domain.enabled) return next(new ldap.NoSuchObjectError(req.dn.toString()));
const [appPasswordError] = await safe(util.promisify(verifyAppMailboxPassword)(addonId, email, req.credentials || ''));
const [appPasswordError] = await safe(verifyAppMailboxPassword(addonId, email, req.credentials || ''));
if (!appPasswordError) return res.end(); // validated as app
if (appPasswordError && appPasswordError.reason === BoxError.INVALID_CREDENTIALS) return next(new ldap.InvalidCredentialsError(req.dn.toString()));