mikl/edzif-validator

View on GitHub
src/validators/zone.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict'

const Joi = require('joi')
const RecordTypeA = require('./record_type_a')
const RecordTypeAAAA = require('./record_type_aaaa')
const RecordTypeCNAME = require('./record_type_cname')
const RecordTypeMX = require('./record_type_mx')
const RecordTypeNS = require('./record_type_ns')
const RecordTypeSOA = require('./record_type_soa')
const RecordTypeSRV = require('./record_type_srv')
const RecordTypeTXT = require('./record_type_txt')
const zoneName = require('./zone_name')

const schema = Joi.object().keys({
  // Implementation specific, any kind of ID is allowed.
  id: Joi.any(),
  name: zoneName.required(),
  records: Joi.array().items(
    RecordTypeA, RecordTypeAAAA, RecordTypeCNAME, RecordTypeMX, RecordTypeNS,
    RecordTypeSOA, RecordTypeSRV, RecordTypeTXT
  ),
  vendor: Joi.object()
})

module.exports = function (zone, config) {
  return new Promise((resolve) => {
    const response = {
      errors: {}
    }

    const result = Joi.validate(zone, schema, { abortEarly: false })

    response.valid = !result.error
    // Expose the error objects to the caller.
    if (result.error) {
      response.errors.zone = result.error
    }

    resolve(response)
  })
}