@ -26,17 +26,10 @@ import org.jsoup.Jsoup
import org.mosad.thecitadelofricks.Course
import org.slf4j.LoggerFactory
import java.net.SocketTimeoutException
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 CourseListParser {
private var logger : org . slf4j . Logger = LoggerFactory . getLogger ( Mensa Parser:: class . java )
private var logger : org . slf4j . Logger = LoggerFactory . getLogger ( CourseListParser :: class . java )
/ * *
* return a list of all courses at courseListURL
@ -46,7 +39,7 @@ class CourseListParser {
fun getCourseLinks ( courseListURL : String ) : HashMap < String , Course > ? {
val courseLinkList = HashMap < String , Course > ( )
try {
val courseHTML = Jsoup . connect ( courseListURL ) . sslSocketFactory ( socketFactory ( ) ) . get ( )
val courseHTML = Jsoup . connect ( courseListURL ) . get ( )
courseHTML . select ( " ul.index-group " ) . select ( " li.Class " ) . select ( " a[href] " ) . forEachIndexed { _ , element ->
courseLinkList [ element . text ( ) ] = Course (
@ -54,6 +47,7 @@ class CourseListParser {
element . attr ( " href " ) . replace ( " http " , " https " )
)
}
logger . info ( " successfully retrieved course List " )
} catch ( ex : SocketTimeoutException ) {
logger . warn ( " timeout from hs-offenburg.de, updating on next attempt! " )
return null
@ -64,34 +58,4 @@ class CourseListParser {
return courseLinkList
}
// 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
}
}
}
}