MSGraphAPI / app.py
awacke1's picture
Update app.py
3954aa4 verified
raw
history blame
5.5 kB
import msal
import os
import streamlit as st
import webbrowser as wb
import requests
from msal import PublicClientApplication
APPLICATION_ID_KEY = os.getenv('APPLICATION_ID_KEY')
CLIENT_SECRET_KEY = os.getenv('CLIENT_SECRET_KEY')
AUTHORIZATION_KEY = os.getenv('AUTHORIZATION_KEY')
#st.write(APPLICATION_ID_KEY)
#st.write(CLIENT_SECRET_KEY)
authority_url = 'https://login.microsoftonline.com/consumers'
base_url = 'https://graph.microsoft.com/v1.0/'
endpoint = base_url + 'me'
SCOPES = ['User.Read','User.Export.All']
# Authenticate with Auth Code
client_instance = msal.ConfidentialClientApplication(
client_id=APPLICATION_ID_KEY, client_credential=CLIENT_SECRET_KEY, authority=authority_url
)
authorization_request_url = client_instance.get_authorization_request_url(SCOPES)
st.write('Connecting to MSGraph with url:' + authorization_request_url)
wb.open(authorization_request_url, new=True)
access_token = client_instance.acquire_token_by_authorization_code(
code=AUTHORIZATION_KEY,
scopes=SCOPES)
try:
access_token_id = access_token['access_token']
headers = {'Authorization': 'Bearer ' + access_token_id}
endpoint = base_url + 'me'
response = requests.get(endpoint, headers=headers)
st.write(response)
st.write(response.json)
except:
st.write('No auth key returned from MS graph - redirect issue?')
# URLs used in this sample app to demonstrate MS Graph in Python
# https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Authentication/appId/d36c689d-3c61-4be6-a230-c09fc54cf80d/objectId/ece93996-1d7c-4b39-abc5-de51487073ed/isMSAApp~/false/defaultBlade/Overview/appSignInAudience/AzureADandPersonalMicrosoftAccount/servicePrincipalCreated~/true
# https://developer.microsoft.com/en-us/graph/graph-explorer
# https://chatgpt.com/c/67065b64-e2a8-800d-8b64-69cfe7aaed7f
# https://www.google.com/search?q=msal+pypi&oq=msal+pypi&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIICAEQABgWGB4yCAgCEAAYFhgeMg0IAxAAGIYDGIAEGIoFMg0IBBAAGIYDGIAEGIoFMg0IBRAAGIYDGIAEGIoFMgoIBhAAGIAEGKIEMgoIBxAAGIAEGKIEMgoICBAAGIAEGKIE0gEIMTk2NGowajeoAgCwAgA&sourceid=chrome&ie=UTF-8
# https://www.youtube.com/watch?v=1Jyd7SA-0kI&list=PLHgX2IExbFot3M2dudQEbTVEk9ikRJ2h5&t=972s
# https://huggingface.co/spaces/awacke1/MSGraphAPI
# Initialize MSAL client
def get_msal_app():
return ConfidentialClientApplication(
CLIENT_ID,
authority=AUTHORITY_URL,
client_credential=CLIENT_SECRET
)
# Get access token
def get_access_token():
app = get_msal_app()
result = app.acquire_token_silent(SCOPES, account=None)
if not result:
result = app.acquire_token_for_client(scopes=SCOPES)
if "access_token" in result:
return result['access_token']
else:
st.error("Could not obtain access token.")
st.stop()
# Placeholder functions for MS Graph API interactions
def get_upcoming_events():
# Implement API call to get upcoming events
return []
def get_schedule():
# Implement API call to get schedule
return []
def add_event(event_details):
# Implement API call to add a new event
pass
def get_event_details(event_id):
# Implement API call to get event details
return {}
def filter_events(filter_criteria):
# Implement API call to filter events
return []
# Sidebar navigation
st.sidebar.title("Navigation")
menu = st.sidebar.radio("Go to", [
"1️⃣ Dashboard with Widgets",
"🏠 Landing Page",
"πŸ“… Upcoming Events",
"πŸ“† Schedule",
"πŸ“ Agenda",
"πŸ” Event Details",
"βž• Add Event",
"πŸ”Ž Filter By"
])
# Main content area
st.title("Simple Streamlit App with MS Graph API")
if menu == "1️⃣ Dashboard with Widgets":
st.header("1️⃣ Dashboard with Widgets")
st.write("Widgets will be displayed here.")
# Add your widgets here
elif menu == "🏠 Landing Page":
st.header("🏠 Landing Page")
st.write("Welcome to the app!")
# Add landing page content here
elif menu == "πŸ“… Upcoming Events":
st.header("πŸ“… Upcoming Events")
events = get_upcoming_events()
for event in events:
st.write(event)
# Display upcoming events
elif menu == "πŸ“† Schedule":
st.header("πŸ“† Schedule")
schedule = get_schedule()
st.write(schedule)
# Display schedule
elif menu == "πŸ“ Agenda":
st.header("πŸ“ Agenda")
# Display agenda
st.write("Your agenda for today.")
elif menu == "πŸ” Event Details":
st.header("πŸ” Event Details")
event_id = st.text_input("Enter Event ID")
if event_id:
event_details = get_event_details(event_id)
st.write(event_details)
# Display event details based on ID
elif menu == "βž• Add Event":
st.header("βž• Add Event")
event_title = st.text_input("Event Title")
event_date = st.date_input("Event Date")
event_time = st.time_input("Event Time")
if st.button("Add Event"):
event_details = {
"title": event_title,
"date": event_date,
"time": event_time
}
add_event(event_details)
st.success("Event added successfully!")
# Form to add new event
elif menu == "πŸ”Ž Filter By":
st.header("πŸ”Ž Filter Events")
filter_criteria = st.text_input("Enter filter criteria")
if filter_criteria:
filtered_events = filter_events(filter_criteria)
st.write(filtered_events)
# Filter events based on criteria
else:
st.write("Please select a menu option.")