COSCUP-ap-demo/app.py
SouthFox 2a0eaef2d0
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test Pipeline was successful
[feat] support webfinger
2023-07-06 23:51:27 +08:00

67 lines
1.7 KiB
Python

#!/usr/bin/env python3
"""Creatr App"""
from flask import Flask, Response, request, Request, abort, jsonify
from demo.utils.checker import inbox_prechecker
from demo import config
app = Flask(__name__)
def is_ap_requested(request: Request) -> bool:
accept_str = request.headers.get("accept")
if accept_str is None:
return False
for i in {
"application/activity+json",
"application/ld+json",
}:
if accept_str.startswith(i):
return True
return False
@app.route('/')
def index():
"""Show index page"""
return "Hello Fediverse!"
@app.route("/inbox", methods=["POST"])
def inbox():
"""Process inbox request"""
is_verify = inbox_prechecker(request)
if is_verify:
return "STUB"
return "STUB"
@app.route("/.well-known/webfinger")
def wellknown_webfinger() -> Response:
"""Exposes servers WebFinger data."""
resource = request.args.get("resource")
if resource not in [f"acct:{config.USERNAME}@{config.DOMAIN}", config.ID]:
abort(404)
resp = jsonify(
{
"subject": f"acct:{config.USERNAME}@{config.DOMAIN}",
"aliases": [config.ID],
"links": [
{
"rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": config.ID,
},
{
"rel": "self",
"type": "application/activity+json",
"href": config.ID,
},
],
},
)
resp.headers["Access-Control-Allow-Origin"] = "*"
resp.headers["Content-Type"] = "application/jrd+json; charset=utf-8"
return resp