in src/handlers/license_manager_setting_handler.py [0:0]
def post(self, event: LicenseManagerClientSettingPostModel):
# Validation is taken care of, on the gateway/abstract-handler layer.
kid = event.key_id
alg = event.algorithm
raw_prk: str = event.private_key
# Decoding is taking care of within the validation layer.
if self.settings_service. \
get_license_manager_client_key_data(value=False):
return build_response(
code=HTTPStatus.CONFLICT,
content='License Manager Client-Key already exists.'
)
try:
prk = load_pem_private_key(raw_prk.encode(), None)
except (ValueError, Exception):
raise ResponseFactory(HTTPStatus.BAD_REQUEST).message(
'Invalid private key'
).exc()
name = LmTokenProducer.derive_client_private_key_id(kid=kid)
self._ssm_client.create_secret(
secret_name=name,
secret_value={
VALUE_ATTR: prk.private_bytes(
Encoding.PEM,
PrivateFormat.PKCS8,
NoEncryption()
)
}
)
_LOG.info('Private key was saved to SSM')
setting = self.settings_service.create_license_manager_client_key_data(
kid=kid, alg=alg
)
_LOG.info(f'Persisting License Manager Client-Key data:'
f' {setting.value}.')
self.settings_service.save(setting=setting)
return build_response(
code=HTTPStatus.CREATED,
content=self.get_dto(
alg=alg,
kid=kid,
public_key=self.get_public(prk)
)
)