ChatBot / app.py
sanjeevbora's picture
updated app.py
0564650 verified
raw
history blame
2.6 kB
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()