Add labels and tags

This commit is contained in:
Girish Ramakrishnan
2019-03-22 07:48:31 -07:00
parent 81b721be2b
commit abae4b5106
6 changed files with 109 additions and 15 deletions

View File

@@ -283,11 +283,33 @@ function validateRobotsTxt(robotsTxt) {
}
function validateBackupFormat(format) {
assert.strictEqual(typeof format, 'string');
if (format === 'tgz' || format == 'rsync') return null;
return new AppsError(AppsError.BAD_FIELD, 'Invalid backup format');
}
function validateLabel(label) {
if (label === null) return null;
if (label.length > 128) return new AppsError(AppsError.BAD_FIELD, 'label must be less than 128');
return null;
}
function validateTags(tags) {
assert(Array.isArray(tags), 'tags must be an array');
if (tags.length > 64) return new AppsError(AppsError.BAD_FIELD, 'Can only set up to 64 tags');
for (const tag of tags) {
if (tag.length > 128) return new AppsError(AppsError.BAD_FIELD, 'tag must be less than 128');
}
return null;
}
function validateEnv(env) {
for (let key in env) {
if (key.length > 512) return new AppsError(AppsError.BAD_FIELD, 'Max env var key length is 512');
@@ -575,7 +597,9 @@ function install(data, user, auditSource, callback) {
ownerId = data.ownerId,
alternateDomains = data.alternateDomains || [],
env = data.env || {},
mailboxName = data.mailboxName || '';
mailboxName = data.mailboxName || '',
label = data.label || null,
tags = data.tags || null;
assert(data.appStoreId || data.manifest); // atleast one of them is required
@@ -609,6 +633,12 @@ function install(data, user, auditSource, callback) {
error = validateBackupFormat(backupFormat);
if (error) return callback(error);
error = validateLabel(label);
if (error) return callback(error);
error = validateTags(tags);
if (error) return callback(error);
if ('sso' in data && !('optionalSso' in manifest)) return callback(new AppsError(AppsError.BAD_FIELD, 'sso can only be specified for apps with optionalSso'));
// if sso was unspecified, enable it by default if possible
if (sso === null) sso = !!manifest.addons['ldap'] || !!manifest.addons['oauth'];
@@ -796,6 +826,18 @@ function configure(appId, data, user, auditSource, callback) {
values.dataDir = data.dataDir;
}
if ('label' in data) {
error = validateLabel(data.label);
if (error) return callback(error);
values.label = data.label;
}
if ('tags' in data) {
error = validateTags(data.tags);
if (error) return callback(error);
values.tags = data.tags;
}
domains.get(domain, function (error, domainObject) {
if (error && error.reason === DomainsError.NOT_FOUND) return callback(new AppsError(AppsError.NOT_FOUND, 'No such domain'));
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, 'Could not get domain info:' + error.message));