AI-notes-agent / src /auth /oauth.py
Jaleed02's picture
Patched OAuth redirect URI for production
42fd022
Raw
History Blame Contribute Delete
1.54 kB
import os
import requests
import urllib.parse
from dotenv import load_dotenv
load_dotenv()
GITHUB_CLIENT_ID = os.getenv("GITHUB_CLIENT_ID")
GITHUB_CLIENT_SECRET = os.getenv("GITHUB_CLIENT_SECRET")
# Streamlit runs locally on port 8501 by default
REDIRECT_URI = "https://jaleed02-ai-notes-agent.hf.space/"
def get_github_auth_url():
base_url = "https://github.com/login/oauth/authorize"
params = {
"client_id": GITHUB_CLIENT_ID,
"redirect_uri": REDIRECT_URI,
"scope": "user:email",
"state": "github"
}
return f"{base_url}?{urllib.parse.urlencode(params)}"
def get_github_user(code):
token_url = "https://github.com/login/oauth/access_token"
data = {
"client_id": GITHUB_CLIENT_ID,
"client_secret": GITHUB_CLIENT_SECRET,
"code": code,
"redirect_uri": REDIRECT_URI
}
headers = {"Accept": "application/json"}
response = requests.post(token_url, data=data, headers=headers)
if response.status_code != 200:
return None
access_token = response.json().get("access_token")
if not access_token:
return None
user_url = "https://api.github.com/user/emails"
user_resp = requests.get(user_url, headers={"Authorization": f"token {access_token}"})
if user_resp.status_code != 200:
return None
emails = user_resp.json()
primary_email = next((email["email"] for email in emails if email["primary"]), None)
return primary_email or (emails[0]["email"] if emails else None)