zscaler-sdk-python 1.7.5__tar.gz → 1.7.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/PKG-INFO +1 -1
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/pyproject.toml +1 -1
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/__init__.py +1 -1
- zscaler_sdk_python-1.7.7/zscaler/oneapi_oauth_client.py +444 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/oneapi_response.py +2 -3
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/request_executor.py +10 -6
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_firewall_rules.py +21 -3
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/dlp_web_rules.py +3 -1
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/location_management.py +14 -4
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/activation.py +4 -2
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/ip_destination_groups.py +0 -5
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/nw_service_groups.py +1 -1
- zscaler_sdk_python-1.7.5/zscaler/oneapi_oauth_client.py +0 -240
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/LICENSE.md +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/README.md +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/api_client.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/cache/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/cache/cache.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/cache/no_op_cache.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/cache/zscaler_cache.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/config/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/config/config_setter.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/config/config_validator.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/constants.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/error_messages.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/errors/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/errors/error.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/errors/http_error.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/errors/response_checker.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/errors/zscaler_api_error.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/exceptions/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/exceptions/exceptions.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/helpers.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/logger.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/oneapi_client.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/oneapi_collection.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/oneapi_http_client.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/oneapi_object.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ratelimiter/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ratelimiter/ratelimiter.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/user_agent.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/utils.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/admin_user.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/company.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/devices.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/entitlements.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/fail_open_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/forwarding_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/legacy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/admin_user.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/devices.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/failopenpolicy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/forwardingprofile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/getcompanyinfo.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/manage_pass.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/secrets_otp.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/secrets_passwords.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/trustednetworks.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/webappservice.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/webpolicy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/webprivacy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/zdxgroupentitlements.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/models/zpagroupentitlements.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/secrets.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/trusted_networks.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/web_app_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/web_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/web_privacy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zcc/zcc_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/admin.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/alerts.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/apps.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/devices.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/inventory.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/legacy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/administration.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/alerts.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/application_users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/applications.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/call_quality_metrics.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/common.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/devices.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/snapshot.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/software_inventory.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/troubleshooting.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/models/users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/snapshot.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/troubleshooting.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zdx/zdx_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/activate.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/admin_users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/advanced_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/alert_subscriptions.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/apptotal.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/atp_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/audit_logs.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/authentication_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/bandwidth_classes.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/bandwidth_control_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/browser_control_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/casb_dlp_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/casb_malware_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_app_instances.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_applications.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_browser_isolation.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_firewall.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_firewall_dns.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_firewall_ips.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_nss.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloud_to_cloud_ir.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/cloudappcontrol.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/dedicated_ip_gateways.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/device_management.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/dlp_dictionary.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/dlp_engine.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/dlp_resources.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/dlp_templates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/dlp_web_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/dns_gatways.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/end_user_notification.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/file_type_control_rule.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/forwarding_control.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/ftp_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/gre_tunnel.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/intermediate_certificates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/iot_report.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/ipv6_config.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/legacy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/locations.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/malware_protection_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/mobile_threat_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/activation.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/admin_users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/advanced_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/advanced_threat_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/alert_subscriptions.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/apptotal.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/authentication_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/bandwidth_classes.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/bandwidth_control_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/browser_control_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/casb_dlp_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/casb_malware_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_app_instances.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_app_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_browser_isolation.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_app_services.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_destination_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_dns_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_ips_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_nw_application_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_nw_applications.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_nw_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_source_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_firewall_time_windows.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_nss.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloud_to_cloud_ir.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/cloudappcontrol.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/common.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/dedicated_ip_gateways.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/device_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/devices.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/dlp_dictionary.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/dlp_engine.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/dlp_resources.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/dlp_templates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/dns_gateways.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/endusernotification.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/filetyperules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/forwarding_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/ftp_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/gre_recommended_list.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/gre_tunnel_info.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/gre_tunnels.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/gre_vips.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/intermediate_certificates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/iotreport.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/ipv6_config.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/location_group.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/malware_protection_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/mobile_threat_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/nat_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/nss_servers.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/organization_information.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/pac_files.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/proxies.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/proxy_gateways.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/remoteassistance.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/risk_profiles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/rule_labels.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/saas_security_api.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/sandboxrules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/security_policy_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/shadow_it_report.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/ssl_inspection_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/subclouds.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/system_audit.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/tenancy_restriction_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/time_intervals.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/traffic_datacenters.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/traffic_dc_exclusions.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/traffic_extranet.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/traffic_static_ip.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/url_filter_cloud_app_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/url_filtering_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/urlcategory.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/user_management.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/vzen_clusters.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/workload_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/zpa_gateway.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/nat_control_policy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/nss_servers.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/organization_information.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/pac_files.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/policy_export.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/proxies.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/remote_assistance.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/risk_profiles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/rule_labels.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/saas_security_api.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/sandbox.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/sandbox_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/security_policy_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/shadow_it_report.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/ssl_inspection_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/sub_clouds.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/system_audit.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/tenancy_restriction_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/time_intervals.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/traffic_datacenters.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/traffic_extranet.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/traffic_static_ip.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/url_categories.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/url_filtering.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/user_management.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/vzen_clusters.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/workload_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/zia_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/zpa_gateway.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/api_client.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/models/api_client.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/models/common.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/models/groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/models/resource_servers.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/models/user_entitlement.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/models/users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/resource_servers.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/user_entitlement.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zidentity/zidentity_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/admin_sso_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/administrator_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/api_keys.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_connector_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_connector_schedule.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_connectors.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_protection.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_segment_by_type.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_segments_ba.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_segments_ba_v2.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_segments_inspection.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/app_segments_pra.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/application_segment.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/c2c_ip_ranges.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/cbi_banner.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/cbi_certificate.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/cbi_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/cbi_region.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/cbi_zpa_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/certificates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/client_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/cloud_connector_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/config_override_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/customer_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/customer_domain.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/customer_version_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/emergency_access.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/enrollment_certificates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/idp.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/legacy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/lss.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/machine_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/microtenants.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/administrator_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/api_keys.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/app_connector_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/app_connector_schedule.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/app_connectors.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/app_protection_predefined_controls.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/app_protection_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/application_segment.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/application_segment_lb.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/application_servers.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/c2c_ip_ranges.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/cbi_banner.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/cbi_certificate.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/cbi_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/cbi_region.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/cbi_zpa_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/certificates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/client_settings.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/cloud_connector_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/common.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/config_override_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/customer_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/customer_domain.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/customer_version_profile.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/emergency_access.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/enrollment_certificates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/idp.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/lss.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/machine_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/microtenants.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/npn_client_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/policyset_controller_v1.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/policyset_controller_v2.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/posture_profiles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/pra_approval.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/pra_console.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/pra_cred_pool_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/pra_credential.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/pra_portal.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/private_cloud_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/private_cloud_group.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/provisioning_keys.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/role_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/saml_attributes.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/scim_attributes.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/scim_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/segment_group.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/server_group.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/service_edge_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/service_edge_schedule.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/service_edges.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/trusted_network.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/user_portal_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/models/user_portal_link.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/npn_client_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/policies.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/posture_profiles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/pra_approval.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/pra_console.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/pra_credential.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/pra_credential_pool.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/pra_portal.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/private_cloud_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/private_cloud_group.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/provisioning.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/role_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/saml_attributes.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/scim_attributes.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/scim_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/segment_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/server_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/servers.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/service_edge_group.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/service_edge_schedule.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/service_edges.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/trusted_networks.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/user_portal_controller.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/user_portal_link.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zpa/zpa_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/account_details.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/admin_users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/api_keys.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/ec_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/forwarding_gateways.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/forwarding_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/ip_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/ip_source_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/legacy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/location_management.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/location_template.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/activation.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/admin_roles.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/admin_users.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/api_keys.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/common.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/ec_group_vm.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/ecgroup.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/forwarding_gateways.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/forwarding_rules.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/ip_destination_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/ip_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/ip_source_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/location_management.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/location_templates.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/nw_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/nw_service_groups.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/provisioning_url.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/traffic_vpn_credentials.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/models/zpa_resources.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/nw_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/provisioning_url.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/ztw/ztw_service.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/__init__.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/audit_logs.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/dlp_incidents.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/legacy.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/audit_logs.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/change_history.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/common.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/generated_tickets.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/incident_details.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/incident_evidence.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/incident_group_search.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/incident_search.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/models/incident_trigger.py +0 -0
- {zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zwa/zwa_service.py +0 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import json
|
|
3
|
+
import requests
|
|
4
|
+
import jwt
|
|
5
|
+
import time
|
|
6
|
+
from cryptography.hazmat.backends import default_backend
|
|
7
|
+
from cryptography.hazmat.primitives import serialization
|
|
8
|
+
from zscaler.user_agent import UserAgent
|
|
9
|
+
from zscaler.oneapi_http_client import HTTPClient
|
|
10
|
+
from zscaler.errors.response_checker import check_response_for_error
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class OAuth:
|
|
16
|
+
"""
|
|
17
|
+
This class contains the OAuth actions for the Zscaler Client.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
_instance = None
|
|
21
|
+
_last_config = None
|
|
22
|
+
|
|
23
|
+
def __new__(cls, request_executor, config):
|
|
24
|
+
if cls._instance is None or cls._last_config != config:
|
|
25
|
+
cls._instance = super(OAuth, cls).__new__(cls)
|
|
26
|
+
cls._last_config = config
|
|
27
|
+
cls._instance.__init__(request_executor, config)
|
|
28
|
+
return cls._instance
|
|
29
|
+
|
|
30
|
+
def __init__(self, request_executor, config):
|
|
31
|
+
if not hasattr(self, "_initialized"):
|
|
32
|
+
self._request_executor = request_executor
|
|
33
|
+
self._config = config
|
|
34
|
+
self._access_token = None
|
|
35
|
+
self._token_expires_at = None
|
|
36
|
+
self._token_issued_at = None
|
|
37
|
+
|
|
38
|
+
# Initialize cache based on config
|
|
39
|
+
self._cache = self._initialize_cache()
|
|
40
|
+
self._cache_key = self._generate_cache_key()
|
|
41
|
+
# No buffer needed - simple expiration check
|
|
42
|
+
# logging.debug("OAuth instance created with provided configuration.")
|
|
43
|
+
self._initialized = True
|
|
44
|
+
|
|
45
|
+
def _initialize_cache(self):
|
|
46
|
+
"""
|
|
47
|
+
Initialize cache based on configuration.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
Cache instance or None if caching is disabled
|
|
51
|
+
"""
|
|
52
|
+
cache_config = self._config.get("cache", {})
|
|
53
|
+
|
|
54
|
+
# If cache is already a cache instance, return it
|
|
55
|
+
if hasattr(cache_config, 'get') and hasattr(cache_config, 'add'):
|
|
56
|
+
return cache_config
|
|
57
|
+
|
|
58
|
+
# If cache is a dict with enabled flag
|
|
59
|
+
if isinstance(cache_config, dict) and cache_config.get("enabled", False):
|
|
60
|
+
from zscaler.cache.zscaler_cache import ZscalerCache
|
|
61
|
+
|
|
62
|
+
# Get TTL and TTI from config
|
|
63
|
+
ttl = cache_config.get("defaultTtl", 3600) # Default 1 hour
|
|
64
|
+
tti = cache_config.get("defaultTti", 1800) # Default 30 minutes
|
|
65
|
+
|
|
66
|
+
return ZscalerCache(ttl=ttl, tti=tti)
|
|
67
|
+
|
|
68
|
+
return None
|
|
69
|
+
|
|
70
|
+
def _generate_cache_key(self):
|
|
71
|
+
"""
|
|
72
|
+
Generate a unique cache key for this OAuth instance.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
str: Unique cache key based on client configuration
|
|
76
|
+
"""
|
|
77
|
+
# Handle legacy client configurations that don't have OneAPI OAuth fields
|
|
78
|
+
client_config = self._config.get("client", {})
|
|
79
|
+
|
|
80
|
+
# For legacy clients, use alternative identifiers
|
|
81
|
+
if "clientId" not in client_config:
|
|
82
|
+
# Legacy clients might have username, api_key, etc.
|
|
83
|
+
username = client_config.get("username", "unknown")
|
|
84
|
+
api_key = client_config.get("api_key", "unknown")
|
|
85
|
+
cloud = client_config.get("cloud", "production").lower()
|
|
86
|
+
return f"oauth_token_legacy_{username}_{api_key}_{cloud}"
|
|
87
|
+
|
|
88
|
+
# For OneAPI clients, use the standard fields
|
|
89
|
+
client_id = client_config["clientId"]
|
|
90
|
+
vanity_domain = client_config["vanityDomain"]
|
|
91
|
+
cloud = client_config.get("cloud", "PRODUCTION").lower()
|
|
92
|
+
return f"oauth_token_{client_id}_{vanity_domain}_{cloud}"
|
|
93
|
+
|
|
94
|
+
def _get_cached_token(self):
|
|
95
|
+
"""
|
|
96
|
+
Retrieve token from cache if available and enabled.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
dict: Cached token data or None if not available
|
|
100
|
+
"""
|
|
101
|
+
if not self._cache or not self._cache_enabled():
|
|
102
|
+
return None
|
|
103
|
+
|
|
104
|
+
try:
|
|
105
|
+
cached_data = self._cache.get(self._cache_key)
|
|
106
|
+
if cached_data and isinstance(cached_data, dict):
|
|
107
|
+
logger.debug("Retrieved token from cache")
|
|
108
|
+
return cached_data
|
|
109
|
+
except Exception as e:
|
|
110
|
+
logger.warning(f"Failed to retrieve token from cache: {e}")
|
|
111
|
+
|
|
112
|
+
return None
|
|
113
|
+
|
|
114
|
+
def _cache_token(self, access_token, expires_at):
|
|
115
|
+
"""
|
|
116
|
+
Cache the token if caching is enabled.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
access_token (str): The access token to cache
|
|
120
|
+
expires_at (float): Token expiration timestamp
|
|
121
|
+
"""
|
|
122
|
+
if not self._cache or not self._cache_enabled():
|
|
123
|
+
return
|
|
124
|
+
|
|
125
|
+
try:
|
|
126
|
+
token_data = {
|
|
127
|
+
'access_token': access_token,
|
|
128
|
+
'expires_at': expires_at,
|
|
129
|
+
'issued_at': time.time()
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
# Store token data directly (not as tuple)
|
|
133
|
+
self._cache.add(self._cache_key, token_data)
|
|
134
|
+
logger.debug("Token cached successfully")
|
|
135
|
+
except Exception as e:
|
|
136
|
+
logger.warning(f"Failed to cache token: {e}")
|
|
137
|
+
|
|
138
|
+
def _cache_enabled(self):
|
|
139
|
+
"""
|
|
140
|
+
Check if caching is enabled in the configuration.
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
bool: True if caching is enabled
|
|
144
|
+
"""
|
|
145
|
+
return self._cache is not None
|
|
146
|
+
|
|
147
|
+
def _is_token_expired(self, token_data=None):
|
|
148
|
+
"""
|
|
149
|
+
Check if the current token is expired.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
token_data (dict, optional): Token data to check. If None, uses instance data.
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
bool: True if token is expired
|
|
156
|
+
"""
|
|
157
|
+
if token_data:
|
|
158
|
+
# Check cached token data
|
|
159
|
+
expires_at = token_data.get('expires_at')
|
|
160
|
+
if not expires_at:
|
|
161
|
+
return True
|
|
162
|
+
return time.time() >= expires_at
|
|
163
|
+
else:
|
|
164
|
+
# Check instance token data
|
|
165
|
+
if not self._token_expires_at:
|
|
166
|
+
return True
|
|
167
|
+
return time.time() >= self._token_expires_at
|
|
168
|
+
|
|
169
|
+
def authenticate(self):
|
|
170
|
+
"""
|
|
171
|
+
Main authentication function. Determines which authentication
|
|
172
|
+
method to use (Client Secret or JWT Private Key) and retrieves the
|
|
173
|
+
OAuth access token.
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
str: OAuth access token.
|
|
177
|
+
"""
|
|
178
|
+
# Check if this is a legacy client configuration
|
|
179
|
+
client_config = self._config.get("client", {})
|
|
180
|
+
if "clientId" not in client_config:
|
|
181
|
+
logging.error("OAuth authentication not available for legacy client configurations.")
|
|
182
|
+
raise ValueError("OAuth authentication not available for legacy client configurations. Use legacy authentication methods instead.")
|
|
183
|
+
|
|
184
|
+
# logging.debug("Starting authentication process.")
|
|
185
|
+
client_id = client_config["clientId"]
|
|
186
|
+
client_secret = client_config.get("clientSecret", "")
|
|
187
|
+
private_key = client_config.get("privateKey", "")
|
|
188
|
+
|
|
189
|
+
if not client_id or (not client_secret and not private_key):
|
|
190
|
+
logging.error("No valid client credentials provided.")
|
|
191
|
+
raise ValueError("No valid client credentials provided")
|
|
192
|
+
|
|
193
|
+
# Determine whether to authenticate with client secret or JWT
|
|
194
|
+
if private_key:
|
|
195
|
+
logging.info("Authenticating using JWT private key.")
|
|
196
|
+
response = self._authenticate_with_private_key(client_id, private_key)
|
|
197
|
+
else:
|
|
198
|
+
# logging.info("Authenticating using client secret.")
|
|
199
|
+
response = self._authenticate_with_client_secret(client_id, client_secret)
|
|
200
|
+
|
|
201
|
+
# logging.debug("Authentication process completed.")
|
|
202
|
+
return response
|
|
203
|
+
|
|
204
|
+
def _authenticate_with_client_secret(self, client_id, client_secret):
|
|
205
|
+
"""
|
|
206
|
+
Authenticate using client ID and client secret.
|
|
207
|
+
|
|
208
|
+
Args:
|
|
209
|
+
client_id (str): Client ID for authentication.
|
|
210
|
+
client_secret (str): Client secret for authentication.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
str: OAuth access token.
|
|
214
|
+
"""
|
|
215
|
+
# logging.debug("Preparing to authenticate with client secret.")
|
|
216
|
+
vanity_domain = self._config["client"]["vanityDomain"]
|
|
217
|
+
cloud = self._config["client"].get("cloud", "PRODUCTION").lower()
|
|
218
|
+
auth_url = self._get_auth_url(vanity_domain, cloud)
|
|
219
|
+
|
|
220
|
+
# Prepare form data (like in the Go SDK)
|
|
221
|
+
form_data = {
|
|
222
|
+
"grant_type": "client_credentials",
|
|
223
|
+
"client_id": client_id,
|
|
224
|
+
"client_secret": client_secret,
|
|
225
|
+
"audience": "https://api.zscaler.com",
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
user_agent = UserAgent().get_user_agent_string()
|
|
229
|
+
headers = {
|
|
230
|
+
"Accept": "application/json",
|
|
231
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
232
|
+
"User-Agent": user_agent,
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
# logging.debug(f"Sending authentication request to {auth_url}.")
|
|
236
|
+
# Synchronous HTTP request (with form data in the body)
|
|
237
|
+
response = requests.post(auth_url, data=form_data, headers=headers)
|
|
238
|
+
|
|
239
|
+
if response.status_code >= 300:
|
|
240
|
+
logging.error(f"Error authenticating: {response.status_code}, {response.text}")
|
|
241
|
+
raise Exception(f"Error authenticating: {response.status_code}, {response.text}")
|
|
242
|
+
|
|
243
|
+
# logging.debug("Authentication with client secret successful.")
|
|
244
|
+
return response
|
|
245
|
+
|
|
246
|
+
def _authenticate_with_private_key(self, client_id, private_key):
|
|
247
|
+
"""
|
|
248
|
+
Authenticate using client ID and JWT private key.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
client_id (str): Client ID for authentication.
|
|
252
|
+
private_key (str): Path to the private key file, JWK JSON string, or raw private key.
|
|
253
|
+
|
|
254
|
+
Returns:
|
|
255
|
+
str: OAuth access token.
|
|
256
|
+
"""
|
|
257
|
+
logging.debug("Preparing to authenticate with JWT private key.")
|
|
258
|
+
vanity_domain = self._config["client"]["vanityDomain"]
|
|
259
|
+
cloud = self._config["client"].get("cloud", "PRODUCTION").lower()
|
|
260
|
+
auth_url = self._get_auth_url(vanity_domain, cloud)
|
|
261
|
+
|
|
262
|
+
# **Step 1: Determine the Private Key Type**
|
|
263
|
+
if private_key.strip().startswith("{"):
|
|
264
|
+
# **JWK JSON Format**
|
|
265
|
+
logging.info("Using JWK JSON format for private key.")
|
|
266
|
+
jwk_key = json.loads(private_key.strip()) # Convert JWK string to dict
|
|
267
|
+
private_key_obj = jwt.algorithms.RSAAlgorithm.from_jwk(json.dumps(jwk_key))
|
|
268
|
+
|
|
269
|
+
elif "BEGIN PRIVATE KEY" in private_key:
|
|
270
|
+
# **Raw PEM Private Key**
|
|
271
|
+
logging.info("Using raw PEM private key.")
|
|
272
|
+
private_key_obj = serialization.load_pem_private_key(
|
|
273
|
+
private_key.encode(), password=None, backend=default_backend()
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
else:
|
|
277
|
+
# **Assume it's a file path and read the private key**
|
|
278
|
+
logging.info("Using private key from file.")
|
|
279
|
+
with open(private_key, "rb") as key_file:
|
|
280
|
+
private_key_obj = serialization.load_pem_private_key(key_file.read(), password=None, backend=default_backend())
|
|
281
|
+
|
|
282
|
+
# **Step 2: Create JWT for Client Assertion**
|
|
283
|
+
now = int(time.time())
|
|
284
|
+
payload = {
|
|
285
|
+
"iss": client_id,
|
|
286
|
+
"sub": client_id,
|
|
287
|
+
"aud": "https://api.zscaler.com",
|
|
288
|
+
"exp": now + 600, # 10 minutes expiration
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
# **Generate the JWT assertion using the private key**
|
|
292
|
+
assertion = jwt.encode(payload, private_key_obj, algorithm="RS256")
|
|
293
|
+
|
|
294
|
+
# **Step 3: Prepare OAuth Request**
|
|
295
|
+
form_data = {
|
|
296
|
+
"grant_type": "client_credentials",
|
|
297
|
+
"client_id": client_id,
|
|
298
|
+
"client_assertion": assertion,
|
|
299
|
+
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
|
|
300
|
+
"audience": "https://api.zscaler.com",
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
headers = {
|
|
304
|
+
"Accept": "application/json",
|
|
305
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
306
|
+
"User-Agent": "Zscaler-SDK",
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
logging.debug(f"Sending authentication request to {auth_url} with JWT.")
|
|
310
|
+
response = requests.post(auth_url, data=form_data, headers=headers)
|
|
311
|
+
|
|
312
|
+
if response.status_code >= 300:
|
|
313
|
+
logging.error(f"Error authenticating: {response.status_code}, {response.text}")
|
|
314
|
+
raise Exception(f"Error authenticating: {response.status_code}, {response.text}")
|
|
315
|
+
|
|
316
|
+
logging.info("Authentication with JWT private key successful.")
|
|
317
|
+
return response
|
|
318
|
+
|
|
319
|
+
def _get_access_token(self):
|
|
320
|
+
"""
|
|
321
|
+
Retrieves or generates the OAuth access token for the Zscaler OneAPI Client.
|
|
322
|
+
Implements proactive token refresh using expires_in with configurable buffer.
|
|
323
|
+
|
|
324
|
+
Returns:
|
|
325
|
+
str: OAuth access token.
|
|
326
|
+
"""
|
|
327
|
+
# Check if this is a legacy client configuration
|
|
328
|
+
client_config = self._config.get("client", {})
|
|
329
|
+
if "clientId" not in client_config:
|
|
330
|
+
logger.warning("OAuth client initialized with legacy configuration - OAuth functionality not available")
|
|
331
|
+
return None
|
|
332
|
+
|
|
333
|
+
# 1. Check cache first (if enabled)
|
|
334
|
+
cached_token = self._get_cached_token()
|
|
335
|
+
if cached_token and not self._is_token_expired(cached_token):
|
|
336
|
+
self._access_token = cached_token['access_token']
|
|
337
|
+
self._token_expires_at = cached_token['expires_at']
|
|
338
|
+
self._token_issued_at = cached_token.get('issued_at', time.time())
|
|
339
|
+
logger.debug("Using cached access token")
|
|
340
|
+
return self._access_token
|
|
341
|
+
|
|
342
|
+
# 2. Check if current token is about to expire (proactive refresh)
|
|
343
|
+
if self._access_token and not self._is_token_expired():
|
|
344
|
+
logger.debug("Using existing access token")
|
|
345
|
+
return self._access_token
|
|
346
|
+
|
|
347
|
+
# 3. Get new token
|
|
348
|
+
logger.info("Access token expired or not available, requesting new token")
|
|
349
|
+
try:
|
|
350
|
+
# Call the authenticate function, which now returns the response object
|
|
351
|
+
response = self.authenticate()
|
|
352
|
+
|
|
353
|
+
# Check the response body for error messages using check_response_for_error
|
|
354
|
+
parsed_response, err = check_response_for_error(response.url, response, response.text)
|
|
355
|
+
|
|
356
|
+
if err:
|
|
357
|
+
logging.error(f"Error during authentication: {err}")
|
|
358
|
+
raise ValueError(f"Error during authentication: {err}")
|
|
359
|
+
|
|
360
|
+
# Extract access token and expiration from the parsed response
|
|
361
|
+
if isinstance(parsed_response, dict):
|
|
362
|
+
self._access_token = parsed_response.get("access_token")
|
|
363
|
+
expires_in = parsed_response.get("expires_in", 3600) # Default to 1 hour
|
|
364
|
+
self._token_expires_at = time.time() + expires_in
|
|
365
|
+
self._token_issued_at = time.time()
|
|
366
|
+
|
|
367
|
+
# Cache the new token
|
|
368
|
+
self._cache_token(self._access_token, self._token_expires_at)
|
|
369
|
+
|
|
370
|
+
logger.info(f"New access token obtained, expires in {expires_in} seconds")
|
|
371
|
+
else:
|
|
372
|
+
logging.error("Parsed response is not a dictionary as expected.")
|
|
373
|
+
raise ValueError("Parsed response is not a dictionary as expected")
|
|
374
|
+
|
|
375
|
+
except Exception as e:
|
|
376
|
+
logging.error(f"Failed to get access token: {e}")
|
|
377
|
+
raise # Re-raise the exception to handle it outside
|
|
378
|
+
|
|
379
|
+
return self._access_token
|
|
380
|
+
|
|
381
|
+
def _get_auth_url(self, vanity_domain, cloud):
|
|
382
|
+
"""
|
|
383
|
+
Determines the OAuth2 provider URL based on the vanity domain and cloud.
|
|
384
|
+
|
|
385
|
+
Args:
|
|
386
|
+
vanity_domain (str): Vanity domain for the authentication URL.
|
|
387
|
+
cloud (str): Cloud environment (e.g., "production", "stage").
|
|
388
|
+
|
|
389
|
+
Returns:
|
|
390
|
+
str: The fully constructed authentication URL.
|
|
391
|
+
"""
|
|
392
|
+
# logging.debug(f"Constructing auth URL for cloud: {cloud}.")
|
|
393
|
+
if cloud == "production":
|
|
394
|
+
return f"https://{vanity_domain}.zslogin.net/oauth2/v1/token"
|
|
395
|
+
else:
|
|
396
|
+
return f"https://{vanity_domain}.zslogin{cloud}.net/oauth2/v1/token"
|
|
397
|
+
|
|
398
|
+
def clear_access_token(self):
|
|
399
|
+
"""
|
|
400
|
+
Clear the current OAuth access token and remove from cache.
|
|
401
|
+
"""
|
|
402
|
+
logging.info("Clearing the current access token.")
|
|
403
|
+
self._access_token = None
|
|
404
|
+
self._token_expires_at = None
|
|
405
|
+
self._token_issued_at = None
|
|
406
|
+
|
|
407
|
+
# Clear from cache if enabled
|
|
408
|
+
if self._cache and self._cache_enabled():
|
|
409
|
+
try:
|
|
410
|
+
self._cache.delete(self._cache_key)
|
|
411
|
+
logger.debug("Token cleared from cache")
|
|
412
|
+
except Exception as e:
|
|
413
|
+
logger.warning(f"Failed to clear token from cache: {e}")
|
|
414
|
+
|
|
415
|
+
self._request_executor._default_headers.pop("Authorization", None)
|
|
416
|
+
|
|
417
|
+
def get_token_info(self):
|
|
418
|
+
"""
|
|
419
|
+
Get information about the current token status.
|
|
420
|
+
|
|
421
|
+
Returns:
|
|
422
|
+
dict: Token information including expiration and cache status
|
|
423
|
+
"""
|
|
424
|
+
if not self._access_token:
|
|
425
|
+
return {
|
|
426
|
+
'has_token': False,
|
|
427
|
+
'expires_at': None,
|
|
428
|
+
'issued_at': None,
|
|
429
|
+
'is_expired': True,
|
|
430
|
+
'time_until_expiry': None,
|
|
431
|
+
'cached': False
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
now = time.time()
|
|
435
|
+
time_until_expiry = self._token_expires_at - now if self._token_expires_at else None
|
|
436
|
+
|
|
437
|
+
return {
|
|
438
|
+
'has_token': True,
|
|
439
|
+
'expires_at': self._token_expires_at,
|
|
440
|
+
'issued_at': self._token_issued_at,
|
|
441
|
+
'is_expired': self._is_token_expired(),
|
|
442
|
+
'time_until_expiry': time_until_expiry,
|
|
443
|
+
'cached': self._cache_enabled() and self._cache.contains(self._cache_key) if self._cache else False
|
|
444
|
+
}
|
|
@@ -8,7 +8,6 @@ logger = logging.getLogger(__name__)
|
|
|
8
8
|
class ZscalerAPIResponse:
|
|
9
9
|
"""
|
|
10
10
|
Class for defining the wrapper of a Zscaler API response.
|
|
11
|
-
Inspired by the Okta approach, this class only returns the initial page of results.
|
|
12
11
|
The user can check if more pages exist with `has_next()` and fetch them on-demand using `next()`.
|
|
13
12
|
"""
|
|
14
13
|
|
|
@@ -118,7 +117,7 @@ class ZscalerAPIResponse:
|
|
|
118
117
|
|
|
119
118
|
def get_headers(self):
|
|
120
119
|
"""
|
|
121
|
-
Returns the response body of the
|
|
120
|
+
Returns the response body of the Zscaler API Response.
|
|
122
121
|
|
|
123
122
|
Returns:
|
|
124
123
|
CIMultiDictProxy: dict-like object
|
|
@@ -128,7 +127,7 @@ class ZscalerAPIResponse:
|
|
|
128
127
|
|
|
129
128
|
def get_body(self):
|
|
130
129
|
"""
|
|
131
|
-
Returns the response body of the
|
|
130
|
+
Returns the response body of the Zscaler API Response.
|
|
132
131
|
|
|
133
132
|
Returns:
|
|
134
133
|
dict: Dictionary format of response
|
|
@@ -85,9 +85,13 @@ class RequestExecutor:
|
|
|
85
85
|
self.microtenant_id = self._config["client"].get("microtenantId") # Optional for ZIA/ZCC
|
|
86
86
|
self.vanity_domain = self._config["client"].get("vanityDomain") # Required for zidentity service
|
|
87
87
|
|
|
88
|
-
# OAuth2 setup
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
# OAuth2 setup - only for OneAPI clients, not legacy clients
|
|
89
|
+
if not self.use_legacy_client:
|
|
90
|
+
self._oauth = OAuth(self, self._config)
|
|
91
|
+
self._access_token = None
|
|
92
|
+
else:
|
|
93
|
+
self._oauth = None
|
|
94
|
+
self._access_token = None
|
|
91
95
|
|
|
92
96
|
# Set default headers from config
|
|
93
97
|
self._default_headers = {
|
|
@@ -519,7 +523,7 @@ class RequestExecutor:
|
|
|
519
523
|
# Check for 401 -> Trigger re-auth if we still have retries left
|
|
520
524
|
if response.status_code == 401:
|
|
521
525
|
# We only want to attempt refreshing the token if we haven't hit max_retries
|
|
522
|
-
if attempts < max_retries:
|
|
526
|
+
if attempts < max_retries and self._oauth is not None:
|
|
523
527
|
logger.info("Got 401 response; clearing token and re-authenticating.")
|
|
524
528
|
self._oauth.clear_access_token()
|
|
525
529
|
|
|
@@ -535,8 +539,8 @@ class RequestExecutor:
|
|
|
535
539
|
attempts += 1
|
|
536
540
|
return self.fire_request_helper(request, attempts, request_start_time)
|
|
537
541
|
else:
|
|
538
|
-
logger.error("401 Unauthorized - token refresh attempts exhausted.")
|
|
539
|
-
return request, response, response.text, Exception("401 Unauthorized - token refresh attempts exhausted.")
|
|
542
|
+
logger.error("401 Unauthorized - token refresh attempts exhausted or OAuth not available.")
|
|
543
|
+
return request, response, response.text, Exception("401 Unauthorized - token refresh attempts exhausted or OAuth not available.")
|
|
540
544
|
|
|
541
545
|
# Handle “retryable” statuses such as 429, 503, etc.
|
|
542
546
|
if attempts < max_retries and self.is_retryable_status(response.status_code):
|
|
@@ -18,7 +18,6 @@ from zscaler.request_executor import RequestExecutor
|
|
|
18
18
|
from zscaler.api_client import APIClient
|
|
19
19
|
from zscaler.zia.models.cloud_firewall_rules import FirewallRule
|
|
20
20
|
from zscaler.utils import format_url, transform_common_id_fields, reformat_params
|
|
21
|
-
import json
|
|
22
21
|
|
|
23
22
|
|
|
24
23
|
class FirewallPolicyAPI(APIClient):
|
|
@@ -39,7 +38,27 @@ class FirewallPolicyAPI(APIClient):
|
|
|
39
38
|
|
|
40
39
|
Args:
|
|
41
40
|
query_params {dict}: Map of query parameters for the request.
|
|
42
|
-
``[query_params.
|
|
41
|
+
``[query_params.rule_name]`` {str}: Filters rules based on rule names using the specified keywords
|
|
42
|
+
``[query_params.rule_label]`` {str}: Filters rules based on rule labels using the specified keywords
|
|
43
|
+
``[query_params.rule_order]`` {str}: Filters rules based on rule order using the specified keywords
|
|
44
|
+
``[query_params.rule_description]`` {str}: Filters rules based on rule descriptions using the specified keywords
|
|
45
|
+
``[query_params.rule_action]`` {str}: Filters rules based on rule actions using the specified keywords
|
|
46
|
+
``[query_params.location]`` {str}: Filters rules based on locations using the specified keywords
|
|
47
|
+
``[query_params.department]`` {str}: Filters rules based on user departments using the specified keywords
|
|
48
|
+
``[query_params.group]`` {str}: Filters rules based on user groups using the specified keywords
|
|
49
|
+
``[query_params.user]`` {str}: Filters rules based on users using the specified keywords
|
|
50
|
+
``[query_params.device]`` {str}: Filters rules based on devices using the specified keywords
|
|
51
|
+
``[query_params.device_group]`` {str}: Filters rules based on device groups using the specified keywords
|
|
52
|
+
``[query_params.device_trust_level]`` {str}: Filters rules based on device trust levels using the specified keywords
|
|
53
|
+
``[query_params.src_ips]`` {str}: Filters rules based on source IP addresses using the specified keywords
|
|
54
|
+
``[query_params.dest_addresses]`` {str}: Filters rules based on destination IP addresses using the specified keywords
|
|
55
|
+
``[query_params.src_ip_groups]`` {str}: Filters rules based on source IP groups using the specified keywords
|
|
56
|
+
``[query_params.dest_ip_groups]`` {str}: Filters rules based on destination IP groups using the specified keywords
|
|
57
|
+
``[query_params.nw_application]`` {str}: Filters rules based on network applications using the specified keywords
|
|
58
|
+
``[query_params.nw_services]`` {str}: Filters rules based on network services using the specified keywords
|
|
59
|
+
``[query_params.dest_ip_categories]`` {str}: Filters rules based on destination URL categories using the specified keywords
|
|
60
|
+
``[query_params.page]`` {str}: Specifies the page offset
|
|
61
|
+
``[query_params.page_size]`` {str}: Specifies the page size. The default size is set to 5,000, if not specified.
|
|
43
62
|
|
|
44
63
|
Returns:
|
|
45
64
|
tuple: A tuple containing (list of firewall rules instances, Response, error)
|
|
@@ -209,7 +228,6 @@ class FirewallPolicyAPI(APIClient):
|
|
|
209
228
|
|
|
210
229
|
body = kwargs
|
|
211
230
|
|
|
212
|
-
# Convert 'enabled' to 'state' (ENABLED/DISABLED) if it's present in the payload
|
|
213
231
|
if "enabled" in body:
|
|
214
232
|
body["state"] = "ENABLED" if body.pop("enabled") else "DISABLED"
|
|
215
233
|
|
|
@@ -79,7 +79,7 @@ class DLPWebRules(ZscalerObject):
|
|
|
79
79
|
config["dlpContentLocationsScopes"] if "dlpContentLocationsScopes" in config else [], str
|
|
80
80
|
)
|
|
81
81
|
self.url_categories = ZscalerCollection.form_list(
|
|
82
|
-
config["urlCategories"] if "urlCategories" in config else [],
|
|
82
|
+
config["urlCategories"] if "urlCategories" in config else [], urlcategory.URLCategory
|
|
83
83
|
)
|
|
84
84
|
|
|
85
85
|
self.locations = ZscalerCollection.form_list(
|
|
@@ -181,6 +181,7 @@ class DLPWebRules(ZscalerObject):
|
|
|
181
181
|
self.icap_server = None
|
|
182
182
|
self.external_auditor_email = None
|
|
183
183
|
self.dlp_content_locations_scopes = []
|
|
184
|
+
self.dlp_engines = []
|
|
184
185
|
|
|
185
186
|
def request_format(self):
|
|
186
187
|
"""
|
|
@@ -235,6 +236,7 @@ class DLPWebRules(ZscalerObject):
|
|
|
235
236
|
"icapServer": self.icap_server.request_format() if self.icap_server else None,
|
|
236
237
|
"externalAuditorEmail": self.external_auditor_email,
|
|
237
238
|
"dlpContentLocationsScopes": self.dlp_content_locations_scopes,
|
|
239
|
+
"dlpEngines": [engine.request_format() for engine in (self.dlp_engines or [])],
|
|
238
240
|
}
|
|
239
241
|
parent_req_format.update(current_obj_format)
|
|
240
242
|
return parent_req_format
|
{zscaler_sdk_python-1.7.5 → zscaler_sdk_python-1.7.7}/zscaler/zia/models/location_management.py
RENAMED
|
@@ -66,12 +66,19 @@ class LocationManagement(ZscalerObject):
|
|
|
66
66
|
or False # ← fallback
|
|
67
67
|
)
|
|
68
68
|
|
|
69
|
+
self.surrogate_ip_enforced_for_known_browsers = (
|
|
70
|
+
config.get("surrogate_ip_enforced_for_known_browsers") # ← used by the converted keys
|
|
71
|
+
or config.get("surrogateIpEnforcedForKnownBrowsers") # ← if not snake_cased
|
|
72
|
+
or config.get("surrogateIPEnforcedForKnownBrowsers") # ← raw from the API
|
|
73
|
+
or False # ← fallback
|
|
74
|
+
)
|
|
75
|
+
|
|
69
76
|
self.cookies_and_proxy = config["cookiesAndProxy"] if "cookiesAndProxy" in config else None
|
|
70
77
|
self.idle_time_in_minutes = config["idleTimeInMinutes"] if "idleTimeInMinutes" in config else None
|
|
71
78
|
self.display_time_unit = config["displayTimeUnit"] if "displayTimeUnit" in config else None
|
|
72
|
-
self.surrogate_ip_enforced_for_known_browsers = (
|
|
73
|
-
|
|
74
|
-
)
|
|
79
|
+
# self.surrogate_ip_enforced_for_known_browsers = (
|
|
80
|
+
# config["surrogateIPEnforcedForKnownBrowsers"] if "surrogateIPEnforcedForKnownBrowsers" in config else False
|
|
81
|
+
# )
|
|
75
82
|
self.surrogate_refresh_time_in_minutes = (
|
|
76
83
|
config["surrogateRefreshTimeInMinutes"] if "surrogateRefreshTimeInMinutes" in config else None
|
|
77
84
|
)
|
|
@@ -106,7 +113,8 @@ class LocationManagement(ZscalerObject):
|
|
|
106
113
|
self.basic_auth_enabled = config["basicAuthEnabled"] if "basicAuthEnabled" in config else False
|
|
107
114
|
|
|
108
115
|
self.digest_auth_enabled = config["digestAuthEnabled"] if "digestAuthEnabled" in config else False
|
|
109
|
-
|
|
116
|
+
self.ports = config["ports"] if "ports" in config else None
|
|
117
|
+
|
|
110
118
|
# Handling nested lists and collections
|
|
111
119
|
self.static_location_groups = ZscalerCollection.form_list(
|
|
112
120
|
config["staticLocationGroups"] if "staticLocationGroups" in config else [], common.CommonIDName
|
|
@@ -199,6 +207,7 @@ class LocationManagement(ZscalerObject):
|
|
|
199
207
|
self.extranet = None
|
|
200
208
|
self.extranet_ip_pool = None
|
|
201
209
|
self.extranet_dns = None
|
|
210
|
+
self.ports = None
|
|
202
211
|
self.static_location_groups = []
|
|
203
212
|
self.dynamic_location_groups = []
|
|
204
213
|
self.vpn_credentials = []
|
|
@@ -255,6 +264,7 @@ class LocationManagement(ZscalerObject):
|
|
|
255
264
|
"ipAddresses": self.ip_addresses,
|
|
256
265
|
"ipv6Enabled": self.ipv6_enabled,
|
|
257
266
|
"extranet": self.extranet,
|
|
267
|
+
"ports": self.ports,
|
|
258
268
|
"extranetIpPool": self.extranet_ip_pool,
|
|
259
269
|
"extranetDns": self.extranet_dns,
|
|
260
270
|
"defaultExtranetTsPool": self.default_extranet_ts_pool,
|
|
@@ -31,7 +31,7 @@ class ActivationAPI(APIClient):
|
|
|
31
31
|
super().__init__()
|
|
32
32
|
self._request_executor: RequestExecutor = request_executor
|
|
33
33
|
|
|
34
|
-
def activate(self, force: bool = False) -> tuple:
|
|
34
|
+
def activate(self, force: bool = False, **kwargs) -> tuple:
|
|
35
35
|
"""
|
|
36
36
|
Activate the configuration.
|
|
37
37
|
|
|
@@ -60,8 +60,10 @@ class ActivationAPI(APIClient):
|
|
|
60
60
|
|
|
61
61
|
api_url = format_url(f"{self._ztw_base_endpoint}{endpoint_path}")
|
|
62
62
|
|
|
63
|
+
body = kwargs
|
|
64
|
+
|
|
63
65
|
# Create the request
|
|
64
|
-
request, error = self._request_executor.create_request(http_method, api_url, body=
|
|
66
|
+
request, error = self._request_executor.create_request(http_method, api_url, body=body, headers={}, params={})
|
|
65
67
|
if error:
|
|
66
68
|
return (None, None, error)
|
|
67
69
|
|