Zaimanhua: fix authIntercept bug (#10533)
When the request header changes, the new request should not use outdate cache. Also, clear the token in `apiHeaders` when username or password changed.
This commit is contained in:
parent
a7408115ed
commit
128c4a4194
@ -1,7 +1,7 @@
|
|||||||
ext {
|
ext {
|
||||||
extName = 'Zaimanhua'
|
extName = 'Zaimanhua'
|
||||||
extClass = '.Zaimanhua'
|
extClass = '.Zaimanhua'
|
||||||
extVersionCode = 13
|
extVersionCode = 14
|
||||||
isNsfw = false
|
isNsfw = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,18 +63,18 @@ class Zaimanhua : HttpSource(), ConfigurableSource {
|
|||||||
|
|
||||||
private fun authIntercept(chain: Interceptor.Chain): Response {
|
private fun authIntercept(chain: Interceptor.Chain): Response {
|
||||||
val request = chain.request()
|
val request = chain.request()
|
||||||
if (request.url.host != "v4api.zaimanhua.com" ||
|
|
||||||
(!request.headers["authorization"].isNullOrBlank() && !request.url.toString().contains(checkTokenRegex))
|
|
||||||
) {
|
|
||||||
return chain.proceed(request)
|
|
||||||
}
|
|
||||||
|
|
||||||
val response = chain.proceed(request)
|
val response = chain.proceed(request)
|
||||||
if (!request.headers["authorization"].isNullOrBlank() && response.peekBody(Long.MAX_VALUE).string().parseAs<ResponseDto<DataWrapperDto<CanReadDto>>>().data.data?.canRead != false) {
|
// Only intercept chapter api requests that need token
|
||||||
|
if (!request.url.toString().contains(checkTokenRegex)) return response
|
||||||
|
|
||||||
|
// If chapter can read, return directly
|
||||||
|
if (response.peekBody(Long.MAX_VALUE).string().parseAs<ResponseDto<DataWrapperDto<CanReadDto>>>().data.data?.canRead != false) {
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
// If can not read, need login or user permission is not enough
|
||||||
var token: String = preferences.getString(TOKEN_PREF, "")!!
|
var token: String = preferences.getString(TOKEN_PREF, "")!!
|
||||||
if (!isValid(token)) {
|
if (!isValid(token)) {
|
||||||
|
// Token is invalid, need login
|
||||||
val username = preferences.getString(USERNAME_PREF, "")!!
|
val username = preferences.getString(USERNAME_PREF, "")!!
|
||||||
val password = preferences.getString(PASSWORD_PREF, "")!!
|
val password = preferences.getString(PASSWORD_PREF, "")!!
|
||||||
token = getToken(username, password)
|
token = getToken(username, password)
|
||||||
@ -87,12 +87,15 @@ class Zaimanhua : HttpSource(), ConfigurableSource {
|
|||||||
preferences.edit().putString(TOKEN_PREF, token).apply()
|
preferences.edit().putString(TOKEN_PREF, token).apply()
|
||||||
apiHeaders = apiHeaders.newBuilder().setToken(token).build()
|
apiHeaders = apiHeaders.newBuilder().setToken(token).build()
|
||||||
}
|
}
|
||||||
} else if (!request.headers["authorization"].isNullOrBlank() && request.headers["authorization"] == "Bearer $token") {
|
} else if (request.header("authorization") == "Bearer $token") {
|
||||||
|
// The request has already used a valid token, return directly
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response.close()
|
||||||
val authRequest = request.newBuilder().apply {
|
val authRequest = request.newBuilder().apply {
|
||||||
header("authorization", "Bearer $token")
|
header("authorization", "Bearer $token")
|
||||||
|
cacheControl(CacheControl.FORCE_NETWORK)
|
||||||
}.build()
|
}.build()
|
||||||
return chain.proceed(authRequest)
|
return chain.proceed(authRequest)
|
||||||
}
|
}
|
||||||
@ -334,6 +337,7 @@ class Zaimanhua : HttpSource(), ConfigurableSource {
|
|||||||
setOnPreferenceChangeListener { _, _ ->
|
setOnPreferenceChangeListener { _, _ ->
|
||||||
// clean token after username/password changed
|
// clean token after username/password changed
|
||||||
preferences.edit().putString(TOKEN_PREF, "").apply()
|
preferences.edit().putString(TOKEN_PREF, "").apply()
|
||||||
|
apiHeaders = apiHeaders.newBuilder().setToken("").build()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}.let(screen::addPreference)
|
}.let(screen::addPreference)
|
||||||
@ -345,6 +349,7 @@ class Zaimanhua : HttpSource(), ConfigurableSource {
|
|||||||
setOnPreferenceChangeListener { _, _ ->
|
setOnPreferenceChangeListener { _, _ ->
|
||||||
// clean token after username/password changed
|
// clean token after username/password changed
|
||||||
preferences.edit().putString(TOKEN_PREF, "").apply()
|
preferences.edit().putString(TOKEN_PREF, "").apply()
|
||||||
|
apiHeaders = apiHeaders.newBuilder().setToken("").build()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}.let(screen::addPreference)
|
}.let(screen::addPreference)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user