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