from authlib.integrations import flask_client from flask import Flask, jsonify, request, url_for, redirect, session from flask_cors import CORS from authlib.integrations.flask_client import OAuth import os app = Flask(__name__) CORS(app) oauth = OAuth(app) keycloak = oauth.register( 'keycloak', client_id="main", client_secret="", server_metadata_url="https://login.hangman-lab.top/auth/realms/Hangman-Lab/.well-known/openid-configuration", client_kwargs={"scope": "openid email profile"}, ) @app.route('/api/login') def login(): redirect_uri = url_for("authorize", _external=True) return keycloak.authorize_redirect(redirect_uri) @app.route('/api/authorize') def authorize(): token = keycloak.authorize_access_token() user_info = keycloak.parse_id_token(token) session['user'] = user_info @app.route('/api/logout') def logout(): session.pop('user', None) logout_url = "https://login.hangman-lab.top/auth/realms/Hangman-Lab/protocol/openid-connect/logout" return redirect(logout_url) @app.route("/api/user") def user(): u = session.get('user') if not u: return jsonify({"username": "guest", "role": "guest"}) return jsonify(user) @app.route('/api/get_note_list', methods=['GET']) def get_note_list(): raise NotImplementedError @app.route('/api/get_note', methods=['GET']) def get_note(idx): raise NotImplementedError