package net.dewep.intranetepitech; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.CookieHandler; import java.net.CookieManager; import java.net.HttpCookie; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.net.ssl.HttpsURLConnection; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.text.Html; import android.util.Log; import android.widget.Toast; import android.widget.Button; import android.app.Activity; class MyRequest { int type; String url; List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); int codeRetour; String explain_error; String response; Object obj; boolean susie = false; } public class RecupDonneesNet extends AsyncTask<MyRequest, Integer, MyRequest> { Context context = null; private ProgressDialog progressDialog; public RecupDonneesNet(Context context, boolean dialog) { this.context = context; progressDialog = null; if (dialog) { progressDialog = new ProgressDialog(context); if (context.getClass().getSimpleName().equals("Act_Settings")) progressDialog.setMessage(context.getString(R.string.connexion_en_cours)); else progressDialog.setMessage(context.getString(R.string.chargement_en_cours)); progressDialog.setCanceledOnTouchOutside(false); progressDialog.show(); } } protected InputStream getInputStream(HttpsURLConnection request) throws IOException { if (request.getResponseCode() == 200) return request.getInputStream(); return request.getErrorStream(); } protected HttpsURLConnection post(String path, List<NameValuePair> nameValuePairs, boolean withLogas) { try { String short_domaine = "intra.epitech.eu"; String domaine = "https://" + short_domaine; URL url = new URL(domaine + (withLogas ? Act_Settings.getLogas(this.context) : "") + path); HttpsURLConnection request = (HttpsURLConnection) url.openConnection(); request.setRequestMethod("POST"); request.setDoInput(true); request.setDoOutput(true); List<HttpCookie> list = Stock.getInstance().cookiemanager.getCookieStore().get(new URI(domaine)); for (HttpCookie httpCookie : list) { Log.d("cookie", httpCookie.getName()); } if (nameValuePairs != null) { UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nameValuePairs); OutputStream post = request.getOutputStream(); entity.writeTo(post); post.flush(); } request.connect(); return request; } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } public HttpClient getNewHttpClient() { Stock.getInstance().cookiemanager = new CookieManager(); HttpCookie cookie = new HttpCookie("language", "fr"); cookie.setPath("/"); cookie.setDomain("https://intra.epitech.eu"); try { Stock.getInstance().cookiemanager.getCookieStore().add(new URI("https://intra.epitech.eu"), cookie); } catch (URISyntaxException e) { e.printStackTrace(); } CookieHandler.setDefault(Stock.getInstance().cookiemanager); return new DefaultHttpClient(); /*try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); SSLSocketFactory sf = new MySSLSocketFactory(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme("https", sf, 443)); ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); return new DefaultHttpClient(ccm, params); } catch (Exception e) { return new DefaultHttpClient(); }*/ } @Override protected MyRequest doInBackground(MyRequest... params) { MyRequest request = (MyRequest) params[0]; try { HttpsURLConnection resp = null; if (Stock.getInstance().httpclient == null) { Stock.getInstance().httpclient = getNewHttpClient(); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("login", Act_Settings.getLogin(this.context))); nameValuePairs.add(new BasicNameValuePair("password", Act_Settings.getPassword(this.context))); if ((resp = this.post("/user/?format=json", nameValuePairs, false)) == null) throw new IOException("this.post is null"); BufferedReader reader = new BufferedReader(new InputStreamReader(getInputStream(resp), "UTF-8")); StringBuilder builder = new StringBuilder(); for (String line = null; (line = reader.readLine()) != null;) builder.append(line).append("\n"); request.response = builder.toString(); JSONObject objs = new JSONObject(request.response); Act_Settings.setCanLogas(this.context, false); if (objs.has("rights")) { JSONObject rights = objs.getJSONObject("rights"); Act_Settings.setCanLogas(this.context, rights.has("logas")); } request.codeRetour = resp.getResponseCode(); if (request.codeRetour != 200) return (request); } if (request.type == Global.T_LOGIN) { request.codeRetour = 0; return (request); } if (request.susie) { if (Stock.getInstance().id_susie == 0) { if ((resp = this.post("/planning/my-schedules?format=json", null, true)) == null) throw new IOException("this.post is null"); BufferedReader reader = new BufferedReader(new InputStreamReader(getInputStream(resp), "UTF-8")); StringBuilder builder = new StringBuilder(); for (String line = null; (line = reader.readLine()) != null;) builder.append(line).append("\n"); request.response = builder.toString(); try { if (request.response.indexOf("[") == -1) request.response = "[" + request.response + "]"; JSONArray array = new JSONArray(request.response); for (int i = 0; i < array.length(); i++) { JSONObject o = array.getJSONObject(i); if (!o.isNull("id") && !o.isNull("type") && o.getString("type").equals("susie")) Stock.getInstance().id_susie = o.getInt("id"); } } catch (JSONException e) { e.printStackTrace(); request.codeRetour = -2; request.response = context.getString(R.string.erreur_parsing); return (request); } request.codeRetour = resp.getResponseCode(); if (request.codeRetour != 200) return (request); } if (Stock.getInstance().id_susie == 0) { request.codeRetour = -2; request.response = "Vous n'�tes inscrit � aucune susie actuellement."; return (request); } request.url = "/planning/" + Integer.toString(Stock.getInstance().id_susie) + "/" + request.url; Log.d("REQ URL", request.url); } if ((resp = this.post(request.url, request.nameValuePairs, true)) == null) throw new IOException("this.post is null"); request.codeRetour = resp.getResponseCode(); BufferedReader reader = new BufferedReader(new InputStreamReader(getInputStream(resp), "UTF-8")); StringBuilder builder = new StringBuilder(); for (String line = null; (line = reader.readLine()) != null;) builder.append(line).append("\n"); request.response = builder.toString(); if (request.codeRetour != 200) return (request); if (request.response.indexOf("[") == -1) request.response = "[" + request.response + "]"; } catch (IOException e) { e.printStackTrace(); request.codeRetour = -1; request.explain_error = e.getMessage(); } catch (JSONException e) { e.printStackTrace(); request.codeRetour = -1; request.explain_error = e.getMessage(); } return (request); } protected void openError(String title, String message) { if (((Activity) this.context).isFinishing()) return ; AlertDialog.Builder builder = new AlertDialog.Builder(this.context); builder.setTitle(title); builder.setMessage(message); AlertDialog dialog = builder.create(); dialog.show(); } protected void openError(String title, String message, Boolean reset) { if (reset) Stock.getInstance().httpclient = null; openError(title, message); } @Override protected void onPostExecute(MyRequest result) { if (result == null || result.codeRetour == 0) { try { if (progressDialog != null && progressDialog.isShowing()) progressDialog.cancel(); } catch (Exception e) { // nothing } Intent intent = new Intent(this.context, Act_Main.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); this.context.startActivity(intent); ((Activity) this.context).finish(); return ; } if (result.codeRetour == -2) openError(context.getString(R.string.erreur), result.response, true); else if (result.codeRetour == 403) openError("Error network", context.getString(R.string.erreur_auth), true); else if (result.codeRetour == -1) openError("Error network", context.getString(R.string.impossible_acceder_intra), true); else if (result.codeRetour != 200 && result.type != Global.T_TOKENS) { if (result.obj != null && (result.type == Global.T_INSCRIPTION_INSCRIPTIONS || result.type == Global.T_INSCRIPTION_SUSIE)) { if (!((Button) result.obj).isEnabled()) { try { if (progressDialog != null && progressDialog.isShowing()) progressDialog.cancel(); } catch (Exception e) { // nothing } return ; } if (((Button) result.obj).getText().equals("Inscription")) ((Button) result.obj).setText("D�sinscription"); else ((Button) result.obj).setText("Inscription"); } try { JSONObject o = new JSONObject(result.response); if (o.isNull("error")) { openError("Action impossible", "Erreur inconnue."); } else { openError("Action impossible", o.getString("error")); } } catch (JSONException _) { try { JSONArray array = new JSONArray(result.response); JSONObject o = array.getJSONObject(0); if (o.isNull("error")) { openError("Action impossible", "Erreur inconnue."); } else { openError("Action impossible", o.getString("error")); } } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur_parsing), context.getString(R.string.erreur_parsing)); } } } else if (result.type == Global.T_PROJETS) { try { JSONArray array = new JSONArray(result.response); for (int i = 0; i < array.length(); i++) { JSONObject o = array.getJSONObject(i); if (!o.isNull("type_acti_code") && o.getString("type_acti_code").equals("proj")) Stock.getInstance().projetsAddElem(new Projet(o.getString("acti_title"), o.getString("title_module"), o.getString("begin_acti"), o.getString("end_acti"))); } Collections.sort(Stock.getInstance().projets, new ComparatorProjet()); } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur_parsing), context.getString(R.string.erreur_parsing)); } } else if (result.type == Global.T_CAL || result.type == Global.T_INSCRIPTIONS) { try { JSONArray array = new JSONArray(result.response); int i, j, k; for (i = 0; i < array.length(); i++) { JSONObject o = array.getJSONObject(i); Activite act = null; //Log.d("rights", o.getString("rights").contains("\"prof_inst\"") ? "true" : "false"); //Log.d("Event", o.getString("acti_title") + (!o.isNull("title") ? " " + o.getString("title") : "")); if (result.type == Global.T_CAL && (!o.isNull("event_registered") || ((!o.isNull("is_rdv") && o.getString("is_rdv").equals("1")) && (!o.isNull("rdv_group_registered") || !o.isNull("rdv_indiv_registered")))) || result.type == Global.T_INSCRIPTIONS && !o.isNull("scolaryear") && !o.isNull("allow_register") && o.getBoolean("allow_register") && o.getBoolean("module_registered") && (o.isNull("event_registered") && (o.isNull("is_rdv") || !o.getString("is_rdv").equals("1")) || o.getString("event_registered").equals("registered"))) { //Log.d("Event add", o.isNull("acti_title") ? o.getString("title") : o.getString("acti_title")); String title = (!o.isNull("acti_title") ? o.getString("acti_title") : "") + (!o.isNull("title") ? " " + o.getString("title") : ""); String module = (!o.isNull("titlemodule") ? o.getString("titlemodule") : ""); String start = (!o.isNull("start") ? o.getString("start") : ""); String end = (!o.isNull("end") ? o.getString("end") : ""); JSONObject r = o.isNull("room") ? null : o.getJSONObject("room"); String room = (r != null && !r.isNull("code")) ? r.getString("code") : ""; String event_registered = (!o.isNull("event_registered") ? o.getString("event_registered") : ""); Boolean allow_token = (o.isNull("is_rdv") || !o.getString("is_rdv").equals("1")) ? (!o.isNull("allow_token") ? o.getBoolean("allow_token") : false) : false; String rdv_indiv_registered = (!o.isNull("rdv_group_registered") ? o.getString("rdv_group_registered") : (!o.isNull("rdv_indiv_registered") ? o.getString("rdv_indiv_registered") : "")); String codeacti = (!o.isNull("codeacti") ? o.getString("codeacti") : ""); String url = (!o.isNull("scolaryear") ? o.getString("scolaryear") : "") + "/" + (!o.isNull("codemodule") ? o.getString("codemodule") : "") + "/" + (!o.isNull("codeinstance") ? o.getString("codeinstance") : "") + "/" + (!o.isNull("codeacti") ? o.getString("codeacti") : "") + "/" + (!o.isNull("codeevent") ? o.getString("codeevent") : ""); act = new Activite(title, module, start, end, room, event_registered, allow_token, rdv_indiv_registered, codeacti, url); } else if (result.type == Global.T_CAL && !o.isNull("rights") && o.getString("rights").contains("\"prof_inst\"")) { JSONObject r = o.getJSONObject("room"); act = new Activite(o.getString("acti_title") + (!o.isNull("title") ? " " + o.getString("title") : ""), o.getString("titlemodule"), o.getString("start"), o.getString("end"), (!r.isNull("code")) ? r.getString("code") : "", "", false, "", o.getString("codeacti"), o.getString("scolaryear") + "/" + o.getString("codemodule") + "/" + o.getString("codeinstance") + "/" + o.getString("codeacti") + "/" + o.getString("codeevent")); } else if (!o.isNull("calendar_type") && !o.isNull("subscribed") && o.getBoolean("subscribed") && result.type != Global.T_INSCRIPTIONS) { act = new Activite(o.getString("title"), "Calendrier " + o.getString("calendar_type"), o.getString("start"), o.getString("end"), "", "calendar", false, "", o.getString("id"), ""); } if (act != null) { k = -1; for (j = 0; j < Stock.getInstance().cal.size(); j++) { if (((InfosCalendrier) Stock.getInstance().calGetItem(j)).jour.equals(o.getString("start").substring(0, 10))) k = j; } if (k == -1) { ArrayList<Activite> acts = new ArrayList<Activite>(); acts.add(act); Stock.getInstance().calAddElem(new InfosCalendrier(o.getString("start").substring(0, 10), acts)); } else ((InfosCalendrier)Stock.getInstance().calGetItem(k)).acts.add(act); } } for (j = 0; j < Stock.getInstance().cal.size(); j++) { Collections.sort(((InfosCalendrier)Stock.getInstance().calGetItem(j)).acts, new ComparatorActivite()); } Collections.sort(Stock.getInstance().cal, new ComparatorJour()); } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur), context.getString(R.string.erreur_parsing)); } } else if (result.type == Global.T_MESSAGES) { try { JSONArray array = new JSONArray(result.response); for (int i = 0; i < array.length(); i++) { JSONObject o = array.getJSONObject(i); if (!o.isNull("title")) Stock.getInstance().messagesAddElem(new Notice(o.getString("title"), o.getString("content"), o.getString("date"))); } } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur), context.getString(R.string.erreur_parsing)); } } else if (result.type == Global.T_TOKENS) { try { JSONArray array = new JSONArray(result.response); JSONObject o = array.getJSONObject(0); if (o.isNull("error")) { Toast.makeText(this.context, "Token valid�", Toast.LENGTH_SHORT).show(); } else if (o.getString("error").equals("failed")) { openError("Error token", "Va voir l'adm maintenant..."); } else { /*if (!((Button) result.obj).isEnabled()) return ;*/ ((AlertDialog) result.obj).setMessage(Html.fromHtml("<font color='#FF0000'><b>" + o.getString("error") + "</b></font>")); ((AlertDialog) result.obj).show(); } } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur_parsing), context.getString(R.string.erreur_parsing)); } } else if (result.type == Global.T_MES_NOTES) { try { JSONObject objs = new JSONObject(result.response); JSONArray array = objs.getJSONArray("notes"); for (int i = 0; i < array.length(); i++) { JSONObject o = array.getJSONObject(i); if (!o.isNull("codeacti")) Stock.getInstance().notesAddElem(new Note(o.getString("title"), o.getString("titlemodule"), Act_Settings.getLogin(this.context), Act_Settings.getLogin(this.context), o.getString("final_note"), o.getString("comment"), o.getString("date"), o.getString("scolaryear") + "/" + o.getString("codemodule") + "/" + o.getString("codeinstance") + "/" + o.getString("codeacti"))); } Collections.sort(Stock.getInstance().notes, new ComparatorNotes()); } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur), context.getString(R.string.erreur_parsing)); } } else if (result.type == Global.T_NOTES) { try { JSONArray array = new JSONArray(result.response); for (int i = 0; i < array.length(); i++) { JSONObject o = array.getJSONObject(i); Stock.getInstance().notesAddElem(new Note(o.getString("title"), "", o.getString("login"), o.getString("user_title"), o.getString("note"), o.getString("comment"), o.getString("date"), "")); } Collections.sort(Stock.getInstance().notes, new ComparatorNotes()); } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur), context.getString(R.string.erreur_parsing)); } } else if (result.type == Global.T_SUSIES) { try { JSONArray array = new JSONArray(result.response); for (int i = 0; i < array.length(); i++) { JSONObject o = array.getJSONObject(i); if (!o.isNull("maker")){ JSONObject m = o.getJSONObject("maker"); Stock.getInstance().susiesAddElem(new Susie(o.getString("id"), o.getString("type"), o.getString("title"), o.isNull("event_registered") || !o.getString("event_registered").equals("registered") ? false : true, o.getInt("registered"), o.getInt("nb_place"), o.getString("start"), o.getString("end"), m.getString("login"), m.getString("title"), o.getString("description"), null)); } } Collections.sort(Stock.getInstance().susies, new ComparatorSusies()); } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur), context.getString(R.string.erreur_parsing)); } } else if (result.type == Global.T_SUSIE) { try { JSONObject o = new JSONObject(result.response); JSONArray array = o.getJSONArray("logins"); JSONObject m = o.getJSONObject("maker"); ArrayList<String> logins = new ArrayList<String>(); boolean present = false; for (int i = 0; i < array.length(); i++) { JSONObject objs = array.getJSONObject(i); logins.add(objs.getString("login")); if (objs.getString("login").equals(Act_Settings.getLogin(context))) present = true; } Stock.getInstance().susiesAddElem(new Susie(o.getString("id"), o.getString("type"), o.getString("title"), present, logins.size(), o.getInt("nb_place"), o.getString("start"), o.getString("end"), m.getString("login"), m.getString("title"), o.getString("description"), logins)); } catch (JSONException e) { e.printStackTrace(); openError(context.getString(R.string.erreur), context.getString(R.string.erreur_parsing)); } } if ((result.type == Global.T_PROJETS) && Stock.getInstance().projetsAdapter() != null) { Stock.getInstance().projets_req = 1; Stock.getInstance().projetsAdapter().notifyDataSetChanged(); } else if ((result.type == Global.T_CAL) && Stock.getInstance().calAdapter() != null) { Stock.getInstance().cal_req = 1; Stock.getInstance().calAdapter().notifyDataSetChanged(); } else if ((result.type == Global.T_MESSAGES) && Stock.getInstance().messagesAdapter() != null) { Stock.getInstance().messages_req = 1; Stock.getInstance().messagesAdapter().notifyDataSetChanged(); } else if ((result.type == Global.T_MES_NOTES || result.type == Global.T_NOTES) && Stock.getInstance().notesAdapter() != null) { Stock.getInstance().notes_req = 1; Stock.getInstance().notesAdapter().notifyDataSetChanged(); } else if ((result.type == Global.T_INSCRIPTIONS) && Stock.getInstance().inscriptionsAdapter() != null) { Stock.getInstance().cal_req = 1; Stock.getInstance().inscriptionsAdapter().notifyDataSetChanged(); } else if ((result.type == Global.T_SUSIE || result.type == Global.T_SUSIES) && Stock.getInstance().susiesAdapter() != null) { Stock.getInstance().susies_req = 1; Stock.getInstance().susiesAdapter().notifyDataSetChanged(); } try { if (progressDialog != null && progressDialog.isShowing()) progressDialog.cancel(); } catch (Exception e) { // nothing } } }