Exemplo n.º 1
0
    def add_default_records(self, endpoint=None):
        # sanity check
        if not self.domain_id:
            raise Exception("Cannot add default records when domain_id is not set")

        # don't duplicate SOA record
        try:
            existing_soa = Record.get(Record.domain_id == self.domain_id, Record.type == RecordType().set("SOA"))
        except DoesNotExist:
            # create SOA record
            try:
                default_soa = DefaultRecord.get(DefaultRecord.type == RecordType().set("SOA"))
                soa = Record()
                soa.domain_id = self.domain_id
                soa.host = default_soa.host.replace("DOMAIN", self.domain)
                soa.val = default_soa.val
                soa.ttl = default_soa.ttl
                soa.type = default_soa.type

                # replace uses of DOMAIN
                soa.save()
                if endpoint is not None:
                    endpoint.dns_log(soa.domain_id, "added soa")
            except DoesNotExist:
                # no default SOA record set!
                pass

        # create all other records
        default_records = DefaultRecord.select().where(DefaultRecord.type != RecordType().set("SOA"))

        for record in default_records:
            new = Record()

            new.domain_id = self.domain_id
            new.distance = record.distance
            new.host = record.host.replace("DOMAIN", self.domain)
            new.val = record.val.replace("DOMAIN", self.domain)
            new.distance = record.distance
            new.port = record.port
            new.ttl = record.ttl
            new.type = record.type
            new.weight = record.weight

            new.save()
            if endpoint is not None:
                endpoint.dns_log(
                    new.domain_id,
                    ("added " + RecordType().get(new.type) + " with host " + new.host + " and value " + new.val),
                )
Exemplo n.º 2
0
    def add_default_soa_record(self, endpoint=None):
        """Returns None if already exists, DoesNotExist bubbles up when no
        default soa exists"""

        # sanity check
        if not self.domain_id:
            raise Exception(
                "Cannot add default records when domain_id is not set")

        # don't duplicate SOA record
        try:
            existing_soa = Record.get(Record.domain_id == self.domain_id,
                                      Record.type == RecordType().set("SOA"))
            return None
        except DoesNotExist:
            # create SOA record, let DoesNotExist bubble up
            default_soa = DefaultRecord.get(
                DefaultRecord.type == RecordType().set("SOA"))
            soa = Record()
            soa.domain_id = self.domain_id
            soa.host = default_soa.host.replace("DOMAIN", self.domain)
            soa.val = default_soa.val
            soa.ttl = default_soa.ttl
            soa.type = default_soa.type

            # replace uses of DOMAIN
            soa.save()
            if endpoint is not None:
                endpoint.dns_log(soa.domain_id, "added soa")

            return soa
Exemplo 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
Exemplo 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
Exemplo n.º 5
0
    def add_default_records(self, endpoint=None, skipSoa=False):
        # sanity check
        if not self.domain_id:
            raise Exception(
                "Cannot add default records when domain_id is not set")

        if not skipSoa:
            try:
                soa = self.add_default_soa_record(endpoint)
            except DoesNotExist:
                # no default SOA record set!
                pass

        # create all other records
        default_records = DefaultRecord.select().where(
            DefaultRecord.type != RecordType().set("SOA"))

        for record in default_records:
            new = Record()

            new.domain_id = self.domain_id
            new.distance = record.distance
            new.host = record.host.replace("DOMAIN", self.domain)
            new.val = record.val.replace("DOMAIN", self.domain)
            new.distance = record.distance
            new.port = record.port
            new.ttl = record.ttl
            new.type = record.type
            new.weight = record.weight

            new.save()
            if endpoint is not None:
                endpoint.dns_log(
                    new.domain_id,
                    ("added " + RecordType().get(new.type) + " with host " +
                     new.host + " and value " + new.val))
Exemplo n.º 6
0
 def get_default_record(self, record_id):
     return ModelDefaultRecord.get(
         ModelDefaultRecord.record_id == record_id)
Exemplo n.º 7
0
 def get_default_records(self):
     return ModelDefaultRecord.select().where(
         ModelDefaultRecord.default_type == 'system'
     )
Exemplo n.º 8
0
 def get_default_records(self):
     return ModelDefaultRecord.select().where(
         ModelDefaultRecord.default_type == 'system')
Exemplo n.º 9
0
 def get_default_record(self, record_id):
     return ModelDefaultRecord.get(
         ModelDefaultRecord.record_id == record_id
     )