def _deserialize()

in lemur/common/fields.py [0:0]


    def _deserialize(self, value, attr, data):
        general_names = []
        for name in value:
            if name["nameType"] == "DNSName":
                validators.sensitive_domain(name["value"])
                general_names.append(x509.DNSName(name["value"]))

            elif name["nameType"] == "IPAddress":
                general_names.append(
                    x509.IPAddress(ipaddress.ip_address(name["value"]))
                )

            elif name["nameType"] == "IPNetwork":
                general_names.append(
                    x509.IPAddress(ipaddress.ip_network(name["value"]))
                )

            elif name["nameType"] == "uniformResourceIdentifier":
                general_names.append(x509.UniformResourceIdentifier(name["value"]))

            elif name["nameType"] == "directoryName":
                # TODO: Need to parse a string in name['value'] like:
                # 'CN=Common Name, O=Org Name, OU=OrgUnit Name, C=US, ST=ST, L=City/emailAddress=person@example.com'
                # or
                # 'CN=Common Name/O=Org Name/OU=OrgUnit Name/C=US/ST=NH/L=City/emailAddress=person@example.com'
                # and turn it into something like:
                # x509.Name([
                #     x509.NameAttribute(x509.OID_COMMON_NAME, "Common Name"),
                #     x509.NameAttribute(x509.OID_ORGANIZATION_NAME, "Org Name"),
                #     x509.NameAttribute(x509.OID_ORGANIZATIONAL_UNIT_NAME, "OrgUnit Name"),
                #     x509.NameAttribute(x509.OID_COUNTRY_NAME, "US"),
                #     x509.NameAttribute(x509.OID_STATE_OR_PROVINCE_NAME, "NH"),
                #     x509.NameAttribute(x509.OID_LOCALITY_NAME, "City"),
                #     x509.NameAttribute(x509.OID_EMAIL_ADDRESS, "person@example.com")
                # ]
                # general_names.append(x509.DirectoryName(x509.Name(BLAH))))
                pass

            elif name["nameType"] == "rfc822Name":
                general_names.append(x509.RFC822Name(name["value"]))

            elif name["nameType"] == "registeredID":
                general_names.append(
                    x509.RegisteredID(x509.ObjectIdentifier(name["value"]))
                )

            elif name["nameType"] == "otherName":
                # This has two inputs (type and value), so it doesn't fit the mold of the rest of these GeneralName entities.
                # general_names.append(x509.OtherName(name['type'], bytes(name['value']), 'utf-8'))
                pass

            elif name["nameType"] == "x400Address":
                # The Python Cryptography library doesn't support x400Address types (yet?)
                pass

            elif name["nameType"] == "EDIPartyName":
                # The Python Cryptography library doesn't support EDIPartyName types (yet?)
                pass

            else:
                current_app.logger.warning(
                    "Unable to deserialize SubAltName with type: {name_type}".format(
                        name_type=name["nameType"]
                    )
                )

        return x509.SubjectAlternativeName(general_names)