mirror of
https://github.com/bolucat/Archive.git
synced 2025-12-24 13:28:37 +08:00
Update On Wed Dec 3 19:42:53 CET 2025
This commit is contained in:
@@ -123,19 +123,19 @@ const health_checkurls = [
|
||||
];
|
||||
|
||||
const inbound_type = [
|
||||
['http', _('HTTP')],
|
||||
['socks', _('SOCKS')],
|
||||
['mixed', _('Mixed')],
|
||||
['shadowsocks', _('Shadowsocks')],
|
||||
['mieru', _('Mieru')],
|
||||
['sudoku', _('Sudoku')],
|
||||
['vmess', _('VMess')],
|
||||
['vless', _('VLESS')],
|
||||
['trojan', _('Trojan')],
|
||||
['anytls', _('AnyTLS')],
|
||||
['tuic', _('TUIC')],
|
||||
['hysteria2', _('Hysteria2')],
|
||||
//['tunnel', _('Tunnel')]
|
||||
['http', _('HTTP') + ' - ' + _('TCP')],
|
||||
['socks', _('SOCKS') + ' - ' + _('TCP')],
|
||||
['mixed', _('Mixed') + ' - ' + _('TCP')],
|
||||
['shadowsocks', _('Shadowsocks') + ' - ' + _('TCP/UDP')],
|
||||
['mieru', _('Mieru') + ' - ' + _('TCP/UDP')],
|
||||
['sudoku', _('Sudoku') + ' - ' + _('TCP')],
|
||||
['vmess', _('VMess') + ' - ' + _('TCP')],
|
||||
['vless', _('VLESS') + ' - ' + _('TCP')],
|
||||
['trojan', _('Trojan') + ' - ' + _('TCP')],
|
||||
['anytls', _('AnyTLS') + ' - ' + _('TCP')],
|
||||
['tuic', _('TUIC') + ' - ' + _('UDP')],
|
||||
['hysteria2', _('Hysteria2') + ' - ' + _('UDP')],
|
||||
//['tunnel', _('Tunnel') + ' - ' + _('TCP/UDP')]
|
||||
];
|
||||
|
||||
const ip_version = [
|
||||
@@ -154,23 +154,23 @@ const load_balance_strategy = [
|
||||
];
|
||||
|
||||
const outbound_type = [
|
||||
['direct', _('DIRECT')],
|
||||
['http', _('HTTP')],
|
||||
['socks5', _('SOCKS5')],
|
||||
['ss', _('Shadowsocks')],
|
||||
['direct', _('DIRECT') + ' - ' + _('TCP/UDP')],
|
||||
['http', _('HTTP') + ' - ' + _('TCP')],
|
||||
['socks5', _('SOCKS5') + ' - ' + _('TCP')],
|
||||
['ss', _('Shadowsocks') + ' - ' + _('TCP/UDP')],
|
||||
//['ssr', _('ShadowsocksR')], // Deprecated
|
||||
['mieru', _('Mieru')],
|
||||
['sudoku', _('Sudoku')],
|
||||
['snell', _('Snell')],
|
||||
['vmess', _('VMess')],
|
||||
['vless', _('VLESS')],
|
||||
['trojan', _('Trojan')],
|
||||
['anytls', _('AnyTLS')],
|
||||
//['hysteria', _('Hysteria')],
|
||||
['hysteria2', _('Hysteria2')],
|
||||
['tuic', _('TUIC')],
|
||||
['wireguard', _('WireGuard')],
|
||||
['ssh', _('SSH')]
|
||||
['mieru', _('Mieru') + ' - ' + _('TCP/UDP')],
|
||||
['sudoku', _('Sudoku') + ' - ' + _('TCP')],
|
||||
['snell', _('Snell') + ' - ' + _('TCP')],
|
||||
['vmess', _('VMess') + ' - ' + _('TCP')],
|
||||
['vless', _('VLESS') + ' - ' + _('TCP')],
|
||||
['trojan', _('Trojan') + ' - ' + _('TCP')],
|
||||
['anytls', _('AnyTLS') + ' - ' + _('TCP')],
|
||||
//['hysteria', _('Hysteria') + ' - ' + _('UDP')],
|
||||
['hysteria2', _('Hysteria2') + ' - ' + _('UDP')],
|
||||
['tuic', _('TUIC') + ' - ' + _('UDP')],
|
||||
['wireguard', _('WireGuard') + ' - ' + _('UDP')],
|
||||
['ssh', _('SSH') + ' - ' + _('TCP')]
|
||||
];
|
||||
|
||||
const preset_outbound = {
|
||||
|
||||
@@ -7,16 +7,15 @@
|
||||
|
||||
'require fchomo as hm';
|
||||
|
||||
const CBIDummyCopyValue = form.Value.extend({
|
||||
__name__: 'CBI.DummyCopyValue',
|
||||
const CBICopyValue = form.Value.extend({
|
||||
__name__: 'CBI.CopyValue',
|
||||
|
||||
readonly: true,
|
||||
|
||||
renderWidget: function(section_id, option_index, cfgvalue) {
|
||||
renderWidget(section_id, option_index, cfgvalue) {
|
||||
let node = form.Value.prototype.renderWidget.call(this, section_id, option_index, cfgvalue);
|
||||
|
||||
node.classList.add('control-group');
|
||||
node.firstChild.style.width = '30em';
|
||||
|
||||
node.appendChild(E('button', {
|
||||
class: 'cbi-button cbi-button-add',
|
||||
@@ -37,6 +36,18 @@ const CBIDummyCopyValue = form.Value.extend({
|
||||
}, section_id)
|
||||
}, [ _('Copy') ]));
|
||||
|
||||
return node;
|
||||
}
|
||||
});
|
||||
|
||||
const CBIDummyCopyValue = CBICopyValue.extend({
|
||||
__name__: 'CBI.DummyCopyValue',
|
||||
|
||||
renderWidget(/* ... */) {
|
||||
let node = CBICopyValue.prototype.renderWidget.apply(this, arguments);
|
||||
|
||||
node.firstChild.style.width = '30em';
|
||||
|
||||
return node;
|
||||
},
|
||||
|
||||
@@ -314,12 +325,67 @@ return view.extend({
|
||||
o.modalonly = true;
|
||||
|
||||
/* Sudoku fields */
|
||||
o = s.taboption('field_general', form.Value, 'sudoku_key', _('Key'),
|
||||
const sudoku_keytypes = [
|
||||
['sudoku-keypair', _('sudoku-keypair')],
|
||||
['uuid', _('UUID')]
|
||||
]
|
||||
o = s.taboption('field_general', hm.GenValue, 'sudoku_key', _('Key'),
|
||||
_('The ED25519 master public key or UUID generated by Sudoku.'));
|
||||
o.hm_options = {
|
||||
type: sudoku_keytypes[0][0],
|
||||
callback: function(result) {
|
||||
if (result.uuid)
|
||||
return [
|
||||
[this.option, result.uuid],
|
||||
['sudoku_client_key', result.uuid]
|
||||
]
|
||||
else
|
||||
return [
|
||||
[this.option, result.public_key],
|
||||
['sudoku_client_key', result.private_key]
|
||||
]
|
||||
}
|
||||
}
|
||||
o.renderWidget = function(section_id, option_index, cfgvalue) {
|
||||
let node = form.Value.prototype.renderWidget.call(this, section_id, option_index, cfgvalue);
|
||||
const cbid = this.cbid(section_id) + '._keytype_select';
|
||||
const selected = this.hm_options.type;
|
||||
|
||||
let selectEl = E('select', {
|
||||
id: cbid,
|
||||
class: 'cbi-input-select',
|
||||
style: 'width: 10em',
|
||||
});
|
||||
|
||||
sudoku_keytypes.forEach(([k, v]) => {
|
||||
selectEl.appendChild(E('option', {
|
||||
'value': k,
|
||||
'selected': (k === selected) ? '' : null
|
||||
}, [ v ]));
|
||||
});
|
||||
|
||||
node.appendChild(E('div', { 'class': 'control-group' }, [
|
||||
selectEl,
|
||||
E('button', {
|
||||
class: 'cbi-button cbi-button-add',
|
||||
click: ui.createHandlerFn(this, () => {
|
||||
this.hm_options.type = document.getElementById(cbid).value;
|
||||
|
||||
return hm.handleGenKey.call(this, this.hm_options);
|
||||
})
|
||||
}, [ _('Generate') ])
|
||||
]));
|
||||
|
||||
return node;
|
||||
}
|
||||
o.rmempty = false;
|
||||
o.depends('type', 'sudoku');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_general', CBICopyValue, 'sudoku_client_key', _('Client key'));
|
||||
o.depends('type', 'sudoku');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_general', form.ListValue, 'sudoku_aead_method', _('Chipher'));
|
||||
o.default = hm.sudoku_cipher_methods[0][0];
|
||||
hm.sudoku_cipher_methods.forEach((res) => {
|
||||
@@ -348,12 +414,6 @@ return view.extend({
|
||||
o.depends('type', 'sudoku');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_general', form.Value, 'sudoku_seed', _('Seed'),
|
||||
_('Keep consistent with the %s.').format(_('Key')));
|
||||
o.rmempty = false;
|
||||
o.depends('type', 'sudoku');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_general', form.Value, 'sudoku_handshake_timeout', _('Handshake timeout'));
|
||||
o.datatype = 'uinteger';
|
||||
o.placeholder = 5;
|
||||
@@ -825,7 +885,7 @@ return view.extend({
|
||||
o.depends({tls: '1', type: /^(http|socks|mixed|vmess|vless|trojan|anytls|hysteria2|tuic)$/});
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_tls', form.Value, 'tls_ech_config', _('ECH config'),
|
||||
o = s.taboption('field_tls', CBICopyValue, 'tls_ech_config', _('ECH config'),
|
||||
_('This ECH parameter needs to be added to the HTTPS record of the domain.'));
|
||||
o.placeholder = 'AEn+DQBFKwAgACABWIHUGj4u+PIggYXcR5JF0gYk3dCRioBW8uJq9H4mKAAIAAEAAQABAANAEnB1YmxpYy50bHMtZWNoLmRldgAA';
|
||||
o.depends({tls: '1', type: /^(http|socks|mixed|vmess|vless|trojan|anytls|hysteria2|tuic)$/});
|
||||
@@ -859,7 +919,7 @@ return view.extend({
|
||||
o.depends('tls_reality', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_tls', form.Value, 'tls_reality_public_key', _('REALITY public key'));
|
||||
o = s.taboption('field_tls', CBICopyValue, 'tls_reality_public_key', _('REALITY public key'));
|
||||
o.depends('tls_reality', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
|
||||
@@ -442,6 +442,10 @@ msgstr ""
|
||||
msgid "Client fingerprint"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/server.js:374
|
||||
msgid "Client key"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/global.js:176
|
||||
msgid "Client status"
|
||||
msgstr ""
|
||||
|
||||
@@ -453,6 +453,10 @@ msgstr "客户端认证类型"
|
||||
msgid "Client fingerprint"
|
||||
msgstr "客户端指纹"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/server.js:374
|
||||
msgid "Client key"
|
||||
msgstr "客户端密钥"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/global.js:176
|
||||
msgid "Client status"
|
||||
msgstr "客户端状态"
|
||||
|
||||
@@ -453,6 +453,10 @@ msgstr "客戶端認證類型"
|
||||
msgid "Client fingerprint"
|
||||
msgstr "客戶端指紋"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/server.js:374
|
||||
msgid "Client key"
|
||||
msgstr "客戶端密鑰"
|
||||
|
||||
#: htdocs/luci-static/resources/view/fchomo/global.js:176
|
||||
msgid "Client status"
|
||||
msgstr "客戶端狀態"
|
||||
|
||||
@@ -112,7 +112,6 @@ uci.foreach(uciconf, uciserver, (cfg) => {
|
||||
"padding-min": strToInt(cfg.sudoku_padding_min),
|
||||
"padding-max": strToInt(cfg.sudoku_padding_max),
|
||||
"table-type": cfg.sudoku_table_type,
|
||||
seed: cfg.sudoku_seed,
|
||||
"handshake-timeout": strToInt(cfg.sudoku_handshake_timeout) ?? null,
|
||||
|
||||
/* Tuic */
|
||||
|
||||
@@ -44,7 +44,7 @@ const methods = {
|
||||
args: { type: 'type', params: 'params' },
|
||||
call: function(req) {
|
||||
/* https://github.com/MetaCubeX/mihomo/blob/Alpha/component/generator/cmd.go */
|
||||
if (!(req.args?.type in ['uuid', 'reality-keypair', 'wg-keypair', 'ech-keypair', 'vless-mlkem768', 'vless-x25519']))
|
||||
if (!(req.args?.type in ['uuid', 'reality-keypair', 'wg-keypair', 'ech-keypair', 'vless-mlkem768', 'vless-x25519', 'sudoku-keypair']))
|
||||
return { result: false, error: 'illegal type' };
|
||||
|
||||
const type = req.args?.type;
|
||||
@@ -55,7 +55,7 @@ const methods = {
|
||||
for (let line = fd.read('line'); length(line); line = fd.read('line')) {
|
||||
if (type === 'uuid')
|
||||
result.uuid = trim(line);
|
||||
else if (type in ['reality-keypair', 'wg-keypair']) {
|
||||
else if (type in ['reality-keypair', 'wg-keypair', 'sudoku-keypair']) {
|
||||
let priv = match(trim(line), /PrivateKey: (.*)/);
|
||||
if (priv)
|
||||
result.private_key = priv[1];
|
||||
|
||||
@@ -79,6 +79,7 @@ config router_access_control
|
||||
list 'cgroup' 'services/sysntpd'
|
||||
list 'cgroup' 'services/tailscale'
|
||||
list 'cgroup' 'services/zerotier'
|
||||
option 'dns' '0'
|
||||
option 'proxy' '0'
|
||||
|
||||
config router_access_control
|
||||
|
||||
@@ -195,6 +195,7 @@ config router_access_control
|
||||
list 'cgroup' 'services/sysntpd'
|
||||
list 'cgroup' 'services/tailscale'
|
||||
list 'cgroup' 'services/zerotier'
|
||||
option 'dns' '0'
|
||||
option 'proxy' '0'
|
||||
|
||||
config router_access_control
|
||||
|
||||
@@ -21,13 +21,13 @@ define Download/geoip
|
||||
HASH:=2445b44d9ae3ab9a867c9d1e0e244646c4c378622e14b9afaf3658ecf46a40b9
|
||||
endef
|
||||
|
||||
GEOSITE_VER:=20251202060244
|
||||
GEOSITE_VER:=20251203115157
|
||||
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
|
||||
define Download/geosite
|
||||
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
|
||||
URL_FILE:=dlc.dat
|
||||
FILE:=$(GEOSITE_FILE)
|
||||
HASH:=b925be67555a8b31a713759aa999babb674dcce5f803e67ab5b726efad2e8e92
|
||||
HASH:=0a14ebf9162fd0e3486b15a40025b9c807d2d38dd4379830edbbb113ee75ea80
|
||||
endef
|
||||
|
||||
GEOSITE_IRAN_VER:=202512010051
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=xray-core
|
||||
PKG_VERSION:=25.12.1
|
||||
PKG_VERSION:=25.12.2
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/XTLS/Xray-core/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=f1ab22b87e9e446d5e96cb00a8593b85826cc8a1bbc960e0eb0081293d6a32ab
|
||||
PKG_HASH:=e39c40b85decddea0b59719dae33df26aa149ac6fc673e7db9266e731cc2b3ad
|
||||
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
PKG_LICENSE:=MPL-2.0
|
||||
|
||||
Reference in New Issue
Block a user