Skip to content

Commit 21f481f

Browse files
authored
Merge pull request #74 from edanalytics/feature/check_for_http
Feature/check for http
2 parents 205fb7e + df37443 commit 21f481f

1 file changed

Lines changed: 37 additions & 17 deletions

File tree

lightbeam/api.py

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ def prepare(self):
3030
# fetch/set up Ed-Fi API URLs
3131
try:
3232
self.logger.debug("fetching base_url...")
33-
api_base = requests.get(self.config["base_url"],
34-
verify=self.lightbeam.config["connection"]["verify_ssl"])
33+
api_base = self.get_with_protocol_fallback(self.config["base_url"], 'base_url')
3534
except Exception as e:
3635
self.logger.critical("could not connect to {0} ({1})".format(self.config["base_url"], str(e)))
3736

@@ -99,14 +98,28 @@ def get_retry_client(self):
9998
# Obtains an OAuth token from the API and sets the client headers accordingly
10099
def do_oauth(self):
101100
try:
102-
token_response = requests.post(
103-
self.config["oauth_url"],
104-
data={"grant_type":"client_credentials"},
105-
auth=(
106-
self.config["client_id"],
107-
self.config["client_secret"]
108-
),
109-
verify=self.lightbeam.config["connection"]["verify_ssl"])
101+
try:
102+
token_response = requests.post(
103+
self.config["oauth_url"],
104+
data={"grant_type":"client_credentials"},
105+
auth=(
106+
self.config["client_id"],
107+
self.config["client_secret"]
108+
),
109+
verify=self.lightbeam.config["connection"]["verify_ssl"])
110+
except Exception as e:
111+
try:
112+
swapped_url = self.config["oauth_url"].replace("http://", "https://") if "http://" in self.config["oauth_url"] else self.config["oauth_url"].replace("https://", "http://")
113+
token_response = requests.post(
114+
swapped_url,
115+
data={"grant_type":"client_credentials"},
116+
auth=(
117+
self.config["client_id"],
118+
self.config["client_secret"]
119+
),
120+
verify=self.lightbeam.config["connection"]["verify_ssl"])
121+
except Exception as e:
122+
self.logger.critical(f"could not reach {self.config['oauth_url']} ({str(e)})")
110123
self.token = token_response.json()["access_token"]
111124
self.headers = {
112125
"accept": "application/json",
@@ -153,8 +166,7 @@ def get_data_url(self):
153166
def get_sorted_endpoints(self):
154167
self.logger.debug("fetching resource dependencies...")
155168
try:
156-
response = requests.get(self.config["dependencies_url"],
157-
verify=self.lightbeam.config["connection"]["verify_ssl"])
169+
response = self.get_with_protocol_fallback(self.config["dependencies_url"], 'dependencies_url')
158170
if response.status_code not in [ 200, 201 ]:
159171
raise Exception("Dependencies URL returned status {0} ({1})".format(response.status_code, (response.content[:75] + "...") if len(response.content)>75 else response.content))
160172
data = response.json()
@@ -191,8 +203,7 @@ def load_swagger_docs(self):
191203
# grab Descriptors and Resources swagger URLs
192204
try:
193205
self.logger.debug("fetching swagger docs...")
194-
response = requests.get(self.config["open_api_metadata_url"],
195-
verify=self.lightbeam.config["connection"]["verify_ssl"])
206+
response = self.get_with_protocol_fallback(self.config["open_api_metadata_url"], 'open_api_metadata_url')
196207
if not response.ok:
197208
raise Exception("OpenAPI metadata URL returned status {0} ({1})".format(response.status_code, (response.content[:75] + "...") if len(response.content)>75 else response.content))
198209
openapi = response.json()
@@ -233,9 +244,7 @@ def load_swagger_docs(self):
233244
else:
234245
self.logger.debug(f"fetching {endpoint_type} swagger doc...")
235246
try:
236-
response = requests.get(swagger_url,
237-
verify=self.lightbeam.config["connection"]["verify_ssl"]
238-
)
247+
response = self.get_with_protocol_fallback(swagger_url, endpoint_type)
239248
if not response.ok:
240249
raise Exception("OpenAPI metadata URL returned status {0} ({1})".format(response.status_code, (response.content[:75] + "...") if len(response.content)>75 else response.content))
241250
swagger = response.json()
@@ -375,3 +384,14 @@ def get_identity_params_from_swagger(self, swagger, definition, prefix=""):
375384
elif "type" in schema["properties"][prop].keys() and schema["properties"][prop]["type"]!="array" and "x-Ed-Fi-isIdentity" in schema["properties"][prop].keys():
376385
params[prop] = prefix + prop
377386
return params
387+
388+
def get_with_protocol_fallback(self, url, url_type):
389+
self.logger.debug(f"fetching {url_type}...")
390+
try:
391+
return requests.get(url, verify=self.lightbeam.config["connection"]["verify_ssl"])
392+
except Exception as e:
393+
try:
394+
swapped_url = url.replace("http://", "https://") if "http://" in url else url.replace("https://", "http://")
395+
return requests.get(swapped_url, verify=self.lightbeam.config["connection"]["verify_ssl"])
396+
except Exception as e:
397+
self.logger.critical(f"could not reach {url_type} {url} ({str(e)})")

0 commit comments

Comments
 (0)