apps: fix various operators issues

part of #791
This commit is contained in:
Girish Ramakrishnan
2021-09-21 17:28:58 -07:00
parent fabd0323e1
commit 6c9b8c8fa8
5 changed files with 19 additions and 18 deletions
+7 -15
View File
@@ -3,6 +3,7 @@
exports = module.exports = {
canAccess,
isOperator,
accessLevel,
removeInternalFields,
removeRestrictedFields,
@@ -126,7 +127,6 @@ exports = module.exports = {
_validatePortBindings: validatePortBindings,
_validateAccessRestriction: validateAccessRestriction,
_translatePortBindings: translatePortBindings,
_accessLevel: accessLevel,
_clear: clear
};
@@ -439,7 +439,7 @@ function getDataDir(app, dataDir) {
function removeInternalFields(app) {
return _.pick(app,
'id', 'appStoreId', 'installationState', 'error', 'runState', 'health', 'taskId',
'location', 'domain', 'fqdn', 'mailboxName', 'mailboxDomain', 'accessLevel',
'location', 'domain', 'fqdn', 'mailboxName', 'mailboxDomain',
'accessRestriction', 'manifest', 'portBindings', 'iconUrl', 'memoryLimit', 'cpuShares', 'operators',
'sso', 'debugMode', 'reverseProxyConfig', 'enableBackup', 'creationTime', 'updateTime', 'ts', 'tags',
'label', 'alternateDomains', 'aliasDomains', 'env', 'enableAutomaticUpdate', 'dataDir', 'mounts', 'enableMailbox');
@@ -449,7 +449,7 @@ function removeInternalFields(app) {
function removeRestrictedFields(app) {
return _.pick(app,
'id', 'appStoreId', 'installationState', 'error', 'runState', 'health', 'taskId', 'accessRestriction', 'alternateDomains', 'aliasDomains', 'sso',
'location', 'domain', 'fqdn', 'manifest', 'portBindings', 'iconUrl', 'creationTime', 'ts', 'tags', 'label', 'enableBackup', 'accessLevel');
'location', 'domain', 'fqdn', 'manifest', 'portBindings', 'iconUrl', 'creationTime', 'ts', 'tags', 'label', 'enableBackup');
}
async function getIcon(app, options) {
@@ -778,8 +778,8 @@ async function updateWithConstraints(id, app, constraints) {
}
const fields = [ ], values = [ ];
for (let p in app) {
if (p === 'manifest' || p === 'tags' || p === 'accessRestriction' || p === 'debugMode' || p === 'error' || p === 'reverseProxyConfig' || p === 'servicesConfig') {
for (const p in app) {
if (p === 'manifest' || p === 'tags' || p === 'accessRestriction' || p === 'debugMode' || p === 'error' || p === 'reverseProxyConfig' || p === 'servicesConfig' || p === 'operators') {
fields.push(`${p}Json = ?`);
values.push(JSON.stringify(app[p]));
} else if (p !== 'portBindings' && p !== 'location' && p !== 'domain' && p !== 'alternateDomains' && p !== 'aliasDomains' && p !== 'env' && p !== 'mounts') {
@@ -928,16 +928,8 @@ async function getByFqdn(fqdn) {
async function listByUser(user) {
assert.strictEqual(typeof user, 'object');
const allApps = await list();
const result = [];
for (const app of allApps) {
const al = accessLevel(app, user);
if (!al) continue;
app.accessLevel = al;
result.push(app);
}
return result;
const result = await list();
return result.filter((app) => canAccess(app, user));
}
async function downloadManifest(appStoreId, manifest) {
+9 -2
View File
@@ -74,7 +74,10 @@ async function load(req, res, next) {
function getApp(req, res, next) {
assert.strictEqual(typeof req.app, 'object');
next(new HttpSuccess(200, apps.removeInternalFields(req.app)));
const result = apps.removeInternalFields(req.app);
result.accessLevel = apps.accessLevel(req.app, req.user);
next(new HttpSuccess(200, result));
}
async function listByUser(req, res, next) {
@@ -83,7 +86,11 @@ async function listByUser(req, res, next) {
let [error, result] = await safe(apps.listByUser(req.user));
if (error) return next(BoxError.toHttpError(error));
result = result.map(apps.removeRestrictedFields);
result = result.map(r => {
const app = apps.removeRestrictedFields(r);
app.accessLevel = apps.accessLevel(r, req.user);
return app;
});
next(new HttpSuccess(200, { apps: result }));
}
+1 -1
View File
@@ -200,7 +200,7 @@ function initializeExpressSync() {
// app routes
router.post('/api/v1/apps/install', json, token, authorizeAdmin, routes.apps.install);
router.get ('/api/v1/apps', token, routes.apps.listByUser);
router.get ('/api/v1/apps/:id', token, authorizeAdmin, routes.apps.load, routes.apps.getApp);
router.get ('/api/v1/apps/:id', token, routes.apps.load, authorizeOperator, routes.apps.getApp);
router.get ('/api/v1/apps/:id/icon', token, routes.apps.load, routes.apps.getAppIcon);
router.post('/api/v1/apps/:id/uninstall', json, token, authorizeAdmin, routes.apps.load, routes.apps.uninstall);
router.post('/api/v1/apps/:id/configure/access_restriction', json, token, authorizeAdmin, routes.apps.load, routes.apps.setAccessRestriction);
+1
View File
@@ -217,6 +217,7 @@ describe('Apps', function () {
accessRestriction: '',
memoryLimit: 1337,
cpuShares: 102,
operators: { users: [ 'someid' ] }
};
await apps.update(app.id, data);