package org.limewire.xmpp.client.impl.messages.authtoken; import java.io.IOException; import org.apache.commons.codec.binary.Base64; import org.jivesoftware.smack.packet.IQ; import org.limewire.friend.api.feature.AuthToken; import org.limewire.friend.impl.feature.AuthTokenImpl; import org.limewire.util.Objects; import org.limewire.util.StringUtils; import org.limewire.xmpp.client.impl.messages.InvalidIQException; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; public class AuthTokenIQ extends IQ { private AuthToken authToken; public AuthTokenIQ(XmlPullParser parser) throws IOException, XmlPullParserException, InvalidIQException { do { int eventType = parser.getEventType(); if(eventType == XmlPullParser.START_TAG) { if(parser.getName().equals("token")) { String value = parser.getAttributeValue(null, "value"); if (value == null) { throw new InvalidIQException("no value"); } authToken = new AuthTokenImpl(value); } } else if(eventType == XmlPullParser.END_TAG) { if(parser.getName().equals("auth-token")) { break; } } } while (parser.nextTag() != XmlPullParser.END_DOCUMENT); if (authToken == null) { throw new InvalidIQException("no auth token parsed"); } } /** * @param authToken must not be null */ public AuthTokenIQ(AuthToken authToken) { this.authToken = Objects.nonNull(authToken, "authToken"); } /** * @return not null */ public AuthToken getAuthToken() { return authToken; } @Override public String getChildElementXML() { StringBuilder authTokenElement = new StringBuilder("<auth-token xmlns=\"jabber:iq:lw-auth-token\">"); // original implementation does base64 encoding twice, oh well authTokenElement.append("<token value=\"").append(StringUtils.getUTF8String(Base64.encodeBase64(StringUtils.toUTF8Bytes(authToken.getBase64())))).append("\"/>"); authTokenElement.append("</auth-token>"); return authTokenElement.toString(); } @Override public String toString() { return authToken.getBase64(); } }