Skip to content

Commit

Permalink
No commit message
Browse files Browse the repository at this point in the history
  • Loading branch information
Amygos committed Sep 2, 2024
1 parent b8a1a1e commit c9c1641
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions imageroot/actions/upload-certificate/23export_certificates
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env python3

#
# Copyright (C) 2024 Nethesis S.r.l.
# SPDX-License-Identifier: GPL-3.0-or-later
#

import os
import json
import agent
import sys
from base64 import b64decode


module_id = os.environ['MODULE_ID']
node_id = os.environ['NODE_ID']

data = json.load(sys.stdin)

# read and decode the base64 certificate and key from json payload
cert = b64decode(data["certFile"]).decode()
key = b64decode(data["keyFile"]).decode()

# read the common name from the certificate
with subprocess.Popen(['openssl', 'x509', '-noout', '-subject', '-in', '/dev/stdin', '-nameopt', 'sep_multiline', '-nameopt', 'utf8'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True) as openssl:
print(cert, file=openssl.stdin)
subject, _ = openssl.communicate()
domain = subject.split("\n")[0].split("CN=")[1]

# save the certificate and key in redis
rdb = agent.redis_connect(privileged=True)
rkey = f'module/{module_id}/certificate/{domain}'
rdb.hset(rkey, mapping={"cert": cert, "key": key, "custom": True})

# signal the certificate-updated event
event_key = f'module/{module_id}/event/certificate-updated'
print(f'Publishing event {event_key}')
event = {"rkey": rkey, "node": node_id, "module": module_id, "domain": domain, "custom": True}
rdb.publish(event_key, json.dumps(event))

0 comments on commit c9c1641

Please sign in to comment.