chore: listByLineOrComma

This commit is contained in:
arm64v8a 2023-07-19 12:11:35 +09:00
parent e376369493
commit 0ac26db5ba
7 changed files with 25 additions and 13 deletions

View File

@ -41,6 +41,7 @@ import moe.matsuri.nb4a.proxy.shadowtls.ShadowTLSBean
import moe.matsuri.nb4a.proxy.shadowtls.buildSingBoxOutboundShadowTLSBean import moe.matsuri.nb4a.proxy.shadowtls.buildSingBoxOutboundShadowTLSBean
import moe.matsuri.nb4a.utils.JavaUtil.gson import moe.matsuri.nb4a.utils.JavaUtil.gson
import moe.matsuri.nb4a.utils.Util import moe.matsuri.nb4a.utils.Util
import moe.matsuri.nb4a.utils.listByLineOrComma
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
const val TAG_MIXED = "mixed-in" const val TAG_MIXED = "mixed-in"
@ -544,16 +545,16 @@ fun buildConfig(
} }
var domainList: List<String>? = null var domainList: List<String>? = null
if (rule.domains.isNotBlank()) { if (rule.domains.isNotBlank()) {
domainList = rule.domains.split("\n") domainList = rule.domains.listByLineOrComma()
makeSingBoxRule(domainList, false) makeSingBoxRule(domainList, false)
} }
if (rule.ip.isNotBlank()) { if (rule.ip.isNotBlank()) {
makeSingBoxRule(rule.ip.split("\n"), true) makeSingBoxRule(rule.ip.listByLineOrComma(), true)
} }
if (rule.port.isNotBlank()) { if (rule.port.isNotBlank()) {
port = mutableListOf<Int>() port = mutableListOf<Int>()
port_range = mutableListOf<String>() port_range = mutableListOf<String>()
rule.port.split(",").map { rule.port.listByLineOrComma().map {
if (it.contains(":")) { if (it.contains(":")) {
port_range.add(it) port_range.add(it)
} else { } else {
@ -564,7 +565,7 @@ fun buildConfig(
if (rule.sourcePort.isNotBlank()) { if (rule.sourcePort.isNotBlank()) {
source_port = mutableListOf<Int>() source_port = mutableListOf<Int>()
source_port_range = mutableListOf<String>() source_port_range = mutableListOf<String>()
rule.sourcePort.split(",").map { rule.sourcePort.listByLineOrComma().map {
if (it.contains(":")) { if (it.contains(":")) {
source_port_range.add(it) source_port_range.add(it)
} else { } else {
@ -576,10 +577,10 @@ fun buildConfig(
network = listOf(rule.network) network = listOf(rule.network)
} }
if (rule.source.isNotBlank()) { if (rule.source.isNotBlank()) {
source_ip_cidr = rule.source.split("\n") source_ip_cidr = rule.source.listByLineOrComma()
} }
if (rule.protocol.isNotBlank()) { if (rule.protocol.isNotBlank()) {
protocol = rule.protocol.split("\n") protocol = rule.protocol.listByLineOrComma()
} }
fun makeDnsRuleObj(): DNSRule_DefaultOptions { fun makeDnsRuleObj(): DNSRule_DefaultOptions {

View File

@ -4,6 +4,7 @@ import io.nekohasekai.sagernet.database.DataStore
import io.nekohasekai.sagernet.fmt.LOCALHOST import io.nekohasekai.sagernet.fmt.LOCALHOST
import io.nekohasekai.sagernet.ktx.* import io.nekohasekai.sagernet.ktx.*
import moe.matsuri.nb4a.SingBoxOptions import moe.matsuri.nb4a.SingBoxOptions
import moe.matsuri.nb4a.utils.listByLineOrComma
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.json.JSONObject import org.json.JSONObject
import java.io.File import java.io.File
@ -226,7 +227,7 @@ fun buildSingBoxOutboundHysteriaBean(bean: HysteriaBean): SingBoxOptions.Outboun
server_name = bean.sni server_name = bean.sni
} }
if (bean.alpn.isNotBlank()) { if (bean.alpn.isNotBlank()) {
alpn = bean.alpn.split("\n") alpn = bean.alpn.listByLineOrComma()
} }
if (bean.caText.isNotBlank()) { if (bean.caText.isNotBlank()) {
certificate = bean.caText certificate = bean.caText

View File

@ -1,6 +1,7 @@
package io.nekohasekai.sagernet.fmt.ssh package io.nekohasekai.sagernet.fmt.ssh
import moe.matsuri.nb4a.SingBoxOptions import moe.matsuri.nb4a.SingBoxOptions
import moe.matsuri.nb4a.utils.listByLineOrComma
fun buildSingBoxOutboundSSHBean(bean: SSHBean): SingBoxOptions.Outbound_SSHOptions { fun buildSingBoxOutboundSSHBean(bean: SSHBean): SingBoxOptions.Outbound_SSHOptions {
return SingBoxOptions.Outbound_SSHOptions().apply { return SingBoxOptions.Outbound_SSHOptions().apply {
@ -9,7 +10,7 @@ fun buildSingBoxOutboundSSHBean(bean: SSHBean): SingBoxOptions.Outbound_SSHOptio
server_port = bean.serverPort server_port = bean.serverPort
user = bean.username user = bean.username
if (bean.publicKey.isNotBlank()) { if (bean.publicKey.isNotBlank()) {
host_key = bean.publicKey.split("\n") host_key = bean.publicKey.listByLineOrComma()
} }
when (bean.authType) { when (bean.authType) {
SSHBean.AUTH_TYPE_PRIVATE_KEY -> { SSHBean.AUTH_TYPE_PRIVATE_KEY -> {

View File

@ -2,9 +2,9 @@ package io.nekohasekai.sagernet.fmt.tuic
import io.nekohasekai.sagernet.fmt.LOCALHOST import io.nekohasekai.sagernet.fmt.LOCALHOST
import io.nekohasekai.sagernet.ktx.isIpAddress import io.nekohasekai.sagernet.ktx.isIpAddress
import io.nekohasekai.sagernet.ktx.wrapIPV6Host
import moe.matsuri.nb4a.utils.JavaUtil import moe.matsuri.nb4a.utils.JavaUtil
import moe.matsuri.nb4a.utils.Util import moe.matsuri.nb4a.utils.Util
import moe.matsuri.nb4a.utils.listByLineOrComma
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import java.io.File import java.io.File
@ -61,7 +61,7 @@ fun TuicBean.buildTuicConfigV5(port: Int, cacheFile: (() -> File)?): JSONObject
put("udp_relay_mode", udpRelayMode) put("udp_relay_mode", udpRelayMode)
if (alpn.isNotBlank()) { if (alpn.isNotBlank()) {
put("alpn", JSONArray(alpn.split("\n"))) put("alpn", JSONArray(alpn.listByLineOrComma()))
} }
put("congestion_control", congestionController) put("congestion_control", congestionController)
put("disable_sni", disableSNI2) put("disable_sni", disableSNI2)
@ -109,7 +109,7 @@ fun TuicBean.buildTuicConfigV4(port: Int, cacheFile: (() -> File)?): JSONObject
put("udp_relay_mode", udpRelayMode) put("udp_relay_mode", udpRelayMode)
if (alpn.isNotBlank()) { if (alpn.isNotBlank()) {
put("alpn", JSONArray(alpn.split("\n"))) put("alpn", JSONArray(alpn.listByLineOrComma()))
} }
put("congestion_controller", congestionController) put("congestion_controller", congestionController)
put("disable_sni", disableSNI2) put("disable_sni", disableSNI2)

View File

@ -7,6 +7,7 @@ import io.nekohasekai.sagernet.fmt.trojan.TrojanBean
import io.nekohasekai.sagernet.ktx.* import io.nekohasekai.sagernet.ktx.*
import moe.matsuri.nb4a.SingBoxOptions.* import moe.matsuri.nb4a.SingBoxOptions.*
import moe.matsuri.nb4a.utils.NGUtil import moe.matsuri.nb4a.utils.NGUtil
import moe.matsuri.nb4a.utils.listByLineOrComma
import okhttp3.HttpUrl import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl
import org.json.JSONObject import org.json.JSONObject
@ -580,7 +581,7 @@ fun buildSingBoxOutboundTLS(bean: StandardV2RayBean): OutboundTLSOptions? {
enabled = true enabled = true
insecure = bean.allowInsecure insecure = bean.allowInsecure
if (bean.sni.isNotBlank()) server_name = bean.sni if (bean.sni.isNotBlank()) server_name = bean.sni
if (bean.alpn.isNotBlank()) alpn = bean.alpn.split("\n") if (bean.alpn.isNotBlank()) alpn = bean.alpn.listByLineOrComma()
if (bean.certificates.isNotBlank()) certificate = bean.certificates if (bean.certificates.isNotBlank()) certificate = bean.certificates
if (bean.utlsFingerprint.isNotBlank()) { if (bean.utlsFingerprint.isNotBlank()) {
utls = OutboundUTLSOptions().apply { utls = OutboundUTLSOptions().apply {

View File

@ -1,13 +1,14 @@
package io.nekohasekai.sagernet.fmt.wireguard package io.nekohasekai.sagernet.fmt.wireguard
import moe.matsuri.nb4a.SingBoxOptions import moe.matsuri.nb4a.SingBoxOptions
import moe.matsuri.nb4a.utils.listByLineOrComma
fun buildSingBoxOutboundWireguardBean(bean: WireGuardBean): SingBoxOptions.Outbound_WireGuardOptions { fun buildSingBoxOutboundWireguardBean(bean: WireGuardBean): SingBoxOptions.Outbound_WireGuardOptions {
return SingBoxOptions.Outbound_WireGuardOptions().apply { return SingBoxOptions.Outbound_WireGuardOptions().apply {
type = "wireguard" type = "wireguard"
server = bean.serverAddress server = bean.serverAddress
server_port = bean.serverPort server_port = bean.serverPort
local_address = bean.localAddress.split("\n") local_address = bean.localAddress.listByLineOrComma()
private_key = bean.privateKey private_key = bean.privateKey
peer_public_key = bean.peerPublicKey peer_public_key = bean.peerPublicKey
pre_shared_key = bean.peerPreSharedKey pre_shared_key = bean.peerPreSharedKey

View File

@ -48,8 +48,15 @@ fun Long.toBytesString(): String {
this > 1024 * 1024 * 1024 -> String.format( this > 1024 * 1024 * 1024 -> String.format(
"%.2f GiB", (this.toDouble() / 1024 / 1024 / 1024) "%.2f GiB", (this.toDouble() / 1024 / 1024 / 1024)
) )
this > 1024 * 1024 -> String.format("%.2f MiB", (this.toDouble() / 1024 / 1024)) this > 1024 * 1024 -> String.format("%.2f MiB", (this.toDouble() / 1024 / 1024))
this > 1024 -> String.format("%.2f KiB", (this.toDouble() / 1024)) this > 1024 -> String.format("%.2f KiB", (this.toDouble() / 1024))
else -> "$this Bytes" else -> "$this Bytes"
} }
} }
// List
fun String.listByLineOrComma(): List<String> {
return this.replace(",", "\n").split("\n")
}