diff --git a/octoprint_polarcloud/__init__.py b/octoprint_polarcloud/__init__.py index 7b3b99e..48825f4 100755 --- a/octoprint_polarcloud/__init__.py +++ b/octoprint_polarcloud/__init__.py @@ -302,26 +302,36 @@ def _system(self, command_line): self._logger.exception("Failed to run system command: {}".format(command_line)) return (1, "") - - def _get_keys(self): - data_folder = self.get_plugin_data_folder() - key_filename = os.path.join(data_folder, 'p3d_key') - self._logger.debug('key_filename: {}'.format(key_filename)) - if not os.path.isfile(key_filename): - self._logger.debug('Generating key pair') + def _generate_key(self, key_filename): + try: + self._logger.info('Generating key pair') key = crypto.PKey() key.generate_key(crypto.TYPE_RSA, 2048) - with open(key_filename, 'w') as f: + with open(key_filename, 'wb') as f: f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key)) if sys.platform != 'win32': os.chmod(key_filename, stat.S_IRUSR | stat.S_IWUSR) + except: + self._logger.exception("Unable to generate and save new private key") + + def _get_keys(self, force_regen = False): + data_folder = self.get_plugin_data_folder() + key_filename = os.path.join(data_folder, 'p3d_key') + self._logger.debug('key_filename: {}'.format(key_filename)) + if force_regen or not os.path.isfile(key_filename): + self._generate_key(key_filename) try: with open(key_filename) as f: key = f.read() + if force_regen and len(key) <= 0: + self._logger.warn("Found zero length key, generating a new key") + self._generate_key(key_filename) + with open(key_filename) as f: + key = f.read() self._key = crypto.load_privatekey(crypto.FILETYPE_PEM, key) except: self._key = None - self._logger.error("Unable to generate or access key.") + self._logger.exception("Unable to generate or access key.") return if hasattr(self._key, 'dump_publickey'): @@ -795,6 +805,8 @@ def _on_register_response(self, response, *args, **kwargs): def _register(self, email, pin): self._get_keys() + if not self._key: + self._get_keys(True) if not self._key: self._logger.info("Can't register because unable to generate signing key") self._plugin_manager.send_plugin_message(self._identifier, { diff --git a/setup.py b/setup.py index 36fd946..4a5705b 100755 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ plugin_identifier = "polarcloud" plugin_package = "octoprint_polarcloud" plugin_name = "OctoPrint-PolarCloud" -plugin_version = "1.12" +plugin_version = "1.13" plugin_description = """Connects OctoPrint to the PolarCloud so you can easily monitor and control outside of your local network""" plugin_author = "Mark Walker" plugin_author_email = "markwal@hotmail.com" @@ -61,15 +61,6 @@ if int(setuptools.__version__.split('.')[0]) < 40: print("May not be able to successfully install with setuptools earlier than 40.0.0. If this fails, upgrade setup tools with 'pip install --upgrade setuptools'.") - else: - plat = distutils.util.get_platform().replace('.', '_').replace('-', '_') - if sys.version_info[0:2] == (2, 7) and plat in ['linux_armv7l', 'linux_armv6l'] and not hasattr(sys, 'pypy_version_info'): - plugin_requires = [ - "cryptography @ https://markwal.github.io/wheelhouse/cryptography-3.0-cp27-none-" + plat + ".whl", - "cffi @ https://markwal.github.io/wheelhouse/cffi-1.12.1-cp27-none-" + plat + ".whl", - "Pillow @ https://markwal.github.io/wheelhouse/Pillow-5.4.1-cp27-none-" + plat + ".whl", - ] + plugin_requires - add_pillow = False except: import traceback traceback.print_exc()