def set_param(self, name, value): param_spec = self.get_param_spec(name) if param_spec: value_spec = param_spec.value_spec if value_spec == "<password>": passwords_realm = conf_name + "_" + self._stanza.name storage_password_name = UrlEncoded( passwords_realm, encode_slash=True) + ":" + UrlEncoded( name, encode_slash=True) if storage_password_name in self.splunk.storage_passwords: storage_password = self.splunk.storage_passwords[ storage_password_name] else: storage_password = None if value: if storage_password: if storage_password.clear_password != value: self.splunk.storage_passwords.delete( name, passwords_realm) storage_password = self.splunk.storage_passwords.create( value, name, passwords_realm) else: storage_password = self.splunk.storage_passwords.create( value, name, passwords_realm) else: if storage_password: self.splunk.storage_passwords.delete( name, passwords_realm) value = " " # TODO fix value = something so that key exists! self._stanza.submit({name: value}) self._stanza.refresh()
def get_param(self, name, inherit=True): if name in self._stanza.content: v = self._stanza[name] if v is None: v = "" param_spec = self.get_param_spec(name) if param_spec: value_spec = param_spec.value_spec if value_spec == "<password>": passwords_realm = conf_name + "_" + self._stanza.name storage_password_name = UrlEncoded( passwords_realm, encode_slash=True) + ":" + UrlEncoded( name, encode_slash=True) if storage_password_name in self.splunk.storage_passwords: storage_password = self.splunk.storage_passwords[ storage_password_name] v = storage_password.clear_password return v if inherit: return self.connector.get_param(name) return None
def mask_secret(self, field): inputs_kind_path = self._service.inputs.kindpath(self._input_type) inputs_path_for_kind = "{0}/{1}".format("data/inputs", inputs_kind_path) input_path = "{0}/{1}".format( inputs_path_for_kind, UrlEncoded(self._input_name, encode_slash=True)) input = self._service.input(input_path) # the change we are explicitly making input_changes = { field: self._masked_secret, } # add fields that are required on edit for field_name in self._required_on_edit_fields: if not field_name in input_changes: input_changes[field_name] = input.content[field_name] # this causes the input config to refresh, resulting in this input instance ending and being started again input.update(**input_changes)
def test_context_with_owner_as_email(self): context = binding.connect(owner="*****@*****.**", **self.kwargs) path = context._abspath("foo") self.assertTrue(isinstance(path, UrlEncoded)) self.assertEqual(path, "/servicesNS/me%40me.com/system/foo") self.assertEqual(path, UrlEncoded("/servicesNS/[email protected]/system/foo"))
def test_repr(self): self.assertEqual(repr(UrlEncoded('% %')), "UrlEncoded('% %')")
def test_chars(self): for char, code in [(' ', '%20'), ('"', '%22'), ('%', '%25')]: self.assertEqual(UrlEncoded(char), UrlEncoded(code, skip_encode=True))
def test_interpolation_fails(self): self.assertRaises(TypeError, lambda: UrlEncoded('%s') % 'boris')
def test_append_to_string(self): self.assertEqual('%' + UrlEncoded('a'), UrlEncoded('%a'))
def test_append_string(self): self.assertEqual(UrlEncoded('a') + '%', UrlEncoded('a%'))
def test_append(self): self.assertEqual(UrlEncoded('a') + UrlEncoded('b'), UrlEncoded('ab'))
def test_idempotent(self): a = UrlEncoded('abc') self.assertEqual(a, UrlEncoded(a))
def _get_entity(self, service): return Entity(service, UrlEncoded(self._entity_path, skip_encode=True))