diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7801c36..ecdbc3c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,15 +1,10 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - version: 2 updates: - - package-ecosystem: "pip" # See documentation for possible values - directory: "/user-auth/graphtutorial" # Location of package manifests + - package-ecosystem: "pip" + directory: "/user-auth/graphtutorial" schedule: interval: "weekly" - - package-ecosystem: "pip" # See documentation for possible values - directory: "/app-auth/graphapponlytutorial" # Location of package manifests + - package-ecosystem: "pip" + directory: "/app-auth/graphapponlytutorial" schedule: - interval: "weekly" \ No newline at end of file + interval: "weekly" diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 06cb19a..5c77a82 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.8", "3.9", "3.10"] + python-version: ["3.11", "3.12"] steps: - uses: actions/checkout@v3 diff --git a/.vscode/launch.json b/.vscode/launch.json index ef08a7e..c75d1b1 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,7 +6,7 @@ "configurations": [ { "name": "Python: main", - "type": "python", + "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/user-auth/graphtutorial/main.py", "cwd": "${workspaceFolder}/user-auth/graphtutorial", @@ -15,7 +15,7 @@ }, { "name": "Python: main (app-only)", - "type": "python", + "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/app-auth/graphapponlytutorial/main.py", "cwd": "${workspaceFolder}/app-auth/graphapponlytutorial", diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..686e5e7 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,10 @@ +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns +- Employees can reach out at [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support) diff --git a/app-auth/RegisterAppForAppOnlyAuth.ps1 b/app-auth/RegisterAppForAppOnlyAuth.ps1 index 09ce5e0..9192c5f 100644 --- a/app-auth/RegisterAppForAppOnlyAuth.ps1 +++ b/app-auth/RegisterAppForAppOnlyAuth.ps1 @@ -21,7 +21,7 @@ param( $graphAppId = "00000003-0000-0000-c000-000000000000" # Requires an admin -Connect-MgGraph -Scopes "Application.ReadWrite.All User.Read" -UseDeviceAuthentication -ErrorAction Stop +Connect-MgGraph -Scopes "Application.ReadWrite.All AppRoleAssignment.ReadWrite.All User.Read" -UseDeviceAuthentication -ErrorAction Stop # Get context for access to tenant ID $context = Get-MgContext -ErrorAction Stop @@ -71,7 +71,6 @@ Write-Host -ForegroundColor Cyan "Added application permissions to app registrat # Add admin consent foreach ($appRole in $resourceAccess) { - $appServicePrincipal New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $appServicePrincipal.Id ` -PrincipalId $appServicePrincipal.Id -ResourceId $graphServicePrincipal.Id ` -AppRoleId $appRole.Id -ErrorAction SilentlyContinue -ErrorVariable SPError | Out-Null @@ -101,7 +100,7 @@ Write-Host -ForegroundColor Yellow $clientSecret.EndDateTime if ($StayConnected -eq $false) { - Disconnect-MgGraph + Disconnect-MgGraph | Out-Null Write-Host "Disconnected from Microsoft Graph" } else diff --git a/app-auth/graphapponlytutorial/graph.py b/app-auth/graphapponlytutorial/graph.py index eb2ab8b..c3961ab 100644 --- a/app-auth/graphapponlytutorial/graph.py +++ b/app-auth/graphapponlytutorial/graph.py @@ -4,16 +4,12 @@ # from configparser import SectionProxy from azure.identity.aio import ClientSecretCredential -from kiota_authentication_azure.azure_identity_authentication_provider import ( - AzureIdentityAuthenticationProvider -) -from msgraph import GraphRequestAdapter, GraphServiceClient +from msgraph import GraphServiceClient from msgraph.generated.users.users_request_builder import UsersRequestBuilder class Graph: settings: SectionProxy client_credential: ClientSecretCredential - adapter: GraphRequestAdapter app_client: GraphServiceClient def __init__(self, config: SectionProxy): @@ -23,9 +19,7 @@ def __init__(self, config: SectionProxy): client_secret = self.settings['clientSecret'] self.client_credential = ClientSecretCredential(tenant_id, client_id, client_secret) - auth_provider = AzureIdentityAuthenticationProvider(self.client_credential) # type: ignore - self.adapter = GraphRequestAdapter(auth_provider) - self.app_client = GraphServiceClient(self.adapter) + self.app_client = GraphServiceClient(self.client_credential) # type: ignore # # @@ -49,7 +43,7 @@ async def get_users(self): query_parameters=query_params ) - users = await self.app_client.users().get(request_configuration=request_config) + users = await self.app_client.users.get(request_configuration=request_config) return users # diff --git a/app-auth/graphapponlytutorial/main.py b/app-auth/graphapponlytutorial/main.py index 7e5b3d2..5066fcf 100644 --- a/app-auth/graphapponlytutorial/main.py +++ b/app-auth/graphapponlytutorial/main.py @@ -4,6 +4,7 @@ # import asyncio import configparser +from msgraph.generated.models.o_data_errors.o_data_error import ODataError from graph import Graph async def main(): @@ -30,16 +31,21 @@ async def main(): except ValueError: choice = -1 - if choice == 0: - print('Goodbye...') - elif choice == 1: - await display_access_token(graph) - elif choice == 2: - await list_users(graph) - elif choice == 3: - await make_graph_call(graph) - else: - print('Invalid choice!\n') + try: + if choice == 0: + print('Goodbye...') + elif choice == 1: + await display_access_token(graph) + elif choice == 2: + await list_users(graph) + elif choice == 3: + await make_graph_call(graph) + else: + print('Invalid choice!\n') + except ODataError as odata_error: + print('Error:') + if odata_error.error: + print(odata_error.error.code, odata_error.error.message) # # @@ -53,7 +59,7 @@ async def list_users(graph: Graph): users_page = await graph.get_users() # Output each users's details - if users_page is not None and users_page.value is not None: + if users_page and users_page.value: for user in users_page.value: print('User:', user.display_name) print(' ID:', user.id) diff --git a/app-auth/graphapponlytutorial/pylintrc b/app-auth/graphapponlytutorial/pylintrc index b54b9d8..9c25004 100644 --- a/app-auth/graphapponlytutorial/pylintrc +++ b/app-auth/graphapponlytutorial/pylintrc @@ -576,5 +576,5 @@ preferred-modules= # Exceptions that will emit a warning when being caught. Defaults to # "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception +overgeneral-exceptions=builtins.BaseException, + builtins.Exception diff --git a/app-auth/graphapponlytutorial/requirements.txt b/app-auth/graphapponlytutorial/requirements.txt index bd54d7c..31255e9 100644 --- a/app-auth/graphapponlytutorial/requirements.txt +++ b/app-auth/graphapponlytutorial/requirements.txt @@ -1,128 +1,153 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: # -# pip-compile --output-file=requirements.txt --resolver=backtracking +# pip-compile --output-file=requirements.txt # -aiohttp==3.8.3 +aiohappyeyeballs==2.6.1 + # via aiohttp +aiohttp==3.13.4 # via microsoft-kiota-authentication-azure -aiosignal==1.3.1 +aiosignal==1.4.0 # via aiohttp -anyio==3.6.2 - # via httpcore -async-timeout==4.0.2 +anyio==4.10.0 + # via httpx +async-timeout==5.0.1 # via aiohttp -attrs==22.1.0 +attrs==25.3.0 # via aiohttp -azure-core==1.26.1 +azure-core==1.38.0 # via # azure-identity # microsoft-kiota-authentication-azure -azure-identity==1.12.0 +azure-identity==1.25.3 # via # -r requirements.in # msgraph-sdk -certifi==2022.12.7 +certifi==2025.8.3 # via # httpcore # httpx # requests -cffi==1.15.1 +cffi==2.0.0 # via cryptography -charset-normalizer==2.1.1 - # via - # aiohttp - # requests -cryptography==38.0.4 +charset-normalizer==3.4.3 + # via requests +cryptography==46.0.7 # via # azure-identity # msal # pyjwt -frozenlist==1.3.3 +exceptiongroup==1.3.0 + # via anyio +frozenlist==1.7.0 # via # aiohttp # aiosignal -h11==0.14.0 +h11==0.16.0 # via httpcore -h2==4.1.0 +h2==4.3.0 # via httpx -hpack==4.0.0 +hpack==4.1.0 # via h2 -httpcore==0.16.2 +httpcore==1.0.9 # via httpx -httpx[http2]==0.23.1 +httpx[http2]==0.28.1 # via # microsoft-kiota-http # msgraph-core -hyperframe==6.0.1 +hyperframe==6.1.0 # via h2 -idna==3.4 +idna==3.15 # via # anyio + # httpx # requests - # rfc3986 # yarl -microsoft-kiota-abstractions==0.2.0 +importlib-metadata==8.7.0 + # via opentelemetry-api +microsoft-kiota-abstractions==1.9.10 # via # microsoft-kiota-authentication-azure # microsoft-kiota-http + # microsoft-kiota-serialization-form # microsoft-kiota-serialization-json + # microsoft-kiota-serialization-multipart # microsoft-kiota-serialization-text # msgraph-core - # msgraph-sdk -microsoft-kiota-authentication-azure==0.1.1 - # via msgraph-sdk -microsoft-kiota-http==0.2.3 +microsoft-kiota-authentication-azure==1.9.6 + # via msgraph-core +microsoft-kiota-http==1.9.9 # via msgraph-core -microsoft-kiota-serialization-json==0.2.0 +microsoft-kiota-serialization-form==1.9.6 + # via msgraph-sdk +microsoft-kiota-serialization-json==1.9.6 # via msgraph-sdk -microsoft-kiota-serialization-text==0.2.0 +microsoft-kiota-serialization-multipart==1.9.6 # via msgraph-sdk -msal==1.20.0 +microsoft-kiota-serialization-text==1.9.6 + # via msgraph-sdk +msal==1.35.1 # via # azure-identity # msal-extensions -msal-extensions==1.0.0 +msal-extensions==1.3.1 # via azure-identity -msgraph-core==1.0.0a0 +msgraph-core==1.3.5 # via msgraph-sdk -msgraph-sdk==1.0.0a2 +msgraph-sdk==1.58.0 # via -r requirements.in -multidict==6.0.2 +multidict==6.6.4 # via # aiohttp # yarl -portalocker==2.6.0 - # via msal-extensions -pycparser==2.21 +opentelemetry-api==1.36.0 + # via + # microsoft-kiota-abstractions + # microsoft-kiota-authentication-azure + # microsoft-kiota-http + # opentelemetry-sdk + # opentelemetry-semantic-conventions +opentelemetry-sdk==1.36.0 + # via + # microsoft-kiota-abstractions + # microsoft-kiota-authentication-azure + # microsoft-kiota-http +opentelemetry-semantic-conventions==0.57b0 + # via opentelemetry-sdk +propcache==0.3.2 + # via + # aiohttp + # yarl +pycparser==2.22 # via cffi -pyjwt[crypto]==2.6.0 - # via msal -python-dateutil==2.8.2 +pyjwt[crypto]==2.12.0 # via - # microsoft-kiota-serialization-json - # microsoft-kiota-serialization-text -requests==2.28.1 + # msal + # pyjwt +requests==2.33.0 # via # azure-core # msal -rfc3986[idna2008]==1.5.0 - # via httpx -six==1.16.0 +sniffio==1.3.1 + # via anyio +std-uritemplate==2.0.5 + # via microsoft-kiota-abstractions +typing-extensions==4.15.0 # via + # aiosignal + # anyio # azure-core # azure-identity - # python-dateutil -sniffio==1.3.0 - # via - # anyio - # httpcore - # httpx -typing-extensions==4.4.0 - # via azure-core -uritemplate==4.1.1 - # via microsoft-kiota-abstractions -urllib3==1.26.13 + # cryptography + # exceptiongroup + # multidict + # opentelemetry-api + # opentelemetry-sdk + # opentelemetry-semantic-conventions +urllib3==2.7.0 # via requests -yarl==1.8.1 +yarl==1.20.1 # via aiohttp +zipp==3.23.0 + # via importlib-metadata diff --git a/user-auth/RegisterAppForUserAuth.ps1 b/user-auth/RegisterAppForUserAuth.ps1 index 0b8598a..8b2edf1 100644 --- a/user-auth/RegisterAppForUserAuth.ps1 +++ b/user-auth/RegisterAppForUserAuth.ps1 @@ -77,7 +77,7 @@ Write-Host -ForegroundColor Yellow $authTenant if ($StayConnected -eq $false) { - Disconnect-MgGraph + Disconnect-MgGraph | Out-Null Write-Host "Disconnected from Microsoft Graph" } else diff --git a/user-auth/graphtutorial/async_auth.py b/user-auth/graphtutorial/async_auth.py deleted file mode 100644 index 3de7de1..0000000 --- a/user-auth/graphtutorial/async_auth.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -# pylint: disable=invalid-overridden-method,useless-super-delegation - -# -from azure.identity import DeviceCodeCredential - -# This class is an async wrapper around the DeviceCodeCredential -# class from azure.identity. Once azure.identity provides an async version -# of DeviceCodeCredential this will no longer be necessary -class AsyncDeviceCodeCredential(DeviceCodeCredential): - async def get_token(self, *scopes, **kwargs): - return super().get_token(*scopes, **kwargs) - - async def __aenter__(self): - return - - async def __aexit__(self, exc_type, exc_value, traceback): - return - - async def close(self): - return -# diff --git a/user-auth/graphtutorial/graph.py b/user-auth/graphtutorial/graph.py index 4a84f44..6a9ab93 100644 --- a/user-auth/graphtutorial/graph.py +++ b/user-auth/graphtutorial/graph.py @@ -3,24 +3,22 @@ # from configparser import SectionProxy -from kiota_authentication_azure.azure_identity_authentication_provider import ( - AzureIdentityAuthenticationProvider) -from msgraph import GraphRequestAdapter, GraphServiceClient -from msgraph.generated.me.me_request_builder import MeRequestBuilder -from msgraph.generated.me.mail_folders.item.messages.messages_request_builder import ( +from azure.identity import DeviceCodeCredential +from msgraph import GraphServiceClient +from msgraph.generated.users.item.user_item_request_builder import UserItemRequestBuilder +from msgraph.generated.users.item.mail_folders.item.messages.messages_request_builder import ( MessagesRequestBuilder) -from msgraph.generated.me.send_mail.send_mail_post_request_body import SendMailPostRequestBody +from msgraph.generated.users.item.send_mail.send_mail_post_request_body import ( + SendMailPostRequestBody) from msgraph.generated.models.message import Message from msgraph.generated.models.item_body import ItemBody from msgraph.generated.models.body_type import BodyType from msgraph.generated.models.recipient import Recipient from msgraph.generated.models.email_address import EmailAddress -from async_auth import AsyncDeviceCodeCredential class Graph: settings: SectionProxy - device_code_credential: AsyncDeviceCodeCredential - adapter: GraphRequestAdapter + device_code_credential: DeviceCodeCredential user_client: GraphServiceClient def __init__(self, config: SectionProxy): @@ -29,32 +27,29 @@ def __init__(self, config: SectionProxy): tenant_id = self.settings['tenantId'] graph_scopes = self.settings['graphUserScopes'].split(' ') - self.device_code_credential = AsyncDeviceCodeCredential(client_id, tenant_id = tenant_id) - auth_provider = AzureIdentityAuthenticationProvider( - self.device_code_credential, - scopes=graph_scopes) - self.adapter = GraphRequestAdapter(auth_provider) - self.user_client = GraphServiceClient(self.adapter) + self.device_code_credential = DeviceCodeCredential(client_id, tenant_id = tenant_id) + self.user_client = GraphServiceClient(self.device_code_credential, graph_scopes) # # async def get_user_token(self): graph_scopes = self.settings['graphUserScopes'] - access_token = await self.device_code_credential.get_token(graph_scopes) + access_token = self.device_code_credential.get_token(graph_scopes) return access_token.token # # async def get_user(self): # Only request specific properties using $select - query_params = MeRequestBuilder.MeRequestBuilderGetQueryParameters( + query_params = UserItemRequestBuilder.UserItemRequestBuilderGetQueryParameters( select=['displayName', 'mail', 'userPrincipalName'] ) - request_config = MeRequestBuilder.MeRequestBuilderGetRequestConfiguration( + + request_config = UserItemRequestBuilder.UserItemRequestBuilderGetRequestConfiguration( query_parameters=query_params ) - user = await self.user_client.me().get(request_configuration=request_config) + user = await self.user_client.me.get(request_configuration=request_config) return user # @@ -72,7 +67,7 @@ async def get_inbox(self): query_parameters= query_params ) - messages = await self.user_client.me().mail_folders_by_id('inbox').messages().get( + messages = await self.user_client.me.mail_folders.by_mail_folder_id('inbox').messages.get( request_configuration=request_config) return messages # @@ -95,7 +90,7 @@ async def send_mail(self, subject: str, body: str, recipient: str): request_body = SendMailPostRequestBody() request_body.message = message - await self.user_client.me().send_mail().post(body=request_body) + await self.user_client.me.send_mail.post(body=request_body) # # diff --git a/user-auth/graphtutorial/main.py b/user-auth/graphtutorial/main.py index c04be75..0b20d03 100644 --- a/user-auth/graphtutorial/main.py +++ b/user-auth/graphtutorial/main.py @@ -4,6 +4,7 @@ # import asyncio import configparser +from msgraph.generated.models.o_data_errors.o_data_error import ODataError from graph import Graph async def main(): @@ -33,24 +34,29 @@ async def main(): except ValueError: choice = -1 - if choice == 0: - print('Goodbye...') - elif choice == 1: - await display_access_token(graph) - elif choice == 2: - await list_inbox(graph) - elif choice == 3: - await send_mail(graph) - elif choice == 4: - await make_graph_call(graph) - else: - print('Invalid choice!\n') + try: + if choice == 0: + print('Goodbye...') + elif choice == 1: + await display_access_token(graph) + elif choice == 2: + await list_inbox(graph) + elif choice == 3: + await send_mail(graph) + elif choice == 4: + await make_graph_call(graph) + else: + print('Invalid choice!\n') + except ODataError as odata_error: + print('Error:') + if odata_error.error: + print(odata_error.error.code, odata_error.error.message) # # async def greet_user(graph: Graph): user = await graph.get_user() - if user is not None: + if user: print('Hello,', user.display_name) # For Work/school accounts, email is in mail property # Personal accounts, email is in userPrincipalName @@ -66,15 +72,15 @@ async def display_access_token(graph: Graph): # async def list_inbox(graph: Graph): message_page = await graph.get_inbox() - if message_page is not None and message_page.value is not None: + if message_page and message_page.value: # Output each message's details for message in message_page.value: print('Message:', message.subject) if ( - message.from_escaped is not None and - message.from_escaped.email_address is not None + message.from_ and + message.from_.email_address ): - print(' From:', message.from_escaped.email_address.name or 'NONE') + print(' From:', message.from_.email_address.name or 'NONE') else: print(' From: NONE') print(' Status:', 'Read' if message.is_read else 'Unread') @@ -90,7 +96,7 @@ async def send_mail(graph: Graph): # Send mail to the signed-in user # Get the user for their email address user = await graph.get_user() - if user is not None: + if user: user_email = user.mail or user.user_principal_name await graph.send_mail('Testing Microsoft Graph', 'Hello world!', user_email or '') diff --git a/user-auth/graphtutorial/pylintrc b/user-auth/graphtutorial/pylintrc index b54b9d8..9c25004 100644 --- a/user-auth/graphtutorial/pylintrc +++ b/user-auth/graphtutorial/pylintrc @@ -576,5 +576,5 @@ preferred-modules= # Exceptions that will emit a warning when being caught. Defaults to # "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception +overgeneral-exceptions=builtins.BaseException, + builtins.Exception diff --git a/user-auth/graphtutorial/requirements.txt b/user-auth/graphtutorial/requirements.txt index bd54d7c..31255e9 100644 --- a/user-auth/graphtutorial/requirements.txt +++ b/user-auth/graphtutorial/requirements.txt @@ -1,128 +1,153 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: # -# pip-compile --output-file=requirements.txt --resolver=backtracking +# pip-compile --output-file=requirements.txt # -aiohttp==3.8.3 +aiohappyeyeballs==2.6.1 + # via aiohttp +aiohttp==3.13.4 # via microsoft-kiota-authentication-azure -aiosignal==1.3.1 +aiosignal==1.4.0 # via aiohttp -anyio==3.6.2 - # via httpcore -async-timeout==4.0.2 +anyio==4.10.0 + # via httpx +async-timeout==5.0.1 # via aiohttp -attrs==22.1.0 +attrs==25.3.0 # via aiohttp -azure-core==1.26.1 +azure-core==1.38.0 # via # azure-identity # microsoft-kiota-authentication-azure -azure-identity==1.12.0 +azure-identity==1.25.3 # via # -r requirements.in # msgraph-sdk -certifi==2022.12.7 +certifi==2025.8.3 # via # httpcore # httpx # requests -cffi==1.15.1 +cffi==2.0.0 # via cryptography -charset-normalizer==2.1.1 - # via - # aiohttp - # requests -cryptography==38.0.4 +charset-normalizer==3.4.3 + # via requests +cryptography==46.0.7 # via # azure-identity # msal # pyjwt -frozenlist==1.3.3 +exceptiongroup==1.3.0 + # via anyio +frozenlist==1.7.0 # via # aiohttp # aiosignal -h11==0.14.0 +h11==0.16.0 # via httpcore -h2==4.1.0 +h2==4.3.0 # via httpx -hpack==4.0.0 +hpack==4.1.0 # via h2 -httpcore==0.16.2 +httpcore==1.0.9 # via httpx -httpx[http2]==0.23.1 +httpx[http2]==0.28.1 # via # microsoft-kiota-http # msgraph-core -hyperframe==6.0.1 +hyperframe==6.1.0 # via h2 -idna==3.4 +idna==3.15 # via # anyio + # httpx # requests - # rfc3986 # yarl -microsoft-kiota-abstractions==0.2.0 +importlib-metadata==8.7.0 + # via opentelemetry-api +microsoft-kiota-abstractions==1.9.10 # via # microsoft-kiota-authentication-azure # microsoft-kiota-http + # microsoft-kiota-serialization-form # microsoft-kiota-serialization-json + # microsoft-kiota-serialization-multipart # microsoft-kiota-serialization-text # msgraph-core - # msgraph-sdk -microsoft-kiota-authentication-azure==0.1.1 - # via msgraph-sdk -microsoft-kiota-http==0.2.3 +microsoft-kiota-authentication-azure==1.9.6 + # via msgraph-core +microsoft-kiota-http==1.9.9 # via msgraph-core -microsoft-kiota-serialization-json==0.2.0 +microsoft-kiota-serialization-form==1.9.6 + # via msgraph-sdk +microsoft-kiota-serialization-json==1.9.6 # via msgraph-sdk -microsoft-kiota-serialization-text==0.2.0 +microsoft-kiota-serialization-multipart==1.9.6 # via msgraph-sdk -msal==1.20.0 +microsoft-kiota-serialization-text==1.9.6 + # via msgraph-sdk +msal==1.35.1 # via # azure-identity # msal-extensions -msal-extensions==1.0.0 +msal-extensions==1.3.1 # via azure-identity -msgraph-core==1.0.0a0 +msgraph-core==1.3.5 # via msgraph-sdk -msgraph-sdk==1.0.0a2 +msgraph-sdk==1.58.0 # via -r requirements.in -multidict==6.0.2 +multidict==6.6.4 # via # aiohttp # yarl -portalocker==2.6.0 - # via msal-extensions -pycparser==2.21 +opentelemetry-api==1.36.0 + # via + # microsoft-kiota-abstractions + # microsoft-kiota-authentication-azure + # microsoft-kiota-http + # opentelemetry-sdk + # opentelemetry-semantic-conventions +opentelemetry-sdk==1.36.0 + # via + # microsoft-kiota-abstractions + # microsoft-kiota-authentication-azure + # microsoft-kiota-http +opentelemetry-semantic-conventions==0.57b0 + # via opentelemetry-sdk +propcache==0.3.2 + # via + # aiohttp + # yarl +pycparser==2.22 # via cffi -pyjwt[crypto]==2.6.0 - # via msal -python-dateutil==2.8.2 +pyjwt[crypto]==2.12.0 # via - # microsoft-kiota-serialization-json - # microsoft-kiota-serialization-text -requests==2.28.1 + # msal + # pyjwt +requests==2.33.0 # via # azure-core # msal -rfc3986[idna2008]==1.5.0 - # via httpx -six==1.16.0 +sniffio==1.3.1 + # via anyio +std-uritemplate==2.0.5 + # via microsoft-kiota-abstractions +typing-extensions==4.15.0 # via + # aiosignal + # anyio # azure-core # azure-identity - # python-dateutil -sniffio==1.3.0 - # via - # anyio - # httpcore - # httpx -typing-extensions==4.4.0 - # via azure-core -uritemplate==4.1.1 - # via microsoft-kiota-abstractions -urllib3==1.26.13 + # cryptography + # exceptiongroup + # multidict + # opentelemetry-api + # opentelemetry-sdk + # opentelemetry-semantic-conventions +urllib3==2.7.0 # via requests -yarl==1.8.1 +yarl==1.20.1 # via aiohttp +zipp==3.23.0 + # via importlib-metadata diff --git a/user-auth/version b/user-auth/version index 9459d4b..5625e59 100644 --- a/user-auth/version +++ b/user-auth/version @@ -1 +1 @@ -1.1 +1.2