package de.htwdd.classes; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.ConnectivityManager; import android.os.Build; import android.support.annotation.NonNull; import android.util.Base64; import android.util.Log; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.security.KeyStore; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; import de.htwdd.R; public class HTTPDownloader { private String agent = "HTWDresden Android App"; private String basicAuth = null; private String urlstring; String urlParameters; int ResponseCode; public Context context; public HTTPDownloader(String urlstring) { this.urlstring = urlstring; } public static boolean CheckInternet(Context context) { ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI); android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); return wifi.isConnected() || mobile.isConnected(); } public String getString() { return getString("UTF-8"); } String getStringWithPost() { String tmp; StringBuilder result = new StringBuilder(); try { // create a url object URL url = new URL(urlstring); // create a urlconnection object HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); if (context != null && Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) conn.setSSLSocketFactory(addHTWCA().getSocketFactory()); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.addRequestProperty("User-Agent", agent); conn.connect(); //Send request DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.writeBytes(urlParameters); wr.flush(); wr.close(); // Get the response code ResponseCode = conn.getResponseCode(); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); while ((tmp = rd.readLine()) != null) result.append(tmp); rd.close(); conn.disconnect(); } catch (Exception e) { Log.e(this.getClass().getSimpleName(), "[Fehler] " + urlstring, e); if (ResponseCode == 0) ResponseCode = 999; return null; } return result.toString(); } public Bitmap getBitmap() { try { // create a url object URL url = new URL(urlstring); // create a urlconnection object HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.addRequestProperty("User-Agent", agent); conn.connect(); ResponseCode = conn.getResponseCode(); if (ResponseCode == 200) { InputStream is = conn.getInputStream(); return BitmapFactory.decodeStream(is); } } catch (Exception e) { ResponseCode = 999; } return null; } protected String getString(String Encoding) { String tmp; StringBuilder result = new StringBuilder(); try { // create a url object URL url = new URL(urlstring); // create a urlconnection object HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.addRequestProperty("Referer", urlstring); conn.addRequestProperty("User-Agent", agent); if (basicAuth != null) conn.setRequestProperty("Authorization", basicAuth); conn.connect(); ResponseCode = conn.getResponseCode(); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), Encoding)); while ((tmp = rd.readLine()) != null) result.append(tmp); rd.close(); conn.disconnect(); } catch (Exception e) { if (ResponseCode == 0) ResponseCode = 999; return null; } return result.toString(); } private SSLContext addHTWCA() throws Exception { CertificateFactory cf = CertificateFactory.getInstance("X.509"); // Load CAs from Ressource InputStream caInput = context.getResources().openRawResource(R.raw.ca_htw); Certificate ca; try { ca = cf.generateCertificate(caInput); } finally { caInput.close(); } // Create a KeyStore containing our trusted CAs String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); // Create a TrustManager that trusts the CAs in our KeyStore String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); // Create an SSLContext that uses our TrustManager SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManagers(), null); return context; } void setBasicAuth(@NonNull final String username, @NonNull final String password) { this.basicAuth = String.format("Basic %s", Base64.encodeToString(String.format("%s:%s", username, password).getBytes(), Base64.DEFAULT)); } }