mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-27 05:00:30 +08:00
use privileged helper to set sysproxy
This commit is contained in:
parent
eb12f13525
commit
c906a10562
@ -3,4 +3,41 @@ chown root:admin $2/Mihomo\ Party.app/Contents/Resources/sidecar/mihomo
|
|||||||
chown root:admin $2/Mihomo\ Party.app/Contents/Resources/sidecar/mihomo-alpha
|
chown root:admin $2/Mihomo\ Party.app/Contents/Resources/sidecar/mihomo-alpha
|
||||||
chmod +s $2/Mihomo\ Party.app/Contents/Resources/sidecar/mihomo
|
chmod +s $2/Mihomo\ Party.app/Contents/Resources/sidecar/mihomo
|
||||||
chmod +s $2/Mihomo\ Party.app/Contents/Resources/sidecar/mihomo-alpha
|
chmod +s $2/Mihomo\ Party.app/Contents/Resources/sidecar/mihomo-alpha
|
||||||
|
|
||||||
|
mkdir -p /Library/PrivilegedHelperTools
|
||||||
|
cp $2/Mihomo\ Party.app/Contents/Resources/files/party.mihomo.helper /Library/PrivilegedHelperTools/party.mihomo.helper
|
||||||
|
chown root:wheel /Library/PrivilegedHelperTools/party.mihomo.helper
|
||||||
|
chmod 544 /Library/PrivilegedHelperTools/party.mihomo.helper
|
||||||
|
cat << EOF > /Library/LaunchDaemons/party.mihomo.helper.plist
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Label</key>
|
||||||
|
<string>party.mihomo.helper</string>
|
||||||
|
<key>MachServices</key>
|
||||||
|
<dict>
|
||||||
|
<key>party.mihomo.helper</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>KeepAlive</key>
|
||||||
|
<true/>
|
||||||
|
<key>Program</key>
|
||||||
|
<string>/Library/PrivilegedHelperTools/party.mihomo.helper</string>
|
||||||
|
<key>ProgramArguments</key>
|
||||||
|
<array>
|
||||||
|
<string>/Library/PrivilegedHelperTools/party.mihomo.helper</string>
|
||||||
|
</array>
|
||||||
|
<key>StandardErrorPath</key>
|
||||||
|
<string>/tmp/party.mihomo.helper.err</string>
|
||||||
|
<key>StandardOutPath</key>
|
||||||
|
<string>/tmp/party.mihomo.helper.log</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
EOF
|
||||||
|
chown root:wheel /Library/LaunchDaemons/party.mihomo.helper.plist
|
||||||
|
chmod 644 /Library/LaunchDaemons/party.mihomo.helper.plist
|
||||||
|
launchctl unload /Library/LaunchDaemons/party.mihomo.helper.plist
|
||||||
|
launchctl load /Library/LaunchDaemons/party.mihomo.helper.plist
|
||||||
|
launchctl start party.mihomo.helper
|
||||||
exit 0
|
exit 0
|
||||||
@ -309,6 +309,11 @@ const resolveSubstore = () =>
|
|||||||
downloadURL:
|
downloadURL:
|
||||||
'https://github.com/sub-store-org/Sub-Store/releases/latest/download/sub-store.bundle.js'
|
'https://github.com/sub-store-org/Sub-Store/releases/latest/download/sub-store.bundle.js'
|
||||||
})
|
})
|
||||||
|
const resolveHelper = () =>
|
||||||
|
resolveResource({
|
||||||
|
file: 'party.mihomo.helper',
|
||||||
|
downloadURL: `https://github.com/mihomo-party-org/mihomo-party-helper/releases/download/${arch}/party.mihomo.helper`
|
||||||
|
})
|
||||||
const resolveSubstoreFrontend = async () => {
|
const resolveSubstoreFrontend = async () => {
|
||||||
const tempDir = path.join(TEMP_DIR, 'substore-frontend')
|
const tempDir = path.join(TEMP_DIR, 'substore-frontend')
|
||||||
const tempZip = path.join(tempDir, 'dist.zip')
|
const tempZip = path.join(tempDir, 'dist.zip')
|
||||||
@ -404,6 +409,12 @@ const tasks = [
|
|||||||
func: resolve7zip,
|
func: resolve7zip,
|
||||||
retry: 5,
|
retry: 5,
|
||||||
winOnly: true
|
winOnly: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'helper',
|
||||||
|
func: resolveHelper,
|
||||||
|
retry: 5,
|
||||||
|
darwinOnly: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -413,6 +424,7 @@ async function runTask() {
|
|||||||
if (task.winOnly && platform !== 'win32') return runTask()
|
if (task.winOnly && platform !== 'win32') return runTask()
|
||||||
if (task.linuxOnly && platform !== 'linux') return runTask()
|
if (task.linuxOnly && platform !== 'linux') return runTask()
|
||||||
if (task.unixOnly && platform === 'win32') return runTask()
|
if (task.unixOnly && platform === 'win32') return runTask()
|
||||||
|
if (task.darwinOnly && platform !== 'darwin') return runTask()
|
||||||
|
|
||||||
for (let i = 0; i < task.retry; i++) {
|
for (let i = 0; i < task.retry; i++) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -6,9 +6,11 @@ import { execFile } from 'child_process'
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { resourcesFilesDir } from '../utils/dirs'
|
import { resourcesFilesDir } from '../utils/dirs'
|
||||||
import { net } from 'electron'
|
import { net } from 'electron'
|
||||||
|
import axios from 'axios'
|
||||||
|
|
||||||
let defaultBypass: string[]
|
let defaultBypass: string[]
|
||||||
let triggerSysProxyTimer: NodeJS.Timeout | null = null
|
let triggerSysProxyTimer: NodeJS.Timeout | null = null
|
||||||
|
const helperSocketPath = '/tmp/mihomo-party-helper.sock'
|
||||||
|
|
||||||
if (process.platform === 'linux')
|
if (process.platform === 'linux')
|
||||||
defaultBypass = ['localhost', '127.0.0.1', '192.168.0.0/16', '10.0.0.0/8', '172.16.0.0/12', '::1']
|
defaultBypass = ['localhost', '127.0.0.1', '192.168.0.0/16', '10.0.0.0/8', '172.16.0.0/12', '::1']
|
||||||
@ -79,6 +81,14 @@ async function enableSysProxy(): Promise<void> {
|
|||||||
} catch {
|
} catch {
|
||||||
triggerAutoProxy(true, `http://${host || '127.0.0.1'}:${pacPort}/pac`)
|
triggerAutoProxy(true, `http://${host || '127.0.0.1'}:${pacPort}/pac`)
|
||||||
}
|
}
|
||||||
|
} else if (process.platform === 'darwin') {
|
||||||
|
await axios.post(
|
||||||
|
'http://localhost/pac',
|
||||||
|
{ url: `http://${host || '127.0.0.1'}:${pacPort}/pac` },
|
||||||
|
{
|
||||||
|
socketPath: helperSocketPath
|
||||||
|
}
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
triggerAutoProxy(true, `http://${host || '127.0.0.1'}:${pacPort}/pac`)
|
triggerAutoProxy(true, `http://${host || '127.0.0.1'}:${pacPort}/pac`)
|
||||||
}
|
}
|
||||||
@ -97,6 +107,14 @@ async function enableSysProxy(): Promise<void> {
|
|||||||
} catch {
|
} catch {
|
||||||
triggerManualProxy(true, host || '127.0.0.1', port, bypass.join(','))
|
triggerManualProxy(true, host || '127.0.0.1', port, bypass.join(','))
|
||||||
}
|
}
|
||||||
|
} else if (process.platform === 'darwin') {
|
||||||
|
await axios.post(
|
||||||
|
'http://localhost/global',
|
||||||
|
{ host: host || '127.0.0.1', port: port.toString(), bypass: bypass.join(',') },
|
||||||
|
{
|
||||||
|
socketPath: helperSocketPath
|
||||||
|
}
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
triggerManualProxy(true, host || '127.0.0.1', port, bypass.join(','))
|
triggerManualProxy(true, host || '127.0.0.1', port, bypass.join(','))
|
||||||
}
|
}
|
||||||
@ -115,6 +133,10 @@ async function disableSysProxy(): Promise<void> {
|
|||||||
triggerAutoProxy(false, '')
|
triggerAutoProxy(false, '')
|
||||||
triggerManualProxy(false, '', 0, '')
|
triggerManualProxy(false, '', 0, '')
|
||||||
}
|
}
|
||||||
|
} else if (process.platform === 'darwin') {
|
||||||
|
await axios.get('http://localhost/off', {
|
||||||
|
socketPath: helperSocketPath
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
triggerAutoProxy(false, '')
|
triggerAutoProxy(false, '')
|
||||||
triggerManualProxy(false, '', 0, '')
|
triggerManualProxy(false, '', 0, '')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user