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
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
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
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), )
def get_default_record(self, record_id): return ModelDefaultRecord.get( ModelDefaultRecord.record_id == record_id)
def get_default_record(self, record_id): return ModelDefaultRecord.get( ModelDefaultRecord.record_id == record_id )