Commit 6122b0a5 authored by Matt Tucker's avatar Matt Tucker Committed by matt

Refactoring work.


git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/trunk@577 b35dd754-fafc-0310-a699-88a17e54d16e
parent 9d75aa0f
...@@ -12,11 +12,8 @@ ...@@ -12,11 +12,8 @@
package org.jivesoftware.messenger.forms.spi; package org.jivesoftware.messenger.forms.spi;
import org.jivesoftware.messenger.forms.FormField; import org.jivesoftware.messenger.forms.FormField;
import org.jivesoftware.util.ConcurrentHashSet;
import java.util.*; import java.util.*;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import org.dom4j.DocumentHelper; import org.dom4j.DocumentHelper;
import org.dom4j.Element; import org.dom4j.Element;
import org.dom4j.QName; import org.dom4j.QName;
...@@ -54,7 +51,6 @@ public class XDataFormImpl { ...@@ -54,7 +51,6 @@ public class XDataFormImpl {
private List fields = new ArrayList(); private List fields = new ArrayList();
private List reportedFields = new ArrayList(); private List reportedFields = new ArrayList();
private List reportedItems = new ArrayList(); private List reportedItems = new ArrayList();
private Set fragments = new ConcurrentHashSet();
public XDataFormImpl() { public XDataFormImpl() {
super(); super();
...@@ -156,70 +152,6 @@ public class XDataFormImpl { ...@@ -156,70 +152,6 @@ public class XDataFormImpl {
// Do nothing // Do nothing
} }
public void send(XMLStreamWriter xmlSerializer, int version) throws XMLStreamException {
xmlSerializer.writeStartElement("jabber:x:data", "x");
xmlSerializer.writeNamespace("", "jabber:x:data");
if (getType() != null) {
xmlSerializer.writeAttribute("type", getType());
}
if (getTitle() != null) {
xmlSerializer.writeStartElement("jabber:x:data", "title");
xmlSerializer.writeCharacters(getTitle());
xmlSerializer.writeEndElement();
}
if (instructions.size() > 0) {
Iterator instrItr = getInstructions();
while (instrItr.hasNext()) {
xmlSerializer.writeStartElement("jabber:x:data", "instructions");
xmlSerializer.writeCharacters((String)instrItr.next());
xmlSerializer.writeEndElement();
}
}
// Append the list of fields returned from a search
if (reportedFields.size() > 0) {
xmlSerializer.writeStartElement("jabber:x:data", "reported");
Iterator fieldsItr = reportedFields.iterator();
while (fieldsItr.hasNext()) {
XFormFieldImpl field = (XFormFieldImpl)fieldsItr.next();
field.send(xmlSerializer, version);
}
xmlSerializer.writeEndElement();
}
// Append the list of items returned from a search
// Note: each item contains a List of XFormFieldImpls
if (reportedItems.size() > 0) {
xmlSerializer.writeStartElement("jabber:x:data", "item");
Iterator itemsItr = reportedItems.iterator();
while (itemsItr.hasNext()) {
List fields = (List)itemsItr.next();
Iterator fieldsItr = fields.iterator();
while (fieldsItr.hasNext()) {
XFormFieldImpl field = (XFormFieldImpl)fieldsItr.next();
field.send(xmlSerializer, version);
}
}
xmlSerializer.writeEndElement();
}
if (fields.size() > 0) {
Iterator fieldsItr = getFields();
while (fieldsItr.hasNext()) {
XFormFieldImpl field = (XFormFieldImpl)fieldsItr.next();
field.send(xmlSerializer, version);
}
}
// Loop through all the values and append them to the stream writer
Iterator frags = fragments.iterator();
while (frags.hasNext()) {
XMPPFragment frag = (XMPPFragment)frags.next();
frag.send(xmlSerializer, version);
}
xmlSerializer.writeEndElement();
}
public Element asXMLElement() { public Element asXMLElement() {
Element x = DocumentHelper.createElement(QName.get("x", "jabber:x:data")); Element x = DocumentHelper.createElement(QName.get("x", "jabber:x:data"));
if (getType() != null) { if (getType() != null) {
...@@ -267,64 +199,9 @@ public class XDataFormImpl { ...@@ -267,64 +199,9 @@ public class XDataFormImpl {
} }
} }
// Loop through all the values and append them to the stream writer
/*Iterator frags = fragments.iterator();
while (frags.hasNext()){
XMPPFragment frag = (XMPPFragment) frags.next();
frag.send(xmlSerializer,version);
}*/
return x; return x;
} }
public XMPPFragment createDeepCopy() {
XDataFormImpl copy = new XDataFormImpl(type);
copy.title = this.title;
copy.instructions = (List)((ArrayList)this.instructions).clone();
Iterator fieldsIter = getFields();
while (fieldsIter.hasNext()) {
copy.addField((XFormFieldImpl) ((XFormFieldImpl) fieldsIter.next()).createDeepCopy());
}
Iterator fragmentIter = getFragments();
while (fragmentIter.hasNext()) {
copy.addFragment(((XMPPFragment)fragmentIter.next()).createDeepCopy());
}
return copy;
}
public void addFragment(XMPPFragment fragment) {
fragments.add(fragment);
}
public Iterator getFragments() {
return fragments.iterator();
}
public XMPPFragment getFragment(String name, String namespace) {
if (fragments == null) {
return null;
}
XMPPFragment frag;
for (Iterator frags = fragments.iterator(); frags.hasNext();) {
frag = (XMPPFragment)frags.next();
if (name.equals(frag.getName()) && namespace.equals(frag.getNamespace())) {
return frag;
}
}
return null;
}
public void clearFragments() {
fragments.clear();
}
public int getSize() {
// TODO Is this OK? Shouldn't we need to consider the instance variables?
return fragments.size();
}
public void parse(Element formElement) { public void parse(Element formElement) {
type = formElement.attributeValue("type"); type = formElement.attributeValue("type");
Element titleElement = formElement.element("title"); Element titleElement = formElement.element("title");
......
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
package org.jivesoftware.messenger.forms.spi; package org.jivesoftware.messenger.forms.spi;
import org.jivesoftware.messenger.forms.FormField; import org.jivesoftware.messenger.forms.FormField;
import org.jivesoftware.util.ConcurrentHashSet;
import org.jivesoftware.messenger.XMPPFragment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
...@@ -29,7 +27,7 @@ import org.dom4j.Element; ...@@ -29,7 +27,7 @@ import org.dom4j.Element;
* *
* @author gdombiak * @author gdombiak
*/ */
public class XFormFieldImpl implements XMPPFragment, FormField { public class XFormFieldImpl implements FormField {
private String description; private String description;
private boolean required = false; private boolean required = false;
...@@ -38,7 +36,6 @@ public class XFormFieldImpl implements XMPPFragment, FormField { ...@@ -38,7 +36,6 @@ public class XFormFieldImpl implements XMPPFragment, FormField {
private String type; private String type;
private List<Option> options = new ArrayList<Option>(); private List<Option> options = new ArrayList<Option>();
private List<String> values = new ArrayList<String>(); private List<String> values = new ArrayList<String>();
private ConcurrentHashSet fragments = new ConcurrentHashSet();
public XFormFieldImpl() { public XFormFieldImpl() {
super(); super();
...@@ -68,50 +65,6 @@ public class XFormFieldImpl implements XMPPFragment, FormField { ...@@ -68,50 +65,6 @@ public class XFormFieldImpl implements XMPPFragment, FormField {
// Do nothing // Do nothing
} }
public void send(XMLStreamWriter xmlSerializer, int version) throws XMLStreamException {
xmlSerializer.writeStartElement("jabber:x:data", "field");
if (getLabel() != null) {
xmlSerializer.writeAttribute("label", getLabel());
}
if (getVariable() != null) {
xmlSerializer.writeAttribute("var", getVariable());
}
if (getType() != null) {
xmlSerializer.writeAttribute("type", getType());
}
if (getDescription() != null) {
xmlSerializer.writeStartElement("jabber:x:data", "desc");
xmlSerializer.writeCharacters(getDescription());
xmlSerializer.writeEndElement();
}
if (isRequired()) {
xmlSerializer.writeStartElement("jabber:x:data", "required");
xmlSerializer.writeEndElement();
}
// Loop through all the values and append them to the stream writer
if (values.size() > 0) {
Iterator<String> valuesItr = getValues();
while (valuesItr.hasNext()) {
xmlSerializer.writeStartElement("jabber:x:data", "value");
xmlSerializer.writeCharacters(valuesItr.next());
xmlSerializer.writeEndElement();
}
}
// Loop through all the options and append them to the stream writer
if (options.size() > 0) {
Iterator<Option> optionsItr = getOptions();
while (optionsItr.hasNext()) {
(optionsItr.next()).send(xmlSerializer, version);
}
}
Iterator frags = fragments.iterator();
while (frags.hasNext()) {
XMPPFragment frag = (XMPPFragment)frags.next();
frag.send(xmlSerializer, version);
}
xmlSerializer.writeEndElement();
}
public Element asXMLElement() { public Element asXMLElement() {
Element field = DocumentHelper.createElement("field"); Element field = DocumentHelper.createElement("field");
if (getLabel() != null) { if (getLabel() != null) {
...@@ -155,53 +108,6 @@ public class XFormFieldImpl implements XMPPFragment, FormField { ...@@ -155,53 +108,6 @@ public class XFormFieldImpl implements XMPPFragment, FormField {
return field; return field;
} }
public XMPPFragment createDeepCopy() {
XFormFieldImpl copy = new XFormFieldImpl(variable);
copy.description = this.description;
copy.required = this.required;
copy.label = this.label;
copy.type = this.type;
copy.options = (List<Option>)((ArrayList)this.options).clone();
copy.values = (List<String>)((ArrayList)this.values).clone();
Iterator fragmentIter = getFragments();
while (fragmentIter.hasNext()) {
copy.addFragment(((XMPPFragment)fragmentIter.next()).createDeepCopy());
}
return copy;
}
public void addFragment(XMPPFragment fragment) {
fragments.add(fragment);
}
public Iterator getFragments() {
return fragments.iterator();
}
public XMPPFragment getFragment(String name, String namespace) {
if (fragments == null) {
return null;
}
XMPPFragment frag;
for (Iterator frags = fragments.iterator(); frags.hasNext();) {
frag = (XMPPFragment)frags.next();
if (name.equals(frag.getName()) && namespace.equals(frag.getNamespace())) {
return frag;
}
}
return null;
}
public void clearFragments() {
fragments.clear();
}
public int getSize() {
// TODO Is this OK? Shouldn't we need to consider the instance variables?
return fragments.size();
}
public void addValue(String value) { public void addValue(String value) {
if (value == null) { if (value == null) {
value = ""; value = "";
...@@ -362,4 +268,4 @@ public class XFormFieldImpl implements XMPPFragment, FormField { ...@@ -362,4 +268,4 @@ public class XFormFieldImpl implements XMPPFragment, FormField {
return option; return option;
} }
} }
} }
\ No newline at end of file
...@@ -25,36 +25,34 @@ import java.util.List; ...@@ -25,36 +25,34 @@ import java.util.List;
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.xmpp.packet.IQ;
import org.xmpp.packet.JID;
import org.xmpp.packet.PacketError;
/** /**
* Implements the TYPE_IQ jabber:iq:auth protocol (plain only). Clients * Implements the TYPE_IQ jabber:iq:auth protocol (plain only). Clients
* use this protocol to authenticate with the server. * use this protocol to authenticate with the server. A 'get' query
* A 'get' query runs an authentication probe with a given user name. * runs an authentication probe with a given user name. Return the
* Return the authentication form or an error indicating the user * authentication form or an error indicating the user is not
* is not registered on the server. * registered on the server.<p>
*
* A 'set' query authenticates with information given in the * A 'set' query authenticates with information given in the
* authentication form. An authenticated session may reset their * authentication form. An authenticated session may reset their
* authentication information using a 'set' query. * authentication information using a 'set' query.
* <p/> *
* <h2>Assumptions</h2> * <h2>Assumptions</h2>
* This handler assumes that the request is addressed to the server. * This handler assumes that the request is addressed to the server.
* An appropriate TYPE_IQ tag matcher should be placed in front of this * An appropriate TYPE_IQ tag matcher should be placed in front of this
* one to route TYPE_IQ requests not addressed to the server to * one to route TYPE_IQ requests not addressed to the server to
* another channel (probably for direct delivery to the recipient). * another channel (probably for direct delivery to the recipient).
* <p/>
* <h2>Warning</h2>
* There should be a way of determining whether a session has
* authorization to access this feature. I'm not sure it is a good
* idea to do authorization in each handler. It would be nice if
* the framework could assert authorization policies across channels.
* *
* @author Iain Shigeoka * @author Iain Shigeoka
*/ */
public class IQAuthHandler extends IQHandler implements IQAuthInfo { public class IQAuthHandler extends IQHandler implements IQAuthInfo {
private Element probeResponse;
// TODO: this won't work with independent servers in the same JVM
private static boolean anonymousAllowed; private static boolean anonymousAllowed;
private Element probeResponse;
private IQHandlerInfo info; private IQHandlerInfo info;
/** /**
...@@ -76,29 +74,27 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -76,29 +74,27 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
anonymousAllowed = "true".equals(JiveGlobals.getProperty("xmpp.auth.anonymous")); anonymousAllowed = "true".equals(JiveGlobals.getProperty("xmpp.auth.anonymous"));
} }
public synchronized IQ handleIQ(IQ packet) throws public synchronized IQ handleIQ(IQ packet) throws UnauthorizedException, PacketException {
UnauthorizedException, PacketException {
try { try {
Session session = packet.getOriginatingSession(); Session session = packet.getOriginatingSession();
IQ response = null; IQ response = null;
try { try {
Element iq = ((XMPPDOMFragment)packet.getChildFragment()).getRootElement(); Element iq = packet.getElement();
if (IQ.GET == packet.getType()) { if (IQ.Type.get == packet.getType()) {
String username = iq.element("username").getTextTrim(); String username = iq.element("username").getTextTrim();
probeResponse.element("username").setText(username); probeResponse.element("username").setText(username);
response = packet.createResult(probeResponse); response = IQ.createResultIQ(new IQ(probeResponse));
} }
else { // set query // Otherwise set query
else {
if (iq.elements().isEmpty()) { if (iq.elements().isEmpty()) {
// Anonymous authentication // Anonymous authentication
response = anonymousLogin(session, packet); response = anonymousLogin(session, packet);
} }
else { else {
String username = iq.element("username").getTextTrim(); String username = iq.element("username").getTextTrim();
// Login authentication
// login authentication
String password = null; String password = null;
if (iq.element("password") != null) { if (iq.element("password") != null) {
password = iq.element("password").getTextTrim(); password = iq.element("password").getTextTrim();
...@@ -120,12 +116,12 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -120,12 +116,12 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
} }
} }
catch (UserNotFoundException e) { catch (UserNotFoundException e) {
response = packet.createResult(); response = IQ.createResultIQ(packet);
response.setError(XMPPError.Code.UNAUTHORIZED); response.setError(PacketError.Condition.not_authorized);
} }
catch (UnauthorizedException e) { catch (UnauthorizedException e) {
response = packet.createResult(); response = IQ.createResultIQ(packet);
response.setError(XMPPError.Code.UNAUTHORIZED); response.setError(PacketError.Condition.not_authorized);
} }
deliverer.deliver(response); deliverer.deliver(response);
} }
...@@ -135,15 +131,10 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -135,15 +131,10 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
return null; return null;
} }
private IQ login(String username, private IQ login(String username, Element iq, IQ packet, IQ response, String password,
Element iq, Session session, String digest) throws UnauthorizedException, UserNotFoundException
IQ packet, {
IQ response, JID jid = localServer.createJID(username, iq.element("resource").getTextTrim());
String password,
Session session,
String digest)
throws UnauthorizedException, UserNotFoundException {
XMPPAddress jid = localServer.createJID(username, iq.element("resource").getTextTrim());
// If a session already exists with the requested JID, then check to see // If a session already exists with the requested JID, then check to see
...@@ -161,8 +152,8 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -161,8 +152,8 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
} }
} }
else { else {
response = packet.createResult(); response = IQ.createResultIQ(packet);
response.setError(XMPPError.Code.FORBIDDEN); response.setError(PacketError.Condition.forbidden);
} }
} }
catch (Exception e) { catch (Exception e) {
...@@ -183,18 +174,16 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -183,18 +174,16 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
} }
else { else {
session.setAuthToken(token, userManager, jid.getResource()); session.setAuthToken(token, userManager, jid.getResource());
packet.setSender(session.getAddress()); packet.setFrom(session.getAddress());
response = packet.createResult(); response = IQ.createResultIQ(packet);
} }
} }
return response; return response;
} }
private IQ passwordReset(String password, private IQ passwordReset(String password, IQ packet, String username, Session session)
IQ packet, throws UnauthorizedException
String username, {
Session session)
throws UnauthorizedException {
IQ response; IQ response;
if (password == null || password.length() == 0) { if (password == null || password.length() == 0) {
throw new UnauthorizedException(); throw new UnauthorizedException();
...@@ -202,7 +191,7 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -202,7 +191,7 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
else { else {
try { try {
userManager.getUser(username).setPassword(password); userManager.getUser(username).setPassword(password);
response = packet.createResult(); response = IQ.createResultIQ(packet);
List params = new ArrayList(); List params = new ArrayList();
params.add(username); params.add(username);
params.add(session.toString()); params.add(session.toString());
...@@ -215,20 +204,15 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -215,20 +204,15 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
return response; return response;
} }
private IQ anonymousLogin(Session session, private IQ anonymousLogin(Session session, IQ packet) throws UnauthorizedException {
IQ packet) IQ response = IQ.createResultIQ(packet);;
throws UnauthorizedException {
IQ response;
if (anonymousAllowed) { if (anonymousAllowed) {
session.setAnonymousAuth(); session.setAnonymousAuth();
MetaDataFragment meta = new MetaDataFragment("jabber:iq:auth", "query"); Element auth = response.setChildElement("query", "jabber:iq:auth");
meta.setProperty("query.resource", session.getAddress().getResource()); auth.addElement("resource").setText(session.getAddress().getResource());
response = packet.createResult();
response.addFragment(meta);
} }
else { else {
response = packet.createResult(); response.setError(PacketError.Condition.forbidden);
response.setError(XMPPError.Code.FORBIDDEN);
} }
return response; return response;
} }
...@@ -257,4 +241,4 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo { ...@@ -257,4 +241,4 @@ public class IQAuthHandler extends IQHandler implements IQAuthInfo {
public IQHandlerInfo getInfo() { public IQHandlerInfo getInfo() {
return info; return info;
} }
} }
\ No newline at end of file
...@@ -15,10 +15,10 @@ import org.jivesoftware.messenger.container.TrackInfo; ...@@ -15,10 +15,10 @@ import org.jivesoftware.messenger.container.TrackInfo;
import org.jivesoftware.messenger.disco.ServerFeaturesProvider; import org.jivesoftware.messenger.disco.ServerFeaturesProvider;
import org.jivesoftware.messenger.*; import org.jivesoftware.messenger.*;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.user.UserNotFoundException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import org.dom4j.Element; import org.dom4j.Element;
import org.xmpp.packet.IQ;
/** /**
* Implements the TYPE_IQ jabber:iq:private protocol. Clients * Implements the TYPE_IQ jabber:iq:private protocol. Clients
...@@ -58,28 +58,21 @@ public class IQPrivateHandler extends IQHandler implements ServerFeaturesProvide ...@@ -58,28 +58,21 @@ public class IQPrivateHandler extends IQHandler implements ServerFeaturesProvide
public IQ handleIQ(IQ packet) throws UnauthorizedException, PacketException { public IQ handleIQ(IQ packet) throws UnauthorizedException, PacketException {
IQ replyPacket = null; IQ replyPacket = null;
try { Element dataElement = packet.getChildElement();
Element dataElement = (Element)((XMPPDOMFragment)packet.getChildFragment()).getRootElement().elementIterator().next(); if (dataElement != null) {
if (dataElement != null) { if (IQ.Type.get.equals(packet.getType())) {
if (IQ.GET.equals(packet.getType())) { replyPacket = IQ.createResultIQ(packet);
replyPacket = packet.createResult(); Element privateData = replyPacket.setChildElement("query", "jabber:iq:private");
PayloadFragment frag = new PayloadFragment("jabber:iq:private", "query"); privateData.add(privateStorage.get(packet.getFrom().getNode(), dataElement));
frag.addFragment(new XMPPDOMFragment(privateStorage.get(packet.getOriginatingSession().getUsername(), dataElement)));
replyPacket.setChildFragment(frag);
}
else {
privateStorage.add(packet.getOriginatingSession().getUsername(), dataElement);
replyPacket = packet.createResult();
}
} }
else { else {
replyPacket = packet.createResult(); privateStorage.add(packet.getFrom().getNode(), dataElement);
PayloadFragment frag = new PayloadFragment("jabber:iq:private", "query"); replyPacket = IQ.createResultIQ(packet);
replyPacket.setChildFragment(frag);
} }
} }
catch (UserNotFoundException e) { else {
throw new UnauthorizedException(e); replyPacket = IQ.createResultIQ(packet);
replyPacket.setChildElement("query", "jabber:iq:private");
} }
return replyPacket; return replyPacket;
} }
......
...@@ -11,8 +11,9 @@ ...@@ -11,8 +11,9 @@
package org.jivesoftware.messenger.user; package org.jivesoftware.messenger.user;
import org.jivesoftware.messenger.XMPPAddress;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.xmpp.packet.JID;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
...@@ -39,7 +40,7 @@ public interface Roster { ...@@ -39,7 +40,7 @@ public interface Roster {
* @param user the user object to check. * @param user the user object to check.
* @return true if the specified user is a member of the roster, false otherwise. * @return true if the specified user is a member of the roster, false otherwise.
*/ */
public boolean isRosterItem(XMPPAddress user); public boolean isRosterItem(JID user);
/** /**
* Returns an iterator of users in this roster. * Returns an iterator of users in this roster.
...@@ -64,7 +65,7 @@ public interface Roster { ...@@ -64,7 +65,7 @@ public interface Roster {
* @return The roster item associated with the user XMPPAddress * @return The roster item associated with the user XMPPAddress
* @throws UnauthorizedException If not the user or an administrator * @throws UnauthorizedException If not the user or an administrator
*/ */
public RosterItem getRosterItem(XMPPAddress user) throws UnauthorizedException, UserNotFoundException; public RosterItem getRosterItem(JID user) throws UnauthorizedException, UserNotFoundException;
/** /**
* Create a new item to the roster. Roster items may not be created that contain the same user address * Create a new item to the roster. Roster items may not be created that contain the same user address
...@@ -73,7 +74,7 @@ public interface Roster { ...@@ -73,7 +74,7 @@ public interface Roster {
* @param user the item to add to the roster. * @param user the item to add to the roster.
* @throws UnauthorizedException if not the item or an administrator. * @throws UnauthorizedException if not the item or an administrator.
*/ */
public RosterItem createRosterItem(XMPPAddress user) throws UnauthorizedException, UserAlreadyExistsException; public RosterItem createRosterItem(JID user) throws UnauthorizedException, UserAlreadyExistsException;
/** /**
* Create a new item to the roster. Roster items may not be created that contain the same user address * Create a new item to the roster. Roster items may not be created that contain the same user address
...@@ -85,7 +86,7 @@ public interface Roster { ...@@ -85,7 +86,7 @@ public interface Roster {
* @throws UnauthorizedException if not the item or an administrator. * @throws UnauthorizedException if not the item or an administrator.
* @throws UserAlreadyExistsException If a roster item already exists for the given user * @throws UserAlreadyExistsException If a roster item already exists for the given user
*/ */
public RosterItem createRosterItem(XMPPAddress user, String nickname, List groups) throws UnauthorizedException, UserAlreadyExistsException; public RosterItem createRosterItem(JID user, String nickname, List groups) throws UnauthorizedException, UserAlreadyExistsException;
/** /**
* Create a new item to the roster based as a copy of the given item. * Create a new item to the roster based as a copy of the given item.
...@@ -114,5 +115,5 @@ public interface Roster { ...@@ -114,5 +115,5 @@ public interface Roster {
* @return The roster item being removed or null if none existed * @return The roster item being removed or null if none existed
* @throws UnauthorizedException if not the user or an administrator. * @throws UnauthorizedException if not the user or an administrator.
*/ */
public RosterItem deleteRosterItem(XMPPAddress user) throws UnauthorizedException; public RosterItem deleteRosterItem(JID user) throws UnauthorizedException;
} }
\ No newline at end of file
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
package org.jivesoftware.messenger.user; package org.jivesoftware.messenger.user;
import org.jivesoftware.messenger.XMPPAddress;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.util.IntEnum; import org.jivesoftware.util.IntEnum;
import org.xmpp.packet.JID;
import java.util.List; import java.util.List;
...@@ -163,7 +163,7 @@ public interface RosterItem { ...@@ -163,7 +163,7 @@ public interface RosterItem {
* *
* @return The address of the item * @return The address of the item
*/ */
public XMPPAddress getJid(); public JID getJid();
/** /**
* <p>Obtain the current nickname for the item.</p> * <p>Obtain the current nickname for the item.</p>
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
package org.jivesoftware.messenger.user; package org.jivesoftware.messenger.user;
import org.jivesoftware.messenger.XMPPAddress; import org.jivesoftware.messenger.XMPPAddress;
import org.xmpp.packet.JID;
/** /**
* <p>A simple service that allows components to retrieve a roster based solely on the ID of the owner.</p> * <p>A simple service that allows components to retrieve a roster based solely on the ID of the owner.</p>
...@@ -40,5 +41,5 @@ public interface RosterManager { ...@@ -40,5 +41,5 @@ public interface RosterManager {
* *
* @param user the user to remove his roster. * @param user the user to remove his roster.
*/ */
void deleteRoster(XMPPAddress user); void deleteRoster(JID user);
} }
...@@ -16,7 +16,7 @@ import org.jivesoftware.util.CacheManager; ...@@ -16,7 +16,7 @@ import org.jivesoftware.util.CacheManager;
import org.jivesoftware.messenger.container.BasicModule; import org.jivesoftware.messenger.container.BasicModule;
import org.jivesoftware.messenger.user.*; import org.jivesoftware.messenger.user.*;
import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.auth.UnauthorizedException;
import org.jivesoftware.messenger.XMPPAddress; import org.xmpp.packet.JID;
import java.util.Iterator; import java.util.Iterator;
...@@ -47,9 +47,9 @@ public class RosterManagerImpl extends BasicModule implements RosterManager { ...@@ -47,9 +47,9 @@ public class RosterManagerImpl extends BasicModule implements RosterManager {
return roster; return roster;
} }
public void deleteRoster(XMPPAddress user) { public void deleteRoster(JID user) {
try { try {
String username = user.getNamePrep(); String username = user.getNode();
// Get the roster of the deleted user // Get the roster of the deleted user
Roster roster = (Roster)CacheManager.getCache("username2roster").get(username); Roster roster = (Roster)CacheManager.getCache("username2roster").get(username);
if (roster == null) { if (roster == null) {
...@@ -66,7 +66,7 @@ public class RosterManagerImpl extends BasicModule implements RosterManager { ...@@ -66,7 +66,7 @@ public class RosterManagerImpl extends BasicModule implements RosterManager {
// Get the rosters that have a reference to the deleted user // Get the rosters that have a reference to the deleted user
RosterItemProvider rosteItemProvider = UserProviderFactory.getRosterItemProvider(); RosterItemProvider rosteItemProvider = UserProviderFactory.getRosterItemProvider();
Iterator<String> usernames = rosteItemProvider.getUsernames(user.toBareStringPrep()); Iterator<String> usernames = rosteItemProvider.getUsernames(user.toBareJID());
while (usernames.hasNext()) { while (usernames.hasNext()) {
username = usernames.next(); username = usernames.next();
// Get the roster that has a reference to the deleted user // Get the roster that has a reference to the deleted user
......
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