Commit 8f12de41 authored by Gaston Dombiak's avatar Gaston Dombiak Committed by gato

Return correct account type for anonymous accounts. JM-575

git-svn-id: http://svn.igniterealtime.org/svn/repos/wildfire/trunk@3482 b35dd754-fafc-0310-a699-88a17e54d16e
parent d44866ea
...@@ -14,14 +14,15 @@ package org.jivesoftware.wildfire.disco; ...@@ -14,14 +14,15 @@ package org.jivesoftware.wildfire.disco;
import org.dom4j.DocumentHelper; import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
import org.dom4j.QName; import org.dom4j.QName;
import org.jivesoftware.util.JiveGlobals;
import org.jivesoftware.wildfire.IQHandlerInfo; import org.jivesoftware.wildfire.IQHandlerInfo;
import org.jivesoftware.wildfire.SessionManager;
import org.jivesoftware.wildfire.XMPPServer; import org.jivesoftware.wildfire.XMPPServer;
import org.jivesoftware.wildfire.auth.UnauthorizedException; import org.jivesoftware.wildfire.auth.UnauthorizedException;
import org.jivesoftware.wildfire.forms.spi.XDataFormImpl; import org.jivesoftware.wildfire.forms.spi.XDataFormImpl;
import org.jivesoftware.wildfire.handler.IQHandler; import org.jivesoftware.wildfire.handler.IQHandler;
import org.jivesoftware.wildfire.user.UserManager; import org.jivesoftware.wildfire.user.UserManager;
import org.jivesoftware.wildfire.user.UserNotFoundException; import org.jivesoftware.wildfire.user.UserNotFoundException;
import org.jivesoftware.util.JiveGlobals;
import org.xmpp.packet.IQ; import org.xmpp.packet.IQ;
import org.xmpp.packet.JID; import org.xmpp.packet.JID;
import org.xmpp.packet.PacketError; import org.xmpp.packet.PacketError;
...@@ -57,7 +58,8 @@ public class IQDiscoInfoHandler extends IQHandler { ...@@ -57,7 +58,8 @@ public class IQDiscoInfoHandler extends IQHandler {
new ConcurrentHashMap<String, DiscoInfoProvider>(); new ConcurrentHashMap<String, DiscoInfoProvider>();
private IQHandlerInfo info; private IQHandlerInfo info;
private List<Element> userIdentities = new ArrayList<Element>(); private List<Element> anonymousUserIdentities = new ArrayList<Element>();
private List<Element> registeredUserIdentities = new ArrayList<Element>();
private List<String> userFeatures = new ArrayList<String>(); private List<String> userFeatures = new ArrayList<String>();
public IQDiscoInfoHandler() { public IQDiscoInfoHandler() {
...@@ -68,8 +70,12 @@ public class IQDiscoInfoHandler extends IQHandler { ...@@ -68,8 +70,12 @@ public class IQDiscoInfoHandler extends IQHandler {
// the same objects for each response) // the same objects for each response)
Element userIdentity = DocumentHelper.createElement("identity"); Element userIdentity = DocumentHelper.createElement("identity");
userIdentity.addAttribute("category", "account"); userIdentity.addAttribute("category", "account");
userIdentity.addAttribute("type", "anonymous");
anonymousUserIdentities.add(userIdentity);
userIdentity = DocumentHelper.createElement("identity");
userIdentity.addAttribute("category", "account");
userIdentity.addAttribute("type", "registered"); userIdentity.addAttribute("type", "registered");
userIdentities.add(userIdentity); registeredUserIdentities.add(userIdentity);
userFeatures.add("http://jabber.org/protocol/disco#info"); userFeatures.add("http://jabber.org/protocol/disco#info");
} }
...@@ -253,10 +259,16 @@ public class IQDiscoInfoHandler extends IQHandler { ...@@ -253,10 +259,16 @@ public class IQDiscoInfoHandler extends IQHandler {
} }
return identities.iterator(); return identities.iterator();
} }
else {
if (SessionManager.getInstance().isAnonymousRoute(name)) {
// Answer identity of an anonymous user.
return anonymousUserIdentities.iterator();
}
else { else {
// Answer identity of a registered user. // Answer identity of a registered user.
// Note: We know that this user exists because #hasInfo returned true // Note: We know that this user exists because #hasInfo returned true
return userIdentities.iterator(); return registeredUserIdentities.iterator();
}
} }
} }
...@@ -285,10 +297,10 @@ public class IQDiscoInfoHandler extends IQHandler { ...@@ -285,10 +297,10 @@ public class IQDiscoInfoHandler extends IQHandler {
return false; return false;
} }
try { try {
// True if it is an info request of the server or of a registered user. We // True if it is an info request of the server, a registered user or an
// now support disco of user's bare JIDs // anonymous user. We now support disco of user's bare JIDs
return node == null && return name == null || UserManager.getInstance().getUser(name) != null ||
(name == null || UserManager.getInstance().getUser(name) != null); SessionManager.getInstance().isAnonymousRoute(name);
} }
catch (UserNotFoundException e) { catch (UserNotFoundException e) {
return false; return false;
......
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