[feat] support webfinger
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test Pipeline was successful

This commit is contained in:
SouthFox 2023-07-06 23:49:54 +08:00
parent a5d7d4bdf8
commit 2a0eaef2d0

48
app.py
View file

@ -1,11 +1,25 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
"""Creatr App""" """Creatr App"""
from flask import Flask, request from flask import Flask, Response, request, Request, abort, jsonify
from demo.utils.checker import inbox_prechecker from demo.utils.checker import inbox_prechecker
from demo import config
app = Flask(__name__) 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('/') @app.route('/')
def index(): def index():
"""Show index page""" """Show index page"""
@ -19,3 +33,35 @@ def inbox():
if is_verify: if is_verify:
return "STUB" return "STUB"
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