Code cleanup. Remove duplicated internal utilities.

This commit is contained in:
Him188 2022-04-25 14:15:29 +01:00
parent e7dcf676fc
commit 3be16c4644
6 changed files with 23 additions and 124 deletions

View File

@ -43,7 +43,6 @@ import net.mamoe.mirai.console.internal.logging.LoggerControllerImpl
import net.mamoe.mirai.console.internal.logging.MiraiConsoleLogger import net.mamoe.mirai.console.internal.logging.MiraiConsoleLogger
import net.mamoe.mirai.console.internal.permission.BuiltInPermissionService import net.mamoe.mirai.console.internal.permission.BuiltInPermissionService
import net.mamoe.mirai.console.internal.plugin.PluginManagerImpl import net.mamoe.mirai.console.internal.plugin.PluginManagerImpl
import net.mamoe.mirai.console.internal.util.autoHexToBytes
import net.mamoe.mirai.console.internal.util.runIgnoreException import net.mamoe.mirai.console.internal.util.runIgnoreException
import net.mamoe.mirai.console.logging.LoggerController import net.mamoe.mirai.console.logging.LoggerController
import net.mamoe.mirai.console.permission.PermissionService import net.mamoe.mirai.console.permission.PermissionService
@ -285,7 +284,7 @@ internal class MiraiConsoleImplementationBridge(
} }
MD5 -> { MD5 -> {
val md5 = kotlin.runCatching { val md5 = kotlin.runCatching {
account.password.value.autoHexToBytes() account.password.value.hexToBytes()
}.getOrElse { }.getOrElse {
error("Bad auto-login md5: '${account.password.value}' for account $id") error("Bad auto-login md5: '${account.password.value}' for account $id")
} }

View File

@ -17,15 +17,16 @@ import net.mamoe.mirai.console.MiraiConsoleImplementation.ConsoleDataScope.Compa
import net.mamoe.mirai.console.command.* import net.mamoe.mirai.console.command.*
import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig
import net.mamoe.mirai.console.internal.data.builtins.DataScope import net.mamoe.mirai.console.internal.data.builtins.DataScope
import net.mamoe.mirai.console.internal.util.autoHexToBytes
import net.mamoe.mirai.console.util.scopeWith import net.mamoe.mirai.console.util.scopeWith
import net.mamoe.mirai.message.nextMessageOrNull import net.mamoe.mirai.message.nextMessageOrNull
import net.mamoe.mirai.utils.BotConfiguration import net.mamoe.mirai.utils.BotConfiguration
import net.mamoe.mirai.utils.Either import net.mamoe.mirai.utils.Either
import net.mamoe.mirai.utils.Either.Companion.flatMapNull import net.mamoe.mirai.utils.Either.Companion.flatMapNull
import net.mamoe.mirai.utils.Either.Companion.fold import net.mamoe.mirai.utils.Either.Companion.fold
import net.mamoe.mirai.utils.hexToBytes
import net.mamoe.mirai.utils.secondsToMillis import net.mamoe.mirai.utils.secondsToMillis
@Suppress("RESTRICTED_CONSOLE_COMMAND_OWNER") // IDE plugin
internal open class LoginCommandImpl : SimpleCommand( internal open class LoginCommandImpl : SimpleCommand(
ConsoleCommandOwner, "login", "登录", ConsoleCommandOwner, "login", "登录",
description = "登录一个账号", description = "登录一个账号",
@ -52,7 +53,7 @@ internal open class LoginCommandImpl : SimpleCommand(
val config = DataScope.get<AutoLoginConfig>() val config = DataScope.get<AutoLoginConfig>()
val acc = config.accounts.firstOrNull { it.account == id.toString() } ?: return Either.right(null) val acc = config.accounts.firstOrNull { it.account == id.toString() } ?: return Either.right(null)
val strv = acc.password.value val strv = acc.password.value
return if (acc.password.kind == AutoLoginConfig.Account.PasswordKind.MD5) Either.left(strv.autoHexToBytes()) else Either.right( return if (acc.password.kind == AutoLoginConfig.Account.PasswordKind.MD5) Either.left(strv.hexToBytes()) else Either.right(
strv strv
) )
} }

View File

@ -1,54 +0,0 @@
/*
* Copyright 2019-2021 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package net.mamoe.mirai.console.internal.util
import java.security.MessageDigest
@Suppress("DuplicatedCode") // false positive. `this` is not the same for `List<Byte>` and `ByteArray`
internal fun ByteArray.checkOffsetAndLength(offset: Int, length: Int) {
require(offset >= 0) { "offset shouldn't be negative: $offset" }
require(length >= 0) { "length shouldn't be negative: $length" }
require(offset + length <= this.size) { "offset ($offset) + length ($length) > array.size (${this.size})" }
}
internal fun String.autoHexToBytes(): ByteArray =
this.trim(Char::isWhitespace).asSequence().chunked(2).map {
(it[0].toString() + it[1]).toUByte(16).toByte()
}.toList().toByteArray()
internal fun ByteArray.md5(offset: Int = 0, length: Int = this.size - offset): ByteArray {
this.checkOffsetAndLength(offset, length)
return MessageDigest.getInstance("MD5").apply { update(this@md5, offset, length) }.digest()
}
@JvmOverloads
@Suppress("DuplicatedCode") // false positive. foreach is not common to UByteArray and ByteArray
internal fun ByteArray.toUHexString(
separator: String = " ",
offset: Int = 0,
length: Int = this.size - offset
): String {
this.checkOffsetAndLength(offset, length)
if (length == 0) {
return ""
}
val lastIndex = offset + length
return buildString(length * 2) {
this@toUHexString.forEachIndexed { index, it ->
if (index in offset until lastIndex) {
var ret = it.toUByte().toString(16).uppercase()
if (ret.length == 1) ret = "0$ret"
append(ret)
if (index < lastIndex - 1) append(separator)
}
}
}
}

View File

@ -0,0 +1,13 @@
/*
* Copyright 2019-2022 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/dev/LICENSE
*/
package net.mamoe.mirai.utils
public expect fun ByteArray.encodeBase64(): String
public expect fun String.decodeBase64(): ByteArray

View File

@ -1,10 +1,10 @@
/* /*
* Copyright 2019-2021 Mamoe Technologies and contributors. * Copyright 2019-2022 Mamoe Technologies and contributors.
* *
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
* *
* https://github.com/mamoe/mirai/blob/master/LICENSE * https://github.com/mamoe/mirai/blob/dev/LICENSE
*/ */
@file:JvmMultifileClass @file:JvmMultifileClass
@ -72,9 +72,6 @@ private fun Byte.fixToString(): String {
} }
} }
@OptIn(ExperimentalUnsignedTypes::class)
@JvmOverloads
@Suppress("DuplicatedCode") // false positive. foreach is not common to UByteArray and ByteArray
public fun ByteArray.toUHexString( public fun ByteArray.toUHexString(
separator: String = " ", separator: String = " ",
offset: Int = 0, offset: Int = 0,
@ -103,60 +100,6 @@ public fun ByteArray.checkOffsetAndLength(offset: Int, length: Int) {
require(offset + length <= this.size) { "offset ($offset) + length ($length) > array.size (${this.size})" } require(offset + length <= this.size) { "offset ($offset) + length ($length) > array.size (${this.size})" }
} }
@JvmOverloads
@Suppress("DuplicatedCode") // false positive. foreach is not common to UByteArray and ByteArray
public fun Array<Byte>.toUHexString(
separator: String = " ",
offset: Int = 0,
length: Int = this.size - offset
): String {
require(offset >= 0) { "offset shouldn't be negative: $offset" }
require(length >= 0) { "length shouldn't be negative: $length" }
require(offset + length <= this.size) { "offset ($offset) + length ($length) > array.size (${this.size})" }
if (length == 0) {
return ""
}
val lastIndex = offset + length
return buildString(length * 2) {
this@toUHexString.forEachIndexed { index, it ->
if (index in offset until lastIndex) {
var ret = it.toUByte().toString(16).uppercase()
if (ret.length == 1) ret = "0$ret"
append(ret)
if (index < lastIndex - 1) append(separator)
}
}
}
}
@JvmOverloads
@Suppress("DuplicatedCode") // false positive. foreach is not common to UByteArray and ByteArray
public fun List<Byte>.toUHexString(separator: String = " ", offset: Int = 0, length: Int = this.size - offset): String {
require(offset >= 0) { "offset shouldn't be negative: $offset" }
require(length >= 0) { "length shouldn't be negative: $length" }
require(offset + length <= this.size) { "offset ($offset) + length ($length) > array.size (${this.size})" }
if (length == 0) {
return ""
}
val lastIndex = offset + length
return buildString(length * 2) {
this@toUHexString.forEachIndexed { index, it ->
if (index in offset until lastIndex) {
var ret = it.toUByte().toString(16).uppercase()
if (ret.length == 1) ret = "0$ret"
append(ret)
if (index < lastIndex - 1) append(separator)
}
}
}
}
@JvmSynthetic
@Suppress("DuplicatedCode") // false positive. foreach is not common to UByteArray and ByteArray
@ExperimentalUnsignedTypes
public fun UByteArray.toUHexString(separator: String = " ", offset: Int = 0, length: Int = this.size - offset): String { public fun UByteArray.toUHexString(separator: String = " ", offset: Int = 0, length: Int = this.size - offset): String {
if (length == 0) { if (length == 0) {
return "" return ""
@ -174,9 +117,6 @@ public fun UByteArray.toUHexString(separator: String = " ", offset: Int = 0, len
} }
} }
public expect fun ByteArray.encodeBase64(): String
public expect fun String.decodeBase64(): ByteArray
public inline fun ByteArray.toReadPacket(offset: Int = 0, length: Int = this.size - offset): ByteReadPacket = public inline fun ByteArray.toReadPacket(offset: Int = 0, length: Int = this.size - offset): ByteReadPacket =
ByteReadPacket(this, offset = offset, length = length) ByteReadPacket(this, offset = offset, length = length)

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2019-2021 Mamoe Technologies and contributors. * Copyright 2019-2022 Mamoe Technologies and contributors.
* *
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
@ -46,7 +46,7 @@ internal class Desensitizer private constructor(
} }
fun desensitize(value: Array<Byte>): Array<Byte> { fun desensitize(value: Array<Byte>): Array<Byte> {
return desensitize(value.toUHexString()).hexToBytes().toTypedArray() return desensitize(value.toByteArray().toUHexString()).hexToBytes().toTypedArray()
} }