forked from thijooree/android
MIB v2 login works
This commit is contained in:
@@ -7,6 +7,10 @@ import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.json.JSONObject
|
||||
import java.security.MessageDigest
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import java.util.TimeZone
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import kotlin.math.abs
|
||||
@@ -16,7 +20,7 @@ class SessionExpiredException : Exception("MIB session expired")
|
||||
|
||||
class MibLoginFlow(private val credentialStore: CredentialStore) {
|
||||
|
||||
private val BASE_URL = "https://faisanet.mib.com.mv/faisamobilex_smvc/"
|
||||
private val BASE_URL = "https://faisamobilex-smvc-v2.mib.com.mv/index/"
|
||||
|
||||
/** The active session after a successful login, usable for subsequent WebView requests. */
|
||||
var lastSession: MibSession? = null
|
||||
@@ -42,8 +46,9 @@ class MibLoginFlow(private val credentialStore: CredentialStore) {
|
||||
.writeTimeout(30, TimeUnit.SECONDS)
|
||||
.addNetworkInterceptor { chain ->
|
||||
val req = chain.request().newBuilder()
|
||||
.header("User-Agent", "android/1.0")
|
||||
.header("User-Agent", "android/2.0")
|
||||
.header("Accept", "application/json")
|
||||
.header("X-Request-ID", generateRequestId())
|
||||
.header("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
|
||||
.build()
|
||||
chain.proceed(req)
|
||||
@@ -424,6 +429,16 @@ class MibLoginFlow(private val credentialStore: CredentialStore) {
|
||||
return sha256Upper(clientSalt + h2)
|
||||
}
|
||||
|
||||
private fun generateRequestId(): String {
|
||||
val sdf = SimpleDateFormat("yyyyMMddHHmmss", Locale.US).apply {
|
||||
timeZone = TimeZone.getTimeZone("UTC")
|
||||
}
|
||||
val timestamp = sdf.format(Date())
|
||||
val millis = System.currentTimeMillis() % 1000
|
||||
val randomHex = Random.nextBytes(8).joinToString("") { "%02x".format(it) }
|
||||
return "$timestamp${millis.toString().padStart(3, '0')}-$randomHex"
|
||||
}
|
||||
|
||||
companion object {
|
||||
/** Returns SHA-256(password) as uppercase hex. Store this instead of the raw password. */
|
||||
fun hashPassword(password: String): String =
|
||||
|
||||
Reference in New Issue
Block a user