package com.smartandroid.sa.aq; import java.net.HttpURLConnection; import org.apache.http.HttpRequest; import android.net.Uri; public class BasicHandle extends AccountHandle{ private String username; private String password; public BasicHandle(String username, String password){ this.username = username; this.password = password; } @Override public boolean authenticated() { return true; } @Override protected void auth() { } @Override public boolean expired(AbstractAjaxCallback<?, ?> cb, AjaxStatus status) { return false; } @Override public boolean reauth(AbstractAjaxCallback<?, ?> cb) { return false; } @Override public void applyToken(AbstractAjaxCallback<?, ?> cb, HttpRequest request){ String cred = username + ":" + password; byte[] data = cred.getBytes(); String auth = "Basic " + new String(encode(data, 0, data.length)); Uri uri = Uri.parse(cb.getUrl()); String host = uri.getHost(); request.addHeader("Host", host); request.addHeader("Authorization", auth); } @Override public void applyToken(AbstractAjaxCallback<?, ?> cb, HttpURLConnection conn){ String cred = username + ":" + password; byte[] data = cred.getBytes(); String auth = "Basic " + new String(encode(data, 0, data.length)); Uri uri = Uri.parse(cb.getUrl()); String host = uri.getHost(); conn.setRequestProperty("Host", host); conn.setRequestProperty("Authorization", auth); } // Mapping table from 6-bit nibbles to Base64 characters. private static final char[] map1 = new char[64]; static { int i=0; for (char c='A'; c<='Z'; c++) map1[i++] = c; for (char c='a'; c<='z'; c++) map1[i++] = c; for (char c='0'; c<='9'; c++) map1[i++] = c; map1[i++] = '+'; map1[i++] = '/'; } // Mapping table from Base64 characters to 6-bit nibbles. private static final byte[] map2 = new byte[128]; static { for (int i=0; i<map2.length; i++) map2[i] = -1; for (int i=0; i<64; i++) map2[map1[i]] = (byte)i; } //Source: http://www.source-code.biz/base64coder/java/Base64Coder.java.txt public static char[] encode (byte[] in, int iOff, int iLen) { int oDataLen = (iLen*4+2)/3; // output length without padding int oLen = ((iLen+2)/3)*4; // output length including padding char[] out = new char[oLen]; int ip = iOff; int iEnd = iOff + iLen; int op = 0; while (ip < iEnd) { int i0 = in[ip++] & 0xff; int i1 = ip < iEnd ? in[ip++] & 0xff : 0; int i2 = ip < iEnd ? in[ip++] & 0xff : 0; int o0 = i0 >>> 2; int o1 = ((i0 & 3) << 4) | (i1 >>> 4); int o2 = ((i1 & 0xf) << 2) | (i2 >>> 6); int o3 = i2 & 0x3F; out[op++] = map1[o0]; out[op++] = map1[o1]; out[op] = op < oDataLen ? map1[o2] : '='; op++; out[op] = op < oDataLen ? map1[o3] : '='; op++; } return out; } }