Esempio n. 1
0
    def post(self):
        domain_id = request.form.get('domain_id')

        if domain_id is None:
            abort(400, message="domain_id parameter is required")

        domain_id = int(domain_id)

        # check if the domain exists
        try:
            domain = self.get_domain(domain_id)
        except peewee.DoesNotExist:
            abort(404, message="domain_id does not exist: " + str(domain_id))

        record_type = request.form.get('record_type')
        try:
            readable_type = RecordType().set(record_type)
        except RecordTypeException:
            abort(400, message="Invalid record_type: " + str(record_type))

        # If SOA, make sure a record doesn't yet exist
        if record_type == "SOA":
            try:
                ModelRecord.get(
                    ModelRecord.type == RecordType().set(record_type),
                    ModelRecord.domain_id == domain_id)
                abort(400, message="SOA record already exists for this domain")
            except peewee.DoesNotExist:
                pass

        TypeModel = RecordType().get_class(RecordType().set(record_type))()

        self.request_form_to_type_model(request.form, TypeModel, domain)

        TypeModel.values["domain_id"] = domain.domain_id
        model = TypeModel.to_model()

        # get domain and check authorization
        domain = self.auth.account.get_domain_by_record_acl(
            domain_id, model.host, record_type)
        if domain is False:
            self.auth.account.load_domains()
            domain = self.get_write_domain(domain_id)

        try:
            model.save()
        except RecordValueException as e:
            abort(400, message=e.message)

        self.dns_log(domain.domain_id,
                     ("added " + record_type + " with host " + model.host +
                      " and value " + model.val))

        # notify listeners of dns data change
        self.send_update_notification()

        return {'status': 'ok', 'record': model.to_recordtype().to_dict()}, 201
Esempio n. 2
0
    def post(self):
        domain_id = request.form.get('domain_id')

        if domain_id is None:
            abort(400, message="domain_id parameter is required")

        domain_id = int(domain_id)

        # check if the domain exists
        try:
            self.get_domain(domain_id)
        except peewee.DoesNotExist:
            abort(404, message="domain_id does not exist: " + domain_id)

        # get domain and check authorization
        self.auth.account.load_domains()
        domain = self.get_write_domain(domain_id)

        record_type = request.form.get('record_type')
        try:
            readable_type = RecordType().set(record_type)
        except RecordTypeException:
            abort(400, message="Invalid record_type: " + str(record_type))

        # If SOA, make sure a record doesn't yet exist
        if record_type == "SOA":
            try:
                ModelRecord.get(
                    ModelRecord.type == RecordType().set(record_type),
                    ModelRecord.domain_id == domain_id
                )
                abort(400, message="SOA record already exists for this domain")
            except peewee.DoesNotExist:
                pass

        TypeModel = RecordType().get_class(RecordType().set(record_type))()

        self.request_form_to_type_model(request.form, TypeModel, domain)

        TypeModel.values["domain_id"] = domain.domain_id
        model = TypeModel.to_model()
        try:
            model.save()
        except RecordValueException as e:
            abort(400, message=e.message)

        self.dns_log(
            domain.domain_id,
            (
                "added " + record_type +
                " with host " + model.host +
                " and value " + model.val
            )
        )

        return {'status': 'ok', 'record': model.to_recordtype().to_dict()}, 201
Esempio n. 3
0
    def post(self):
        # only open to senior_admin for now
        if self.auth.account.account_type != 'senior_admin':
            abort(403)

        record_type = request.form.get('record_type')
        try:
            record_type_in_db = RecordType().set(record_type)
        except RecordTypeException:
            abort(400, message="Invalid record_type: " + record_type)

        if record_type in ["AAAA+PTR", "PTR"]:
            abort(
                400,
                message="Sorry, record_type " + record_type +
                        " is not supported for default records"
            )

        # If SOA, make sure a record doesn't yet exist
        if record_type == "SOA":
            try:
                ModelDefaultRecord.get(
                    ModelDefaultRecord.type == record_type_in_db
                )
                abort(400, message="A default SOA record already exists")
            except peewee.DoesNotExist:
                pass

        TypeModel = RecordType().get_class(RecordType().set(record_type))()

        self.request_form_to_type_model(request.form, TypeModel, None)

        model = TypeModel.to_model(default_record=True)
        model.default_type = "system"

        model.save()

        return {
            'status': 'ok',
            'default_record': model.to_recordtype().to_dict()
        }, 201
Esempio n. 4
0
    def post(self):
        # only open to senior_admin for now
        if self.auth.account.account_type != 'senior_admin':
            abort(403)

        record_type = request.form.get('record_type')
        try:
            record_type_in_db = RecordType().set(record_type)
        except RecordTypeException:
            abort(400, message="Invalid record_type: " + record_type)

        if record_type in ["AAAA+PTR", "PTR"]:
            abort(400,
                  message="Sorry, record_type " + record_type +
                  " is not supported for default records")

        # If SOA, make sure a record doesn't yet exist
        if record_type == "SOA":
            try:
                ModelDefaultRecord.get(
                    ModelDefaultRecord.type == record_type_in_db)
                abort(400, message="A default SOA record already exists")
            except peewee.DoesNotExist:
                pass

        TypeModel = RecordType().get_class(RecordType().set(record_type))()

        self.request_form_to_type_model(request.form, TypeModel, None)

        model = TypeModel.to_model(default_record=True)
        model.default_type = "system"

        model.save()

        return {
            'status': 'ok',
            'default_record': model.to_recordtype().to_dict()
        }, 201