99from collections import namedtuple
1010from threading import Lock
1111
12+ try :
13+ from urllib .parse import urlparse
14+ except ImportError :
15+ from urlparse import urlparse
16+
1217from requests import Request
1318from time import time
1419from base64 import b64decode
2025# Constants
2126API_BASE_URL = "https://api.paloaltonetworks.com"
2227AUTH_BASE_URL = "https://identity.paloaltonetworks.com/as/authorization.oauth2"
23- DEVELOPER_TOKEN_URL = "https://app.apiexplorer.rocks"
28+ DEVELOPER_TOKEN_PROVIDER = "https://app.apiexplorer.rocks/request_token "
2429
2530ReadOnlyCredentials = namedtuple (
2631 "ReadOnlyCredentials" ,
@@ -39,7 +44,7 @@ def __init__(
3944 client_id = None ,
4045 client_secret = None ,
4146 developer_token = None ,
42- developer_token_url = None ,
47+ developer_token_provider = None ,
4348 instance_id = None ,
4449 profile = None ,
4550 redirect_uri = None ,
@@ -71,7 +76,7 @@ def __init__(
7176 client_id (str): OAuth2 client ID. Defaults to ``None``.
7277 client_secret (str): OAuth2 client secret. Defaults to ``None``.
7378 developer_token (str): Developer Token. Defaults to ``None``.
74- developer_token_url (str): Developer Token URL. Defaults to ``None``.
79+ developer_token_provider (str): Developer Token Provider URL. Defaults to ``None``.
7580 instance_id (str): Instance ID. Defaults to ``None``.
7681 profile (str): Credentials profile. Defaults to ``'default'``.
7782 redirect_uri (str): Redirect URI. Defaults to ``None``.
@@ -90,7 +95,7 @@ def __init__(
9095 self .client_id_ = client_id
9196 self .client_secret_ = client_secret
9297 self .developer_token_ = developer_token
93- self .developer_token_url = developer_token_url or DEVELOPER_TOKEN_URL
98+ self .developer_token_provider_ = developer_token_provider
9499 self .instance_id = instance_id
95100 self .jwt_exp_ = None
96101 self .profile = profile or "default"
@@ -178,6 +183,20 @@ def developer_token(self, developer_token):
178183 """Set developer token."""
179184 self .developer_token_ = developer_token
180185
186+ @property
187+ def developer_token_provider (self ):
188+ """Get developer token provider."""
189+ return (
190+ self .developer_token_provider_
191+ or os .getenv ("PAN_DEVELOPER_TOKEN_PROVIDER" )
192+ or DEVELOPER_TOKEN_PROVIDER
193+ )
194+
195+ @developer_token_provider .setter
196+ def developer_token_provider (self , developer_token_provider ):
197+ """Set developer token provider."""
198+ self .developer_token_provider_ = developer_token_provider
199+
181200 @property
182201 def jwt_exp (self ):
183202 """Get JWT exp."""
@@ -459,10 +478,15 @@ def refresh(self, access_token=None, **kwargs):
459478 with self .token_lock :
460479 if access_token == self .access_token or access_token is None :
461480 if self .developer_token is not None :
481+ parsed_provider = urlparse (self .developer_token_provider )
482+ url = "{}://{}" .format (
483+ parsed_provider .scheme , parsed_provider .netloc
484+ )
485+ endpoint = parsed_provider .path
462486 r = self ._httpclient .request (
463487 method = "POST" ,
464- url = self . developer_token_url ,
465- endpoint = "/request_token" ,
488+ url = url ,
489+ endpoint = endpoint ,
466490 headers = {
467491 "Authorization" : "Bearer {}" .format (
468492 self .developer_token
0 commit comments