Add webfinger.py
This commit is contained in:
parent
6d889a5945
commit
f3e925a018
72
webfinger.py
Normal file
72
webfinger.py
Normal file
@ -0,0 +1,72 @@
|
||||
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
from urllib.parse import urlparse, parse_qs
|
||||
import json
|
||||
import os
|
||||
|
||||
class WebFingerHandler(BaseHTTPRequestHandler):
|
||||
def do_GET(self):
|
||||
if self.path.startswith('/.well-known/webfinger'):
|
||||
parsed_url = urlparse(self.path)
|
||||
query_params = parse_qs(parsed_url.query)
|
||||
|
||||
if 'resource' in query_params:
|
||||
resource = query_params['resource'][0]
|
||||
|
||||
if resource.startswith('acct:'):
|
||||
email = resource[5:]
|
||||
issuer_url = os.environ["ISSUER_URL"]
|
||||
response_data = {
|
||||
"subject": resource,
|
||||
"links": [
|
||||
{
|
||||
"rel": "http://openid.net/specs/connect/1.0/issuer",
|
||||
"href": issuer_url
|
||||
},
|
||||
{
|
||||
"rel": "authorization_endpoint",
|
||||
"href": issuer_url + "oauth2/authorize"
|
||||
},
|
||||
{
|
||||
"rel": "token_endpoint",
|
||||
"href": issuer_url + "oauth2/token"
|
||||
},
|
||||
{
|
||||
"rel": "userinfo_endpoint",
|
||||
"href": issuer_url + "userinfo"
|
||||
},
|
||||
{
|
||||
"rel": "jwks_uri",
|
||||
"href": issuer_url + "jwks"
|
||||
}
|
||||
]
|
||||
}
|
||||
self.send_response(200)
|
||||
self.send_header("Content-type", "application/json")
|
||||
self.end_headers()
|
||||
self.wfile.write(json.dumps(response_data).encode())
|
||||
return
|
||||
|
||||
if self.path.startswith('/health'):
|
||||
self.send_response(200)
|
||||
response_data = {
|
||||
"health": "ok"
|
||||
}
|
||||
self.send_header("Content-type", "application/json")
|
||||
self.end_headers()
|
||||
self.wfile.write(json.dumps(response_data).encode())
|
||||
return
|
||||
|
||||
self.send_response(404)
|
||||
self.end_headers()
|
||||
self.wfile.write(b"Resource not found")
|
||||
|
||||
def run_server(server_class=HTTPServer, handler_class=WebFingerHandler, port=8000):
|
||||
server_address = ('', port)
|
||||
httpd = server_class(server_address, handler_class)
|
||||
print("Issuer URL is " + os.environ["ISSUER_URL"])
|
||||
print(f"Starting WebFinger server on port {port}")
|
||||
httpd.serve_forever()
|
||||
|
||||
if __name__ == '__main__':
|
||||
run_server()
|
Loading…
x
Reference in New Issue
Block a user