Add XMPP consumer function

This commit is contained in:
Daniel Frey
2022-10-12 16:56:48 -04:00
committed by Chris Bono
parent 0daf013c82
commit c39eeee50b
25 changed files with 849 additions and 24 deletions

View File

@@ -1 +1 @@
-DaltSnapshotDeploymentRepository=repo.spring.io::default::https://repo.spring.io/libs-snapshot-local -P spring
-DaltSnapshotDeploymentRepository=repo.spring.io::default::https://repo.spring.io/libs-snapshot-local

View File

@@ -36,7 +36,7 @@ The following are the various components of this repository.
|link:functions/supplier/ftp-supplier/README.adoc[FTP]
|link:functions/function/header-enricher-function/README.adoc[Header-Enricher]
|link:functions/consumer/elasticsearch-consumer/README.adoc[Elasticsearch]
|link:functions/supplier/geode-supplier/README.adoc[Geode]
// |link:functions/supplier/geode-supplier/README.adoc[Geode]
|link:functions/function/http-request-function/README.adoc[HTTP Request]
|link:functions/consumer/file-consumer/README.adoc[File]
|link:functions/supplier/http-supplier/README.adoc[HTTP]
@@ -44,7 +44,7 @@ The following are the various components of this repository.
|link:functions/consumer/ftp-consumer/README.adoc[FTP]
|link:functions/supplier/jdbc-supplier/README.adoc[JDBC]
|link:functions/function/object-detection-function/README.adoc[Object Detection(Tensorflow)]
|link:functions/consumer/geode-consumer/README.adoc[Geode]
// |link:functions/consumer/geode-consumer/README.adoc[Geode]
|link:functions/supplier/jms-supplier/README.adoc[JMS]
|link:functions/function/semantic-segmentation-function/README.adoc[Semantic Segmentation(Tensorflow)]
|link:functions/consumer/jdbc-consumer/README.adoc[JDBC]

View File

@@ -25,6 +25,7 @@
<module>tensorflow-common</module>
<module>cdc-debezium-common</module>
<module>cdc-debezium-boot-starter</module>
<module>xmpp-common</module>
</modules>
<build>
<plugins>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>spring-functions-parent</artifactId>
<version>4.0.0-SNAPSHOT</version>
<relativePath>../../spring-functions-parent/pom.xml</relativePath>
</parent>
<artifactId>xmpp-common</artifactId>
<name>xmpp-common</name>
<description>XMPP common</description>
<dependencies>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-xmpp</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,63 @@
/*
* Copyright 2014-2022 the original author or authors.
*
* Licensed 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
*
* https://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.springframework.cloud.fn.common.xmpp;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.jxmpp.stringprep.XmppStringprepException;
import org.jxmpp.util.XmppStringUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.xmpp.config.XmppConnectionFactoryBean;
import org.springframework.util.StringUtils;
@Configuration
@EnableConfigurationProperties(XmppConnectionFactoryProperties.class)
public class XmppConnectionFactoryConfiguration {
@Bean
@ConditionalOnMissingBean
public XmppConnectionFactoryBean xmppConnectionFactoryBean(XmppConnectionFactoryProperties properties) throws XmppStringprepException {
XmppConnectionFactoryBean xmppConnectionFactoryBean = new XmppConnectionFactoryBean();
xmppConnectionFactoryBean.setSubscriptionMode(properties.getSubscriptionMode());
XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
builder.setSecurityMode(properties.getSecurityMode());
builder.setHost(properties.getHost());
builder.setPort(properties.getPort());
if (StringUtils.hasText(properties.getResource())) {
builder.setResource(properties.getResource());
}
if (StringUtils.hasText(properties.getServiceName())) {
builder.setUsernameAndPassword(properties.getUser(), properties.getPassword())
.setXmppDomain(properties.getServiceName());
}
else {
builder.setUsernameAndPassword(XmppStringUtils.parseLocalpart(properties.getUser()), properties.getPassword())
.setXmppDomain(properties.getUser());
}
xmppConnectionFactoryBean.setConnectionConfiguration(builder.build());
return xmppConnectionFactoryBean;
}
}

View File

@@ -0,0 +1,138 @@
/*
* Copyright 2014-2022 the original author or authors.
*
* Licensed 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
*
* https://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.springframework.cloud.fn.common.xmpp;
import jakarta.validation.constraints.NotEmpty;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.roster.Roster;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
/**
*
* @author Daniel Frey
* @since 4.0.0
*/
@ConfigurationProperties("xmpp.factory")
@Validated
public class XmppConnectionFactoryProperties {
/**
* The Resource to bind to on the XMPP Host.
* - Can be empty, server will generate one if not set
*/
private String resource;
/**
* The User the connection should connect as.
*/
private String user;
/**
* The Password for the connected user.
*/
private String password;
/**
* The Service Name to set for the XMPP Domain.
*/
private String serviceName;
/**
* XMPP Host server to connect to.
*/
private String host;
/**
* Port for connecting to the host.
* - Default Client Port: 5222
*/
private int port = 5222;
private Roster.SubscriptionMode subscriptionMode = Roster.getDefaultSubscriptionMode();
private ConnectionConfiguration.SecurityMode securityMode = ConnectionConfiguration.SecurityMode.required;
public void setResource(String resource) {
this.resource = resource;
}
public String getResource() {
return resource;
}
public void setUser(String user) {
this.user = user;
}
@NotEmpty(message = "user is required")
public String getUser() {
return user;
}
public void setPassword(String password) {
this.password = password;
}
@NotEmpty(message = "port is required")
public String getPassword() {
return password;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public String getServiceName() {
return serviceName;
}
public void setHost(String host) {
this.host = host;
}
@NotEmpty(message = "host is required")
public String getHost() {
return host;
}
public void setPort(int port) {
this.port = port;
}
public int getPort() {
return port;
}
public void setSubscriptionMode(Roster.SubscriptionMode subscriptionMode) {
this.subscriptionMode = subscriptionMode;
}
public Roster.SubscriptionMode getSubscriptionMode() {
return subscriptionMode;
}
public void setSecurityMode(ConnectionConfiguration.SecurityMode securityMode) {
this.securityMode = securityMode;
}
public ConnectionConfiguration.SecurityMode getSecurityMode() {
return securityMode;
}
}

View File

@@ -30,6 +30,7 @@
<module>twitter-consumer</module>
<module>wavefront-consumer</module>
<module>rsocket-consumer</module>
<module>xmpp-consumer</module>
<module>zeromq-consumer</module>
</modules>
<build>

View File

@@ -0,0 +1,30 @@
# XMPP Consumer
A consumer that allows you to send messages through a XMPP server.
## Beans for injection
You can import the `XmppConsumerConfiguration` in the application and then inject the following bean.
`Consumer<Message<?> xmppConsumer`
You need to inject this as `Consumer<Message<?> xmppConsumer`.
You can use `xmppConsumer` as a qualifier when injecting.
**NOTE:** This is a functional endpoint. One will need to subscribe to this endpoint in order to start accepting data
on it.
## Configuration Options
All configuration properties are prefixed with `xmpp.consumer`.
For more information on the various options available, please see link:src/main/java/org/springframework/cloud/fn/consumer/xmpp/XmppConsumerProperties.java[XmppConsumerProperties].
## Tests
See this link:src/test/java/org/springframework/cloud/fn/consumer/xmpp/[test suite] for the various ways, this consumer is used.
## Other usage
See this https://github.com/spring-cloud/stream-applications/blob/master/applications/sink/xmpp-sink/README.adoc[README] where this consumer is used to create a Spring Cloud Stream application where it makes a XMPP Sink.

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>spring-functions-parent</artifactId>
<version>4.0.0-SNAPSHOT</version>
<relativePath>../../spring-functions-parent/pom.xml</relativePath>
</parent>
<artifactId>xmpp-consumer</artifactId>
<name>xmpp-consumer</name>
<description>XMPP consumer</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>xmpp-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud.fn</groupId>-->
<!-- <artifactId>function-test-support</artifactId>-->
<!-- <version>${project.version}</version>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
</dependencies>
</project>

View File

@@ -0,0 +1,63 @@
/*
* Copyright 2014-2022 the original author or authors.
*
* Licensed 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
*
* https://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.springframework.cloud.fn.consumer.xmpp;
import java.util.function.Consumer;
import org.jivesoftware.smack.XMPPConnection;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.fn.common.xmpp.XmppConnectionFactoryConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.integration.xmpp.XmppHeaders;
import org.springframework.integration.xmpp.outbound.ChatMessageSendingMessageHandler;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
/**
*
* @author Daniel Frey
* @since 4.0.0
*/
@Configuration
@EnableConfigurationProperties(XmppConsumerProperties.class)
@Import(XmppConnectionFactoryConfiguration.class)
public class XmppConsumerConfiguration {
@Bean
public ChatMessageSendingMessageHandler chatMessageSendingMessageHandler(XMPPConnection xmppConnection) {
return new ChatMessageSendingMessageHandler(xmppConnection);
}
@Bean
public Consumer<Message<?>> xmppConsumer(ChatMessageSendingMessageHandler chatMessageSendingMessageHandler, XmppConsumerProperties properties) {
return message -> {
Message<?> send = MessageBuilder
.fromMessage(message)
.setHeaderIfAbsent(XmppHeaders.TO, properties.getChatTo())
.build();
chatMessageSendingMessageHandler.handleMessage(send);
};
}
}

View File

@@ -0,0 +1,44 @@
/*
* Copyright 2014-2022 the original author or authors.
*
* Licensed 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
*
* https://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.springframework.cloud.fn.consumer.xmpp;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
/**
*
* @author Daniel Frey
* @since 4.0.0
*/
@ConfigurationProperties("xmpp.consumer")
@Validated
public class XmppConsumerProperties {
/**
* XMPP handle to send message to.
*/
private String chatTo;
public void setChatTo(String chatTo) {
this.chatTo = chatTo;
}
public String getChatTo() {
return chatTo;
}
}

View File

@@ -0,0 +1,59 @@
<available>
<plugin name="Bookmarks" latest="1.1.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.1.1/bookmarks/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.1.1/bookmarks.jar" author="Ignite Realtime" description="Allows clients to store URL and group chat bookmarks (XEP-0048)" icon="https://igniterealtime.org/projects/openfire/plugins/1.1.1/bookmarks/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.1.1/bookmarks/readme.html" fileSize="1683910"/>
<plugin name="External Service Discovery" latest="1.0.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.1/externalservicediscovery/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.1/externalservicediscovery.jar" author="Guus der Kinderen" description="Allows XMPP entities to discover services external to the XMPP network, such as STUN and TURN servers." icon="https://igniterealtime.org/projects/openfire/plugins/1.0.1/externalservicediscovery/logo_small.png" minServerVersion="4.2.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.1/externalservicediscovery/readme.html" fileSize="95337"/>
<plugin name="MUC Service Discovery Extensions" latest="1.0.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.0/mucextinfo/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.0/mucextinfo.jar" author="Guus der Kinderen" description="Allows an admin to configure Extended Service Discovery information to Multi User Chat entities." minServerVersion="4.5.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.0/mucextinfo/readme.html" fileSize="52992"/>
<plugin name="SIP Phone Plugin" latest="1.2.6" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.6/sip/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.6/sip.jar" author="Ignite Realtime" description="Provides support for SIP account management" icon="https://igniterealtime.org/projects/openfire/plugins/1.2.6/sip/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.6/sip/readme.html" fileSize="1159930"/>
<plugin name="Fastpath Service" latest="4.4.5" changelog="https://igniterealtime.org/projects/openfire/plugins/4.4.5/fastpath/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/4.4.5/fastpath.jar" author="Jive Software" description="Support for managed queued chat requests, such as a support team might use." icon="https://igniterealtime.org/projects/openfire/plugins/4.4.5/fastpath/logo_small.gif" minServerVersion="4.1.1" readme="https://igniterealtime.org/projects/openfire/plugins/4.4.5/fastpath/readme.html" fileSize="1698700"/>
<plugin name="TikiToken" latest="0.2.0" changelog="https://igniterealtime.org/projects/openfire/plugins/0.2.0/tikitoken/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.2.0/tikitoken.jar" author="Tiki Wiki CMS Groupware" description="Allows users to authenticate with a Tiki token." icon="https://igniterealtime.org/projects/openfire/plugins/0.2.0/tikitoken/logo_small.png" minServerVersion="4.1.3" readme="https://igniterealtime.org/projects/openfire/plugins/0.2.0/tikitoken/readme.html" licenseType="gpl" fileSize="358495"/>
<plugin name="HTTP File Upload" latest="1.1.5" changelog="https://igniterealtime.org/projects/openfire/plugins/1.1.5/httpfileupload/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.1.5/httpfileupload.jar" author="Guus der Kinderen" description="Allows clients to share files, as described in the XEP-0363 'HTTP File Upload' specification." icon="https://igniterealtime.org/projects/openfire/plugins/1.1.5/httpfileupload/logo_small.png" minServerVersion="4.1.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.1.5/httpfileupload/readme.html" fileSize="6277079"/>
<plugin name="Hazelcast Plugin" latest="2.6.0" changelog="https://igniterealtime.org/projects/openfire/plugins/2.6.0/hazelcast/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/2.6.0/hazelcast.jar" author="Ignite Realtime" description="Adds clustering support" icon="https://igniterealtime.org/projects/openfire/plugins/2.6.0/hazelcast/logo_small.png" minServerVersion="4.7.0" readme="https://igniterealtime.org/projects/openfire/plugins/2.6.0/hazelcast/readme.html" fileSize="10346090"/>
<plugin name="Draw-IO" latest="0.0.1" changelog="https://igniterealtime.org/projects/openfire/plugins/0.0.1/draw/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.0.1/draw.jar" author="Ignite Realtime" description="Web Diagramming Tool that uses SVG and HTML for rendering" icon="https://igniterealtime.org/projects/openfire/plugins/0.0.1/draw/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/0.0.1/draw/readme.html" licenseType="Apache 2.0" fileSize="40136123"/>
<plugin name="IPFS" latest="0.0.1" changelog="https://igniterealtime.org/projects/openfire/plugins/0.0.1/ipfs/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.0.1/ipfs.jar" author="igniterealtime.org" description="Enables Openfire to become an IPFS node." icon="https://igniterealtime.org/projects/openfire/plugins/0.0.1/ipfs/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/0.0.1/ipfs/readme.html" licenseType="Apache 2.0" fileSize="31727587"/>
<plugin name="Registration" latest="1.7.3" changelog="https://igniterealtime.org/projects/openfire/plugins/1.7.3/registration/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.7.3/registration.jar" author="Ryan Graham" description="Performs various actions whenever a new user account is created." icon="https://igniterealtime.org/projects/openfire/plugins/1.7.3/registration/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.7.3/registration/readme.html" fileSize="60708"/>
<plugin name="Search" latest="1.7.3" changelog="https://igniterealtime.org/projects/openfire/plugins/1.7.3/search/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.7.3/search.jar" author="Ryan Graham" description="Provides support for Jabber Search (XEP-0055)" icon="https://igniterealtime.org/projects/openfire/plugins/1.7.3/search/logo_small.gif" minServerVersion="4.1.1" readme="https://igniterealtime.org/projects/openfire/plugins/1.7.3/search/readme.html" fileSize="71795"/>
<plugin name="Client Control" latest="2.1.8" changelog="https://igniterealtime.org/projects/openfire/plugins/2.1.8/clientControl/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/2.1.8/clientControl.jar" author="Jive Software" description="Controls clients allowed to connect and available features" icon="https://igniterealtime.org/projects/openfire/plugins/2.1.8/clientControl/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/2.1.8/clientControl/readme.html" fileSize="355175"/>
<plugin name="Candy" latest="0.0.0" changelog="https://igniterealtime.org/projects/openfire/plugins/2.2.0-release-3/candy/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/2.2.0-release-3/candy.jar" author="Guus der Kinderen" description="Adds the (third-party) Candy web client to Openfire." icon="https://igniterealtime.org/projects/openfire/plugins/2.2.0-release-3/candy/logo_small.png" minServerVersion="4.7.0" readme="https://igniterealtime.org/projects/openfire/plugins/2.2.0-release-3/candy/readme.html" fileSize="591517"/>
<plugin name="Presence Service" latest="1.7.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.7.1/presence/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.7.1/presence.jar" author="Jive Software" description="Exposes presence information through HTTP." icon="https://igniterealtime.org/projects/openfire/plugins/1.7.1/presence/logo_small.gif" minServerVersion="4.1.1" readme="https://igniterealtime.org/projects/openfire/plugins/1.7.1/presence/readme.html" fileSize="29451"/>
<plugin name="Subscription" latest="1.4.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.4.1/subscription/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.4.1/subscription.jar" author="Ryan Graham" description="Automatically accepts or rejects subscription requests" icon="https://igniterealtime.org/projects/openfire/plugins/1.4.1/subscription/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.4.1/subscription/readme.html" fileSize="20989"/>
<plugin name="inVerse" latest="9.1.1 Release 1" changelog="https://igniterealtime.org/projects/openfire/plugins/9.1.1.1/inverse/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/9.1.1.1/inverse.jar" author="Guus der Kinderen" description="Adds the (third-party, Converse-based) inVerse web client to Openfire." icon="https://igniterealtime.org/projects/openfire/plugins/9.1.1.1/inverse/logo_small.png" minServerVersion="4.1.5" readme="https://igniterealtime.org/projects/openfire/plugins/9.1.1.1/inverse/readme.html" fileSize="6031840"/>
<plugin name="Push Notification" latest="0.9.1" changelog="https://igniterealtime.org/projects/openfire/plugins/0.9.1/pushnotification/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.9.1/pushnotification.jar" author="Guus der Kinderen" description="Adds Push Notification (XEP-0357) support to Openfire." icon="https://igniterealtime.org/projects/openfire/plugins/0.9.1/pushnotification/logo_small.png" minServerVersion="4.6.4" readme="https://igniterealtime.org/projects/openfire/plugins/0.9.1/pushnotification/readme.html" fileSize="25753"/>
<plugin name="Email on Away" latest="1.0.3" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.3/emailOnAway/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.3/emailOnAway.jar" author="Nick Mossie" description="Messages sent to alternate location when recipient is away" minServerVersion="2.3.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.3/emailOnAway/readme.html" fileSize="5923"/>
<plugin name="Certificate Manager" latest="1.1.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.1.0/certificatemanager/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.1.0/certificatemanager.jar" author="Guus der Kinderen" description="Adds certificate management features." icon="https://igniterealtime.org/projects/openfire/plugins/1.1.0/certificatemanager/logo_small.png" minServerVersion="4.3.0 Alpha" readme="https://igniterealtime.org/projects/openfire/plugins/1.1.0/certificatemanager/readme.html" fileSize="47750"/>
<plugin name="Random Avatar Generator Plugin" latest="1.0.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.0/randomavatar/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.0/randomavatar.jar" author="Guus der Kinderen" description="Generates semi-random avatar images." icon="https://igniterealtime.org/projects/openfire/plugins/1.0.0/randomavatar/logo_small.gif" minServerVersion="4.1.5" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.0/randomavatar/readme.html" fileSize="423022"/>
<plugin name="JmxWeb Plugin" latest="0.9.0" changelog="https://igniterealtime.org/projects/openfire/plugins/0.9.0/jmxweb/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.9.0/jmxweb.jar" author="igniterealtime.org" description="JmxWeb plugin is web based platform for managing and monitoring openfire via JMX." minServerVersion="4.3.0" readme="https://igniterealtime.org/projects/openfire/plugins/0.9.0/jmxweb/readme.html" licenseType="Apache 2.0" fileSize="20177522"/>
<plugin name="MUC Service" latest="0.2.3" changelog="https://igniterealtime.org/projects/openfire/plugins/0.2.3/mucservice/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.2.3/mucservice.jar" author="Roman Soldatow" description="MUC administration over REST Interface" icon="https://igniterealtime.org/projects/openfire/plugins/0.2.3/mucservice/logo_small.gif" minServerVersion="3.9.1" readme="https://igniterealtime.org/projects/openfire/plugins/0.2.3/mucservice/readme.html" fileSize="2568312"/>
<plugin name="User Status Plugin" latest="1.2.2" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.2/userstatus/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.2/userstatus.jar" author="Stefan Reuter" description="Openfire plugin to save the user status to the database." icon="https://igniterealtime.org/projects/openfire/plugins/1.2.2/userstatus/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.2/userstatus/readme.html" licenseType="gpl" fileSize="28372"/>
<plugin name="GoJara" latest="2.2.3" changelog="https://igniterealtime.org/projects/openfire/plugins/2.2.3/gojara/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/2.2.3/gojara.jar" author="Holger Bergunde / Daniel Henninger / Axel-F. Brand" description="XEP-0321: Remote Roster Management support" icon="https://igniterealtime.org/projects/openfire/plugins/2.2.3/gojara/logo_small.png" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/2.2.3/gojara/readme.html" fileSize="345882"/>
<plugin name="Spam blacklist" latest="1.0.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.0/blacklistspam/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.0/blacklistspam.jar" author="Ignite Realtime" description="Uses an external blacklist to reject traffic from specific addresses." icon="https://igniterealtime.org/projects/openfire/plugins/1.0.0/blacklistspam/logo_small.png" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.0/blacklistspam/readme.html" fileSize="15946"/>
<plugin name="User Service" latest="2.1.2" changelog="https://igniterealtime.org/projects/openfire/plugins/2.1.2/userservice/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/2.1.2/userservice.jar" author="Roman Soldatow, Justin Hunt" description="(Deprecated) Please use the REST API Plugin. Allows administration of users via HTTP requests." icon="https://igniterealtime.org/projects/openfire/plugins/2.1.2/userservice/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/2.1.2/userservice/readme.html" fileSize="2414018"/>
<plugin name="Packet Filter" latest="3.3.1" changelog="https://igniterealtime.org/projects/openfire/plugins/3.3.1/packetFilter/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/3.3.1/packetFilter.jar" author="Nate Putnam" description="Rules to enforce ethical communication" icon="https://igniterealtime.org/projects/openfire/plugins/3.3.1/packetFilter/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/3.3.1/packetFilter/readme.html" fileSize="106311"/>
<plugin name="User Creation" latest="1.4.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.4.0/userCreation/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.4.0/userCreation.jar" author="Jive Software" description="Creates users and populates rosters." minServerVersion="4.3.0" fileSize="1643940"/>
<plugin name="Openfire WebSocket" latest="1.2.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.1/websocket/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.1/websocket.jar" author="Tom Evans" description="Provides WebSocket support for Openfire." icon="https://igniterealtime.org/projects/openfire/plugins/1.2.1/websocket/logo_small.gif" minServerVersion="4.1.5" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.1/websocket/readme.html" fileSize="122092"/>
<plugin name="Email Listener" latest="1.2.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.1/emailListener/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.1/emailListener.jar" author="Jive Software" description="Listens for emails and sends alerts to specific users." icon="https://igniterealtime.org/projects/openfire/plugins/1.2.1/emailListener/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.1/emailListener/readme.html" fileSize="21292"/>
<plugin name="PionTurn" latest="0.0.4" changelog="https://igniterealtime.org/projects/openfire/plugins/0.0.4/pionturn/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.0.4/pionturn.jar" author="Ignite Realtime" description="Provides a TURN/STUN Server for Openfire" icon="https://igniterealtime.org/projects/openfire/plugins/0.0.4/pionturn/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/0.0.4/pionturn/readme.html" licenseType="Apache 2.0" fileSize="5914466"/>
<plugin name="Thread Dump" latest="1.1.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.1.0/threaddump/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.1.0/threaddump.jar" author="Ignite Realtime" description="A plugin that can be used to generate diagnostics." icon="https://igniterealtime.org/projects/openfire/plugins/1.1.0/threaddump/logo_small.png" readme="https://igniterealtime.org/projects/openfire/plugins/1.1.0/threaddump/readme.html" fileSize="53219"/>
<plugin name="Avatar Resizer" latest="1.0.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.1/avatarResizer/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.1/avatarResizer.jar" author="Guus der Kinderen" description="Ensures vCard-based avatars are not to large for comfort." icon="https://igniterealtime.org/projects/openfire/plugins/1.0.1/avatarResizer/logo_small.gif" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.1/avatarResizer/readme.html" fileSize="10624"/>
<plugin name="Load Statistic" latest="1.2.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.1/loadStats/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.1/loadStats.jar" author="Jive Software" description="Logs load statistics to a file" icon="https://igniterealtime.org/projects/openfire/plugins/1.2.1/loadStats/logo_small.gif" minServerVersion="3.9.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.1/loadStats/readme.html" fileSize="11888"/>
<plugin name="STUN server plugin" latest="1.2.3" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.3/stunserver/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.3/stunserver.jar" author="Ignite Realtime" description="Adds STUN functionality to Openfire" icon="https://igniterealtime.org/projects/openfire/plugins/1.2.3/stunserver/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.3/stunserver/readme.html" fileSize="125304"/>
<plugin name="JID Validation" latest="0.0.0" url="https://igniterealtime.org/projects/openfire/plugins/1.0/jidvalidation.jar" author="Manasse Ngudia" description="Provides support for JID Validation Service" minServerVersion="4.4.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.0/jidvalidation/readme.html" licenseType="gpl" fileSize="9947"/>
<plugin name="Content Filter" latest="1.8.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.8.1/contentFilter/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.8.1/contentFilter.jar" author="Conor Hayes" description="Scans message packets for defined patterns" icon="https://igniterealtime.org/projects/openfire/plugins/1.8.1/contentFilter/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.8.1/contentFilter/readme.html" fileSize="73660"/>
<plugin name="REST API" latest="1.10.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.10.0/restAPI/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.10.0/restAPI.jar" author="Roman Soldatow" description="Allows administration over a RESTful API." icon="https://igniterealtime.org/projects/openfire/plugins/1.10.0/restAPI/logo_small.gif" minServerVersion="4.7.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.10.0/restAPI/readme.html" fileSize="15341133"/>
<plugin name="Broadcast" latest="1.9.2" changelog="https://igniterealtime.org/projects/openfire/plugins/1.9.2/broadcast/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.9.2/broadcast.jar" author="Ignite Realtime" description="The broadcast plugin broadcasts messages to all users in the system or to specific groups" icon="https://igniterealtime.org/projects/openfire/plugins/1.9.2/broadcast/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.9.2/broadcast/readme.html" fileSize="15163"/>
<plugin name="JSXC" latest="4.4.0 Release 1" changelog="https://igniterealtime.org/projects/openfire/plugins/4.4.0.1/jsxc/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/4.4.0.1/jsxc.jar" author="Guus der Kinderen" description="Adds the (third-party) JSXC web client to Openfire." icon="https://igniterealtime.org/projects/openfire/plugins/4.4.0.1/jsxc/logo_small.png" minServerVersion="4.4.0" readme="https://igniterealtime.org/projects/openfire/plugins/4.4.0.1/jsxc/readme.html" fileSize="2597663"/>
<plugin name="Non-SASL Authentication" latest="1.0.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.0/nonSaslAuthentication/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.0/nonSaslAuthentication.jar" author="Guus der Kinderen" description="This plugin implements a the (obsolete!) XEP-0078 specification for authentication using the jabber:iq:auth namespace." minServerVersion="4.1.0 Alpha" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.0/nonSaslAuthentication/readme.html" fileSize="10803"/>
<plugin name="MotD (Message of the Day)" latest="1.2.3" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.3/motd/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.3/motd.jar" author="Ryan Graham" description="Allows admins to have a message sent to users each time they log in." icon="https://igniterealtime.org/projects/openfire/plugins/1.2.3/motd/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.3/motd/readme.html" fileSize="31649"/>
<plugin name="CallbackOnOffline" latest="1.2.1" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.1/callbackOnOffline/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.1/callbackOnOffline.jar" author="Pavel Goski / Krzysztof Misztal" description="Url is called when recipient is offline" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.1/callbackOnOffline/readme.html" fileSize="4322732"/>
<plugin name="Rdp" latest="0.0.1" changelog="https://igniterealtime.org/projects/openfire/plugins/0.0.1/rdp/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.0.1/rdp.jar" author="igniterealtime.org" description="RDP Gateway for Remote Desktop Control Changelog" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/0.0.1/rdp/readme.html" licenseType="Apache 2.0" fileSize="27297204"/>
<plugin name="XML Debugger Plugin" latest="1.7.5" changelog="https://igniterealtime.org/projects/openfire/plugins/1.7.5/xmldebugger/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.7.5/xmldebugger.jar" author="Ignite Realtime" description="Prints XML traffic to the stdout (raw and interpreted XML)" minServerVersion="4.5.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.7.5/xmldebugger/readme.html" fileSize="25828"/>
<plugin name="Push Server" latest="1.0.0" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.0/pushserver/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.0/pushserver.jar" author="Busoft Teknoloji A.Ş." description="Send push notifications to mobile devices through FCM or APNS" icon="https://igniterealtime.org/projects/openfire/plugins/1.0.0/pushserver/logo_small.png" minServerVersion="4.3.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.0/pushserver/readme.html" fileSize="10321722"/>
<plugin name="DB Access" latest="1.2.3" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.3/dbaccess/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.3/dbaccess.jar" author="Daniel Henninger" description="Provides administrators with a simple direct access interface to their Openfire DB." icon="https://igniterealtime.org/projects/openfire/plugins/1.2.3/dbaccess/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.3/dbaccess/readme.html" fileSize="11766"/>
<plugin name="User Import Export" latest="2.7.0" changelog="https://igniterealtime.org/projects/openfire/plugins/2.7.0/userImportExport/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/2.7.0/userImportExport.jar" author="Ryan Graham" description="Enables import and export of user data" icon="https://igniterealtime.org/projects/openfire/plugins/2.7.0/userImportExport/logo_small.gif" minServerVersion="4.3.0" readme="https://igniterealtime.org/projects/openfire/plugins/2.7.0/userImportExport/readme.html" fileSize="842649"/>
<plugin name="RawPropertyEditor" latest="1.0.2" changelog="https://igniterealtime.org/projects/openfire/plugins/1.0.2/rawpropertyeditor/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.0.2/rawpropertyeditor.jar" author="Liam Gregory" description="RawPropertyEditor Plugin" icon="https://igniterealtime.org/projects/openfire/plugins/1.0.2/rawpropertyeditor/logo_small.gif" minServerVersion="4.7.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.0.2/rawpropertyeditor/readme.html" fileSize="1763765"/>
<plugin name="Just married" latest="1.2.4" changelog="https://igniterealtime.org/projects/openfire/plugins/1.2.4/justmarried/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.2.4/justmarried.jar" author="Holger Bergunde" description="Allows admins to rename or copy users" icon="https://igniterealtime.org/projects/openfire/plugins/1.2.4/justmarried/logo_small.png" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.2.4/justmarried/readme.html" fileSize="39579"/>
<plugin name="NodeJs" latest="0.1.1" changelog="https://igniterealtime.org/projects/openfire/plugins/0.1.1/nodejs/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.1.1/nodejs.jar" author="igniterealtime.org" description="Integrates NodeJs Applications with Openfire." icon="https://igniterealtime.org/projects/openfire/plugins/0.1.1/nodejs/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/0.1.1/nodejs/readme.html" licenseType="Apache 2.0" fileSize="20432"/>
<plugin name="Pade" latest="1.7.2" changelog="https://igniterealtime.org/projects/openfire/plugins/1.7.2/pade/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/1.7.2/pade.jar" author="Ignite Realtime" description="Web-based chat, groupchat, telephones, audio and video conferencing solution using ConverseJS, Jitsi and FreeSWITCH" icon="https://igniterealtime.org/projects/openfire/plugins/1.7.2/pade/logo_small.gif" minServerVersion="4.7.0" readme="https://igniterealtime.org/projects/openfire/plugins/1.7.2/pade/readme.html" fileSize="245590151"/>
<plugin name="Ohun" latest="0.0.2" changelog="https://igniterealtime.org/projects/openfire/plugins/0.0.2/ohun/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.0.2/ohun.jar" author="Ignite Realtime" description="Simple group audio conferencing plugin for Openfire" icon="https://igniterealtime.org/projects/openfire/plugins/0.0.2/ohun/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/0.0.2/ohun/readme.html" licenseType="Apache 2.0" fileSize="23580824"/>
<plugin name="Monitoring Service" latest="2.3.1" changelog="https://igniterealtime.org/projects/openfire/plugins/2.3.1/monitoring/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/2.3.1/monitoring.jar" author="Ignite Realtime" description="Monitors conversations and statistics of the server." icon="https://igniterealtime.org/projects/openfire/plugins/2.3.1/monitoring/logo_small.gif" minServerVersion="4.7.0" readme="https://igniterealtime.org/projects/openfire/plugins/2.3.1/monitoring/readme.html" fileSize="29748287"/>
<plugin name="Jingle Nodes Plugin" latest="0.2.1" changelog="https://igniterealtime.org/projects/openfire/plugins/0.2.1/jingleNodes/changelog.html" url="https://igniterealtime.org/projects/openfire/plugins/0.2.1/jingleNodes.jar" author="Jingle Nodes (Rodrigo Martins)" description="Provides support for Jingle Nodes" icon="https://igniterealtime.org/projects/openfire/plugins/0.2.1/jingleNodes/logo_small.gif" minServerVersion="4.0.0" readme="https://igniterealtime.org/projects/openfire/plugins/0.2.1/jingleNodes/readme.html" fileSize="1039232"/>
</available>

View File

@@ -0,0 +1,42 @@
#
# This file defines the configuration properties required
# when using the Atlassian Crowd integration for Openfire.
#
# https://confluence.atlassian.com/display/CROWD/The+crowd.properties+file
#
# To activate the Crowd integration for Openfire, you must define
# the following Openfire system properties:
#
# provider.admin.className org.jivesoftware.openfire.crowd.CrowdAdminProvider
# provider.auth.className org.jivesoftware.openfire.crowd.CrowdAuthProvider
# provider.group.className org.jivesoftware.openfire.crowd.CrowdGroupProvider
# provider.user.className org.jivesoftware.openfire.crowd.CrowdUserProvider
# provider.vcard.className org.jivesoftware.openfire.crowd.CrowdVCardProvider
#
# In addition, you may customize the Crowd provider using the following Openfire
# system properties:
#
# admin.authorizedGroups <comma-separated list of Crowd groups having Openfire admin rights>
# crowd.groups.cache.ttl.seconds 3600
# crowd.users.cache.ttl.seconds 3600
#
# The REST URL for your Crowd server.
crowd.server.url=https://YOUR-CROWD-SERVER:8095/crowd/
# These properties are required to authenticate with the Crowd server.
# They must match the values specified in the Crowd configuration.
application.name=openfire
application.password=<password>
# Other optional configuration properties.
#http.proxy.host=
#http.proxy.port=
#http.proxy.username=
#http.proxy.password=
# These properties can be used to tune the Crowd integration.
#http.max.connections=20
#http.timeout=5000
#http.socket.timeout=20000

View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<jive>
<adminConsole>
<port>9090</port>
<securePort>9091</securePort>
</adminConsole>
<connectionProvider>
<className>org.jivesoftware.database.EmbeddedConnectionProvider</className>
</connectionProvider>
<autosetup>
<run>true</run>
<locale>en</locale>
<xmpp>
<auth>
<anonymous>true</anonymous>
</auth>
<domain>localhost</domain>
<fqdn>localhost</fqdn>
</xmpp>
<database>
<mode>embedded</mode>
</database>
<admin>
<email>admin@example.com</email>
<password>admin</password>
</admin>
<users>
<user1>
<username>john</username>
<password>secret</password>
<name>John Doe</name>
<email>john.doe@example.com</email>
<roster>
<item1>
<jid>jane@localhost</jid>
<nickname>Jane</nickname>
</item1>
</roster>
</user1>
<user2>
<username>jane</username>
<password>secret</password>
<name>Jane Doe</name>
<email>jane.doe@example.com</email>
<roster>
<item1>
<jid>john@localhost</jid>
<nickname>John</nickname>
</item1>
</roster>
</user2>
</users>
</autosetup>
</jive>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<jive>
<adminConsole>
<port>9090</port>
<securePort>9091</securePort>
</adminConsole>
<connectionProvider>
<className>org.jivesoftware.database.DefaultConnectionProvider</className>
</connectionProvider>
<setup>true</setup>
<locale>en</locale>
<fqdn>localhost</fqdn>
</jive>

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This file stores security-related properties needed by Openfire.
You may edit this file to manage encrypted properties and
encryption configuration value. Note however that you should not
edit this file while Openfire is running, or it may be overwritten.
It is important to note that Openfire will store encrypted property
values securely "at rest" (e.g. in the database or XML), but the
values will be managed as clear text strings in memory at runtime for
interoperability and performance reasons. Encrypted property values
are not visible via the Openfire console, but they may be edited or
deleted as needed.
-->
<security>
<encrypt>
<!-- This can be set to "AES" or "Blowfish" (default) at setup time -->
<algorithm>Blowfish</algorithm>
<key>
<!--
If this is a new server setup, you may set a custom encryption key
by setting a value for the <new /> encryption key element only.
To change the encryption key, provide values for both new and old
encryption keys here. The "old" key must match the unencrypted value
of the "current" key. The server will update the existing property
values in the database, re-encrypting them using the new key. After
the encrypted properties have been updated, the new key will itself
be encrypted and re-written into this file as <current />.
Note that if the current encryption key becomes invalid, any property
values secured by the original key will be inaccessible as well.
The key value can be any string, and it will be hashed, filled, and/or
truncated to produce a compatible key for the corresponding algorithm.
Note that leading and trailing spaces will be ignored. A strong key
will contain sixteen characters or more.
<old></old>
<new></new>
-->
<current></current>
</key>
<property>
<!--
This list includes the names of properties that have been marked for
encryption. Any XML properties (from openfire.xml) that are listed here
will be encrypted automatically upon first use. Other properties
(already in the database) can be added to this list at runtime via the
"System Properties" page in the Openfire console.
-->
<name>database.defaultProvider.username</name>
<name>database.defaultProvider.password</name>
</property>
</encrypt>
<!--
Any other property defined in this file will be treated as an encrypted
property. The value (in clear text) will be encrypted and migrated into
the Openfire database during the next startup. The property name will
be added to the list of encrypted properties and the clear text value
will be removed from this file.
<foo><bar>Secr3t$tr1ng!</bar></foo>
-->
</security>

View File

@@ -0,0 +1 @@
This directory is used as a default location in which Openfire stores backups of keystore files.

View File

@@ -0,0 +1,4 @@
<version>
<openfire latest="4.7.3" changelog="https://igniterealtime.org/builds/openfire/docs/latest/changelog.html" url="https://igniterealtime.org/downloads/"/>
</version>

View File

@@ -0,0 +1,10 @@
version: "3.7"
services:
Openfire:
image: fishbowler/openfire:latest
ports:
- "5222:5222"
volumes:
- ./_data/openfire/conf:/var/lib/openfire/conf
command:
- -demoboot

View File

@@ -0,0 +1,181 @@
/*
* Copyright 2014-2022 the original author or authors.
*
* Licensed 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
*
* https://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.springframework.cloud.fn.consumer.xmpp;
import java.io.File;
import java.io.IOException;
import java.time.Duration;
import java.util.function.Consumer;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.StanzaCollector;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.StanzaTypeFilter;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.jxmpp.stringprep.XmppStringprepException;
import org.testcontainers.containers.DockerComposeContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.integration.xmpp.XmppHeaders;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.test.annotation.DirtiesContext;
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;
/**
* @author Daniel Frey
*
* @since 4.0.0
*/
@SpringBootTest(
properties = {
"xmpp.factory.user=john",
"xmpp.factory.password=secret",
"xmpp.factory.host=localhost",
"xmpp.factory.service-name=localhost",
"xmpp.factory.security-mode=disabled"
}
)
@DirtiesContext
@Testcontainers
public class XmppConsumerConfigurationTests {
private static final String XMPP_HOST = "localhost";
private static final int XMPP_PORT = 5222;
private static final String FROM = "john";
private static final String TO = "jane";
private static final String TO_PW = "secret";
private static final String SERVICE_NAME = "localhost";
@Container
private static final DockerComposeContainer XMPP_CONTAINER =
new DockerComposeContainer(new File("src/test/docker-compose/xmpp/docker-compose.yml"))
.withExposedService("Openfire", XMPP_PORT);
@Autowired
private Consumer<Message<?>> xmppConsumer;
// A client connection is needed to receive the message from the xmpp server
// to verify it was received successfully
private XMPPTCPConnection clientConnection;
@BeforeEach
void setup() throws IOException, SmackException, XMPPException, InterruptedException {
XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
builder.setHost(XMPP_HOST);
builder.setPort(XMPP_PORT);
builder.setResource(SERVICE_NAME);
builder.setUsernameAndPassword(TO, TO_PW)
.setXmppDomain(SERVICE_NAME);
this.clientConnection = new XMPPTCPConnection(builder.build());
this.clientConnection.connect();
this.clientConnection.login();
}
@AfterEach
void teardown() {
this.clientConnection.instantShutdown();
}
@Test
void messageHandlerConfiguration() {
StanzaCollector collector
= this.clientConnection.createStanzaCollector(StanzaTypeFilter.MESSAGE);
Message<?> testMessage =
MessageBuilder.withPayload("test")
.setHeader(XmppHeaders.TO, TO + "@" + SERVICE_NAME)
.build();
await().atMost(Duration.ofSeconds(20)).pollDelay(Duration.ofMillis(100))
.untilAsserted(() -> {
xmppConsumer.accept(testMessage);
Stanza stanza = collector.nextResult();
assertStanza(stanza);
});
}
@Test
void xmppMessageHandlerConfiguration() throws XmppStringprepException {
StanzaCollector collector
= this.clientConnection.createStanzaCollector(StanzaTypeFilter.MESSAGE);
Message<?> testMessage =
MessageBuilder.withPayload(org.jivesoftware.smack.packet.MessageBuilder.buildMessage().addBody("en_us", "test").to(TO + "@" + SERVICE_NAME).build())
.build();
await().atMost(Duration.ofSeconds(20)).pollDelay(Duration.ofMillis(100))
.untilAsserted(() -> {
xmppConsumer.accept(testMessage);
Stanza stanza = collector.nextResult();
assertStanza(stanza);
});
}
private void assertStanza(Stanza stanza) {
assertTo(stanza);
assertFrom(stanza);
}
private void assertTo(Stanza stanza) {
assertThat(stanza.getTo().asBareJid().asUnescapedString()).isEqualTo(TO + "@" + SERVICE_NAME);
}
private void assertFrom(Stanza stanza) {
assertThat(stanza.getFrom().asBareJid().asUnescapedString()).isEqualTo(FROM + "@" + SERVICE_NAME);
}
@SpringBootConfiguration
@EnableAutoConfiguration
@Import(XmppConsumerConfiguration.class)
static class XmppConsumerTestApplication { }
}

View File

@@ -42,11 +42,6 @@
<artifactId>ftp-supplier</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>geode-supplier</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>http-supplier</artifactId>
@@ -142,11 +137,6 @@
<artifactId>ftp-consumer</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>geode-consumer</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>jdbc-consumer</artifactId>
@@ -197,6 +187,11 @@
<artifactId>twitter-consumer</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>xmpp-consumer</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>wavefront-consumer</artifactId>

View File

@@ -44,7 +44,8 @@
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>geode-common</artifactId>
<version>${java-functions.version}</version>
<!-- <version>${java-functions.version}</version>-->
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
@@ -82,11 +83,11 @@
<artifactId>ftp-supplier</artifactId>
<version>${java-functions.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>geode-supplier</artifactId>
<version>${java-functions.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud.fn</groupId>-->
<!-- <artifactId>geode-supplier</artifactId>-->
<!-- <version>${java-functions.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>http-supplier</artifactId>
@@ -193,11 +194,11 @@
<artifactId>ftp-consumer</artifactId>
<version>${java-functions.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>geode-consumer</artifactId>
<version>${java-functions.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud.fn</groupId>-->
<!-- <artifactId>geode-consumer</artifactId>-->
<!-- <version>${java-functions.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>jdbc-consumer</artifactId>