|
| 1 | +import errno |
| 2 | +import json |
| 3 | +import os |
| 4 | +from socket import AF_INET, SOCK_DGRAM, socket |
| 5 | + |
| 6 | +from didkit import generate_ed25519_key |
| 7 | +from flask import Flask, jsonify, render_template, request |
| 8 | +from flask_qrcode import QRcode |
| 9 | + |
| 10 | +from didkit_flask.issue_credential import req_issue_vc |
| 11 | + |
| 12 | +app = Flask(__name__) |
| 13 | +qrcode = QRcode(app) |
| 14 | + |
| 15 | + |
| 16 | +@app.route("/") |
| 17 | +def index(): |
| 18 | + s = socket(AF_INET, SOCK_DGRAM) |
| 19 | + try: |
| 20 | + s.connect(("10.255.255.255", 1)) |
| 21 | + IP = s.getsockname()[0] |
| 22 | + except Exception: |
| 23 | + IP = "127.0.0.1" |
| 24 | + finally: |
| 25 | + s.close() |
| 26 | + |
| 27 | + url = ( |
| 28 | + (request.is_secure and "https://" or "http://") |
| 29 | + + IP |
| 30 | + + ":" |
| 31 | + + request.host.split(":")[-1] |
| 32 | + + "/wallet" |
| 33 | + ) |
| 34 | + |
| 35 | + return render_template("index.html", url=url) |
| 36 | + |
| 37 | + |
| 38 | +@app.route("/credential", methods=["GET", "POST"]) |
| 39 | +async def credential(): |
| 40 | + credential = json.dumps(await req_issue_vc(request), indent=2, sort_keys=True) |
| 41 | + |
| 42 | + return render_template("credential.html", credential=credential) |
| 43 | + |
| 44 | + |
| 45 | +@app.route("/wallet", methods=["GET", "POST"]) |
| 46 | +async def wallet(): |
| 47 | + credential = await req_issue_vc(request) |
| 48 | + if request.method == "GET": |
| 49 | + return jsonify({"type": "CredentialOffer", "credentialPreview": credential}) |
| 50 | + elif request.method == "POST": |
| 51 | + return jsonify(credential) |
| 52 | + |
| 53 | + |
| 54 | +def main(): |
| 55 | + flags = os.O_CREAT | os.O_EXCL | os.O_WRONLY |
| 56 | + try: |
| 57 | + file_handle = os.open("key.jwk", flags) |
| 58 | + except OSError as e: |
| 59 | + if e.errno == errno.EEXIST: |
| 60 | + pass |
| 61 | + else: |
| 62 | + raise |
| 63 | + else: |
| 64 | + with os.fdopen(file_handle, "w") as file_obj: |
| 65 | + file_obj.write(generate_ed25519_key()) |
| 66 | + app.run(host="0.0.0.0", port=5001) |
0 commit comments