From 30fadd5e39482d9a1980a3b1d45a3c300b532441 Mon Sep 17 00:00:00 2001 From: SweetWuXiaoMei Date: Tue, 26 Nov 2024 10:20:24 +0800 Subject: [PATCH 1/3] fix: Fixed typo in SSL options - Change "Renegociate" to "Renegotiate" - Updated property names and method names in several files - Added ignores in .typos.toml files --- .typos.toml | 5 +++++ .../servicecomb/config/cc/TransportUtils.java | 8 +++---- .../config/kie/TransportUtils.java | 8 +++---- .../servicecomb/foundation/ssl/SSLOption.java | 22 +++++++++---------- .../foundation/ssl/SSLOptionTest.java | 20 ++++++++--------- .../src/test/resources/client.ssl.properties | 2 +- .../src/test/resources/microservice.yaml | 2 +- .../src/test/resources/server.ssl.properties | 2 +- .../resources/server.ssl.resource.properties | 2 +- .../dashboard/monitor/TransportUtils.java | 8 +++---- .../servicestage/RBACBootStrapService.java | 8 +++---- 11 files changed, 46 insertions(+), 41 deletions(-) diff --git a/.typos.toml b/.typos.toml index 7c77274d7ef..57968e12af0 100644 --- a/.typos.toml +++ b/.typos.toml @@ -22,3 +22,8 @@ "VERTX" = "VERTX" "Vertx" = "Vertx" "vertx" = "vertx" + +[files] +ignore = [ + "**/cobertura.ser" +] \ No newline at end of file diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/TransportUtils.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/TransportUtils.java index 6a91ea6a22c..25a4dac0543 100644 --- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/TransportUtils.java +++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/TransportUtils.java @@ -61,10 +61,10 @@ public static SSLProperties createSSLProperties(boolean sslEnabled, Environment DEFAULT_OPTION.getCiphers(), "ssl." + tag + ".checkCN.white.file", "ssl.checkCN.white.file")); - option.setAllowRenegociate(getBooleanProperty(environment, - DEFAULT_OPTION.isAllowRenegociate(), - "ssl." + tag + ".allowRenegociate", - "ssl.allowRenegociate")); + option.setAllowRenegotiate(getBooleanProperty(environment, + DEFAULT_OPTION.isAllowRenegotiate(), + "ssl." + tag + ".allowRenegotiate", + "ssl.allowRenegotiate")); option.setStorePath( getStringProperty(environment, DEFAULT_OPTION.getStorePath(), diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/TransportUtils.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/TransportUtils.java index 8cabafec633..8be7ec00c1a 100644 --- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/TransportUtils.java +++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/TransportUtils.java @@ -61,10 +61,10 @@ public static SSLProperties createSSLProperties(boolean sslEnabled, Environment DEFAULT_OPTION.getCiphers(), "ssl." + tag + ".checkCN.white.file", "ssl.checkCN.white.file")); - option.setAllowRenegociate(getBooleanProperty(environment, - DEFAULT_OPTION.isAllowRenegociate(), - "ssl." + tag + ".allowRenegociate", - "ssl.allowRenegociate")); + option.setAllowRenegotiate(getBooleanProperty(environment, + DEFAULT_OPTION.isAllowRenegotiate(), + "ssl." + tag + ".allowRenegotiate", + "ssl.allowRenegotiate")); option.setStorePath( getStringProperty(environment, DEFAULT_OPTION.getStorePath(), diff --git a/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOption.java b/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOption.java index 77c17788351..19160bb3927 100644 --- a/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOption.java +++ b/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOption.java @@ -47,7 +47,7 @@ public final class SSLOption { DEFAULT_OPTION.setCheckCNHost(false); DEFAULT_OPTION.setCheckCNWhite(false); DEFAULT_OPTION.setCheckCNWhiteFile("white.list"); - DEFAULT_OPTION.setAllowRenegociate(true); + DEFAULT_OPTION.setAllowRenegotiate(true); DEFAULT_OPTION.setStorePath("internal"); DEFAULT_OPTION.setTrustStore("trust.jks"); DEFAULT_OPTION.setTrustStoreType("JKS"); @@ -72,7 +72,7 @@ public final class SSLOption { private String checkCNWhiteFile; - private boolean allowRenegociate; + private boolean allowRenegotiate; private String clientAuth; @@ -126,8 +126,8 @@ public void setCheckCNWhiteFile(String checkCNWhiteFile) { this.checkCNWhiteFile = checkCNWhiteFile; } - public void setAllowRenegociate(boolean allowRenegociate) { - this.allowRenegociate = allowRenegociate; + public void setAllowRenegotiate(boolean allowRenegotiate) { + this.allowRenegotiate = allowRenegotiate; } public void setStorePath(String storePath) { @@ -186,8 +186,8 @@ public String getCheckCNWhiteFile() { return checkCNWhiteFile; } - public boolean isAllowRenegociate() { - return allowRenegociate; + public boolean isAllowRenegotiate() { + return allowRenegotiate; } public String getStorePath() { @@ -314,10 +314,10 @@ public static SSLOption build(String tag, Environment environment) { DEFAULT_OPTION.getCiphers(), "ssl." + tag + ".checkCN.white.file", "ssl.checkCN.white.file"); - option.allowRenegociate = getBooleanProperty(environment, - DEFAULT_OPTION.isAllowRenegociate(), - "ssl." + tag + ".allowRenegociate", - "ssl.allowRenegociate"); + option.allowRenegotiate = getBooleanProperty(environment, + DEFAULT_OPTION.isAllowRenegotiate(), + "ssl." + tag + ".allowRenegotiate", + "ssl.allowRenegotiate"); option.storePath = getStringProperty(environment, DEFAULT_OPTION.getStorePath(), @@ -365,7 +365,7 @@ private void fromProperty(Properties props) { this.checkCNHost = propBoolean(props, "ssl.checkCN.host"); this.checkCNWhite = propBoolean(props, "ssl.checkCN.white"); this.checkCNWhiteFile = propString(props, "ssl.checkCN.white.file"); - this.allowRenegociate = propBoolean(props, "ssl.allowRenegociate"); + this.allowRenegotiate = propBoolean(props, "ssl.allowRenegotiate"); this.storePath = propString(props, "ssl.storePath"); this.clientAuth = propString(props, "ssl.clientAuth", false); this.trustStore = propString(props, "ssl.trustStore"); diff --git a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLOptionTest.java b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLOptionTest.java index 558fa255cc5..9a3eb3d6d8c 100644 --- a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLOptionTest.java +++ b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLOptionTest.java @@ -47,7 +47,7 @@ public void setUp() throws Exception { Mockito.when(environment.getProperty("ssl.checkCN.host")).thenReturn("true"); Mockito.when(environment.getProperty("ssl.checkCN.white")).thenReturn("true"); Mockito.when(environment.getProperty("ssl.checkCN.white.file")).thenReturn("white.list"); - Mockito.when(environment.getProperty("ssl.allowRenegociate")).thenReturn("false"); + Mockito.when(environment.getProperty("ssl.allowRenegotiate")).thenReturn("false"); Mockito.when(environment.getProperty("ssl.storePath")).thenReturn("internal"); Mockito.when(environment.getProperty("ssl.trustStore")).thenReturn("trust.jks"); Mockito.when(environment.getProperty("ssl.trustStoreType")).thenReturn("JKS"); @@ -91,9 +91,9 @@ public void testSSLOption() { option.setCheckCNWhiteFile(checkCNWhiteFile); Assertions.assertEquals("white.list", checkCNWhiteFile); - boolean allowRenegociate = option.isAllowRenegociate(); - option.setAllowRenegociate(allowRenegociate); - Assertions.assertFalse(allowRenegociate); + boolean allowRenegotiate = option.isAllowRenegotiate(); + option.setAllowRenegotiate(allowRenegotiate); + Assertions.assertFalse(allowRenegotiate); String storePath = option.getStorePath(); option.setStorePath(storePath); @@ -158,9 +158,9 @@ public void testSSLOptionYaml() { option.setCheckCNWhiteFile(checkCNWhiteFile); Assertions.assertEquals("white.list", checkCNWhiteFile); - boolean allowRenegociate = option.isAllowRenegociate(); - option.setAllowRenegociate(allowRenegociate); - Assertions.assertFalse(allowRenegociate); + boolean allowRenegotiate = option.isAllowRenegotiate(); + option.setAllowRenegotiate(allowRenegotiate); + Assertions.assertFalse(allowRenegotiate); String storePath = option.getStorePath(); option.setStorePath(storePath); @@ -264,9 +264,9 @@ public void testSSLOptionYamlOption() throws Exception { option.setCheckCNWhiteFile(checkCNWhiteFile); Assertions.assertEquals("white.list", checkCNWhiteFile); - boolean allowRenegociate = option.isAllowRenegociate(); - option.setAllowRenegociate(allowRenegociate); - Assertions.assertFalse(allowRenegociate); + boolean allowRenegotiate = option.isAllowRenegotiate(); + option.setAllowRenegotiate(allowRenegotiate); + Assertions.assertFalse(allowRenegotiate); String storePath = option.getStorePath(); option.setStorePath(storePath); diff --git a/foundations/foundation-ssl/src/test/resources/client.ssl.properties b/foundations/foundation-ssl/src/test/resources/client.ssl.properties index 828e1de6b8a..87808468196 100644 --- a/foundations/foundation-ssl/src/test/resources/client.ssl.properties +++ b/foundations/foundation-ssl/src/test/resources/client.ssl.properties @@ -23,7 +23,7 @@ ssl.authPeer=true ssl.checkCN.host=false ssl.checkCN.white=true ssl.checkCN.white.file=white.list -ssl.allowRenegociate=false +ssl.allowRenegotiate=false #########certificates config ssl.storePath=internal diff --git a/foundations/foundation-ssl/src/test/resources/microservice.yaml b/foundations/foundation-ssl/src/test/resources/microservice.yaml index 41ca3326e51..482c8e48ea7 100644 --- a/foundations/foundation-ssl/src/test/resources/microservice.yaml +++ b/foundations/foundation-ssl/src/test/resources/microservice.yaml @@ -23,7 +23,7 @@ ssl: checkCN.host: true checkCN.white: true checkCN.white.file: white.list - allowRenegociate: false + allowRenegotiate: false storePath: internal trustStore: trust.jks trustStoreType: JKS diff --git a/foundations/foundation-ssl/src/test/resources/server.ssl.properties b/foundations/foundation-ssl/src/test/resources/server.ssl.properties index aec677c2387..d2a8180ab51 100644 --- a/foundations/foundation-ssl/src/test/resources/server.ssl.properties +++ b/foundations/foundation-ssl/src/test/resources/server.ssl.properties @@ -22,7 +22,7 @@ ssl.authPeer=true ssl.checkCN.host=true ssl.checkCN.white=true ssl.checkCN.white.file=white.list -ssl.allowRenegociate=false +ssl.allowRenegotiate=false #########certificates config ssl.storePath=internal diff --git a/foundations/foundation-ssl/src/test/resources/server.ssl.resource.properties b/foundations/foundation-ssl/src/test/resources/server.ssl.resource.properties index f1327eeca56..01f7380ba71 100644 --- a/foundations/foundation-ssl/src/test/resources/server.ssl.resource.properties +++ b/foundations/foundation-ssl/src/test/resources/server.ssl.resource.properties @@ -22,7 +22,7 @@ ssl.authPeer=true ssl.checkCN.host=true ssl.checkCN.white=true ssl.checkCN.white.file=white.list -ssl.allowRenegociate=false +ssl.allowRenegotiate=false #########certificates config ssl.storePath=internal diff --git a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/TransportUtils.java b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/TransportUtils.java index f508038f9ab..d58482d23af 100644 --- a/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/TransportUtils.java +++ b/huawei-cloud/dashboard/src/main/java/org/apache/servicecomb/huaweicloud/dashboard/monitor/TransportUtils.java @@ -61,10 +61,10 @@ public static SSLProperties createSSLProperties(boolean sslEnabled, Environment DEFAULT_OPTION.getCiphers(), "ssl." + tag + ".checkCN.white.file", "ssl.checkCN.white.file")); - option.setAllowRenegociate(getBooleanProperty(environment, - DEFAULT_OPTION.isAllowRenegociate(), - "ssl." + tag + ".allowRenegociate", - "ssl.allowRenegociate")); + option.setAllowRenegotiate(getBooleanProperty(environment, + DEFAULT_OPTION.isAllowRenegotiate(), + "ssl." + tag + ".allowRenegotiate", + "ssl.allowRenegotiate")); option.setStorePath( getStringProperty(environment, DEFAULT_OPTION.getStorePath(), diff --git a/huawei-cloud/servicestage/src/main/java/org/apache/servicecomb/huaweicloud/servicestage/RBACBootStrapService.java b/huawei-cloud/servicestage/src/main/java/org/apache/servicecomb/huaweicloud/servicestage/RBACBootStrapService.java index 2ba89f1a479..b42ea27e849 100644 --- a/huawei-cloud/servicestage/src/main/java/org/apache/servicecomb/huaweicloud/servicestage/RBACBootStrapService.java +++ b/huawei-cloud/servicestage/src/main/java/org/apache/servicecomb/huaweicloud/servicestage/RBACBootStrapService.java @@ -163,10 +163,10 @@ private SSLProperties createSSLProperties(Environment environment) { DEFAULT_OPTION.getCiphers(), "ssl." + SSL_TAG + ".checkCN.white.file", "ssl.checkCN.white.file")); - option.setAllowRenegociate(getBooleanProperty(environment, - DEFAULT_OPTION.isAllowRenegociate(), - "ssl." + SSL_TAG + ".allowRenegociate", - "ssl.allowRenegociate")); + option.setAllowRenegotiate(getBooleanProperty(environment, + DEFAULT_OPTION.isAllowRenegotiate(), + "ssl." + SSL_TAG + ".allowRenegotiate", + "ssl.allowRenegotiate")); option.setStorePath( getStringProperty(environment, DEFAULT_OPTION.getStorePath(), From dfb4dbd3ba8d27747cba4aecb9507727696634b8 Mon Sep 17 00:00:00 2001 From: SweetWuXiaoMei Date: Tue, 26 Nov 2024 11:27:21 +0800 Subject: [PATCH 2/3] refactor(loadbalance): Modify load balancing configuration and naming - Fix typos in Configuration file -Rename RuleNameExtentionsFactory to RuleNameExtensionsFactory - Update references in relevant test files - Added Verticle as an allowed word in .typos.toml - Fixed typo in AbstractArgumentsMapperCreator file - Fixed typo in FaultInjectionUtil file --- .typos.toml | 4 ++++ .../apache/servicecomb/faultinjection/FaultInjectionUtil.java | 2 +- .../org/apache/servicecomb/loadbalance/Configuration.java | 2 +- .../servicecomb/loadbalance/LoadBalanceConfiguration.java | 4 ++-- ...eExtentionsFactory.java => RuleNameExtensionsFactory.java} | 2 +- .../apache/servicecomb/loadbalance/TestExtensionsManager.java | 2 +- .../apache/servicecomb/loadbalance/TestLoadBalanceFilter.java | 2 +- .../invocation/arguments/AbstractArgumentsMapperCreator.java | 2 +- 8 files changed, 12 insertions(+), 8 deletions(-) rename handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/{RuleNameExtentionsFactory.java => RuleNameExtensionsFactory.java} (97%) diff --git a/.typos.toml b/.typos.toml index 57968e12af0..e650d4f87b9 100644 --- a/.typos.toml +++ b/.typos.toml @@ -26,4 +26,8 @@ [files] ignore = [ "**/cobertura.ser" +] +[words] +allow = [ + "Verticle", ] \ No newline at end of file diff --git a/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionUtil.java b/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionUtil.java index 9d96fcd1d31..67c3ab86939 100755 --- a/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionUtil.java +++ b/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionUtil.java @@ -39,7 +39,7 @@ public class FaultInjectionUtil { private FaultInjectionUtil() { } - // key is config paramter + // key is config parameter private static final Map configCenterValue = new ConcurrentHashMapEx<>(); /** diff --git a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java index e7dabe3d59f..5f766e8855e 100644 --- a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java +++ b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/Configuration.java @@ -38,7 +38,7 @@ public final class Configuration { // 2.0 configuration items public static final String ROOT_20 = "ribbon."; - // SessionStickinessRule configruation + // SessionStickinessRule configuration public static final String SESSION_TIMEOUT_IN_SECONDS = "SessionStickinessRule.sessionTimeoutInSeconds"; public static final String SUCCESSIVE_FAILED_TIMES = "SessionStickinessRule.successiveFailedTimes"; diff --git a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadBalanceConfiguration.java b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadBalanceConfiguration.java index b8e5ecaa661..d65726e0ada 100644 --- a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadBalanceConfiguration.java +++ b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/LoadBalanceConfiguration.java @@ -43,8 +43,8 @@ public LoadBalanceFilter scbLoadBalanceFilter(ExtensionsManager extensionsManage } @Bean - public RuleNameExtentionsFactory scbRuleNameExtentionsFactory() { - return new RuleNameExtentionsFactory(); + public RuleNameExtensionsFactory scbRuleNameExtensionsFactory() { + return new RuleNameExtensionsFactory(); } @Bean diff --git a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/RuleNameExtentionsFactory.java b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/RuleNameExtensionsFactory.java similarity index 97% rename from handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/RuleNameExtentionsFactory.java rename to handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/RuleNameExtensionsFactory.java index 9315928eae4..9d9b0e0da1b 100644 --- a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/RuleNameExtentionsFactory.java +++ b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/RuleNameExtensionsFactory.java @@ -20,7 +20,7 @@ import com.google.common.collect.Lists; -public class RuleNameExtentionsFactory implements ExtensionsFactory { +public class RuleNameExtensionsFactory implements ExtensionsFactory { private static final Collection ACCEPT_KEYS = Lists.newArrayList( Configuration.RULE_STRATEGY_NAME); diff --git a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestExtensionsManager.java b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestExtensionsManager.java index 9a87ee3de35..2b159d38339 100644 --- a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestExtensionsManager.java +++ b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestExtensionsManager.java @@ -42,7 +42,7 @@ public void tearDown() { @Test public void testRuleName() { List extensionsFactories = new ArrayList<>(); - extensionsFactories.add(new RuleNameExtentionsFactory()); + extensionsFactories.add(new RuleNameExtensionsFactory()); ExtensionsManager extensionsManager = new ExtensionsManager(extensionsFactories); Assertions.assertEquals(RoundRobinRuleExt.class.getName(), diff --git a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceFilter.java b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceFilter.java index dc61706f568..123f23ac514 100644 --- a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceFilter.java +++ b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadBalanceFilter.java @@ -114,7 +114,7 @@ Transport findTransport(String transportName) { }; List extensionsFactories = new ArrayList<>(); - extensionsFactories.add(new RuleNameExtentionsFactory()); + extensionsFactories.add(new RuleNameExtensionsFactory()); ExtensionsManager extensionsManager = new ExtensionsManager(extensionsFactories); DiscoveryTree discoveryTree = new DiscoveryTree( diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/AbstractArgumentsMapperCreator.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/AbstractArgumentsMapperCreator.java index 2978e9d318c..deb7ba5baea 100644 --- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/AbstractArgumentsMapperCreator.java +++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/AbstractArgumentsMapperCreator.java @@ -57,7 +57,7 @@ * int add(int x, int y) * swagger parameters: * x, y - * 2) swagger only one POJO paramter, extract all field to method parameters (POJO dev mode) + * 2) swagger only one POJO parameter, extract all field to method parameters (POJO dev mode) * interface method: * int add(int x, int y) * swagger parameters: From c5af87fda686b6a6f45aaa00b9c5bb7d3e6d2584 Mon Sep 17 00:00:00 2001 From: SweetWuXiaoMei Date: Tue, 26 Nov 2024 14:24:28 +0800 Subject: [PATCH 3/3] linelint check Co-authored-by: ZhangJian He --- .typos.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.typos.toml b/.typos.toml index e650d4f87b9..bee2ded44ae 100644 --- a/.typos.toml +++ b/.typos.toml @@ -27,7 +27,8 @@ ignore = [ "**/cobertura.ser" ] + [words] allow = [ "Verticle", -] \ No newline at end of file +]