Limit access to XMPPServerConnectorRegistry
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java
index 1fdd138..853775b 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelay.java
@@ -38,6 +38,7 @@
import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy;
import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.server.InternalServerRuntimeContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.InternalSessionContext;
import org.apache.vysper.xmpp.server.resources.ManagedThreadPool;
@@ -81,7 +82,7 @@
protected OfflineStanzaReceiver offlineStanzaReceiver = null;
- protected ServerRuntimeContext serverRuntimeContext = null;
+ protected InternalServerRuntimeContext serverRuntimeContext = null;
protected long lastCompleted = 0;
protected long lastDumpTimestamp = 0;
@@ -98,7 +99,7 @@
this.executor = executor;
}
- public void setServerRuntimeContext(ServerRuntimeContext serverRuntimeContext) {
+ public void setServerRuntimeContext(InternalServerRuntimeContext serverRuntimeContext) {
this.serverRuntimeContext = serverRuntimeContext;
}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbResultHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbResultHandler.java
index 8c467a1..bb6b60e 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbResultHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0220_server_dailback/DbResultHandler.java
@@ -29,7 +29,6 @@
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.server.SessionState;
-import org.apache.vysper.xmpp.server.s2s.XMPPServerConnector;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.stanza.StanzaBuilder;
import org.slf4j.Logger;
@@ -75,10 +74,15 @@
Entity receiving = EntityImpl.parseUnchecked(stanza.getAttributeValue("from"));
Entity originating = serverRuntimeContext.getServerEntity();
- try {
- XMPPServerConnector connector = serverRuntimeContext.getServerConnectorRegistry()
- .connectForDialback(receiving, sessionContext, sessionStateHolder);
+ Runnable onFailure = () -> {
+ StanzaBuilder builder = new StanzaBuilder("result", NamespaceURIs.JABBER_SERVER_DIALBACK, "db");
+ builder.addAttribute("from", originating.getDomain());
+ builder.addAttribute("to", receiving.getDomain());
+ builder.addAttribute("type", "invalid");
+ stanzaBroker.writeToSession(builder.build());
+ };
+ try {
/*
* <db:verify from='target.tld' id='417GAF25' to='sender.tld'>
* 38b501ec606752318f72ad53de17ac6d15f86257485b0d8f5d54e1f619e6b869 </db:verify>
@@ -89,13 +93,11 @@
verifyBuilder.addAttribute("to", receiving.getFullQualifiedName());
verifyBuilder.addAttribute("id", sessionContext.getSessionId());
verifyBuilder.addText(dailbackId);
- connector.write(verifyBuilder.build());
+
+ stanzaBroker.write(receiving, verifyBuilder.build(),
+ (failedToDeliverStanza, deliveryException) -> onFailure.run());
} catch (Exception e) {
- StanzaBuilder builder = new StanzaBuilder("result", NamespaceURIs.JABBER_SERVER_DIALBACK, "db");
- builder.addAttribute("from", originating.getDomain());
- builder.addAttribute("to", receiving.getDomain());
- builder.addAttribute("type", "invalid");
- stanzaBroker.writeToSession(builder.build());
+ onFailure.run();
}
} else {
// acting as the Originating server
@@ -107,4 +109,5 @@
}
}
}
+
}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
index 2681bf9..94aef67 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
@@ -68,7 +68,7 @@
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class DefaultServerRuntimeContext implements ServerRuntimeContext, ModuleRegistry {
+public class DefaultServerRuntimeContext implements InternalServerRuntimeContext, ModuleRegistry {
private final Logger logger = LoggerFactory.getLogger(DefaultServerRuntimeContext.class);
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/InternalServerRuntimeContext.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/InternalServerRuntimeContext.java
new file mode 100644
index 0000000..9a8d0d7
--- /dev/null
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/InternalServerRuntimeContext.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.vysper.xmpp.server;
+
+import org.apache.vysper.xmpp.server.s2s.XMPPServerConnectorRegistry;
+
+/**
+ * @author Réda Housni Alaoui
+ */
+public interface InternalServerRuntimeContext extends ServerRuntimeContext {
+
+ XMPPServerConnectorRegistry getServerConnectorRegistry();
+
+}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
index 5d69892..b05babf 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/ServerRuntimeContext.java
@@ -32,7 +32,6 @@
import org.apache.vysper.xmpp.modules.ServerRuntimeContextService;
import org.apache.vysper.xmpp.protocol.StanzaHandler;
import org.apache.vysper.xmpp.server.components.Component;
-import org.apache.vysper.xmpp.server.s2s.XMPPServerConnectorRegistry;
import org.apache.vysper.xmpp.stanza.Stanza;
import org.apache.vysper.xmpp.state.presence.LatestPresenceCache;
import org.apache.vysper.xmpp.state.resourcebinding.ResourceRegistry;
@@ -71,8 +70,6 @@
boolean hasComponentStanzaProcessor(Entity entity);
- XMPPServerConnectorRegistry getServerConnectorRegistry();
-
List<Module> getModules();
<T> T getModule(Class<T> clazz);
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
index d4781b6..414313e 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
@@ -277,7 +277,7 @@
dictionaries.add(new org.apache.vysper.xmpp.modules.core.compatibility.jabber_iq_auth.JabberIQAuthDictionary());
}
- public ServerRuntimeContext getServerRuntimeContext() {
+ public InternalServerRuntimeContext getServerRuntimeContext() {
return serverRuntimeContext;
}
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java
index ffbab04..0c6dc73 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringExternalInboundStanzaRelayTestCase.java
@@ -29,6 +29,7 @@
import org.apache.vysper.xmpp.delivery.failure.RemoteServerNotFoundException;
import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.server.InternalServerRuntimeContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.InternalSessionContext;
import org.apache.vysper.xmpp.server.s2s.XMPPServerConnector;
@@ -67,7 +68,7 @@
XMPPServerConnectorRegistry registry = mock(XMPPServerConnectorRegistry.class);
Mockito.when(registry.connect(SERVER)).thenThrow(new RemoteServerNotFoundException());
- ServerRuntimeContext serverRuntimeContext = mock(ServerRuntimeContext.class);
+ InternalServerRuntimeContext serverRuntimeContext = mock(InternalServerRuntimeContext.class);
Mockito.when(serverRuntimeContext.getServerConnectorRegistry()).thenReturn(registry);
DeliveringExternalInboundStanzaRelay relay = new DeliveringExternalInboundStanzaRelay(new TestExecutorService());
@@ -91,7 +92,7 @@
XMPPServerConnectorRegistry registry = mock(XMPPServerConnectorRegistry.class);
Mockito.when(registry.connect(SERVER)).thenReturn(connector);
- ServerRuntimeContext serverRuntimeContext = mock(ServerRuntimeContext.class);
+ InternalServerRuntimeContext serverRuntimeContext = mock(InternalServerRuntimeContext.class);
Mockito.when(serverRuntimeContext.getServerConnectorRegistry()).thenReturn(registry);
DeliveringExternalInboundStanzaRelay relay = new DeliveringExternalInboundStanzaRelay(new TestExecutorService());
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java b/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java
index 87e997d..f1359f7 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/server/s2s/Server2Server.java
@@ -33,6 +33,7 @@
import org.apache.vysper.xmpp.authentication.AccountManagement;
import org.apache.vysper.xmpp.cryptography.NonCheckingX509TrustManagerFactory;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.server.InternalServerRuntimeContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.apache.vysper.xmpp.server.XMPPServer;
import org.apache.vysper.xmpp.stanza.Stanza;
@@ -102,7 +103,7 @@
// enable server connection to use ping
//server.addModule(new XmppPingModule());
- ServerRuntimeContext serverRuntimeContext = server.getServerRuntimeContext();
+ InternalServerRuntimeContext serverRuntimeContext = server.getServerRuntimeContext();
Thread.sleep(2000);