File size: 1,543 Bytes
2d25973
 
 
 
 
 
 
 
 
 
 
42fd022
2d25973
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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)