@@ -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