crypto: return private key's type (required for some oauth2 providers)

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
Jens Langhammer 2021-12-25 16:51:28 +01:00
parent 7c55616e29
commit b19da6d774
3 changed files with 17 additions and 1 deletions

View File

@ -1,4 +1,6 @@
"""Crypto API Views""" """Crypto API Views"""
from typing import Optional
from cryptography.hazmat.backends import default_backend from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.serialization import load_pem_private_key from cryptography.hazmat.primitives.serialization import load_pem_private_key
from cryptography.x509 import load_pem_x509_certificate from cryptography.x509 import load_pem_x509_certificate
@ -31,6 +33,7 @@ class CertificateKeyPairSerializer(ModelSerializer):
cert_expiry = DateTimeField(source="certificate.not_valid_after", read_only=True) cert_expiry = DateTimeField(source="certificate.not_valid_after", read_only=True)
cert_subject = SerializerMethodField() cert_subject = SerializerMethodField()
private_key_available = SerializerMethodField() private_key_available = SerializerMethodField()
private_key_type = SerializerMethodField()
certificate_download_url = SerializerMethodField() certificate_download_url = SerializerMethodField()
private_key_download_url = SerializerMethodField() private_key_download_url = SerializerMethodField()
@ -43,6 +46,13 @@ class CertificateKeyPairSerializer(ModelSerializer):
"""Show if this keypair has a private key configured or not""" """Show if this keypair has a private key configured or not"""
return instance.key_data != "" and instance.key_data is not None return instance.key_data != "" and instance.key_data is not None
def get_private_key_type(self, instance: CertificateKeyPair) -> Optional[str]:
"""Get the private key's type, if set"""
key = instance.private_key
if key:
return key.__class__.__name__.replace("_", "").lower().replace("privatekey", "")
return None
def get_certificate_download_url(self, instance: CertificateKeyPair) -> str: def get_certificate_download_url(self, instance: CertificateKeyPair) -> str:
"""Get URL to download certificate""" """Get URL to download certificate"""
return ( return (
@ -98,6 +108,7 @@ class CertificateKeyPairSerializer(ModelSerializer):
"cert_expiry", "cert_expiry",
"cert_subject", "cert_subject",
"private_key_available", "private_key_available",
"private_key_type",
"certificate_download_url", "certificate_download_url",
"private_key_download_url", "private_key_download_url",
"managed", "managed",

View File

@ -20221,6 +20221,10 @@ components:
private_key_available: private_key_available:
type: boolean type: boolean
readOnly: true readOnly: true
private_key_type:
type: string
nullable: true
readOnly: true
certificate_download_url: certificate_download_url:
type: string type: string
readOnly: true readOnly: true
@ -20245,6 +20249,7 @@ components:
- pk - pk
- private_key_available - private_key_available
- private_key_download_url - private_key_download_url
- private_key_type
CertificateKeyPairRequest: CertificateKeyPairRequest:
type: object type: object
description: CertificateKeyPair Serializer description: CertificateKeyPair Serializer

View File

@ -195,7 +195,7 @@ ${this.instance?.redirectUris}</textarea
value=${ifDefined(key.pk)} value=${ifDefined(key.pk)}
?selected=${selected} ?selected=${selected}
> >
${key.name} ${key.name} (${key.privateKeyType?.toUpperCase()})
</option>`; </option>`;
}); });
}), }),