@ -27,6 +27,13 @@ import org.jsoup.nodes.Document
import org.mosad.thecitadelofricks.Lesson
import org.mosad.thecitadelofricks.TimetableWeek
import org.slf4j.LoggerFactory
import java.security.KeyManagementException
import java.security.cert.CertificateException
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocketFactory
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
class TimetableParser {
private var logger : org . slf4j . Logger = LoggerFactory . getLogger ( TimetableParser :: class . java )
@ -40,7 +47,7 @@ class TimetableParser {
* /
fun getTimeTable ( timetableURL : String ) : TimetableWeek {
return try {
parseTimeTable ( Jsoup . connect ( timetableURL ) . get ( ) )
parseTimeTable ( Jsoup . connect ( timetableURL ) . sslSocketFactory ( socketFactory ( ) ) . get ( ) )
} catch ( gex : Exception ) {
logger . error ( " general TimetableParser error " , gex )
TimetableWeek ( )
@ -122,7 +129,7 @@ class TimetableParser {
* /
fun getWeekNumberYear ( timetableURL : String ) : Int {
return try {
parseWeekNumberYear ( Jsoup . connect ( timetableURL ) . get ( ) )
parseWeekNumberYear ( Jsoup . connect ( timetableURL ) . sslSocketFactory ( socketFactory ( ) ) . get ( ) )
} catch ( gex : Exception ) {
logger . error ( " general TimetableParser error " , gex )
0
@ -181,4 +188,34 @@ class TimetableParser {
println ( " \n " )
}
// Hack to ignore ssl errors while reading
private fun socketFactory ( ) : SSLSocketFactory {
val trustAllCerts = arrayOf < TrustManager > ( object : X509TrustManager {
@Throws ( CertificateException :: class )
override fun checkClientTrusted ( chain : Array < X509Certificate > , authType : String ) {
}
@Throws ( CertificateException :: class )
override fun checkServerTrusted ( chain : Array < X509Certificate > , authType : String ) {
}
override fun getAcceptedIssuers ( ) : Array < X509Certificate > {
return arrayOf ( )
}
} )
try {
val sslContext = SSLContext . getInstance ( " TLS " )
sslContext . init ( null , trustAllCerts , java . security . SecureRandom ( ) )
return sslContext . socketFactory
} catch ( e : Exception ) {
when ( e ) {
is RuntimeException , is KeyManagementException -> {
throw RuntimeException ( " Failed to create a SSL socket factory " , e )
}
else -> throw e
}
}
}
}