mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-20 03:45:02 +00:00
[7.x] Validate monitoring password at parse time (#49083)
This commit is contained in:
parent
6c5644335f
commit
cac9fe4d86
@ -222,7 +222,45 @@ public class HttpExporter extends Exporter {
|
|||||||
*/
|
*/
|
||||||
public static final Setting.AffixSetting<String> AUTH_PASSWORD_SETTING =
|
public static final Setting.AffixSetting<String> AUTH_PASSWORD_SETTING =
|
||||||
Setting.affixKeySetting("xpack.monitoring.exporters.","auth.password",
|
Setting.affixKeySetting("xpack.monitoring.exporters.","auth.password",
|
||||||
(key) -> Setting.simpleString(key, Property.Dynamic, Property.NodeScope, Property.Filtered));
|
(key) -> Setting.simpleString(key,
|
||||||
|
new Setting.Validator<String>() {
|
||||||
|
@Override
|
||||||
|
public void validate(String password) {
|
||||||
|
// no password validation that is independent of other settings
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validate(String password, Map<Setting<?>, Object> settings) {
|
||||||
|
final String namespace =
|
||||||
|
HttpExporter.AUTH_PASSWORD_SETTING.getNamespace(
|
||||||
|
HttpExporter.AUTH_PASSWORD_SETTING.getConcreteSetting(key));
|
||||||
|
final String username =
|
||||||
|
(String) settings.get(AUTH_USERNAME_SETTING.getConcreteSettingForNamespace(namespace));
|
||||||
|
|
||||||
|
// username is required for any auth
|
||||||
|
if (Strings.isNullOrEmpty(username)) {
|
||||||
|
if (Strings.isNullOrEmpty(password) == false) {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"[" + AUTH_PASSWORD_SETTING.getConcreteSettingForNamespace(namespace).getKey() + "] without [" +
|
||||||
|
AUTH_USERNAME_SETTING.getConcreteSettingForNamespace(namespace).getKey() + "]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<Setting<?>> settings() {
|
||||||
|
final String namespace =
|
||||||
|
HttpExporter.AUTH_PASSWORD_SETTING.getNamespace(
|
||||||
|
HttpExporter.AUTH_PASSWORD_SETTING.getConcreteSetting(key));
|
||||||
|
final List<Setting<?>> settings = Collections.singletonList(
|
||||||
|
HttpExporter.AUTH_USERNAME_SETTING.getConcreteSettingForNamespace(namespace));
|
||||||
|
return settings.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
Property.Dynamic,
|
||||||
|
Property.NodeScope,
|
||||||
|
Property.Filtered));
|
||||||
/**
|
/**
|
||||||
* The SSL settings.
|
* The SSL settings.
|
||||||
*
|
*
|
||||||
@ -626,17 +664,6 @@ public class HttpExporter extends Exporter {
|
|||||||
final String username = AUTH_USERNAME_SETTING.getConcreteSettingForNamespace(config.name()).get(config.settings());
|
final String username = AUTH_USERNAME_SETTING.getConcreteSettingForNamespace(config.name()).get(config.settings());
|
||||||
final String password = AUTH_PASSWORD_SETTING.getConcreteSettingForNamespace(config.name()).get(config.settings());
|
final String password = AUTH_PASSWORD_SETTING.getConcreteSettingForNamespace(config.name()).get(config.settings());
|
||||||
|
|
||||||
// username is required for any auth
|
|
||||||
if (Strings.isNullOrEmpty(username)) {
|
|
||||||
if (Strings.isNullOrEmpty(password) == false) {
|
|
||||||
throw new SettingsException(
|
|
||||||
"[" + AUTH_PASSWORD_SETTING.getConcreteSettingForNamespace(config.name()).getKey() + "] without [" +
|
|
||||||
AUTH_USERNAME_SETTING.getConcreteSettingForNamespace(config.name()).getKey() + "]");
|
|
||||||
}
|
|
||||||
// nothing to configure; default situation for most users
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
|
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
|
||||||
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
|
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
|
||||||
|
|
||||||
|
@ -226,17 +226,17 @@ public class HttpExporterTests extends ESTestCase {
|
|||||||
public void testExporterWithPasswordButNoUsername() {
|
public void testExporterWithPasswordButNoUsername() {
|
||||||
final String expected =
|
final String expected =
|
||||||
"[xpack.monitoring.exporters._http.auth.password] without [xpack.monitoring.exporters._http.auth.username]";
|
"[xpack.monitoring.exporters._http.auth.password] without [xpack.monitoring.exporters._http.auth.username]";
|
||||||
final Settings.Builder builder = Settings.builder()
|
final String prefix = "xpack.monitoring.exporters._http";
|
||||||
.put("xpack.monitoring.exporters._http.type", HttpExporter.TYPE)
|
final Settings settings = Settings.builder()
|
||||||
.put("xpack.monitoring.exporters._http.host", "localhost:9200")
|
.put(prefix + ".type", HttpExporter.TYPE)
|
||||||
.put("xpack.monitoring.exporters._http.auth.password", "_pass");
|
.put(prefix + ".host", "localhost:9200")
|
||||||
|
.put(prefix + ".auth.password", "_pass")
|
||||||
|
.build();
|
||||||
|
|
||||||
final Config config = createConfig(builder.build());
|
final IllegalArgumentException e = expectThrows(
|
||||||
|
IllegalArgumentException.class,
|
||||||
final SettingsException exception = expectThrows(SettingsException.class,
|
() -> HttpExporter.AUTH_PASSWORD_SETTING.getConcreteSetting(prefix + ".auth.password").get(settings));
|
||||||
() -> new HttpExporter(config, sslService, threadContext));
|
assertThat(e, hasToString(containsString(expected)));
|
||||||
|
|
||||||
assertThat(exception.getMessage(), equalTo(expected));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testExporterWithUsernameButNoPassword() {
|
public void testExporterWithUsernameButNoPassword() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user