amity/app/disco.py
Micke Nordin 4dd92c0bdc
first commit
Signed-off-by: Micke Nordin <kano@sunet.se>
2025-06-24 13:27:40 +02:00

31 lines
1.1 KiB
Python

import cherrypy
import yaml
import os
from jinja2 import Environment, FileSystemLoader
from cryptography.hazmat.primitives import serialization
from .crypto import generate_and_save_keypair, load_keypair, PRIVATE_KEY_PATH, PUBLIC_KEY_PATH
env = Environment(loader=FileSystemLoader('templates'))
class Disco(object):
@cherrypy.expose
@cherrypy.tools.json_out()
def index(self):
if not os.path.exists(PRIVATE_KEY_PATH):
generate_and_save_keypair(PRIVATE_KEY_PATH, PUBLIC_KEY_PATH)
_, public_key = load_keypair(PRIVATE_KEY_PATH, PUBLIC_KEY_PATH)
pem_bytes = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo,
)
pem_string = pem_bytes.decode('utf-8')
baseurl = cherrypy.request.base
tmpl = env.get_template('discovery.yaml')
yamldoc = yaml.safe_load(
tmpl.render(endpoint=baseurl + '/ocm',
public_key_id=baseurl + '/ocm#signature',
public_key_pem=pem_string))
return yamldoc