31 lines
1.1 KiB
Python
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
|