server/plugins/oauthGeneric.py (16 lines of code) (raw):
# Generic OAuth plugin for services such as Apache OAuth
import re
import requests
import aiohttp
ASF_OAUTH_URL = "https://oauth.apache.org/token"
OAUTH_DOMAIN = "apache.org"
async def process(formdata, session, server):
js = None
url = ASF_OAUTH_URL
headers = {"User-Agent": "ASF Boxer OAuth Agent/0.1"}
# This is a synchronous process, so we offload it to an async runner in order to let the main loop continue.
async with aiohttp.ClientSession() as session:
async with session.post(url, data=formdata) as rv:
js = await rv.json()
assert rv.status == 200, f"Unexpected return code for GET on {url}: {rv.status}"
js["oauth_domain"] = OAUTH_DOMAIN
js["authoritative"] = True
return js