Spaces:
Paused
Paused
import gradio as gr | |
import requests | |
import webbrowser | |
from http.server import BaseHTTPRequestHandler, HTTPServer | |
import threading | |
import spaces | |
from urllib.parse import urlencode | |
# OAuth Configuration | |
TENANT_ID = '2b093ced-2571-463f-bc3e-b4f8bcb427ee' | |
CLIENT_ID = '2a7c884c-942d-49e2-9e5d-7a29d8a0d3e5' | |
CLIENT_SECRET = 'EOF8Q~kKHCRgx8tnlLM-H8e93ifetxI6x7sU6bGW' | |
REDIRECT_URI = 'https://sanjeevbora-chatbot.hf.space/' | |
AUTH_URL = f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/authorize" | |
TOKEN_URL = f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token" | |
SCOPE = 'User.Read' | |
access_token = None | |
class RequestHandler(BaseHTTPRequestHandler): | |
def do_GET(self): | |
global access_token | |
if self.path.startswith("/callback"): | |
# Capture the authorization code | |
code = self.path.split("code=")[1] | |
response = requests.post(TOKEN_URL, data={ | |
'client_id': CLIENT_ID, | |
'client_secret': CLIENT_SECRET, | |
'grant_type': 'authorization_code', | |
'code': code, | |
'redirect_uri': REDIRECT_URI | |
}) | |
token_data = response.json() | |
access_token = token_data.get('access_token') | |
self.send_response(200) | |
self.end_headers() | |
self.wfile.write(b"Login successful! You can close this window.") | |
return | |
self.send_response(404) | |
self.end_headers() | |
def start_http_server(): | |
server_address = ('', 8080) | |
httpd = HTTPServer(server_address, RequestHandler) | |
httpd.serve_forever() | |
def login(): | |
params = { | |
'client_id': CLIENT_ID, | |
'response_type': 'code', | |
'redirect_uri': REDIRECT_URI, | |
'response_mode': 'query', | |
'scope': SCOPE, | |
'state': 'random_state_string' # Optional: Use for security | |
} | |
login_url = f"{AUTH_URL}?{urlencode(params)}" | |
return login_url | |
def check_login(): | |
return "You are logged in!" if access_token else "You are not logged in." | |
def handle_login_click(): | |
login() | |
return check_login() | |
def gradio_interface(): | |
with gr.Blocks() as demo: | |
gr.Markdown("### Welcome to the App") | |
btn_login = gr.Button("Login with Microsoft") | |
output = gr.Textbox(label="Status") | |
btn_login.click(handle_login_click, None, output) | |
return demo | |
if __name__ == "__main__": | |
# Start the HTTP server in a separate thread | |
threading.Thread(target=start_http_server, daemon=True).start() | |
# Launch Gradio app | |
demo = gradio_interface() | |
demo.launch() | |