Spaces:
Paused
Paused
File size: 2,621 Bytes
84133c2 29a8657 398cc60 0564650 df4de66 7880dfb 29a8657 df4de66 29a8657 5a48546 691a1ad 29a8657 df4de66 1c7692e 29a8657 df4de66 29a8657 85864e3 6f1f9a4 bee02cd df4de66 bd9da71 29a8657 df4de66 29a8657 bee02cd 29a8657 df4de66 29a8657 84133c2 29a8657 bee02cd |
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
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()
@spaces.GPU(duration=60)
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()
|