Spaces:
Sleeping
Sleeping
| import os | |
| import secrets | |
| from typing import Dict, Optional | |
| import urllib.parse | |
| import requests | |
| class OAuthIntegration: | |
| def __init__(self): | |
| self.oauth_server_url = "http://localhost:5058" | |
| self.services = { | |
| 'github': { | |
| 'client_id': os.getenv('GITHUB_CLIENT_ID'), | |
| 'client_secret': os.getenv('GITHUB_CLIENT_SECRET'), | |
| 'auth_url': 'https://github.com/login/oauth/authorize' | |
| }, | |
| 'google': { | |
| 'client_id': os.getenv('GOOGLE_CLIENT_ID'), | |
| 'client_secret': os.getenv('GOOGLE_CLIENT_SECRET'), | |
| 'auth_url': 'https://accounts.google.com/o/oauth2/v2/auth' | |
| }, | |
| 'slack': { | |
| 'client_id': os.getenv('SLACK_CLIENT_ID'), | |
| 'client_secret': os.getenv('SLACK_CLIENT_SECRET'), | |
| 'auth_url': 'https://slack.com/oauth/v2/authorize' | |
| } | |
| } | |
| async def initialize(self): | |
| pass | |
| async def close(self): | |
| pass | |
| def check_status(self) -> Dict: | |
| return {"oauth_server": "connected"} | |
| async def get_authorization_url(self, service: str) -> str: | |
| if service not in self.services: | |
| raise ValueError(f"Service {service} not supported") | |
| service_config = self.services[service] | |
| state = secrets.token_urlsafe(32) | |
| redirect_uri = f"{self.oauth_server_url}/api/auth/{service}/callback" | |
| auth_params = { | |
| 'client_id': service_config['client_id'], | |
| 'redirect_uri': redirect_uri, | |
| 'response_type': 'code', | |
| 'state': state | |
| } | |
| auth_url = f"{service_config['auth_url']}?{urllib.parse.urlencode(auth_params)}" | |
| return auth_url | |
| # Global instance | |
| oauth_integration = OAuthIntegration() | |