Commit 8138364e authored by Gaston Dombiak's avatar Gaston Dombiak Committed by gato

Fixed incorrect namespace returned in search results.

git-svn-id: http://svn.igniterealtime.org/svn/repos/wildfire/trunk@3449 b35dd754-fafc-0310-a699-88a17e54d16e
parent 6a4070d8
...@@ -44,9 +44,14 @@ ...@@ -44,9 +44,14 @@
Search Plugin Changelog Search Plugin Changelog
</h1> </h1>
<p><b>1.1.6</b> -- February 14, 2006</p>
<ul>
<li>Client Search - Fixed incorrect namespace returned in search resuslts.</li>
</ul>
<p><b>1.1.5</b> -- January 6, 2006</p> <p><b>1.1.5</b> -- January 6, 2006</p>
<ul> <ul>
<li>Client Search - specific support for Miranda was replaced with a more general means to support non-dataform searches.</li> <li>Client Search - Specific support for Miranda was replaced with a more general means to support non-dataform searches.</li>
</ul> </ul>
<p><b>1.1.4</b> -- December 15, 2005</p> <p><b>1.1.4</b> -- December 15, 2005</p>
...@@ -54,53 +59,53 @@ Search Plugin Changelog ...@@ -54,53 +59,53 @@ Search Plugin Changelog
<li>Now requires Wildfire 2.4.0</li> <li>Now requires Wildfire 2.4.0</li>
</ul> </ul>
<p><b>1.1.3</b> -- December 7, 2005</b></p> <p><b>1.1.3</b> -- December 7, 2005</p>
<ul> <ul>
<li>Client Search - fixed issue where a null pointer exception could occur when a LDAP <searchFilter> is being used. <li>Client Search - Fixed issue where a null pointer exception could occur when a LDAP <searchFilter> is being used.
</ul> </ul>
<p><b>1.1.2</b> -- June 30, 2005</b></p> <p><b>1.1.2</b> -- June 30, 2005</p>
<ul> <ul>
<li>Admin Console - fixed possible null pointer exception when during a search. <li>Admin Console - Fixed possible null pointer exception when during a search.
</ul> </ul>
<p><b>1.1.1</b> -- June 13, 2005</b></p> <p><b>1.1.1</b> -- June 13, 2005</p>
<ul> <ul>
<li>Admin Console - added a fix to prevent all the checkboxes from becoming selected after a search. <li>Admin Console - Added a fix to prevent all the checkboxes from becoming selected after a search.
<li>Admin Console - added the ability to toggle between having more or less search options. <li>Admin Console - Added the ability to toggle between having more or less search options.
<li>Admin Console - added a summary field that reports the number of users found after a search. <li>Admin Console - Added a summary field that reports the number of users found after a search.
<li>Admin Console - added some additional localization for buttons and the results table header. <li>Admin Console - Added some additional localization for buttons and the results table header.
</ul> </ul>
<p><b>1.1</b> -- May 17, 2005</b></p> <p><b>1.1</b> -- May 17, 2005</p>
<ul> <ul>
<li>Admin Console - added a page to allow the enabling/disabling of the search service and to change the service name. <li>Admin Console - Added a page to allow the enabling/disabling of the search service and to change the service name.
<li>Admin Console - added a page to allow searching similiar to what is done on the client side. <li>Admin Console - Added a page to allow searching similiar to what is done on the client side.
<li>Client Search - added a hidden FORM_TYPE field per the JEP-0055 spec. <li>Client Search - Added a hidden FORM_TYPE field per the JEP-0055 spec.
<li>Some intenternal code refactoring. <li>Some intenternal code refactoring.
</ul> </ul>
<p><b>1.0.6</b> -- April 12, 2005</b></p> <p><b>1.0.6</b> -- April 12, 2005</p>
<ul> <ul>
<li>Client Search - changed the ui to use a single text field with multiple checkboxes to specify which fields are to be searched (thanks jfroehlich).</li> <li>Client Search - Changed the ui to use a single text field with multiple checkboxes to specify which fields are to be searched (thanks jfroehlich).</li>
</ul> </ul>
<p><b>1.0.5</b> -- March 30, 2005</b></p> <p><b>1.0.5</b> -- March 30, 2005</p>
<ul> <ul>
<li>Client Search - added basic support for non-data form searches to support the Miranda (thanks Baron Ng).</li> <li>Client Search -Added basic support for non-data form searches to support the Miranda (thanks Baron Ng).</li>
</ul> </ul>
<p><b>1.0.4</b> -- March 22, 2005</b></p> <p><b>1.0.4</b> -- March 22, 2005</p>
<ul> <ul>
<li>Client Search - added type and name attributes to the identity element when handling a disco#info query.</li> <li>Client Search - Added type and name attributes to the identity element when handling a disco#info query.</li>
<li>Client Search - added a check and appropriate response to a disco#items query.</li> <li>Client Search - Added a check and appropriate response to a disco#items query.</li>
<li>Client Search - added a jid field when returning the search results.</li> <li>Client Search - Added a jid field when returning the search results.</li>
</ul> </ul>
<p><b>1.0.3</b> -- March 14, 2005</b></p> <p><b>1.0.3</b> -- March 14, 2005</p>
<ul> <ul>
<li>Client Search - fixed incompatiblity issue with psi.</li> <li>Client Search - Fixed incompatiblity issue with psi.</li>
<li>Client Search - fixed bug where a list of all the users in the system would be returned when using psi.</li> <li>Client Search - Fixed bug where a list of all the users in the system would be returned when using psi.</li>
</ul> </ul>
<p><b>1.0.2</b> -- March 8, 2005</p> <p><b>1.0.2</b> -- March 8, 2005</p>
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
<name>Search</name> <name>Search</name>
<description>Provides support for Jabber Search (JEP-0055)</description> <description>Provides support for Jabber Search (JEP-0055)</description>
<author>Ryan Graham</author> <author>Ryan Graham</author>
<version>1.1.5</version> <version>1.1.6</version>
<date>01/06/2006</date> <date>02/14/2006</date>
<minServerVersion>2.4.0</minServerVersion> <minServerVersion>2.4.0</minServerVersion>
<adminconsole> <adminconsole>
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
package org.jivesoftware.wildfire.plugin; package org.jivesoftware.wildfire.plugin;
import org.dom4j.Attribute;
import org.dom4j.DocumentHelper; import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
import org.dom4j.QName; import org.dom4j.QName;
...@@ -34,19 +33,7 @@ import org.xmpp.packet.JID; ...@@ -34,19 +33,7 @@ import org.xmpp.packet.JID;
import org.xmpp.packet.Packet; import org.xmpp.packet.Packet;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/** /**
* Provides support for Jabber Search * Provides support for Jabber Search
...@@ -65,7 +52,6 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener { ...@@ -65,7 +52,6 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener {
public static final String PLUGIN_SEARCH_SERVICENAME = "plugin.search.serviceName"; public static final String PLUGIN_SEARCH_SERVICENAME = "plugin.search.serviceName";
public static final String PLUGIN_SEARCH_SERVICEENABLED = "plugin.search.serviceEnabled"; public static final String PLUGIN_SEARCH_SERVICEENABLED = "plugin.search.serviceEnabled";
private XMPPServer server;
private UserManager userManager; private UserManager userManager;
private ComponentManager componentManager; private ComponentManager componentManager;
private PluginManager pluginManager; private PluginManager pluginManager;
...@@ -88,8 +74,7 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener { ...@@ -88,8 +74,7 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener {
serviceName = JiveGlobals.getProperty("plugin.search.serviceName", "search"); serviceName = JiveGlobals.getProperty("plugin.search.serviceName", "search");
serviceEnabled = JiveGlobals.getBooleanProperty("plugin.search.serviceEnabled", true); serviceEnabled = JiveGlobals.getBooleanProperty("plugin.search.serviceEnabled", true);
server = XMPPServer.getInstance(); serverName = XMPPServer.getInstance().getServerInfo().getName();
serverName = server.getServerInfo().getName();
// See if the installed provider supports searching. If not, workaround // See if the installed provider supports searching. If not, workaround
// by providing our own searching. // by providing our own searching.
UserManager manager = UserManager.getInstance(); UserManager manager = UserManager.getInstance();
...@@ -185,7 +170,6 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener { ...@@ -185,7 +170,6 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener {
catch (Exception e) { catch (Exception e) {
componentManager.getLog().error(e); componentManager.getLog().error(e);
} }
server = null;
userManager = null; userManager = null;
fieldLookup = null; fieldLookup = null;
reverseFieldLookup = null; reverseFieldLookup = null;
...@@ -217,13 +201,12 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener { ...@@ -217,13 +201,12 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener {
try { try {
IQ replyPacket = IQ.createResultIQ(packet); IQ replyPacket = IQ.createResultIQ(packet);
Element responseElement = DocumentHelper.createElement(QName.get( Element responseElement = replyPacket
"query", "http://jabber.org/protocol/disco#info")); .setChildElement("query", "http://jabber.org/protocol/disco#info");
responseElement.addElement("identity").addAttribute("category", "search") responseElement.addElement("identity").addAttribute("category", "search")
.addAttribute("type", "text") .addAttribute("type", "text")
.addAttribute("name", "User Search"); .addAttribute("name", "User Search");
responseElement.addElement("feature").addAttribute("var", "jabber:iq:search"); responseElement.addElement("feature").addAttribute("var", "jabber:iq:search");
replyPacket.setChildElement(responseElement);
componentManager.sendPacket(this, replyPacket); componentManager.sendPacket(this, replyPacket);
} }
...@@ -234,10 +217,7 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener { ...@@ -234,10 +217,7 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener {
else if ("http://jabber.org/protocol/disco#items".equals(namespace)) { else if ("http://jabber.org/protocol/disco#items".equals(namespace)) {
try { try {
IQ replyPacket = IQ.createResultIQ(packet); IQ replyPacket = IQ.createResultIQ(packet);
Element responseElement = DocumentHelper.createElement(QName.get( replyPacket.setChildElement("query", "http://jabber.org/protocol/disco#items");
"query", "http://jabber.org/protocol/disco#info"));
replyPacket.setChildElement(responseElement);
componentManager.sendPacket(this, replyPacket); componentManager.sendPacket(this, replyPacket);
} }
catch (ComponentException e) { catch (ComponentException e) {
...@@ -263,22 +243,18 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener { ...@@ -263,22 +243,18 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener {
} }
private IQ replyDisabled(IQ packet) { private IQ replyDisabled(IQ packet) {
Element reply = DocumentHelper.createElement(QName.get("query", "jabber:iq:search")); IQ replyPacket = IQ.createResultIQ(packet);
Element reply = replyPacket.setChildElement("query", "jabber:iq:search");
XDataFormImpl unavailableForm = new XDataFormImpl(DataForm.TYPE_CANCEL); XDataFormImpl unavailableForm = new XDataFormImpl(DataForm.TYPE_CANCEL);
unavailableForm.setTitle("User Search"); unavailableForm.setTitle("User Search");
unavailableForm.addInstruction("This service is unavailable."); unavailableForm.addInstruction("This service is unavailable.");
reply.add(unavailableForm.asXMLElement()); reply.add(unavailableForm.asXMLElement());
IQ replyPacket = IQ.createResultIQ(packet);
replyPacket.setChildElement("query", "jabber:iq:search");
replyPacket.setChildElement(reply.createCopy());
return replyPacket; return replyPacket;
} }
private IQ processGetPacket(IQ packet) { private IQ processGetPacket(IQ packet) {
IQ replyPacket = IQ.createResultIQ(packet); IQ replyPacket = IQ.createResultIQ(packet);
replyPacket.setChildElement("query", "jabber:iq:search");
replyPacket.setChildElement(probeResult.createCopy()); replyPacket.setChildElement(probeResult.createCopy());
return replyPacket; return replyPacket;
...@@ -408,50 +384,40 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener { ...@@ -408,50 +384,40 @@ public class SearchPlugin implements Component, Plugin, PropertyEventListener {
searchResults.addItemFields(items); searchResults.addItemFields(items);
} }
Element reply = DocumentHelper.createElement(QName.get("query", "jabber:iq:search")); IQ replyPacket = IQ.createResultIQ(packet);
Element reply = replyPacket.setChildElement("query", "jabber:iq:search");
reply.add(searchResults.asXMLElement()); reply.add(searchResults.asXMLElement());
IQ replyPacket = IQ.createResultIQ(packet);
replyPacket.setChildElement(reply);
return replyPacket; return replyPacket;
} }
private IQ replyNonDataFormResult(Set<User> users, IQ packet) { private IQ replyNonDataFormResult(Set<User> users, IQ packet) {
Element replyQuery = DocumentHelper.createElement(QName.get("query", "jabber:iq:search")); IQ replyPacket = IQ.createResultIQ(packet);
String serverName = XMPPServer.getInstance().getServerInfo().getName(); Element replyQuery = replyPacket.setChildElement("query", "jabber:iq:search");
for (User user : users) { for (User user : users) {
Element item = DocumentHelper.createElement("item"); Element item = replyQuery.addElement("item");
Attribute jid = DocumentHelper.createAttribute(item, "jid", user.getUsername() + "@" + serverName); item.addAttribute("jid", user.getUsername() + "@" + serverName);
item.add(jid);
//return to the client the same fields that were submitted //return to the client the same fields that were submitted
for (String field : reverseFieldLookup.keySet()) { for (String field : reverseFieldLookup.keySet()) {
if ("Username".equals(field)) { if ("Username".equals(field)) {
Element element = DocumentHelper.createElement(reverseFieldLookup.get(field)); Element element = item.addElement(reverseFieldLookup.get(field));
element.addText(user.getUsername()); element.addText(user.getUsername());
item.add(element); }
}
if ("Name".equals(field)) { if ("Name".equals(field)) {
Element element = DocumentHelper.createElement(reverseFieldLookup.get(field)); Element element = item.addElement(reverseFieldLookup.get(field));
element.addText(removeNull(user.getName())); element.addText(removeNull(user.getName()));
item.add(element);
} }
if ("Email".equals(field)) { if ("Email".equals(field)) {
Element element = DocumentHelper.createElement(reverseFieldLookup.get(field)); Element element = item.addElement(reverseFieldLookup.get(field));
element.addText(removeNull(user.getEmail())); element.addText(removeNull(user.getEmail()));
item.add(element);
} }
} }
replyQuery.add(item);
} }
IQ replyPacket = IQ.createResultIQ(packet);
replyPacket.setChildElement(replyQuery);
return replyPacket; return replyPacket;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment