package railo.runtime.coder; import java.io.UnsupportedEncodingException; import org.apache.commons.codec.binary.Base64; import railo.runtime.exp.ExpressionException; import railo.runtime.op.Caster; /** * Util class to handle Base 64 Encoded Strings */ public final class Base64Coder { /** * decodes a Base64 String to a Plain String * @param encoded * @return * @throws ExpressionException */ public static String decodeToString(String encoded,String charset) throws CoderException, UnsupportedEncodingException { byte[] dec = decode(Caster.toString(encoded,null)); return new String(dec,charset); } /** * encodes a String to Base64 String * @param plain String to encode * @return encoded String * @throws CoderException * @throws UnsupportedEncodingException */ public static String encodeFromString(String plain,String charset) throws CoderException, UnsupportedEncodingException { return encode(plain.getBytes(charset)); } /** * encodes a byte array to Base64 String * @param barr byte array to encode * @return encoded String * @throws CoderException */ public static String encode(byte[] barr) { barr=Base64.encodeBase64(barr); StringBuilder sb=new StringBuilder(); for(int i=0;i<barr.length;i++) { sb.append((char)barr[i]); } return sb.toString(); } /** * decodes a Base64 String to a Plain String * @param encoded * @return decoded binary data * @throws CoderException */ public static byte[] decode(String encoded) throws CoderException { try { char[] chars = encoded.toCharArray(); byte[] bytes=new byte[chars.length]; for(int i=0;i<chars.length;i++) { bytes[i]=(byte)chars[i]; } return Base64.decodeBase64(bytes); } catch(Throwable t) { throw new CoderException("can't decode input ["+encoded+"]"); } } }