52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
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="<KEY>",
|
|
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
|
|
|