Skip to content
Extraits de code Groupes Projets
Valider b3a300f1 rédigé par Tony 'Nitorac' RANINI's avatar Tony 'Nitorac' RANINI :speech_balloon:
Parcourir les fichiers

Fixed crash on startup

Fixed wrong charset name
Fixed correct SSL check
parent b28e8516
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -9,8 +9,8 @@ android {
applicationId "fr.nitorac.aurionweb"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0.0"
versionCode 3
versionName "1.0.2"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
......
......@@ -21,6 +21,7 @@ import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.text.CharacterIterator;
import java.text.Normalizer;
import java.text.StringCharacterIterator;
......@@ -33,8 +34,8 @@ public class Utils {
public final static String BASE_SSL_URL = "https://ranini.iiens.net/aurionweb-check/cert.php?site=";
private static SSLContext sslContext;
private static Certificate casCert;
private static Certificate aurionCert;
private static X509Certificate casCert;
private static X509Certificate aurionCert;
public static Connection wrapSSL(String url) throws GeneralSecurityException, IOException {
return Jsoup.connect(url)
......@@ -45,7 +46,7 @@ public class Utils {
return CertificateFactory.getInstance("X.509");
}
public static Certificate getCasCert(Context c) throws CertificateException {
public static X509Certificate getCasCert(Context c) throws CertificateException {
if (casCert == null){
InputStream input;
try{
......@@ -57,12 +58,12 @@ public class Utils {
Log.e("SSLCertFetch", "Can't get remote SSL cas certificate, fallback on local one");
input = c.getResources().openRawResource(R.raw.cas_ensiie_fr);
}
casCert = getSSLFactory().generateCertificate(input);
casCert = (X509Certificate) getSSLFactory().generateCertificate(input);
}
return casCert;
}
public static Certificate getAurionCert(Context c) throws CertificateException {
public static X509Certificate getAurionCert(Context c) throws CertificateException {
if (aurionCert == null){
InputStream input;
try{
......@@ -74,7 +75,7 @@ public class Utils {
Log.e("SSLCertFetch", "Can't get remote SSL aurion certificate, fallback on local one");
input = c.getResources().openRawResource(R.raw.aurionweb_ensiie_fr);
}
aurionCert = getSSLFactory().generateCertificate(input);
aurionCert = (X509Certificate) getSSLFactory().generateCertificate(input);
}
return aurionCert;
}
......
package fr.nitorac.aurionweb.fragments;
import android.content.Context;
import android.net.http.SslCertificate;
import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
......@@ -17,10 +18,10 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import fr.nitorac.aurionweb.R;
import fr.nitorac.aurionweb.Utils;
......@@ -89,9 +90,26 @@ public abstract class AurionViewFragment extends Fragment {
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError er) {
Context c = AurionViewFragment.this.getContext();
try{
Certificate cas = Utils.getCasCert(c);
Certificate aurion = Utils.getAurionCert(c);
handler.proceed();
SslCertificate cas = new SslCertificate(Utils.getCasCert(c));
SslCertificate aurion = new SslCertificate(Utils.getAurionCert(c));
SslCertificate erCert = er.getCertificate();
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.Q){
if(Objects.equals(aurion.getX509Certificate(), erCert.getX509Certificate()) ||
Objects.equals(cas.getX509Certificate(), erCert.getX509Certificate())){
handler.proceed();
}else{
handler.cancel();
}
}else{
// Minimal verification but Android won't let me convert SslCertificate to Certificate
if((Objects.equals(cas.getIssuedBy(), erCert.getIssuedBy()) && Objects.equals(cas.getIssuedTo(), erCert.getIssuedTo()) && Objects.equals(cas.getValidNotAfterDate(), erCert.getValidNotAfterDate()) && Objects.equals(cas.getValidNotBeforeDate(), erCert.getValidNotBeforeDate())) ||
(Objects.equals(aurion.getIssuedBy(), erCert.getIssuedBy()) && Objects.equals(aurion.getIssuedTo(), erCert.getIssuedTo()) && Objects.equals(aurion.getValidNotAfterDate(), erCert.getValidNotAfterDate()) && Objects.equals(aurion.getValidNotBeforeDate(), erCert.getValidNotBeforeDate()))){
handler.proceed();
}else{
handler.cancel();
}
}
}catch (CertificateException e){
e.printStackTrace();
Toast.makeText(c, "Erreur de certificat SSL : " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
......
......@@ -24,8 +24,13 @@ public class CalendarFragment extends AurionViewFragment {
e.printStackTrace();
failed = true;
Log.e(getClass().getSimpleName(), "Impossible de charger le chemin vers l'emploi du temps (" + e.getLocalizedMessage() + ")");
Toast.makeText(getContext(), "Impossible de charger le chemin vers l'emploi du temps (" + e.getLocalizedMessage() + ")", Toast.LENGTH_LONG).show();
webView.loadUrl(HomeFragment.AURIONURL, getHeaders());
if(getActivity() != null){
getActivity().runOnUiThread(() -> {
Toast.makeText(getContext(), "Impossible de charger le chemin vers l'emploi du temps (" + e.getLocalizedMessage() + ")", Toast.LENGTH_LONG).show();
webView.loadUrl(HomeFragment.AURIONURL, getHeaders());
});
}
}
}
......
......@@ -9,12 +9,15 @@ public class HomeFragment extends AurionViewFragment {
public static final String AURIONURL = "https://aurionweb.ensiie.fr";
private boolean hasLoaded = false;
@Override
public void pageFinished(WebView view, String url) {
if(url.equals("https://aurionweb.ensiie.fr")){
if(!hasLoaded){
view.evaluateJavascript("$(\"#mobile-menu-btn\").click();", paRes -> {
Log.e("JSSS", paRes);
});
hasLoaded = true;
}
}
......
......@@ -28,7 +28,7 @@ public class AsyncUpdateCheckerTask extends AsyncTask<Void, Void, JsonObject> {
@Override
protected JsonObject doInBackground(Void... voids) {
try {
URL url = new URL(UpdateManager.CHECK_URL + URLEncoder.encode(BuildConfig.VERSION_NAME, StandardCharsets.UTF_8.toString()));
URL url = new URL(UpdateManager.CHECK_URL + URLEncoder.encode(BuildConfig.VERSION_NAME, StandardCharsets.UTF_8.displayName()));
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setConnectTimeout(10000); // timing out in a minute
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter