# 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
