Skip to content
Snippets Groups Projects

Added 'Create Application', 'Create Application&Registration' and required auxiliary functions

Open Francisco Borges Aurindo Barros requested to merge fborgesa-add-applications into master
Files
5
+ 140
0
@@ -151,6 +151,146 @@ def create_role(site_application_id, role_name, display_name, description, requi
raise Exception(f"Problem creating role {role_name}. Message: {message}")
def create_application(owner_upn, application_identifier, application_name, homepage, description, category, admin_group, api_token, manager_name):
## Have checks to create Application
if homepage is None:
homepage = ""
if description is None:
description = ""
user_id = get_user_id(owner_upn, api_token)
print (user_id)
if user_id is None:
print(f"Problem finding user {owner_upn}")
pprint(r.json())
message = r.json()["message"]
raise Exception(f"Problem finding user {owner_upn} while trying to create application. Message: {message}")
if admin_group is None:
admin_id = ""
if admin_group is not None:
admin_id = get_group_id(admin_group, api_token)
# Retrieve ManagerID
managerId = get_managerId(manager_name, api_token)
if managerId is None:
raise Exception(f"Failed to find ManagerID, cannot create Application")
# Request Application creation in the API
application_data= {
"applicationIdentifier": application_identifier,
"displayName": application_name,
"description": description,
"homePage": homepage,
"resourceCategory": category,
"ownerId": user_id,
"managerId": managerId,
"administratorsId": admin_id
}
r = requests.post(
url=f"{API_BASE_URL}/Application/",
headers={
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json-patch+json",
},
data=json.dumps(application_data),
)
if r.status_code == 200:
id = r.json()["data"]["id"]
print(f"Application created successfully:{id}")
return id
else:
print(f"Problem creating application {application_identifier}")
pprint(r.json())
message = r.json()["message"]
raise Exception(f"Problem creating application {application_identifier}. Message: {message}")
def create_registration(base_url, redirect_uris, application_id, application_name, api_token):
## We want the OpenID Connect provider
### If at some point we want to tweak this, all that is required is to update the Provider required
### As of 05/2024 two options are available: "OpenID Connect" and "SAML"
provider = "OpenID Connect"
r = requests.get(
url=f"{API_BASE_URL}/Registration/providers",
headers={
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json-patch+json",
})
if r.status_code == 200:
jsonData = r.json()["data"]
for value in jsonData:
if value["displayName"] == provider:
providerID = value["id"]
if providerID == "":
raise Exception(f"{provider} provider not found")
else:
print(f"Failed to retrieve providers list for registration")
raise Exception(f"Problem retrieving {provider} provider ID")
# Request Registration creation in the API for specific Application
registration_data= {
"publicClient": "false",
"implicitFlowEnabled": "false",
"serviceAccountsEnabled": "true",
"name": application_name,
"description": application_name,
"redirectUris": redirect_uris, # Must be an Array, we make it required from input(ArgumentParser)
"baseUrl": base_url
}
r = requests.post(
url=f"{API_BASE_URL}/Registration/{application_id}/{providerID}",
headers={
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json-patch+json",
},
data=json.dumps(registration_data),
)
if r.status_code == 200:
registration_id = r.json()["data"]["registrationId"]
print(f"Registration created successfully:\nApplicationID: {application_name}")
return application_name, registration_id
else:
print(f"Problem creating registration for application {application_name}")
pprint(r.json())
message = r.json()["message"]
raise Exception(f"Problem creating registration for application {application_name}. Message: {message}")
def get_registration_secret(registration_id, api_token):
r = requests.get(
url=f"{API_BASE_URL}/Registration/{registration_id}/secret",
headers={
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json-patch+json",
})
if r.status_code == 200:
oidc_secret = r.json()["data"]["secret"]
print(f"Registration secret retrieved")
return oidc_secret
else:
print(f"Problem retrieveing registration secret")
pprint(r.json())
message = r.json()["message"]
raise Exception(f"Problem retrieving registration secret. Message: {message}")
def get_managerId(manager_name, api_token):
r = requests.get(
url=f"{API_BASE_URL}/Application/"+manager_name,
headers={"Authorization": f"Bearer {api_token}",},
)
if r.status_code == 200 and r.json()["data"]:
manager_id = r.json()["data"]["identityId"]
print(f"Manager id {manager_id} found for manager name {manager_name}")
return manager_id
else:
print(f"Problem finding managerID with name {manager_name}")
pprint(r.json())
message = r.json()["message"]
raise Exception(f"Manager name {manager_name} not found. Message: {message}")
def delete_role(site_application_id, role_name, api_token):
role_object = get_role(site_application_id, role_name, api_token)
if role_object:
Loading