#!/usr/bin/env python # -*- coding: utf-8 -*- import flask from flask.json import dump from jose import jwt, jwk import os from flask import render_template, send_from_directory, Blueprint, jsonify, url_for from flask_pyoidc.user_session import UserSession from backend import app from backend.auth import oidc_auth fe_path = os.path.join(os.getcwd(), "frontend", "dist") fe_bp = Blueprint('frontend', __name__, url_prefix='/', template_folder=os.path.join(fe_path, "")) @fe_bp.route('/js/') def send_js(path): return send_from_directory(os.path.join(fe_path, "js"), path) @fe_bp.route('/css/') def send_css(path): return send_from_directory(os.path.join(fe_path, "css"), path) @fe_bp.route('/img/') def send_img(path): return send_from_directory(os.path.join(fe_path, "img"), path) @fe_bp.route('/test') @oidc_auth.oidc_auth() def test_oidc(): user_session = UserSession(flask.session) access_token = user_session.access_token token_claim = jwt.get_unverified_claims(access_token) token_header = jwt.get_unverified_header(access_token) return jsonify(id_token=flask.session['id_token'], access_token=flask.session['access_token'], userinfo=flask.session['userinfo'], token_claim=token_claim, token_header=token_header) def has_no_empty_params(rule): defaults = rule.defaults if rule.defaults is not None else () arguments = rule.arguments if rule.arguments is not None else () return len(defaults) >= len(arguments) @fe_bp.route("/site-map") def site_map(): links = [] for rule in app.url_map.iter_rules(): # Filter out rules we can't navigate to in a browser # and rules that require parameters if has_no_empty_params(rule): #if "GET" in rule.methods and has_no_empty_params(rule): url = url_for(rule.endpoint, **(rule.defaults or {})) links.append((url, rule.endpoint)) # links is now a list of url, endpoint tuples #dump(links) return jsonify(links) @fe_bp.route('/', defaults={'path': ''}) @fe_bp.route('/') def catch_all(path): return render_template("index.html")