/**
* $Revision $
* $Date $
*
* Copyright (C) 2005-2010 Jive Software. All rights reserved.
*
* 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
*
* 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.jivesoftware.openfire.plugin.ofsocial;
import org.jivesoftware.openfire.plugin.spark.*;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.roster.Roster;
import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.openfire.roster.*;
import org.jivesoftware.openfire.user.*;
import org.jivesoftware.util.*;
import org.jivesoftware.openfire.muc.*;
import org.jivesoftware.openfire.muc.spi.*;
import org.jivesoftware.openfire.forms.spi.*;
import org.jivesoftware.openfire.forms.*;
import org.jivesoftware.openfire.group.*;
import org.jivesoftware.openfire.event.GroupEventDispatcher;
import org.jivesoftware.openfire.SessionManager;
import org.jivesoftware.openfire.StreamID;
import org.jivesoftware.openfire.session.LocalClientSession;
import org.jivesoftware.openfire.net.VirtualConnection;
import org.jivesoftware.openfire.auth.UnauthorizedException;
import org.jivesoftware.openfire.auth.AuthToken;
import org.jivesoftware.openfire.user.User;
import org.jivesoftware.openfire.user.UserAlreadyExistsException;
import org.jivesoftware.openfire.user.UserManager;
import org.jivesoftware.openfire.user.UserNotFoundException;
import org.jivesoftware.openfire.SessionPacketRouter;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.fastpath.util.WorkgroupUtils;
import org.jivesoftware.openfire.fastpath.dataforms.FormManager;
import org.jivesoftware.openfire.fastpath.settings.chat.ChatSettingsCreator;
import org.jivesoftware.xmpp.workgroup.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.security.cert.Certificate;
import org.jivesoftware.openfire.auth.UnauthorizedException;
import org.jivesoftware.openfire.spi.ConnectionConfiguration;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.net.UnknownHostException;
import java.sql.*;
import java.io.*;
import org.dom4j.Element;
import org.xmpp.packet.*;
import org.xmpp.packet.Packet;
import javax.script.ScriptEngine;
import javax.naming.ServiceUnavailableException;
import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;
import com.caucho.quercus.script.QuercusScriptEngineFactory;
import com.caucho.quercus.module.AbstractQuercusModule;
public class PHP2Java extends AbstractQuercusModule
{
public ScriptEngine engine = (new QuercusScriptEngineFactory()).getScriptEngine();
private final static Logger Log = LoggerFactory.getLogger(PHP2Java.class);
private final static String AUTHORITY = "https://login.windows.net/common";
private final static String CLIENT_ID = "9ba1a5c7-f17a-4de9-a1f1-6178c8d51223";
private String accessToken = null;
private String refreshToken = null;
private String idToken = null;
private String givenName = null;
private String familyName = null;
public PHP2Java()
{
}
public boolean of_authenticate_365(String username, String password)
{
AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(AUTHORITY, false, service);
Future<AuthenticationResult> future = context.acquireToken("https://graph.windows.net", CLIENT_ID, username, password, null);
result = future.get();
} catch (Exception e) {
Log.error("of_authenticate_365", e);
} finally {
service.shutdown();
}
if (result != null)
{
accessToken = result.getAccessToken();
refreshToken = result.getRefreshToken();
idToken = result.getIdToken();
givenName = result.getUserInfo().getGivenName();
familyName = result.getUserInfo().getFamilyName();
}
return result != null;
}
public String of_get_access_token()
{
return accessToken;
}
public String of_get_refresh_token()
{
return refreshToken;
}
public String of_get_id_token()
{
return idToken;
}
public String of_get_given_name()
{
return givenName;
}
public String get_family_name()
{
return familyName;
}
public String registerUser(String username)
{
try {
ScriptEngine engine = (new QuercusScriptEngineFactory()).getScriptEngine();
String code =
"<?php " +
"header('Access-Control-Allow-Origin: *'); " +
"header('Access-Control-Allow-Methods: GET, POST'); " +
"header('Access-Control-Allow-Headers: X-Requested-With'); " +
" " +
"require_once('wp-blog-header.php'); " +
"require_once('wp-includes/registration.php'); " +
"require_once('wp-includes/registration.php'); " +
"require_once('wp-includes/pluggable.php'); " +
" " +
"$newusername = htmlspecialchars($_GET['username']); " +
"$newpassword = htmlspecialchars($_GET['password']); " +
"$newemail = htmlspecialchars($_GET['email']); " +
"$name = htmlspecialchars($_GET['name']); " +
" " +
"if (!$newpassword) $newpassword = $newusername; " +
"if (!$name) $name = $newusername; " +
"if (!$newemail) $newemail = $newusername . '@traderlynk.net'; " +
" " +
"if (!username_exists($newusername) && !email_exists($newemail) ) " +
"{ " +
" $user_id = wp_create_user( $newusername, $newpassword, $newemail); " +
" " +
" if ( is_int($user_id) ) " +
" { " +
" $wp_user_object = new WP_User($user_id); " +
" $wp_user_object->set_role('subscriber'); " +
" " +
" wp_update_user( array( 'ID' => $user_id, 'display_name' => $name ));" +
" " +
" echo 'ok'; " +
" } " +
" else { " +
" echo 'error'; " +
" } " +
"} " +
"else { " +
" echo 'nothing'; " +
"} " +
"?> " +
"";
Object o = engine.eval(code);
System.out.println(o);
return o.toString();
} catch (Exception e) {
Log.error("PHP2Java script error", e);
return null;
}
}
public String hello_test(String name)
{
return "Hello, " + name;
}
public void of_logInfo(String text)
{
Log.info(text);
}
public void of_logError(String text)
{
Log.error(text);
}
public void of_logDebug(String text)
{
Log.debug(text);
}
public void of_logWarn(String text)
{
Log.warn(text);
}
public synchronized void sendEmail(String toAddress, String subject, String body, String htmlBody)
{
try {
String domainName = JiveGlobals.getProperty("xmpp.domain", XMPPServer.getInstance().getServerInfo().getHostname());
Log.info( "sendEmail " + toAddress + " " + subject + "\n " + body + "\n " + htmlBody);
EmailService.getInstance().sendMessage(null, toAddress, "Inspired Social", "no_reply@" + domainName, subject, body, htmlBody);
}
catch (Exception e) {
Log.error(e.toString());
}
}
public String of_get_db_username()
{
return JiveGlobals.getXMLProperty("database.defaultProvider.username");
}
public String of_get_db_password()
{
return JiveGlobals.getXMLProperty("database.defaultProvider.password");
}
public String of_get_db_name()
{
String serverURL = JiveGlobals.getXMLProperty("database.defaultProvider.serverURL");
String defaultName = "openfire";
int pos = serverURL.indexOf("3306");
if (pos > -1) defaultName = serverURL.substring(pos + 5);
pos = defaultName.indexOf("?");
if (pos > -1) defaultName = defaultName.substring(0, pos);
return defaultName;
}
public void of_set_user_session(String username)
{
Log.debug( "of_set_user_session " + username);
JID jid = new JID(username + "@" + JiveGlobals.getProperty("xmpp.domain") + "/" + username);
LocalClientSession session = (LocalClientSession) SessionManager.getInstance().getSession(jid);
if (session == null)
{
Log.info( "of_set_user_session not found session for " + username);
UserManager userManager = XMPPServer.getInstance().getUserManager();
try {
Log.info( "of_set_user_session creating user session for " + username);
userManager.getUser(username);
AuthToken authToken = new AuthToken(username);
session = SessionManager.getInstance().createClientSession( new DummyConnection(), new BasicStreamID("url" + System.currentTimeMillis() ) );
session.setAuthToken(authToken, username);
}
catch (UserNotFoundException e) {
Log.error("of_set_user_session - user not found " + username);
}
}
}
public synchronized void createGroupChat(String groupId)
{
String roomName = getSQLField("SELECT name FROM wp_bp_groups WHERE id='" + groupId + "'", "name");
String roomStatus = getSQLField("SELECT status FROM wp_bp_groups WHERE id='" + groupId + "'", "status");
String roomDesc = getSQLField("SELECT description FROM wp_bp_groups WHERE id='" + groupId + "'", "description");
String domainName = JiveGlobals.getProperty("xmpp.domain", XMPPServer.getInstance().getServerInfo().getHostname());
Log.info( "createGroupChat " + groupId + " " + roomName);
try
{
if (roomName != null && roomStatus != null)
{
roomName = removeSpaces(roomName);
if (roomStatus.equals("hidden"))
{
createWorkgroup(roomName, roomDesc);
} else {
createRoom(roomName, roomStatus, roomDesc);
}
}
} catch(Exception e) {
Log.error("createGroupChat exception ", e);
}
}
private String removeSpaces(String Name)
{
String NewName = "";
for ( int i = 0; i < Name.length(); i++)
{
if (Name.charAt(i) != ' ' )
{
NewName = NewName + Name.charAt(i);
}
}
return NewName;
}
public synchronized String getGroupChats(String userId)
{
//Log.info( "getGroupChats " + userId);
String sql = "SELECT name FROM wp_bp_groups INNER JOIN wp_bp_groups_members ON wp_bp_groups.id = wp_bp_groups_members.group_id WHERE wp_bp_groups_members.user_id ='" + userId + "' AND is_confirmed=1";
return getSQLGroupNames(sql);
}
public synchronized void joinLeaveGroup(String fromUserId, String groupId, String action)
{
String groupName = getSQLField("SELECT name FROM wp_bp_groups WHERE id='" + groupId + "'", "name");
String fromUser = getUserIdByID(fromUserId);
String domainName = JiveGlobals.getProperty("xmpp.domain", XMPPServer.getInstance().getServerInfo().getHostname());
if (groupName != null)
{
try
{
Group group = GroupManager.getInstance().getGroup(groupName, true);
if (group != null)
{
if (fromUser != null)
{
Log.info( "joinLeaveGroup " + action + " " + fromUser + " " + groupName);
Map<String, Object> params = new HashMap<String, Object>();
params.put("member", fromUser+"@"+domainName);
if ("leave".equals(action))
{
GroupEventDispatcher.dispatchEvent(group, GroupEventDispatcher.EventType.member_removed, params);
} else {
GroupEventDispatcher.dispatchEvent(group, GroupEventDispatcher.EventType.member_added, params);
}
}
}
}
catch(Exception e)
{
Log.error("joinGroup exception ", e);
e.printStackTrace();
}
}
}
public synchronized void removeFriendship(String fromUserId, String toUserId)
{
String domainName = JiveGlobals.getProperty("xmpp.domain", XMPPServer.getInstance().getServerInfo().getHostname());
String fromUser = getUserIdByID(fromUserId);
String toUser = getUserIdByID(toUserId);
if (fromUser != null && toUser != null)
{
Log.info( "removeFriendship " + fromUser + " " + toUser);
try
{
Roster roster = XMPPServer.getInstance().getRosterManager().getRoster(fromUser);
if (roster != null) {
RosterItem gwitem = roster.deleteRosterItem(new JID(toUser + "@" + domainName), false);
if (gwitem != null)
{
Presence reply = new Presence();
reply.setTo(new JID(toUser + "@" + domainName));
reply.setFrom(new JID(fromUser + "@" + domainName));
reply.setType(Presence.Type.unavailable);
XMPPServer.getInstance().getPresenceRouter().route(reply);
}
}
Roster roster2 = XMPPServer.getInstance().getRosterManager().getRoster(toUser);
if (roster2 != null) {
RosterItem gwitem = roster2.deleteRosterItem(new JID(fromUser + "@" + domainName), false);
if (gwitem != null)
{
Presence reply = new Presence();
reply.setTo(new JID(fromUser + "@" + domainName));
reply.setFrom(new JID(toUser + "@" + domainName));
reply.setType(Presence.Type.unavailable);
XMPPServer.getInstance().getPresenceRouter().route(reply);
}
}
}
catch(Exception e)
{
Log.error("removeFriendship exception ", e);
e.printStackTrace();
}
} else Log.warn("cannot delete friendship " + fromUserId + " " + toUserId);
}
public synchronized void createFriendship(String fromUserId, String toUserId, String group)
{
String domainName = JiveGlobals.getProperty("xmpp.domain", XMPPServer.getInstance().getServerInfo().getHostname());
String fromUser = getUserIdByID(fromUserId);
String toUser = getUserIdByID(toUserId);
String Nickname = getUserNameByID(toUserId);
String Nickname2 = getUserNameByID(fromUserId);
if (fromUser != null && toUser != null && fromUser != toUser)
{
try
{
Roster roster = XMPPServer.getInstance().getRosterManager().getRoster(fromUser);
if (roster != null)
{
RosterItem gwitem = roster.createRosterItem(new JID(toUser + "@" + domainName), true, true);
if (gwitem != null)
{
Log.info( "createFriendship " + fromUser + " " + toUser + " " + Nickname);
gwitem.setSubStatus(RosterItem.SUB_BOTH);
gwitem.setAskStatus(RosterItem.ASK_NONE);
gwitem.setNickname(Nickname);
ArrayList<String> groups = new ArrayList<String>();
groups.add(group);
gwitem.setGroups((List<String>)groups);
roster.updateRosterItem(gwitem);
roster.broadcast(gwitem, true);
Presence reply = new Presence();
reply.setTo(new JID(fromUser + "@" + domainName));
reply.setFrom(new JID(toUser + "@" + domainName));
XMPPServer.getInstance().getPresenceRouter().route(reply);
} else Log.warn("cannot create friendship " + fromUser + " " + toUser + " " + Nickname);
}
Roster roster2 = XMPPServer.getInstance().getRosterManager().getRoster(toUser);
if (roster2 != null)
{
RosterItem gwitem = roster2.createRosterItem(new JID(fromUser + "@" + domainName), true, true);
if (gwitem != null)
{
Log.info( "createFriendship " + toUser + " " + fromUser + " " + Nickname2);
gwitem.setSubStatus(RosterItem.SUB_BOTH);
gwitem.setAskStatus(RosterItem.ASK_NONE);
gwitem.setNickname(Nickname2);
ArrayList<String> groups = new ArrayList<String>();
groups.add(group);
gwitem.setGroups((List<String>)groups);
roster2.updateRosterItem(gwitem);
roster2.broadcast(gwitem, true);
Presence reply2 = new Presence();
reply2.setTo(new JID(toUser + "@" + domainName));
reply2.setFrom(new JID(fromUser + "@" + domainName));
XMPPServer.getInstance().getPresenceRouter().route(reply2);
} else Log.warn("cannot create friendship " + toUser + " " + fromUser + " " + Nickname2);
}
}
catch(Exception e)
{
Log.error("createFriendship exception ", e);
e.printStackTrace();
}
} else Log.warn("cannot create friendship " + fromUserId + " " + toUserId + " " + group);
}
public String getUserIdByID(String id)
{
return getUserByID(id, "user_login");
}
public String getUserNameByID(String id)
{
return getUserByID(id, "user_login");
}
private String getUserByID(String id, String field)
{
return getSQLField("SELECT " + field + " FROM wp_users WHERE ID='" + id + "'", field);
}
private String getSQLField(String sql, String field)
{
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
String fieldValue = null;
try {
con = DbConnectionManager.getConnection();
psmt = con.prepareStatement(sql);
rs = psmt.executeQuery();
if (rs.next()) {
fieldValue = rs.getString(field);
}
} catch (SQLException e) {
Log.error("getSQLField exception ", e);
} finally {
DbConnectionManager.closeConnection(rs, psmt, con);
}
return fieldValue;
}
private String getSQLGroupNames(String sql)
{
String field = "name";
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
String listValue = "";
try {
con = DbConnectionManager.getConnection();
psmt = con.prepareStatement(sql);
rs = psmt.executeQuery();
boolean first = true;
while (rs.next()) {
String fieldValue = removeSpaces(rs.getString(field)).toLowerCase();
MUCRoom room = XMPPServer.getInstance().getMultiUserChatManager().getMultiUserChatService("conference").getChatRoom(fieldValue);
if (room == null)
{
createRoom(fieldValue, "public", fieldValue);
}
if (first)
{
listValue = "\"" + fieldValue + "\"";
first = false;
} else listValue = listValue + ", \"" + fieldValue + "\"";
}
} catch (Exception e) {
Log.error("getSQLList exception ", e);
} finally {
DbConnectionManager.closeConnection(rs, psmt, con);
}
return listValue;
}
public String getOpenfireUsers()
{
String sql = "SELECT * FROM ofuser;";
Connection con = null;
PreparedStatement psmt = null;
ResultSet rs = null;
String listValue = "";
try {
con = DbConnectionManager.getConnection();
psmt = con.prepareStatement(sql);
rs = psmt.executeQuery();
boolean first = true;
while (rs.next()) {
String username = rs.getString("username");
String name = rs.getString("name");
String email = rs.getString("email");
if (first)
{
listValue = username + "," + name + "," + email;
first = false;
} else listValue = listValue + "|" + username + "," + name + "," + email;
}
} catch (Exception e) {
Log.error("getSQLList exception ", e);
} finally {
DbConnectionManager.closeConnection(rs, psmt, con);
}
return listValue;
}
public void messageOtherRoomMembers(String myName, String roomJID, String msg)
{
Log.info( "messageOtherRoomMembers " + roomJID);
try
{
String domainName = JiveGlobals.getProperty("xmpp.domain", XMPPServer.getInstance().getServerInfo().getHostname());
String roomName = (new JID(roomJID)).getNode();
if (XMPPServer.getInstance().getMultiUserChatManager().getMultiUserChatService("conference").hasChatRoom(roomName))
{
MUCRoom room = XMPPServer.getInstance().getMultiUserChatManager().getMultiUserChatService("conference").getChatRoom(roomName);
for (JID jid : room.getMembers())
{
Log.info( "messageOtherRoomMembers memember " + jid);
String hisName = jid.getNode();
if (hisName.equals(myName) == false)
{
}
}
}
} catch (Exception e) {
Log.error("messageOtherRoomMembers exception", e);
}
}
private void createRoom(String roomname, String roomStatus, String description)
{
String roomName = roomname.toLowerCase();
Log.info( "createRoom " + roomName + " " + roomStatus);
try
{
String domainName = JiveGlobals.getProperty("xmpp.domain", XMPPServer.getInstance().getServerInfo().getHostname());
if (XMPPServer.getInstance().getMultiUserChatManager().getMultiUserChatService("conference").hasChatRoom(roomName) == false)
{
MUCRoom room = XMPPServer.getInstance().getMultiUserChatManager().getMultiUserChatService("conference").getChatRoom(roomName);
if (room == null)
{
room = XMPPServer.getInstance().getMultiUserChatManager().getMultiUserChatService("conference").getChatRoom(roomName, new JID("admin@"+domainName));
if (room != null)
{
configureRoom(room, description);
createBookMark(roomname, roomStatus, description);
}
}
}
} catch (Exception e) {
Log.error("createRoom", e);
}
}
private void createWorkgroup(String roomName, String description)
{
String room = removeSpaces(roomName).toLowerCase();
String defaultQueueName = "Default Queue";
try
{
WorkgroupManager workgroupManager = WorkgroupManager.getInstance();
Workgroup workgroup = workgroupManager.getWorkgroup(room);
if (workgroup == null)
{
Group group = GroupManager.getInstance().getGroup(roomName, true);
if (group != null)
{
workgroup = workgroupManager.createWorkgroup(roomName);
workgroup.setDescription(description);
workgroup.setStatus(Workgroup.Status.READY);
RequestQueue queue = workgroup.createRequestQueue(defaultQueueName);
ChatSettingsCreator.getInstance().createDefaultSettings(workgroup.getJID());
FormManager formManager = FormManager.getInstance();
formManager.createGenericForm(workgroup);
queue.addGroup(group);
}
}
} catch (Exception e) {
Log.error("createWorkgroup", e);
}
}
private void createBookMark(String roomName, String roomStatus, String description)
{
Bookmark bookmark = GetBookmarkByName(roomName);
List<String> groupCollection = new ArrayList<String>();
try
{
if (bookmark == null)
{
String roomJid = roomName.toLowerCase() + "@conference." + XMPPServer.getInstance().getServerInfo().getXMPPDomain();
bookmark = new Bookmark(Bookmark.Type.group_chat, roomName, roomJid);
String id = "" + bookmark.getBookmarkID() + System.currentTimeMillis();
String rootUrlSecure = JiveGlobals.getProperty("ofmeet.root.url.secure", "https://" + XMPPServer.getInstance().getServerInfo().getHostname() + ":" + JiveGlobals.getProperty("httpbind.port.secure", "7443"));
String url = rootUrlSecure + "/ofmeet/?b=" + id;
bookmark.setProperty("url", url);
bookmark.setProperty("description", description);
bookmark.setProperty("autojoin", "true");
if (roomStatus.equals("public"))
{
bookmark.setGlobalBookmark(true);
} else {
groupCollection.add(roomName);
bookmark.setGroups(groupCollection);
}
}
} catch (Exception e) {
Log.error("createBookMark", e);
}
}
private void configureRoom(MUCRoom room, String description)
{
Log.info( "configureRoom " + room.getID());
FormField field;
XDataFormImpl dataForm = new XDataFormImpl(DataForm.TYPE_SUBMIT);
field = new XFormFieldImpl("muc#roomconfig_roomdesc");
field.setType(FormField.TYPE_TEXT_SINGLE);
field.addValue(description);
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_roomname");
field.setType(FormField.TYPE_TEXT_SINGLE);
field.addValue(room.getName());
dataForm.addField(field);
field = new XFormFieldImpl("FORM_TYPE");
field.setType(FormField.TYPE_HIDDEN);
field.addValue("http://jabber.org/protocol/muc#roomconfig");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_changesubject");
field.addValue("1");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_maxusers");
field.addValue("30");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_presencebroadcast");
field.addValue("moderator");
field.addValue("participant");
field.addValue("visitor");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_publicroom");
field.addValue("1");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_persistentroom");
field.addValue("1");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_moderatedroom");
field.addValue("0");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_membersonly");
field.addValue("0");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_allowinvites");
field.addValue("1");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_passwordprotectedroom");
field.addValue("0");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_whois");
field.addValue("moderator");
dataForm.addField(field);
field = new XFormFieldImpl("muc#roomconfig_enablelogging");
field.addValue("1");
dataForm.addField(field);
field = new XFormFieldImpl("x-muc#roomconfig_canchangenick");
field.addValue("1");
dataForm.addField(field);
field = new XFormFieldImpl("x-muc#roomconfig_registration");
field.addValue("1");
dataForm.addField(field);
// Keep the existing list of admins
field = new XFormFieldImpl("muc#roomconfig_roomadmins");
for (JID jid : room.getAdmins()) {
field.addValue(jid.toString());
}
dataForm.addField(field);
String domainName = JiveGlobals.getProperty("xmpp.domain", XMPPServer.getInstance().getServerInfo().getHostname());
field = new XFormFieldImpl("muc#roomconfig_roomowners");
field.addValue("admin@"+domainName);
dataForm.addField(field);
// Create an IQ packet and set the dataform as the main fragment
IQ iq = new IQ(IQ.Type.set);
Element element = iq.setChildElement("query", "http://jabber.org/protocol/muc#owner");
element.add(dataForm.asXMLElement());
try
{
// Send the IQ packet that will modify the room's configuration
room.getIQOwnerHandler().handleIQ(iq, room.getRole());
} catch (Exception e) {
Log.error("configureRoom exception ", e);
}
}
private Bookmark GetBookmarkByName(String name)
{
Bookmark bookmark = null;
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement("SELECT bookmarkID from ofBookmark where bookmarkName=?");
pstmt.setString(1, name);
rs = pstmt.executeQuery();
if (rs.next()) {
long bookmarkID = rs.getLong(1);
try {
bookmark = new Bookmark(bookmarkID);
}
catch (Exception e) {
}
}
}
catch (SQLException e) {
Log.error(e.getMessage(), e);
}
finally {
DbConnectionManager.closeConnection(rs, pstmt, con);
}
return bookmark;
}
public class DummyConnection extends VirtualConnection
{
public void closeVirtualConnection()
{
}
public byte[] getAddress() throws UnknownHostException {
return "0.0.0.0".getBytes();
}
public String getHostAddress() throws UnknownHostException {
return "";
}
public String getHostName() throws UnknownHostException {
return XMPPServer.getInstance().getServerInfo().getHostname();
}
public void systemShutdown() {
}
public void deliver(Packet packet) throws UnauthorizedException {
}
public void deliverRawText(String text) {
}
@Override public ConnectionConfiguration getConfiguration()
{
// TODO Here we run into an issue with the ConnectionConfiguration introduced in Openfire 4:
// it is not extensible in the sense that unforeseen connection types can be added.
// For now, null is returned, as this object is likely to be unused (its lifecycle is
// not managed by a ConnectionListener instance).
return null;
}
}
public class BasicStreamID implements StreamID {
String id;
public BasicStreamID(String id) {
this.id = id;
}
public String getID() {
return id;
}
public String toString() {
return id;
}
public int hashCode() {
return id.hashCode();
}
}
}