fix: This is ignored when the URL scheme is "http"

This commit is contained in:
metacubex 2022-12-10 17:59:29 +08:00
parent 2ab1571e3a
commit e8b9603bdd
2 changed files with 50 additions and 47 deletions

View File

@ -129,7 +129,7 @@ class ProfileManager(private val context: Context) : IProfileManager,
override suspend fun update(uuid: UUID) { override suspend fun update(uuid: UUID) {
scheduleUpdate(uuid, true) scheduleUpdate(uuid, true)
ImportedDao().queryByUUID(uuid)?.let { ImportedDao().queryByUUID(uuid)?.let {
if (it.type == Profile.Type.Url) { if (it.type == Profile.Type.Url && it.source.startsWith("https://",true)) {
updateFlow(it) updateFlow(it)
} }
} }

View File

@ -21,6 +21,7 @@ import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import java.net.URL
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -72,62 +73,64 @@ object ProfileProcessor {
var total: Long = 0 var total: Long = 0
var expire: Long = 0 var expire: Long = 0
if (snapshot?.type == Profile.Type.Url) { if (snapshot?.type == Profile.Type.Url) {
val client = OkHttpClient() if (snapshot.source.startsWith("https://", true)) {
val request = Request.Builder() val client = OkHttpClient()
.url(snapshot.source) val request = Request.Builder()
.header("User-Agent", "ClashforWindows/0.19.23") .url(snapshot.source)
.build() .header("User-Agent", "ClashforWindows/0.19.23")
.build()
client.newCall(request).execute().use { response -> client.newCall(request).execute().use { response ->
val userinfo = response.headers["subscription-userinfo"] val userinfo = response.headers["subscription-userinfo"]
if (response.isSuccessful && userinfo != null) { if (response.isSuccessful && userinfo != null) {
val flags = userinfo.split(";") val flags = userinfo.split(";")
for (flag in flags) { for (flag in flags) {
val info = flag.split("=") val info = flag.split("=")
when { when {
info[0].contains("upload") -> upload = info[0].contains("upload") -> upload =
info[1].toLong() info[1].toLong()
info[0].contains("download") -> download = info[0].contains("download") -> download =
info[1].toLong() info[1].toLong()
info[0].contains("total") -> total = info[0].contains("total") -> total =
info[1].toLong() info[1].toLong()
info[0].contains("expire") -> { info[0].contains("expire") -> {
if (info[1].isNotEmpty()) { if (info[1].isNotEmpty()) {
expire = (info[1].toDouble() * 1000).toLong() expire =
(info[1].toDouble() * 1000).toLong()
}
} }
} }
} }
} }
} }
val new = Imported(
snapshot.uuid,
snapshot.name,
snapshot.type,
snapshot.source,
snapshot.interval,
upload,
download,
total,
expire,
old?.createdAt ?: System.currentTimeMillis()
)
if (old != null) {
ImportedDao().update(new)
} else {
ImportedDao().insert(new)
}
PendingDao().remove(snapshot.uuid)
context.pendingDir.resolve(snapshot.uuid.toString())
.deleteRecursively()
context.sendProfileChanged(snapshot.uuid)
} }
val new = Imported(
snapshot.uuid,
snapshot.name,
snapshot.type,
snapshot.source,
snapshot.interval,
upload,
download,
total,
expire,
old?.createdAt ?: System.currentTimeMillis()
)
if (old != null) {
ImportedDao().update(new)
} else {
ImportedDao().insert(new)
}
PendingDao().remove(snapshot.uuid)
context.pendingDir.resolve(snapshot.uuid.toString())
.deleteRecursively()
context.sendProfileChanged(snapshot.uuid)
} else if (snapshot?.type == Profile.Type.File) { } else if (snapshot?.type == Profile.Type.File) {
val new = Imported( val new = Imported(
snapshot.uuid, snapshot.uuid,