From adab4a1110a4312f2338e40fd2ed2d5ee84dea0a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 24 Mar 2017 11:04:08 +0100 Subject: [PATCH] Added "blurred" auth key logging. The getSafeaAuthKey prints a key of the same length, but only the last 5 chars are real. The rest is blurred out with * THis is a bit like how most payment services hide your credit card number. --- .../NetworkPrinterOutputDevice.py | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 25170d874d..286fa6830d 100644 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -200,11 +200,11 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): def _onAuthenticationRequired(self, reply, authenticator): if self._authentication_id is not None and self._authentication_key is not None: - Logger.log("d", "Authentication was required. Setting up authenticator with ID %s",self._authentication_id ) + Logger.log("d", "Authentication was required. Setting up authenticator with ID %s and key", self._authentication_id, self._getSafeAuthKey()) authenticator.setUser(self._authentication_id) authenticator.setPassword(self._authentication_key) else: - Logger.log("d", "No authentication was required. The ID is: %s", self._authentication_id) + Logger.log("d", "No authentication is available to use, but we did got a request for it.") def getProperties(self): return self._properties @@ -730,7 +730,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): if self._authentication_id is None and self._authentication_key is None: Logger.log("d", "No authentication found in metadata.") else: - Logger.log("d", "Loaded authentication id %s from the metadata entry", self._authentication_id) + Logger.log("d", "Loaded authentication id %s and key %s from the metadata entry", self._authentication_id, self._getSafeAuthKey()) self._update_timer.start() @@ -847,7 +847,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): ## Check if the authentication request was allowed by the printer. def _checkAuthentication(self): - Logger.log("d", "Checking if authentication is correct for id %s", self._authentication_id) + Logger.log("d", "Checking if authentication is correct for id %s and key %s", self._authentication_id, self._getSafeAuthKey()) self._manager.get(QNetworkRequest(QUrl("http://" + self._address + self._api_prefix + "auth/check/" + str(self._authentication_id)))) ## Request a authentication key from the printer so we can be authenticated @@ -1016,7 +1016,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): else: global_container_stack.addMetaDataEntry("network_authentication_id", self._authentication_id) Application.getInstance().saveStack(global_container_stack) # Force save so we are sure the data is not lost. - Logger.log("i", "Authentication succeeded for id %s", self._authentication_id) + Logger.log("i", "Authentication succeeded for id %s and key %s", self._authentication_id, self._getSafeAuthKey()) else: # Got a response that we didn't expect, so something went wrong. Logger.log("e", "While trying to authenticate, we got an unexpected response: %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)) self.setAuthenticationState(AuthState.NotAuthenticated) @@ -1046,7 +1046,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._authentication_key = data["key"] self._authentication_id = data["id"] - Logger.log("i", "Got a new authentication ID. Waiting for authorization: %s", self._authentication_id ) + Logger.log("i", "Got a new authentication ID (%s) and KEY (%S). Waiting for authorization.", self._authentication_id, self._getSafeAuthKey()) # Check if the authentication is accepted. self._checkAuthentication() @@ -1116,3 +1116,12 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): icon=QMessageBox.Question, callback=callback ) + + ## Convenience function to "blur" out all but the last 5 characters of the auth key. + # This can be used to debug print the key, without it compromising the security. + def _getSafeAuthKey(self): + if self._authentication_key is not None: + result = self._authentication_key[-5:] + result = result.rjust(len(self._authentication_key), "*") + return result + return self._authentication_key \ No newline at end of file