/* * oxAuth is available under the MIT License (2008). See http://opensource.org/licenses/MIT for full text. * * Copyright (c) 2014, Gluu */ package org.xdi.oxauth.model.jwt; import org.apache.commons.lang.StringUtils; import org.xdi.oxauth.model.util.Base64Util; import org.xdi.oxauth.model.util.Util; import java.io.UnsupportedEncodingException; /** * @author Yuriy Zabrovarnyy * @author Javier Rojas Blum * @version July 31, 2016 */ public class PureJwt { private final String m_encodedHeader; private final String m_encodedPayload; private final String m_encodedSignature; private final String m_signingInput; private final String m_decodedHeader; private final String m_decodedPayload; public PureJwt(String p_encodedHeader, String p_encodedPayload, String p_encodedSignature) { m_encodedHeader = p_encodedHeader; m_encodedPayload = p_encodedPayload; m_encodedSignature = p_encodedSignature; m_signingInput = m_encodedHeader + "." + m_encodedPayload; String decodedPayloadTemp = null; String decodedHeaderTemp = null; try { decodedHeaderTemp = new String(Base64Util.base64urldecode(p_encodedHeader), Util.UTF8_STRING_ENCODING); decodedPayloadTemp = new String(Base64Util.base64urldecode(p_encodedPayload), Util.UTF8_STRING_ENCODING); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } m_decodedHeader = decodedHeaderTemp; m_decodedPayload = decodedPayloadTemp; } public static PureJwt parse(String p_encodedString) { if (StringUtils.isNotBlank(p_encodedString)) { String[] jwtParts = p_encodedString.split("\\."); if (jwtParts.length == 3) { return new PureJwt(jwtParts[0], jwtParts[1], jwtParts[2]); } else if (jwtParts.length == 2) { return new PureJwt(jwtParts[0], jwtParts[1], ""); } } return null; } public String getDecodedHeader() { return m_decodedHeader; } public String getDecodedPayload() { return m_decodedPayload; } public String getSigningInput() { return m_signingInput; } public String getEncodedHeader() { return m_encodedHeader; } public String getEncodedPayload() { return m_encodedPayload; } public String getEncodedSignature() { return m_encodedSignature; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; PureJwt pureJwt = (PureJwt) o; if (m_encodedHeader != null ? !m_encodedHeader.equals(pureJwt.m_encodedHeader) : pureJwt.m_encodedHeader != null) return false; if (m_encodedPayload != null ? !m_encodedPayload.equals(pureJwt.m_encodedPayload) : pureJwt.m_encodedPayload != null) return false; if (m_encodedSignature != null ? !m_encodedSignature.equals(pureJwt.m_encodedSignature) : pureJwt.m_encodedSignature != null) return false; return true; } @Override public int hashCode() { int result = m_encodedHeader != null ? m_encodedHeader.hashCode() : 0; result = 31 * result + (m_encodedPayload != null ? m_encodedPayload.hashCode() : 0); result = 31 * result + (m_encodedSignature != null ? m_encodedSignature.hashCode() : 0); return result; } }