package core.aws.util;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.net.URLCodec;
import java.util.BitSet;
/**
* @author neo
*/
public final class Encodings {
public static String hex(byte[] bytes) {
return new String(Hex.encodeHex(bytes));
}
public static byte[] decodeHex(String text) {
try {
return Hex.decodeHex(text.toCharArray());
} catch (DecoderException e) {
throw new Error(e);
}
}
public static String base64(String text) {
return base64(Strings.bytes(text));
}
public static String base64(byte[] bytes) {
return java.util.Base64.getEncoder().encodeToString(bytes);
}
public static byte[] decodeBase64(String text) {
return decodeBase64(Strings.bytes(text));
}
public static byte[] decodeBase64(byte[] bytes) {
return java.util.Base64.getDecoder().decode(bytes);
}
public static String base64URLSafe(byte[] bytes) {
return java.util.Base64.getUrlEncoder().encodeToString(bytes);
}
// refer to org.apache.commons.codec.net.URLCodec.WWW_FORM_URL, not including space, url path requires space be encoded as %20
private static final BitSet URL_PATH = new BitSet(256);
static {
for (int i = 'a'; i <= 'z'; i++) {
URL_PATH.set(i);
}
for (int i = 'A'; i <= 'Z'; i++) {
URL_PATH.set(i);
}
for (int i = '0'; i <= '9'; i++) {
URL_PATH.set(i);
}
URL_PATH.set('-');
URL_PATH.set('_');
URL_PATH.set('.');
URL_PATH.set('*');
}
// url encoding is for queryString, url path encoding is for url path, the difference is queryString uses + for space, url path uses %20 for space
public static String urlPath(String text) {
return new String(URLCodec.encodeUrl(URL_PATH, Strings.bytes(text)), Charsets.UTF_8);
}
public static String url(String text) {
return new String(URLCodec.encodeUrl(null, Strings.bytes(text)), Charsets.UTF_8);
}
public static String decodeURL(String text) {
try {
return new String(URLCodec.decodeUrl(Strings.bytes(text)), Charsets.UTF_8);
} catch (DecoderException e) {
throw new Error(e);
}
}
}