13
0
geforkt von Mirrors/Velocity

Merge pull request #128 from mikroskeem/fix-configuration-saving

Fix configuration saving
Dieser Commit ist enthalten in:
Andrew Steinborn 2018-10-28 12:53:53 -04:00 committet von GitHub
Commit 940717412d
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
3 geänderte Dateien mit 16 neuen und 17 gelöschten Zeilen

Datei anzeigen

@ -147,16 +147,15 @@ public class VelocityServer implements ProxyServer {
Path configPath = Paths.get("velocity.toml"); Path configPath = Paths.get("velocity.toml");
configuration = VelocityConfiguration.read(configPath); configuration = VelocityConfiguration.read(configPath);
AnnotatedConfig
.saveConfig(configuration.dumpConfig(), configPath); // Resave config to add new values
if (!configuration.validate()) { if (!configuration.validate()) {
logger.error( logger.error(
"Your configuration is invalid. Velocity will refuse to start up until the errors are resolved."); "Your configuration is invalid. Velocity will refuse to start up until the errors are resolved.");
LogManager.shutdown(); LogManager.shutdown();
System.exit(1); System.exit(1);
} }
AnnotatedConfig
.saveConfig(configuration.dumpConfig(), configPath); //Resave config to add new values
} catch (Exception e) { } catch (Exception e) {
logger.error("Unable to read/load/save your velocity.toml. The server will shut down.", e); logger.error("Unable to read/load/save your velocity.toml. The server will shut down.", e);
LogManager.shutdown(); LogManager.shutdown();

Datei anzeigen

@ -125,7 +125,7 @@ public abstract class AnnotatedConfig {
// Get a key name for config. Use field name if @ConfigKey annotation is not present. // Get a key name for config. Use field name if @ConfigKey annotation is not present.
ConfigKey key = field.getAnnotation(ConfigKey.class); ConfigKey key = field.getAnnotation(ConfigKey.class);
final String name = safeKey(key == null ? field.getName() : key.value()); final String name = escapeKeyIfNeeded(key == null ? field.getName() : key.value());
Object value = field.get(dumpable); Object value = field.get(dumpable);
@ -142,7 +142,7 @@ public abstract class AnnotatedConfig {
Map<String, ?> map = (Map<String, ?>) value; Map<String, ?> map = (Map<String, ?>) value;
for (Entry<String, ?> entry : map.entrySet()) { for (Entry<String, ?> entry : map.entrySet()) {
lines.add( lines.add(
safeKey(entry.getKey()) + " = " + serialize(entry.getValue())); // Save map data escapeKeyIfNeeded(entry.getKey()) + " = " + serialize(entry.getValue())); // Save map data
} }
lines.add(""); // Add empty line lines.add(""); // Add empty line
continue; continue;
@ -203,7 +203,7 @@ public abstract class AnnotatedConfig {
return value != null ? value.toString() : "null"; return value != null ? value.toString() : "null";
} }
private static String safeKey(String key) { protected static String escapeKeyIfNeeded(String key) {
if (key.contains(".") && !(key.indexOf('"') == 0 && key.lastIndexOf('"') == (key.length() if (key.contains(".") && !(key.indexOf('"') == 0 && key.lastIndexOf('"') == (key.length()
- 1))) { - 1))) {
return '"' + key + '"'; return '"' + key + '"';
@ -211,6 +211,14 @@ public abstract class AnnotatedConfig {
return key; return key;
} }
protected static String unesacpeKeyIfNeeded(String key) {
int lastIndex;
if (key.indexOf('"') == 0 && (lastIndex = key.lastIndexOf('"')) == (key.length() - 1)) {
return key.substring(1, lastIndex);
}
return key;
}
/** /**
* Writes list of strings to file. * Writes list of strings to file.
* *

Datei anzeigen

@ -487,9 +487,9 @@ public class VelocityConfiguration extends AnnotatedConfig implements ProxyConfi
for (Map.Entry<String, Object> entry : toml.entrySet()) { for (Map.Entry<String, Object> entry : toml.entrySet()) {
if (entry.getValue() instanceof String) { if (entry.getValue() instanceof String) {
forcedHosts forcedHosts
.put(stripQuotes(entry.getKey()), ImmutableList.of((String) entry.getValue())); .put(unesacpeKeyIfNeeded(entry.getKey()), ImmutableList.of((String) entry.getValue()));
} else if (entry.getValue() instanceof List) { } else if (entry.getValue() instanceof List) {
forcedHosts.put(stripQuotes(entry.getKey()), forcedHosts.put(unesacpeKeyIfNeeded(entry.getKey()),
ImmutableList.copyOf((List<String>) entry.getValue())); ImmutableList.copyOf((List<String>) entry.getValue()));
} else { } else {
throw new IllegalStateException( throw new IllegalStateException(
@ -512,14 +512,6 @@ public class VelocityConfiguration extends AnnotatedConfig implements ProxyConfi
this.forcedHosts = forcedHosts; this.forcedHosts = forcedHosts;
} }
private static String stripQuotes(String key) {
int lastIndex;
if (key.indexOf('"') == 0 && (lastIndex = key.lastIndexOf('"')) == (key.length() - 1)) {
return key.substring(1, lastIndex);
}
return key;
}
@Override @Override
public String toString() { public String toString() {
return "ForcedHosts{" return "ForcedHosts{"