diff --git a/src/domains.js b/src/domains.js index 6d8876bf2..c04384afd 100644 --- a/src/domains.js +++ b/src/domains.js @@ -394,7 +394,7 @@ function getDnsRecords(location, domain, type, callback) { assert.strictEqual(typeof callback, 'function'); get(domain, function (error, domainObject) { - if (error) return callback(new DomainsError(DomainsError.INTERNAL_ERROR, error)); + if (error) return callback(error); api(domainObject.provider).get(domainObject, location, type, function (error, values) { if (error) return callback(error); diff --git a/src/routes/domains.js b/src/routes/domains.js index dd63360a1..96fca14bc 100644 --- a/src/routes/domains.js +++ b/src/routes/domains.js @@ -7,6 +7,8 @@ exports = module.exports = { update: update, del: del, + getDnsRecord: getDnsRecord, + verifyDomainLock: verifyDomainLock }; @@ -152,3 +154,18 @@ function del(req, res, next) { next(new HttpSuccess(204)); }); } + +function getDnsRecord(req, res, next) { + assert.strictEqual(typeof req.params.domains, 'string'); + + if (!('subdomain' in req.query)) return next(new HttpError(400, 'subdomain is required')); + if (!('type' in req.query)) return next(new HttpError(400, 'type is required')); + + domains.getDnsRecords(req.query.subdomain, req.params.domain, req.query.type, function (error, result) { + if (error && error.reason === DomainsError.NOT_FOUND) return next(new HttpError(404, error.message)); + if (error && error.reason === DomainsError.EXTERNAL_ERROR) return next(new HttpError(424, error.message)); + if (error) return next(new HttpError(500, error)); + + next(new HttpSuccess(200, result)); + }); +} \ No newline at end of file diff --git a/src/server.js b/src/server.js index c277a1904..509fa7f45 100644 --- a/src/server.js +++ b/src/server.js @@ -313,6 +313,7 @@ function initializeExpressSync() { router.get ('/api/v1/domains/:domain', domainsManageScope, verifyDomainLock, routes.domains.get); // this is manage scope because it returns non-restricted fields router.put ('/api/v1/domains/:domain', domainsManageScope, verifyDomainLock, routes.domains.update); router.del ('/api/v1/domains/:domain', domainsManageScope, verifyDomainLock, routes.domains.del); + router.get ('/api/v1/domains/:domain/dns', domainsManageScope, routes.domains.getDnsRecords); // addon routes router.get ('/api/v1/services', cloudronScope, routes.services.getAll);