diff --git a/rapidoid-commons/src/main/java/org/rapidoid/config/Conf.java b/rapidoid-commons/src/main/java/org/rapidoid/config/Conf.java index 09ec4d67c0..7618a65897 100644 --- a/rapidoid-commons/src/main/java/org/rapidoid/config/Conf.java +++ b/rapidoid-commons/src/main/java/org/rapidoid/config/Conf.java @@ -130,6 +130,7 @@ public static synchronized boolean micro() { public static synchronized void reset() { ROOT.clear(); + ROOT.filenameBase("config"); args = new String[0]; } @@ -138,9 +139,7 @@ public static synchronized Config section(String name) { } private static Config createSection(String name) { - Config config = ROOT.sub(name); - ConfigUtil.load(filename(config.keys()), config, false); - return config; + return ROOT.sub(name); } public static synchronized Config section(Class clazz) { @@ -161,22 +160,20 @@ public static synchronized void reload() { ROOT.clear(); - ConfigUtil.load(Msc.path("default", "config.y?ml"), ROOT, true); + String filenameBase = U.or(ROOT.filenameBase(), "config"); + String configFilenamePattern = filenameBase + ".y?ml"; + String configProfilePattern = filenameBase + "-%s.y?ml"; + + ConfigUtil.load(Msc.path("default", configFilenamePattern), ROOT, true); for (String profile : Env.profiles()) { - ConfigUtil.load(Msc.path("default", U.frmt("profile-%s.y?ml", profile)), ROOT, true); + ConfigUtil.load(Msc.path("default", U.frmt(configProfilePattern, profile)), ROOT, true); } - ConfigUtil.load(Msc.path(path, "application.y?ml"), ROOT, false); - ConfigUtil.load(Msc.path(path, "config.y?ml"), ROOT, false); + ConfigUtil.load(Msc.path(path, configFilenamePattern), ROOT, false); for (String profile : Env.profiles()) { - ConfigUtil.load(Msc.path(path, U.frmt("application-%s.y?ml", profile)), ROOT, false); - ConfigUtil.load(Msc.path(path, U.frmt("profile-%s.y?ml", profile)), ROOT, false); - } - - for (Config sub : SECTIONS.values()) { - ConfigUtil.load(filename(sub.keys()), sub, false); + ConfigUtil.load(Msc.path(path, U.frmt(configProfilePattern, profile)), ROOT, false); } for (List keys : detached) { diff --git a/rapidoid-commons/src/main/java/org/rapidoid/config/Config.java b/rapidoid-commons/src/main/java/org/rapidoid/config/Config.java index e8ba2edb7c..e1f3fda34e 100644 --- a/rapidoid-commons/src/main/java/org/rapidoid/config/Config.java +++ b/rapidoid-commons/src/main/java/org/rapidoid/config/Config.java @@ -7,6 +7,7 @@ import org.rapidoid.commons.Arr; import org.rapidoid.commons.Coll; import org.rapidoid.lambda.ToMap; +import org.rapidoid.log.Log; import org.rapidoid.u.U; import org.rapidoid.value.Value; import org.rapidoid.value.Values; @@ -45,6 +46,8 @@ public class Config extends RapidoidThing implements ToMap { private final boolean isRoot; + private volatile String filenameBase = "config"; + private Config(Map properties, List baseKeys, Config root) { this.properties = properties; this.root = root; @@ -274,12 +277,21 @@ public String toString() { public void args(String... args) { if (U.notEmpty(args)) { for (String arg : args) { - String[] parts = arg.split("=", 2); + if (!arg.contains("->")) { + String[] parts = arg.split("=", 2); + String name = parts[0]; - if (parts.length > 1) { - setNested(parts[0], parts[1]); - } else { - setNested(parts[0], true); + if (parts.length > 1) { + String value = parts[1]; + + if (name.equals("config")) { + filenameBase(value); + } + + setNested(name, value); + } else { + setNested(name, true); + } } } } @@ -338,4 +350,17 @@ public Properties toProperties() { public ConfigAlternatives or(Config alternative) { return new ConfigAlternatives(this, alternative); } + + public String filenameBase() { + return filenameBase; + } + + public synchronized Config filenameBase(String filenameBase) { + if (U.neq(this.filenameBase, filenameBase)) { + Log.info("Changing configuration filename base", "!from", this.filenameBase, "!to", filenameBase); + } + + this.filenameBase = filenameBase; + return this; + } } diff --git a/rapidoid-commons/src/main/java/org/rapidoid/config/ConfigOptions.java b/rapidoid-commons/src/main/java/org/rapidoid/config/ConfigOptions.java index abd0fd2022..321767e670 100644 --- a/rapidoid-commons/src/main/java/org/rapidoid/config/ConfigOptions.java +++ b/rapidoid-commons/src/main/java/org/rapidoid/config/ConfigOptions.java @@ -36,6 +36,7 @@ public class ConfigOptions extends RapidoidThing { private static List configOptions() { List opts = U.list(); + opts.add(opt("config", "configuration filename prefix", "config")); opts.add(opt("dev", "configure DEV mode", "auto-detected")); opts.add(opt("production", "configure PRODUCTION mode", "auto-detected")); opts.add(opt("secret=", "configure app-specific secret for encryption", "(random)")); diff --git a/rapidoid-commons/src/main/resources/default/profile-default.yml b/rapidoid-commons/src/main/resources/default/config-default.yml similarity index 100% rename from rapidoid-commons/src/main/resources/default/profile-default.yml rename to rapidoid-commons/src/main/resources/default/config-default.yml diff --git a/rapidoid-commons/src/main/resources/default/profile-dev.yml b/rapidoid-commons/src/main/resources/default/config-dev.yml similarity index 100% rename from rapidoid-commons/src/main/resources/default/profile-dev.yml rename to rapidoid-commons/src/main/resources/default/config-dev.yml diff --git a/rapidoid-commons/src/main/resources/default/profile-mysql.yml b/rapidoid-commons/src/main/resources/default/config-mysql.yml similarity index 100% rename from rapidoid-commons/src/main/resources/default/profile-mysql.yml rename to rapidoid-commons/src/main/resources/default/config-mysql.yml diff --git a/rapidoid-commons/src/main/resources/default/profile-test.yml b/rapidoid-commons/src/main/resources/default/config-test.yml similarity index 100% rename from rapidoid-commons/src/main/resources/default/profile-test.yml rename to rapidoid-commons/src/main/resources/default/config-test.yml diff --git a/rapidoid-commons/src/test/resources/DataPermissionsTest/config.yml b/rapidoid-commons/src/test/resources/DataPermissionsTest/config.yml new file mode 100644 index 0000000000..d6b9e9bf8b --- /dev/null +++ b/rapidoid-commons/src/test/resources/DataPermissionsTest/config.yml @@ -0,0 +1,21 @@ +users: + adm1: + roles: administrator + + adm2: + roles: administrator + + mng1: + roles: manager + + mod1: + roles: moderator + + mod2: + roles: moderator + + abc: + roles: abc + + other: + roles: other_role diff --git a/rapidoid-commons/src/test/resources/DataPermissionsTest/users.yml b/rapidoid-commons/src/test/resources/DataPermissionsTest/users.yml deleted file mode 100644 index fbe81fc106..0000000000 --- a/rapidoid-commons/src/test/resources/DataPermissionsTest/users.yml +++ /dev/null @@ -1,20 +0,0 @@ -adm1: - roles: administrator - -adm2: - roles: administrator - -mng1: - roles: manager - -mod1: - roles: moderator - -mod2: - roles: moderator - -abc: - roles: abc - -other: - roles: other_role diff --git a/rapidoid-commons/src/test/resources/MethodSecurityTest/config.yaml b/rapidoid-commons/src/test/resources/MethodSecurityTest/config.yaml new file mode 100644 index 0000000000..ca942b0d92 --- /dev/null +++ b/rapidoid-commons/src/test/resources/MethodSecurityTest/config.yaml @@ -0,0 +1,24 @@ +users: + adm1: + roles: ["administrator"] + + adm2: + roles: ["administrator"] + + mng1: + roles: ["manager"] + + mod1: + roles: ["moderator"] + + mod2: + roles: ["moderator"] + + abc1: + roles: abc + + abc2: + roles: abc + + xyz1: + roles: xyz diff --git a/rapidoid-commons/src/test/resources/MethodSecurityTest/users.yaml b/rapidoid-commons/src/test/resources/MethodSecurityTest/users.yaml deleted file mode 100644 index 5ee6b7c8db..0000000000 --- a/rapidoid-commons/src/test/resources/MethodSecurityTest/users.yaml +++ /dev/null @@ -1,23 +0,0 @@ -adm1: - roles: ["administrator"] - -adm2: - roles: ["administrator"] - -mng1: - roles: ["manager"] - -mod1: - roles: ["moderator"] - -mod2: - roles: ["moderator"] - -abc1: - roles: abc - -abc2: - roles: abc - -xyz1: - roles: xyz diff --git a/rapidoid-commons/src/test/resources/RoleBasedSecurityTest/config.yaml b/rapidoid-commons/src/test/resources/RoleBasedSecurityTest/config.yaml new file mode 100644 index 0000000000..75be3fdfe3 --- /dev/null +++ b/rapidoid-commons/src/test/resources/RoleBasedSecurityTest/config.yaml @@ -0,0 +1,18 @@ +users: + adm1: + roles: ["administrator"] + + adm2: + roles: ["administrator"] + + mng1: + roles: ["manager"] + + mod1: + roles: ["moderator"] + + mod2: + roles: ["moderator"] + + abc: + roles: abc diff --git a/rapidoid-commons/src/test/resources/RoleBasedSecurityTest/users.yaml b/rapidoid-commons/src/test/resources/RoleBasedSecurityTest/users.yaml deleted file mode 100644 index 53b3ce2473..0000000000 --- a/rapidoid-commons/src/test/resources/RoleBasedSecurityTest/users.yaml +++ /dev/null @@ -1,17 +0,0 @@ -adm1: - roles: ["administrator"] - -adm2: - roles: ["administrator"] - -mng1: - roles: ["manager"] - -mod1: - roles: ["moderator"] - -mod2: - roles: ["moderator"] - -abc: - roles: abc diff --git a/rapidoid-commons/src/test/resources/RolesTest/config.yaml b/rapidoid-commons/src/test/resources/RolesTest/config.yaml new file mode 100644 index 0000000000..77e3db59ef --- /dev/null +++ b/rapidoid-commons/src/test/resources/RolesTest/config.yaml @@ -0,0 +1,16 @@ +users: + niko: + email: niko@rapidoid.org.abcde + password: easy + roles: + - owner + - administrator + - moderator + + chuck: + password: chuck + roles: ["moderator", "restarter"] + + abc: + password: abc + roles: guest , foo , bar diff --git a/rapidoid-commons/src/test/resources/RolesTest/users.yaml b/rapidoid-commons/src/test/resources/RolesTest/users.yaml deleted file mode 100644 index 97c015f83a..0000000000 --- a/rapidoid-commons/src/test/resources/RolesTest/users.yaml +++ /dev/null @@ -1,15 +0,0 @@ -niko: - email: niko@rapidoid.org.abcde - password: easy - roles: - - owner - - administrator - - moderator - -chuck: - password: chuck - roles: ["moderator", "restarter"] - -abc: - password: abc - roles: guest , foo , bar diff --git a/rapidoid-integration-tests/src/test/resources/DynamicClientTest/MyClient.yml b/rapidoid-integration-tests/src/test/resources/DynamicClientTest/MyClient.yml deleted file mode 100644 index 01e3ba5e53..0000000000 --- a/rapidoid-integration-tests/src/test/resources/DynamicClientTest/MyClient.yml +++ /dev/null @@ -1,19 +0,0 @@ -abc: - GET: http://localhost:8888/test-abc - -numbers: - GET: http://localhost:8888/nums - -sizeOf: - GET: http://localhost:8888/size?s=%s - -asyncSizeOf: - GET: http://localhost:8888/size?s=%s - -theBean: - POST: http://localhost:8888/echo?aa=%s&bb=%s&cc=%s - -asyncBean: - POST: http://localhost:8888/echo?aa=%s&bb=%s&cc=%s - data: - aa: not-implemented diff --git a/rapidoid-integration-tests/src/test/resources/DynamicClientTest/config.yml b/rapidoid-integration-tests/src/test/resources/DynamicClientTest/config.yml new file mode 100644 index 0000000000..f8dad39de2 --- /dev/null +++ b/rapidoid-integration-tests/src/test/resources/DynamicClientTest/config.yml @@ -0,0 +1,20 @@ +MyClient: + abc: + GET: http://localhost:8888/test-abc + + numbers: + GET: http://localhost:8888/nums + + sizeOf: + GET: http://localhost:8888/size?s=%s + + asyncSizeOf: + GET: http://localhost:8888/size?s=%s + + theBean: + POST: http://localhost:8888/echo?aa=%s&bb=%s&cc=%s + + asyncBean: + POST: http://localhost:8888/echo?aa=%s&bb=%s&cc=%s + data: + aa: not-implemented diff --git a/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidServerLoop.java b/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidServerLoop.java index 98d5523182..5fffb3e6a9 100644 --- a/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidServerLoop.java +++ b/rapidoid-net/src/main/java/org/rapidoid/net/impl/RapidoidServerLoop.java @@ -123,7 +123,7 @@ private void openSocket() throws IOException { ServerSocket socket = serverSocketChannel.socket(); - Log.debug("Opening port to listen", "port", port); + Log.info("!Starting server", "!address", address, "!port", port, "I/O workers", workers, "accept", blockingInfo); InetSocketAddress addr = new InetSocketAddress(address, port); @@ -138,8 +138,6 @@ private void openSocket() throws IOException { serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); } - Log.info("!Server started", "!address", address, "!port", port, "I/O workers", workers, "accept", blockingInfo); - initWorkers(); } else {