domains: validate well known
This commit is contained in:
@@ -116,6 +116,15 @@ function validateTlsConfig(tlsConfig, dnsProvider) {
|
||||
function validateWellKnown(wellKnown) {
|
||||
assert.strictEqual(typeof wellKnown, 'object');
|
||||
|
||||
if (wellKnown === null) return null;
|
||||
|
||||
for (const key of Object.keys(wellKnown)) {
|
||||
if (typeof wellKnown[key] !== 'string') return new BoxError(BoxError.BAD_FIELD, `well-known value for ${key} must be a string`);
|
||||
}
|
||||
|
||||
if (wellKnown.carddav && wellKnown.carddav.includes('://')) return new BoxError(BoxError.BAD_FIELD, 'carddav must be a domain, not a URL');
|
||||
if (wellKnown.caldav && wellKnown.caldav.includes('://')) return new BoxError(BoxError.BAD_FIELD, 'caldav must be a domain, not a URL');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,13 +47,13 @@ async function get(domain, location) {
|
||||
if (!domainObject) throw new BoxError(BoxError.NOT_FOUND, 'Domain not found');
|
||||
if (!domainObject.wellKnown || !domainObject.wellKnown.carddav) throw new BoxError(BoxError.NOT_FOUND, 'No custom well-known config');
|
||||
|
||||
return { redirectTo: domainObject.wellKnown.carddav };
|
||||
return { redirectTo: `https://${domainObject.wellKnown.carddav}` };
|
||||
} else if (location === 'caldav') {
|
||||
const domainObject = await domains.get(domain);
|
||||
if (!domainObject) throw new BoxError(BoxError.NOT_FOUND, 'Domain not found');
|
||||
if (!domainObject.wellKnown || !domainObject.wellKnown.caldav) throw new BoxError(BoxError.NOT_FOUND, 'No custom well-known config');
|
||||
|
||||
return { redirectTo: domainObject.wellKnown.caldav };
|
||||
return { redirectTo: `https://${domainObject.wellKnown.caldav}` };
|
||||
} else {
|
||||
throw new BoxError(BoxError.NOT_FOUND, 'No custom well-known config');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user