def make_function_value_private(self, value, value_type, function): """ Wraps converted value so that it is hidden in logs etc. Note this is not secure just reduces leaking info Allows base 64 encode stuff using base64() or plain hide() in the config """ # remove quotes value = self.remove_quotes(value) if function == "base64": try: import base64 value = base64.b64decode(value).decode("utf-8") except TypeError as e: self.notify_user("base64(..) error %s" % str(e)) # check we are in a module definition etc if not self.current_module: self.notify_user("%s(..) used outside of module or section" % function) return None module = self.current_module[-1].split()[0] if module in CONFIG_FILE_SPECIAL_SECTIONS + I3S_MODULE_NAMES: self.notify_user( "%s(..) cannot be used outside of py3status module " "configuration" % function) return None value = self.value_convert(value, value_type) module_name = self.current_module[-1] return PrivateHide(value, module_name)
def process_value(self, name, value, module_name): """ This method allow any encodings to be dealt with. Currently only base64 is supported. Note: If other encodings are added then this should be split so that there is a method for each encoding. """ # if we have a colon in the name of a setting then it # indicates that it has been encoded. if ":" in name: if module_name.split(" ")[0] in I3S_MODULE_NAMES + ["general"]: self.error("Only py3status modules can use obfuscated") if type(value).__name__ not in ["str", "unicode"]: self.error("Only strings can be obfuscated") (name, scheme) = name.split(":") if scheme == "base64": value = PrivateBase64(value, module_name) elif scheme == "hide": value = PrivateHide(value, module_name) else: self.error("Unknown scheme {} for data".format(scheme)) return name, value
def process_value(self, name, value, module_name): ''' This method allow any encodings to be dealt with. Currently only base64 is supported. Note: If other encodings are added then this should be split so that there is a method for each encoding. ''' # if we have a colon in the name of a setting then it # indicates that it has been encoded. if ':' in name: if module_name.split(' ')[0] in I3S_MODULE_NAMES + ['general']: self.error('Only py3status modules can use obfuscated') if type(value).__name__ not in ['str', 'unicode']: self.error('Only strings can be obfuscated') (name, scheme) = name.split(':') if scheme == 'base64': value = PrivateBase64(value, module_name) elif scheme == 'hide': value = PrivateHide(value, module_name) else: self.error('Unknown scheme {} for data'.format(scheme)) return name, value