def _deserialize(self, value, attr, data, **kwargs): """ deserialize a string or list of strings to dkim key data with verification """ # convert list to str if isinstance(value, list): try: value = ''.join(ensure_text_type(item) for item in value).strip() except UnicodeDecodeError as exc: raise self.make_error("invalid_utf8") from exc # only text is allowed else: if not isinstance(value, (str, bytes)): raise self.make_error("invalid") try: value = ensure_text_type(value).strip() except UnicodeDecodeError as exc: raise self.make_error("invalid_utf8") from exc # generate new key? if value.lower() == '-generate-': return dkim.gen_key() # no key? if not value: return None # remember part of value for ValidationError bad_key = value # strip header and footer, clean whitespace and wrap to 64 characters try: if value.startswith('-----BEGIN '): end = value.index('-----', 11) + 5 header = value[:end] value = value[end:] else: header = '-----BEGIN PRIVATE KEY-----' if (pos := value.find('-----END ')) >= 0: end = value.index('-----', pos + 9) + 5 footer = value[pos:end] value = value[:pos] else:
def generate_dkim_key(self): self.dkim_key = dkim.gen_key()
def generate_dkim_key(self): """ generate new DKIM key """ self.dkim_key = dkim.gen_key()