diff --git a/python_apps/api_clients/api_clients/api_client.py b/python_apps/api_clients/api_clients/api_client.py index d983c5c6c..b2296e607 100644 --- a/python_apps/api_clients/api_clients/api_client.py +++ b/python_apps/api_clients/api_clients/api_client.py @@ -10,7 +10,7 @@ import sys import time import urllib.request, urllib.error, urllib.parse import requests -import socket +import socket import logging import json import base64 @@ -67,6 +67,16 @@ api_config['api_base'] = 'api' api_config['bin_dir'] = '/usr/lib/airtime/api_clients/' api_config['update_metadata_on_tunein'] = 'update-metadata-on-tunein/api_key/%%api_key%%' +def get_protocol(config): + port = config.get('general', 'base_port', fallback=80) + if config.getboolean('general', 'force_ssl', fallback=False): + protocol = 'https' + else: + try: + protocol = config.get(CONFIG_SECTION, 'protocol') + except NoOptionError as e: + protocol = str(("http", "https")[int(port) == 443]) + return protocol ################################################################################ @@ -169,9 +179,11 @@ class RequestProvider(object): self.requests = {} if self.config["general"]["base_dir"].startswith("/"): self.config["general"]["base_dir"] = self.config["general"]["base_dir"][1:] + protocol = get_protocol(self.config) + self.url = ApcUrl("%s://%s:%s/%s%s/%s" \ - % (str(("http", "https")[int(self.config["general"]["base_port"]) == 443]), - self.config["general"]["base_url"], str(self.config["general"]["base_port"]), + % (protocol, self.config["general"]["base_url"], + str(self.config["general"]["base_port"]), self.config["general"]["base_dir"], self.config["api_base"], '%%action%%')) # Now we must discover the possible actions @@ -208,7 +220,7 @@ class AirtimeApiClient(object): def __get_airtime_version(self): try: return self.services.version_url()['airtime_version'] except Exception: return -1 - + def __get_api_version(self): try: return self.services.version_url()['api_version'] except Exception: return -1 @@ -331,8 +343,9 @@ class AirtimeApiClient(object): # TODO : Make other methods in this class use this this method. if self.config["general"]["base_dir"].startswith("/"): self.config["general"]["base_dir"] = self.config["general"]["base_dir"][1:] + protocol = get_protocol(self.config) url = "%s://%s:%s/%s%s/%s" % \ - (str(("http", "https")[int(self.config["general"]["base_port"]) == 443]), + (protocol, self.config["general"]["base_url"], str(self.config["general"]["base_port"]), self.config["general"]["base_dir"], self.config["api_base"], self.config[config_action_key]) @@ -343,9 +356,9 @@ class AirtimeApiClient(object): """Constructs the base url for RESTful requests""" if self.config["general"]["base_dir"].startswith("/"): self.config["general"]["base_dir"] = self.config["general"]["base_dir"][1:] + protocol = get_protocol(self.config) url = "%s://%s:@%s:%s/%s/%s" % \ - (str(("http", "https")[int(self.config["general"]["base_port"]) == 443]), - self.config["general"]["api_key"], + (protocol, self.config["general"]["api_key"], self.config["general"]["base_url"], str(self.config["general"]["base_port"]), self.config["general"]["base_dir"], self.config[config_action_key]) diff --git a/python_apps/pypo/pypo/pypofile.py b/python_apps/pypo/pypo/pypofile.py index 3edf2c2d5..6b12e67bc 100644 --- a/python_apps/pypo/pypo/pypofile.py +++ b/python_apps/pypo/pypo/pypofile.py @@ -67,14 +67,14 @@ class PypoFile(Thread): CONFIG_SECTION = "general" username = self._config.get(CONFIG_SECTION, 'api_key') baseurl = self._config.get(CONFIG_SECTION, 'base_url') - try: - port = self._config.get(CONFIG_SECTION, 'base_port') - except NoOptionError as e: - port = 80 - try: - protocol = self._config.get(CONFIG_SECTION, 'protocol') - except NoOptionError as e: - protocol = str(("http", "https")[int(port) == 443]) + port = self._config.get(CONFIG_SECTION, 'base_port', 80) + if self._config.getboolean(CONFIG_SECTION, 'force_ssl', fallback=False): + protocol = 'https' + else: + try: + protocol = self._config.get(CONFIG_SECTION, 'protocol') + except NoOptionError as e: + protocol = str(("http", "https")[int(port) == 443]) try: host = [protocol, baseurl, port] @@ -84,15 +84,15 @@ class PypoFile(Thread): media_item["id"]) with open(dst, "wb") as handle: response = requests.get(url, auth=requests.auth.HTTPBasicAuth(username, ''), stream=True, verify=False) - + if not response.ok: self.logger.error(response) raise Exception("%s - Error occurred downloading file" % response.status_code) - + for chunk in response.iter_content(1024): if not chunk: break - + handle.write(chunk) #make file world readable and owner writable @@ -160,11 +160,11 @@ class PypoFile(Thread): """ Remove this media_item from the dictionary. On the next iteration - (from the main function) we won't consider it for prioritization + (from the main function) we won't consider it for prioritization anymore. If on the next iteration we have received a new schedule, - it is very possible we will have to deal with the same media_items + it is very possible we will have to deal with the same media_items again. In this situation, the worst possible case is that we try to - copy the file again and realize we already have it (thus aborting the copy). + copy the file again and realize we already have it (thus aborting the copy). """ del schedule[highest_priority] @@ -179,7 +179,7 @@ class PypoFile(Thread): logging.debug("Failed to open config file at %s: %s" % (config_path, e.strerror)) sys.exit() except Exception as e: - logging.debug(e.strerror) + logging.debug(e.strerror) sys.exit() return config