copied from internal repo
This commit is contained in:
0
api/__init__.py
Normal file
0
api/__init__.py
Normal file
78
api/base_api.py
Normal file
78
api/base_api.py
Normal file
@@ -0,0 +1,78 @@
|
||||
import os
|
||||
import time
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
class BaseAPI:
|
||||
CONNECTION_TEST_INTERVAL = 10
|
||||
CONNECTION_TEST_ATTEMPTS = 10
|
||||
|
||||
def __init__(self, app_domain, **kwargs):
|
||||
self.app_domain = app_domain
|
||||
self.token = None
|
||||
self.api_tenant_login_url = f"https://tenant-login-api.{self.app_domain}"
|
||||
self.url = None
|
||||
self.params = {**kwargs}
|
||||
|
||||
def __get_connection_test_url(self):
|
||||
return f"{self.url}/check_connection"
|
||||
|
||||
def wait_for_start(self, url=None):
|
||||
i = 0
|
||||
if not url:
|
||||
url = self.__get_connection_test_url()
|
||||
for i in range(self.CONNECTION_TEST_ATTEMPTS):
|
||||
try:
|
||||
self._get(url)
|
||||
except Exception:
|
||||
time.sleep(self.CONNECTION_TEST_INTERVAL)
|
||||
continue
|
||||
break
|
||||
if i == self.CONNECTION_TEST_ATTEMPTS - 1:
|
||||
raise Exception(f"Connection to {url} failed.")
|
||||
|
||||
def _headers(self, content_type='application/json'):
|
||||
headers = {'Content-Type': content_type}
|
||||
if self.token:
|
||||
headers['Authorization'] = self.token
|
||||
return headers
|
||||
|
||||
def _get(self, endpoint):
|
||||
try:
|
||||
response = requests.get(endpoint, headers=self._headers())
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.exceptions.HTTPError as e:
|
||||
raise requests.exceptions.HTTPError(e.response.text)
|
||||
|
||||
def _post(self, endpoint, payload):
|
||||
try:
|
||||
response = requests.post(endpoint, json=payload, headers=self._headers())
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.exceptions.HTTPError as e:
|
||||
raise requests.exceptions.HTTPError(e.response.text)
|
||||
|
||||
def _put(self, endpoint, payload):
|
||||
try:
|
||||
response = requests.put(endpoint, json=payload, headers=self._headers())
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.exceptions.HTTPError as e:
|
||||
raise requests.exceptions.HTTPError(e.response.text)
|
||||
|
||||
def _delete(self, endpoint):
|
||||
response = requests.delete(endpoint, headers=self._headers())
|
||||
response.raise_for_status()
|
||||
return response.status_code
|
||||
|
||||
def _upload_file(self, endpoint, file_path, params=None):
|
||||
try:
|
||||
with open(file_path, 'rb') as file:
|
||||
files = {'file': (os.path.basename(file_path), file, 'application/octet-stream')}
|
||||
response = requests.post(endpoint, files=files, data=params, headers=self._headers(content_type=None))
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
except requests.exceptions.HTTPError as e:
|
||||
raise requests.exceptions.HTTPError(e.response.text)
|
||||
115
api/operator_api.py
Normal file
115
api/operator_api.py
Normal file
@@ -0,0 +1,115 @@
|
||||
import base64
|
||||
import hashlib
|
||||
import json
|
||||
|
||||
from .base_api import BaseAPI
|
||||
|
||||
|
||||
class OperatorAPI(BaseAPI):
|
||||
def login(self, operator_user, operator_password):
|
||||
endpoint = f"{self.api_tenant_login_url}/operator/login"
|
||||
nonce = self._post(endpoint, {
|
||||
"login": operator_user
|
||||
}).get('nonce')
|
||||
|
||||
# get token
|
||||
salted_password = str(hashlib.sha256(hashlib.sha256(operator_password.encode()).hexdigest().encode() + nonce.encode()).hexdigest())
|
||||
|
||||
self.token = self._post(endpoint, {
|
||||
"login": operator_user,
|
||||
"password": salted_password
|
||||
}).get('token')
|
||||
|
||||
aa = base64.b64decode(self.token.split(".")[1] + "===")
|
||||
decoded_token = json.loads(aa.decode("utf-8"))
|
||||
self.url = decoded_token["url"]["api"]
|
||||
|
||||
def login_as_user(self, tenant_id, tenant_user_id):
|
||||
endpoint = f"{self.api_tenant_login_url}/operator/tenant/{tenant_id}/user/{tenant_user_id}/login"
|
||||
return self._get(endpoint)
|
||||
|
||||
def create_user(self, tenant_id, params):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/user"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def get_user(self, tenant_id, tenant_user_id):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/user/{tenant_user_id}"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def get_users(self, tenant_id):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/user"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def get_license_packages(self, tenant_id):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/operator_license_package"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def get_package_agreements(self, tenant_id):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/tenant_package_agreement"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_package_activation_request(self, tenant_id, params):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/package_activation_request"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def create_tenant(self, params):
|
||||
endpoint = f"{self.url}/tenant"
|
||||
return self._post(endpoint, params).get('data')[0]
|
||||
|
||||
def get_tenants(self):
|
||||
endpoint = f"{self.url}/tenant"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def get_ddi(self, tenant_id):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/ddi"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_ddi(self, tenant_id, params):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/ddi"
|
||||
return self._post(endpoint, params).get('data')[0]
|
||||
|
||||
def get_tenant_telco_networks(self, tenant_id):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/telco_network"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_tenant_telco_network(self, tenant_id, params):
|
||||
endpoint = f"{self.url}/tenant/{tenant_id}/telco_network"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def get_operator_routing(self):
|
||||
endpoint = f"{self.url}/operator_routing"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_operator_routing(self, params):
|
||||
endpoint = f"{self.url}/operator_routing"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def create_operator_gateway(self, params):
|
||||
endpoint = f"{self.url}/operator_gateway"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def get_operator_gateways(self):
|
||||
endpoint = f"{self.url}/operator_gateway"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_operator_gateway_normalization(self, operator_gateway_id, params):
|
||||
endpoint = f"{self.url}/operator_gateway/{operator_gateway_id}/normalization"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def get_operator_gateway_normalization(self, operator_gateway_id):
|
||||
endpoint = f"{self.url}/operator_gateway/{operator_gateway_id}/normalization"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def delete_operator_gateway_normalization(self, operator_gateway_id, normalization_id):
|
||||
endpoint = f"{self.url}/operator_gateway/{operator_gateway_id}/normalization/{normalization_id}"
|
||||
return self._delete(endpoint)
|
||||
|
||||
def get_speech_integrations(self):
|
||||
endpoint = f"{self.url}/text_to_speech/integration"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def add_speech_integration(self, params):
|
||||
endpoint = f"{self.url}/tenant/speech/integration"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
|
||||
148
api/tenant_api.py
Normal file
148
api/tenant_api.py
Normal file
@@ -0,0 +1,148 @@
|
||||
from .base_api import BaseAPI
|
||||
|
||||
|
||||
class TenantAPI(BaseAPI):
|
||||
|
||||
def initialize_user_login(self, params):
|
||||
self.token = params.get('token')
|
||||
self.url = params.get('urls').get('api')
|
||||
self.file_server_url = params.get('urls').get('fileserver')
|
||||
|
||||
# USER
|
||||
|
||||
def update_feature_tenant_user_call(self, tenant_user_id, params):
|
||||
endpoint = f"{self.url}/user/{tenant_user_id}/feature/call"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def update_feature_tenant_user_consultant(self, tenant_user_id, params):
|
||||
endpoint = f"{self.url}/user/{tenant_user_id}/feature/consultant"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def update_feature_tenant_user_recording(self, tenant_user_id, params):
|
||||
endpoint = f"{self.url}/user/{tenant_user_id}/feature/recording"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def update_feature_tenant_user_hotdesk(self, tenant_user_id, params):
|
||||
endpoint = f"{self.url}/user/{tenant_user_id}/feature/hotdesk"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def create_web_link(self, params):
|
||||
endpoint = f"{self.url}/weblink"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
# PROJECT
|
||||
|
||||
def create_project(self, params):
|
||||
endpoint = f"{self.url}/project"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def get_projects(self):
|
||||
endpoint = f"{self.url}/project"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def update_project(self, project_id, params):
|
||||
endpoint = f"{self.url}/project/{project_id}"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def add_user_to_project(self, project_id, params):
|
||||
endpoint = f"{self.url}/project/{project_id}/user"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def update_feature_project_recording(self, project_id, params):
|
||||
endpoint = f"{self.url}/project/{project_id}/feature/recording"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def update_feature_project_aaa(self, project_id, params):
|
||||
endpoint = f"{self.url}/project/{project_id}/feature/aaa"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def add_target_to_project(self, project_id, params):
|
||||
endpoint = f"{self.url}/project/{project_id}/target"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def add_target_to_user(self, tenant_user_id, params):
|
||||
endpoint = f"{self.url}/user/{tenant_user_id}/target"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
# FILES
|
||||
def get_announcements(self):
|
||||
endpoint = f"{self.file_server_url}/announcement"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def add_announcement(self, file_path, params):
|
||||
endpoint = f"{self.file_server_url}/announcement"
|
||||
return self._upload_file(endpoint, file_path, params=params).get('data')
|
||||
|
||||
# IVR
|
||||
|
||||
def get_ivrs(self):
|
||||
endpoint = f"{self.url}/ivr"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_ivr(self, params):
|
||||
endpoint = f"{self.url}/ivr"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def update_ivr(self, ivr_id, params):
|
||||
endpoint = f"{self.url}/ivr/{ivr_id}"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def add_target_to_ivr(self, ivr_id, params):
|
||||
endpoint = f"{self.url}/ivr/{ivr_id}/target"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
# IWRS
|
||||
|
||||
def get_iwrss(self):
|
||||
endpoint = f"{self.url}/iwrs"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_iwrs(self, params):
|
||||
endpoint = f"{self.url}/iwrs"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def update_iwrs(self, iwrs_id, params):
|
||||
endpoint = f"{self.url}/iwrs/{iwrs_id}"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
# TENANT
|
||||
|
||||
def update_feature_tenant_api(self, params):
|
||||
endpoint = f"{self.url}/tenant/feature/api"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def update_feature_tenant_crm(self, params):
|
||||
endpoint = f"{self.url}/tenant/feature/crm"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def update_feature_tenant_ticketing(self, params):
|
||||
endpoint = f"{self.url}/tenant/feature/ticketing"
|
||||
return self._put(endpoint, params).get('data')
|
||||
|
||||
def get_bss_apis(self):
|
||||
endpoint = f"{self.url}/tenant/bss_api"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def get_tenant_applications(self):
|
||||
endpoint = f"{self.url}/tenant/application"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_tenant_application(self, params):
|
||||
endpoint = f"{self.url}/tenant/application"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def get_plugin_templates(self):
|
||||
endpoint = f"{self.url}/tenant/plugin/template"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_plugin_template(self, params):
|
||||
endpoint = f"{self.url}/tenant/plugin/template"
|
||||
return self._post(endpoint, params).get('data')
|
||||
|
||||
def get_plugin_url_configurations(self):
|
||||
endpoint = f"{self.url}/tenant/plugin/url_configuration"
|
||||
return self._get(endpoint).get('data')
|
||||
|
||||
def create_plugin_url_configuration(self, params):
|
||||
endpoint = f"{self.url}/tenant/plugin/url_configuration"
|
||||
return self._post(endpoint, params).get('data')
|
||||
Reference in New Issue
Block a user