ees_microsoft_teams/msal_access_token.py (34 lines of code) (raw):
#
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License 2.0;
# you may not use this file except in compliance with the Elastic License 2.0.
#
""" This module is used to generate the access token required to authenticate the
Microsoft Graph APIs.
"""
from msal import ConfidentialClientApplication
SCOPE = ["User.Read.All", "TeamMember.Read.All", "ChannelMessage.Read.All",
"Chat.Read", "Chat.ReadBasic", "Calendars.Read"]
class AccesstokenError(Exception):
"""Exception raised when there is an error in generating access token.
Attributes:
message -- explanation of the error
"""
def __init__(self, message):
super().__init__(message)
self.message = message
class MSALAccessToken:
"""This class generates and returns the access token."""
def __init__(self, logger, configs):
self.logger = logger
self.config = configs
self.logger.info("Initializing the Token generation")
def get_token(self, is_acquire_for_client=False):
"""Generates the access token to call Microsoft Graph APIs
:param is_acquire_for_client: Pass True if want to acquire token by using client_id, tenant_id and
secret_key
Returns:
access_token: Access token for authorization
"""
self.logger.debug(f'Generating the access token for the tenant ID: {self.config.get_value("tenant_id")}...')
authority = f'https://login.microsoftonline.com/{self.config.get_value("tenant_id")}'
try:
auth_context = ConfidentialClientApplication(
self.config.get_value("application_id"),
client_credential=self.config.get_value("client_secret"),
authority=authority)
if is_acquire_for_client:
token = auth_context.acquire_token_for_client("https://graph.microsoft.com/.default")
else:
token = auth_context.acquire_token_by_username_password(
self.config.get_value("username"), self.config.get_value("password"), SCOPE)
if not token.get("access_token"):
raise AccesstokenError(
"Could not generate the access token, please verify the Microsoft Teams configuration settings in \
configuration file.")
self.logger.info(
f"Successfully generated the access token for the tenant ID: {self.config.get_value('tenant_id')}.")
return token.get("access_token")
except Exception as exception:
raise AccesstokenError(f"Error while generating the access token. Error: {exception}")