package studportControl; import java.util.ArrayList; import java.util.List; import javafx.scene.control.Button; import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.RedirectStrategy; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.LaxRedirectStrategy; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.util.EntityUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import view.Dashboard; import view.StudportBar; public class Studierendenportal implements Runnable { private final String cookieUrl = "https://campus.studium.kit.edu/"; private final String loginUrl = "https://campus.studium.kit.edu/Shibboleth.sso/Login?target=https%3A//campus.studium.kit.edu/reports/examsextract.php"; private final String authnUrl = "https://idp.scc.kit.edu/idp/Authn/ExtUP"; private final String scriptUrl = "https://idp.scc.kit.edu/idp/profile/SAML2/Redirect/SSO"; private final String examExtractUrl = "https://campus.studium.kit.edu/reports/examsextract.php"; private String alleEn = null; private String alleDe = null; private String alleBestandenEn = null; private String alleBestandenDe = null; private String filename = null; private final DefaultHttpClient client; private final BasicHttpContext context; private final RedirectStrategy strategy; private HttpGet requestGET; private HttpPost requestPOST; private HttpResponse response; private HttpEntity entity; private final String username; private final String password; private final String choice; private final StudportBar studportBar; private final Button button; private final Dashboard dashboard; public Studierendenportal(Dashboard dashboard, String username, String password, Button button, StudportBar studportBar) { this.dashboard = dashboard; this.username = username; this.password = password; this.button = button; this.studportBar = studportBar; this.choice = button.getText(); client = new DefaultHttpClient(); strategy = new LaxRedirectStrategy(); client.setRedirectStrategy(strategy); context = new BasicHttpContext(); } @Override public void run() { final boolean login = login(username, password); if (login) { downloadNotenauszug(choice); } } public boolean login(String username, String password) { try { requestGET = new HttpGet(cookieUrl); response = client.execute(requestGET, context); requestGET.releaseConnection(); requestGET = new HttpGet(loginUrl); response = client.execute(requestGET, context); requestGET.releaseConnection(); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("j_username", username)); nvps.add(new BasicNameValuePair("j_password", password)); nvps.add(new BasicNameValuePair("submit", "Einloggen")); requestPOST = new HttpPost(authnUrl); requestPOST.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); response = client.execute(requestPOST, context); Document doc = Jsoup.parse(EntityUtils.toString(response.getEntity())); final Elements value1 = doc.select("input[name=RelayState]"); String v1 = value1.attr("value"); final Elements value2 = doc.select("input[name=SAMLResponse]"); String v2 = value2.attr("value"); requestPOST.releaseConnection(); List<NameValuePair> nvps2 = new ArrayList<NameValuePair>(); nvps2.add(new BasicNameValuePair("RelayState", v1)); nvps2.add(new BasicNameValuePair("SAMLResponse", v2)); requestPOST = new HttpPost(scriptUrl); requestPOST.setEntity(new UrlEncodedFormEntity(nvps2, Consts.UTF_8)); response = client.execute(requestPOST, context); System.out.println(EntityUtils.toString(response.getEntity())); requestPOST.releaseConnection(); // if (htmlStartpage.contains("Sie sind nicht angemeldet")) { // dashboard.setStatusText("Benutzerdaten falsch!", true); // dashboard.fadeInLogin(); // stopDownload(); // return false; // } else { // openTargetWebsite(); // } // requestPOST.releaseConnection(); } catch (Exception e) { stopDownload(); e.printStackTrace(); } return true; } public void openTargetWebsite() { requestGet("https://studium.kit.edu/meinestudienakte/Seiten/BachelorMasterNotenauszug.aspx?$HIS$state=notenspiegelStudent&$HIS$struct=auswahlBaum&$HIS$navigation=Y&$HIS$next=tree.vm&$HIS$nextdir=qispos/notenspiegel/student&$HIS$nodeID=auswahlBaum%7Cabschluss%3Aabschl%3D82%2Cstgnr%3D1&$HIS$expand=0&$HIS$lastState=notenspiegelStudent#auswahlBaum%7Cabschluss%3Aabschl%3D82%2Cstgnr%3D1"); String html3 = requestGet("https://studium.kit.edu/meinestudienakte/Seiten/BachelorMasterNotenauszug.aspx?$HIS$state=notenspiegelStudent&$HIS$next=list.vm&$HIS$nextdir=qispos/notenspiegel/student&$HIS$createInfos=Y&$HIS$struct=auswahlBaum&$HIS$nodeID=auswahlBaum%7Cabschluss%3Aabschl%3D82%2Cstgnr%3D1%7Cstudiengang%3Astg%3D179&$HIS$expand=0#auswahlBaum%7Cabschluss%3Aabschl%3D82%2Cstgnr%3D1%7Cstudiengang%3Astg%3D179"); Document doc = Jsoup.parse(html3); List<Element> temp = doc.select("a[href]").select("[class=liste1]").select("a[href]"); for (Element t : temp) { t.setBaseUri("https://studium.kit.edu/meinestudienakte/Seiten/BachelorMasterNotenauszug.aspx/"); if (t.attr("abs:href").contains("studiengang&$HIS$lastState=notenspiegelStudent&$HIS$xslobject=de")) { alleDe = t.attr("abs:href"); } if (t.attr("href").contains("studiengang&$HIS$lastState=notenspiegelStudent&$HIS$xslobject=en")) { alleEn = t.attr("abs:href"); } if (t.attr("href").contains("studiengangbestanden&$HIS$lastState=notenspiegelStudent&$HIS$xslobject=de")) { alleBestandenDe = t.attr("abs:href"); } if (t.attr("href").contains("studiengangbestanden&$HIS$lastState=notenspiegelStudent&$HIS$xslobject=en")) { alleBestandenEn = t.attr("abs:href"); } } } public void downloadNotenauszug(String choice) { String downloadPdfUrl = null; switch (choice) { case Transcript.ALLE_LEISTUNGEN_DEUTSCH: filename = "Notenauszug-DE"; downloadPdfUrl = alleDe; break; case Transcript.ALLE_LEISTUNGEN_ENGLISCH: filename = "Notenauszug-EN"; downloadPdfUrl = alleEn; break; case Transcript.BESTANDEN_DEUTSCH: filename = "Notenauszug-BE-DE"; downloadPdfUrl = alleBestandenDe; break; case Transcript.BESTANDEN_ENGLISCH: filename = "Notnauszug-BE-EN"; downloadPdfUrl = alleBestandenEn; break; } new Thread(new TranscriptDownloader(dashboard, client, downloadPdfUrl, filename, this)).start(); } public String requestGet(String url) { try { requestGET = new HttpGet(url); response = client.execute(requestGET, context); entity = response.getEntity(); return EntityUtils.toString(entity); } catch (Exception e) { e.printStackTrace(); } finally { requestGET.releaseConnection(); } return null; } void stopDownload() { studportBar.changeButtonstate(button, false); } }