Created
February 27, 2023 11:46
-
-
Save sdushantha/7f3c3a8d8973db1c95a987da805755af to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
import jwt | |
import argparse | |
import sys | |
def get_exernal_object_id(target, token): | |
headers = { | |
'Host': 'teams.microsoft.com', | |
'Authorization': f"Bearer {token}", | |
'X-Ms-Client-Version': '1415/1.0.0.2023021323', | |
} | |
r = requests.get(f"https://teams.microsoft.com/api/mt/emea/beta/users/{target}/externalsearchv3?includeTFLUsers=true", headers=headers) | |
try: | |
return r.json()[0]["objectId"] | |
except (IndexError, KeyError): | |
return f"Object ID could not be found for {target}" | |
def get_internal_object_id(target, token): | |
headers = { | |
'Host': 'teams.microsoft.com', | |
'Authorization': f"Bearer {token}", | |
'Content-Length': str(len(target)), | |
} | |
r = requests.post('https://teams.microsoft.com/api/mt/emea/beta/users/searchV2?includeDLs=true&includeBots=true&enableGuest=true&source=allTrue&skypeTeamsInfo=true', headers=headers, data=target) | |
try: | |
return r.json()["value"][0]["objectId"] | |
except IndexError: | |
return f"Object ID could not be found for {target}" | |
def main(): | |
parser = argparse.ArgumentParser(usage="%(prog)s [options]") | |
parser.add_argument("--jwt", "-j", | |
metavar="PATH", | |
required=True, | |
help="Path to file containing your Microsoft Teams JWT token") | |
parser.add_argument("--target", "-t", | |
metavar="EMAIL", | |
required=True, | |
help="Email address of the target you'd like to get the object id for") | |
args = parser.parse_args() | |
jwt_file = args.jwt | |
target = args.target | |
try: | |
with open(jwt_file) as f: | |
token = f.read().strip() | |
except FileNotFoundError: | |
print(f"ERROR: {jwt_file} could not be found") | |
sys.exit() | |
try: | |
decoded_jwt = jwt.decode(token, audience="https://api.spaces.skype.com", options={"verify_signature": False}) | |
except jwt.exceptions.DecodeError: | |
print("ERROR: Invalid JWT token") | |
sys.exit() | |
# Your email address from the JWT token | |
email_addr = decoded_jwt["unique_name"] | |
email_addr_domain = email_addr.split("@")[1] | |
target_email_addr_domain = target.split("@")[1] | |
if email_addr_domain == target_email_addr_domain: | |
object_id = get_internal_object_id(target, token) | |
else: | |
object_id = get_exernal_object_id(target, token) | |
print(object_id) | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment