mirror of
https://github.com/kenzok8/small-package
synced 2025-01-07 09:16:47 +08:00
update 2022-09-25 20:21:16
This commit is contained in:
parent
a6bf742729
commit
008bfca74f
@ -30,5 +30,5 @@ start() {
|
||||
|
||||
stop() {
|
||||
echo "${db_dir}/${db_name}" > "/lib/upgrade/keep.d/filebrowser"
|
||||
killall -9 filebrowser >/dev/null 2>&1
|
||||
killall -3 filebrowser >/dev/null 2>&1
|
||||
}
|
||||
|
@ -52,5 +52,5 @@ stop() {
|
||||
init_conf
|
||||
|
||||
set_type="stop" && set_firewall 2>"/dev/null"
|
||||
killall "gowebdav" 2>"/dev/null"
|
||||
killall -3 "gowebdav" 2>"/dev/null"
|
||||
}
|
||||
|
@ -10,11 +10,11 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_ARCH_LINKEASE:=$(ARCH)
|
||||
|
||||
PKG_NAME:=linkease
|
||||
PKG_VERSION:=0.9.8
|
||||
PKG_VERSION:=1.0.0
|
||||
PKG_RELEASE:=$(PKG_ARCH_LINKEASE)-1
|
||||
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=http://fw.koolcenter.com/binary/LinkEase/LinuxStorage/
|
||||
PKG_HASH:=a349bc5dc8f1546498213ce6f224b1951540917358f01013dd45e4d3e9ee84c2
|
||||
PKG_HASH:=7410e97e096700ade8242edc50265caa85c7682d97c08032bc8174fa1e882a56
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_VERSION)
|
||||
|
||||
|
@ -1,15 +1,13 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2022 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI support for v2rayA
|
||||
LUCI_DEPENDS:=+v2raya
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
PKG_NAME:=luci-app-v2raya
|
||||
PKG_VERSION:=1.1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_MAINTAINER:=zxlhhyccc <zxlhhy@gmail.com>
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
@ -1 +1,8 @@
|
||||
# 简易的 v2rayA 开关
|
||||
# luci-app-v2raya
|
||||
v2rayA 是一个易用而强大的,跨平台的 V2Ray 客户端,支持 SS、SSR、Trojan(trojan-go)、PingTunnel 协议。
|
||||
|
||||
## 注意
|
||||
|
||||
1、master分支的版本为js版本,是适配官方openwrt的19.07及以上分支,非19.07及以上分支请不要使用。
|
||||
|
||||
2、18.06分支的版本为luci-compat版本,主要适配的是官方operwrt的18.06分支和 Lean Openwrt [如果你是lean代码 请选择这个版本],不过此版本也可以使用在openwrt的19.07及以上分支。
|
||||
|
@ -0,0 +1,193 @@
|
||||
/* SPDX-License-Identifier: GPL-3.0-only
|
||||
*
|
||||
* Copyright (C) 2022 ImmortalWrt.org
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
'require form';
|
||||
'require fs';
|
||||
'require poll';
|
||||
'require rpc';
|
||||
'require uci';
|
||||
'require ui';
|
||||
'require validation';
|
||||
'require view';
|
||||
|
||||
var callServiceList = rpc.declare({
|
||||
object: 'service',
|
||||
method: 'list',
|
||||
params: ['name'],
|
||||
expect: { '': {} }
|
||||
});
|
||||
|
||||
var callInitAction = rpc.declare({
|
||||
object: 'luci',
|
||||
method: 'setInitAction',
|
||||
params: ['name', 'action'],
|
||||
expect: { result:false }
|
||||
});
|
||||
|
||||
function getServiceStatus() {
|
||||
return L.resolveDefault(callServiceList('v2raya'), {}).then(function (res) {
|
||||
var isRunning = false;
|
||||
try {
|
||||
isRunning = res['v2raya']['instances']['v2raya']['running'];
|
||||
} catch (e) { }
|
||||
return isRunning;
|
||||
});
|
||||
}
|
||||
|
||||
function renderStatus(isRunning, port) {
|
||||
var spanTemp = '<span style="color:%s"><strong>%s %s</strong></span>';
|
||||
var renderHTML;
|
||||
if (isRunning) {
|
||||
var button = String.format(' <a class="btn cbi-button" href="%s:%s" target="_blank" rel="noreferrer noopener">%s</a>',
|
||||
window.location.origin, port, _('Open Web Interface'));
|
||||
renderHTML = spanTemp.format('green', _('v2rayA'), _('RUNNING')) + button;
|
||||
} else {
|
||||
renderHTML = spanTemp.format('red', _('v2rayA'), _('NOT RUNNING'));
|
||||
}
|
||||
|
||||
return renderHTML;
|
||||
}
|
||||
|
||||
function uploadCertificate(type, filename, ev) {
|
||||
L.resolveDefault(fs.exec('/bin/mkdir', [ '-p', '/etc/v2raya/' ]));
|
||||
|
||||
return ui.uploadFile('/etc/v2raya/' + filename, ev.target)
|
||||
.then(L.bind(function(btn, res) {
|
||||
btn.firstChild.data = _('Checking %s...').format(type);
|
||||
|
||||
if (res.size <= 0) {
|
||||
ui.addNotification(null, E('p', _('The uploaded %s is empty.').format(type)));
|
||||
return fs.remove('/etc/v2raya/' + filename);
|
||||
}
|
||||
|
||||
ui.addNotification(null, E('p', _('Your %s was successfully uploaded. Size: %sB.').format(type, res.size)));
|
||||
}, this, ev.target))
|
||||
.catch(function(e) { ui.addNotification(null, E('p', e.message)) })
|
||||
.finally(L.bind(function(btn, input) {
|
||||
btn.firstChild.data = _('Upload...');
|
||||
}, this, ev.target));
|
||||
}
|
||||
|
||||
return view.extend({
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
uci.load('v2raya')
|
||||
]);
|
||||
},
|
||||
|
||||
handleSaveApply: function(ev, mode) {
|
||||
return this.handleSave(ev).then(function() {
|
||||
classes.ui.changes.apply(mode == '0');
|
||||
callInitAction('v2raya', 'disable').then(function() {
|
||||
callInitAction('v2raya', 'restart');
|
||||
});
|
||||
})
|
||||
},
|
||||
|
||||
render: function(data) {
|
||||
var m, s, o;
|
||||
var webport = (uci.get(data[0], 'config', 'address') || '0.0.0.0:2017').split(':').slice(-1)[0];
|
||||
|
||||
m = new form.Map('v2raya', _('v2rayA'),
|
||||
_('v2rayA is a V2Ray Linux client supporting global transparent proxy, compatible with SS, SSR, Trojan(trojan-go), PingTunnel protocols.'));
|
||||
|
||||
s = m.section(form.TypedSection);
|
||||
s.anonymous = true;
|
||||
s.render = function () {
|
||||
poll.add(function () {
|
||||
return L.resolveDefault(getServiceStatus()).then(function (res) {
|
||||
var view = document.getElementById('service_status');
|
||||
view.innerHTML = renderStatus(res, webport);
|
||||
});
|
||||
});
|
||||
|
||||
return E('div', { class: 'cbi-section', id: 'status_bar' }, [
|
||||
E('p', { id: 'service_status' }, _('Collecting data...'))
|
||||
]);
|
||||
}
|
||||
|
||||
s = m.section(form.NamedSection, 'config', 'v2raya');
|
||||
|
||||
o = s.option(form.Flag, 'enabled', _('Enable'));
|
||||
o.default = o.disabled;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'address', _('Listening address'));
|
||||
o.datatype = 'ipaddrport(1)';
|
||||
o.default = '0.0.0.0:2017';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'config', _('Configuration directory'));
|
||||
o.datatype = 'path';
|
||||
o.default = '/etc/v2raya';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.ListValue, 'ipv6_support', _('IPv6 support'),
|
||||
_('Make sure your IPv6 network works fine before you turn it on.'));
|
||||
o.value('auto', _('Auto'));
|
||||
o.value('on', _('On'));
|
||||
o.value('off', _('Off'));
|
||||
o.default = 'auto';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.ListValue, 'log_level', _('Log level'));
|
||||
o.value('trace', _('Trace'));
|
||||
o.value('debug', _('Debug'));
|
||||
o.value('info', _('Info'));
|
||||
o.value('warn', _('Warn'));
|
||||
o.value('error', _('Error'));
|
||||
o.default = 'info';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'log_file', _('Log file path'));
|
||||
o.datatype = 'path';
|
||||
o.default = '/var/log/v2raya/v2raya.log';
|
||||
o.rmempty = false;
|
||||
/* Due to ACL rule, this value must retain default otherwise log page will be broken */
|
||||
o.readonly = true;
|
||||
|
||||
o = s.option(form.Value, 'log_max_days', _('Max log retention period'),
|
||||
_('Maximum number of days to keep log files.'));
|
||||
o.datatype = 'uinteger';
|
||||
o.default = '3';
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Flag, 'log_disable_color', _('Disable log color output'));
|
||||
o.default = o.enabled;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Flag, 'log_disable_timestamp', _('Disable log timestamp'));
|
||||
o.default = o.disabled;
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.Value, 'v2ray_bin', _('v2ray binary path'),
|
||||
_('Executable v2ray binary path. Auto-detect if put it empty (recommended).'));
|
||||
o.datatype = 'path';
|
||||
|
||||
o = s.option(form.Value, 'v2ray_confdir', _('Extra config directory'),
|
||||
_('Additional v2ray config directory, files in it will be combined with config generated by v2rayA.'));
|
||||
o.datatype = 'path';
|
||||
|
||||
o = s.option(form.Value, 'vless_grpc_inbound_cert_key', _('Certpath for gRPC inbound'),
|
||||
_('Specify the certification path instead of automatically generating a self-signed certificate.'));
|
||||
o.value('', _('Automatically generate'));
|
||||
o.value('/etc/v2raya/grpc_certificate.crt,/etc/v2raya/grpc_private.key');
|
||||
|
||||
o = s.option(form.Button, '_upload_cert', _('Upload certificate'));
|
||||
o.inputstyle = 'action';
|
||||
o.inputtitle = _('Upload...');
|
||||
o.onclick = L.bind(uploadCertificate, this, _('certificate'), 'grpc_certificate.crt');
|
||||
o.depends('vless_grpc_inbound_cert_key', '/etc/v2raya/grpc_certificate.crt,/etc/v2raya/grpc_private.key');
|
||||
|
||||
o = s.option(form.Button, '_upload_key', _('Upload privateKey'));
|
||||
o.inputstyle = 'action';
|
||||
o.inputtitle = _('Upload...');
|
||||
o.onclick = L.bind(uploadCertificate, this, _('private key'), 'grpc_private.key');
|
||||
o.depends('vless_grpc_inbound_cert_key', '/etc/v2raya/grpc_certificate.crt,/etc/v2raya/grpc_private.key');
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
@ -0,0 +1,80 @@
|
||||
/* SPDX-License-Identifier: GPL-3.0-only
|
||||
*
|
||||
* Copyright (C) 2022 ImmortalWrt.org
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
'require dom';
|
||||
'require fs';
|
||||
'require poll';
|
||||
'require uci';
|
||||
'require view';
|
||||
|
||||
return view.extend({
|
||||
render: function() {
|
||||
/* Thanks to luci-app-aria2 */
|
||||
var css = ' \
|
||||
#log_textarea { \
|
||||
padding: 10px; \
|
||||
text-align: left; \
|
||||
} \
|
||||
#log_textarea pre { \
|
||||
padding: .5rem; \
|
||||
word-break: break-all; \
|
||||
margin: 0; \
|
||||
} \
|
||||
.description { \
|
||||
background-color: #33ccff; \
|
||||
}';
|
||||
|
||||
var log_textarea = E('div', { 'id': 'log_textarea' },
|
||||
E('img', {
|
||||
'src': L.resource(['icons/loading.gif']),
|
||||
'alt': _('Loading...'),
|
||||
'style': 'vertical-align:middle'
|
||||
}, _('Collecting data...'))
|
||||
);
|
||||
|
||||
var log_path = uci.get('v2raya', 'config', 'log_file') || '/var/log/v2raya/v2raya.log';
|
||||
|
||||
poll.add(L.bind(function() {
|
||||
return fs.read_direct(log_path, 'text')
|
||||
.then(function(res) {
|
||||
var log = E('pre', { 'wrap': 'pre' }, [
|
||||
res.trim() || _('Log is clean.')
|
||||
]);
|
||||
|
||||
dom.content(log_textarea, log);
|
||||
}).catch(function(err) {
|
||||
var log;
|
||||
|
||||
if (err.toString().includes('NotFoundError'))
|
||||
log = E('pre', { 'wrap': 'pre' }, [
|
||||
_('Log file does not exist.')
|
||||
]);
|
||||
else
|
||||
log = E('pre', { 'wrap': 'pre' }, [
|
||||
_('Unknown error: %s').format(err)
|
||||
]);
|
||||
|
||||
dom.content(log_textarea, log);
|
||||
});
|
||||
}));
|
||||
|
||||
return E([
|
||||
E('style', [ css ]),
|
||||
E('div', {'class': 'cbi-map'}, [
|
||||
E('div', {'class': 'cbi-section'}, [
|
||||
log_textarea,
|
||||
E('div', {'style': 'text-align:right'},
|
||||
E('small', {}, _('Refresh every %s seconds.').format(L.env.pollinterval))
|
||||
)
|
||||
])
|
||||
])
|
||||
]);
|
||||
},
|
||||
|
||||
handleSaveApply: null,
|
||||
handleSave: null,
|
||||
handleReset: null
|
||||
});
|
@ -1,32 +0,0 @@
|
||||
module("luci.controller.v2raya", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/v2raya") then
|
||||
return
|
||||
end
|
||||
|
||||
local page = entry({"admin", "services", "v2raya"}, alias("admin", "services", "v2raya", "basic"), _("v2rayA"), 30)
|
||||
page.dependent = true
|
||||
page.acl_depends = { "luci-app-v2raya" }
|
||||
|
||||
entry({"admin", "services", "v2raya", "basic"}, cbi("v2raya/basic")).leaf = true
|
||||
entry({"admin", "services", "v2raya", "log"}, cbi("v2raya/log")).leaf = true
|
||||
entry({"admin", "services", "v2raya", "get_log"}, call("get_log")).leaf = true
|
||||
entry({"admin", "services", "v2raya", "clear_log"}, call("clear_log")).leaf = true
|
||||
entry({"admin", "services", "v2raya", "status"}, call("act_status")).leaf = true
|
||||
end
|
||||
|
||||
function act_status()
|
||||
local e = {}
|
||||
e.running = luci.sys.call("pgrep -f v2raya >/dev/null") == 0
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(e)
|
||||
end
|
||||
|
||||
function get_log()
|
||||
luci.http.write(luci.sys.exec("[ -f $(uci -q get v2raya.config.log_file) ] && cat $(uci -q get v2raya.config.log_file)"))
|
||||
end
|
||||
|
||||
function clear_log()
|
||||
luci.sys.call("echo '' > $(uci -q get v2raya.config.log_file)")
|
||||
end
|
@ -1,140 +0,0 @@
|
||||
-- Copyright 2008 Yanira <forum-2008@email.de>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local uci = luci.model.uci.cursor()
|
||||
local m, o, s
|
||||
require("nixio.fs")
|
||||
|
||||
local v2raya_bin = "/usr/bin/v2raya"
|
||||
v2raya_version="<b><font style=\"color:red\">"..luci.sys.exec(v2raya_bin.." --version 2>/dev/null").."</font></b>"
|
||||
|
||||
m = Map("v2raya")
|
||||
m.title = translate("v2rayA Client")
|
||||
m.description = translate("v2rayA is a V2Ray Linux client supporting global transparent proxy, compatible with SS, SSR, Trojan(trojan-go), PingTunnel protocols.")
|
||||
|
||||
m:section(SimpleSection).template = "v2raya/v2raya_status"
|
||||
|
||||
s = m:section(TypedSection, "v2raya")
|
||||
s:tab("settings", translate("Basic Setting"))
|
||||
s:tab("log", translate("Logs"))
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
o = s:taboption("settings", Flag, "enabled", translate("Enabled"))
|
||||
o.default = o.disabled
|
||||
o.rmempty = false
|
||||
|
||||
o = s:taboption("settings", DummyValue,"v2raya_version",translate("v2rayA Version"))
|
||||
o.rawhtml = true
|
||||
o.value = v2raya_version
|
||||
|
||||
o = s:taboption("settings", Value, "address", translate("GUI access address"))
|
||||
o.description = translate("Use 0.0.0.0:2017 to monitor all access.")
|
||||
--[[o.datatype = 'ipaddrport(1)']]--
|
||||
o.default = "http://0.0.0.0:2017"
|
||||
o.rmempty = false
|
||||
|
||||
o = s:taboption("settings", Value, "config", translate("v2rayA configuration directory"))
|
||||
o.rmempty = '/etc/v2raya'
|
||||
o.rmempty = false;
|
||||
|
||||
o = s:taboption("settings", ListValue, "ipv6_support", translate("Ipv6 Support"))
|
||||
o.description = translate("Make sure your IPv6 network works fine before you turn it on.")
|
||||
o:value("auto", translate("AUTO"))
|
||||
o:value("on", translate("ON"))
|
||||
o:value("off", translate("OFF"))
|
||||
o.default = auto
|
||||
o.rmempty = false
|
||||
|
||||
o = s:taboption("settings", Value, "log_file", translate("Log file"))
|
||||
o.default = "/var/log/v2raya/v2raya.log"
|
||||
o.rmempty = false
|
||||
o.readonly = true
|
||||
|
||||
o = s:taboption("settings", ListValue, "log_level", translate("Log Level"))
|
||||
o:value("trace",translate("Trace"))
|
||||
o:value("debug",translate("Debug"))
|
||||
o:value("info",translate("Info"))
|
||||
o:value("warn",translate("Warning"))
|
||||
o:value("error",translate("Error"))
|
||||
o.default = "Info"
|
||||
o.rmempty = false
|
||||
|
||||
o = s:taboption("settings", ListValue, "log_max_days", translate("Log Keepd Max Days"))
|
||||
o.description = translate("Maximum number of days to keep log files is 3 day.")
|
||||
o.datatype = "uinteger"
|
||||
o:value("1", translate("1"))
|
||||
o:value("2", translate("2"))
|
||||
o:value("3", translate("3"))
|
||||
o.default = 3
|
||||
o.rmempty = false
|
||||
|
||||
o = s:taboption("settings", Flag, "log_disable_color", translate("Disable log color"))
|
||||
o.default = o.enabled
|
||||
o.rmempty = false
|
||||
|
||||
o = s:taboption("settings", Flag, "log_disable_timestamp", translate("Log disable timestamp"))
|
||||
o.default = o.disabled
|
||||
o.rmempty = false
|
||||
|
||||
o = s:taboption("settings", Value, "v2ray_bin", translate("v2ray binary path"))
|
||||
o.description = translate("Executable v2ray binary path. Auto-detect if put it empty (recommended).")
|
||||
o.datatype = 'path'
|
||||
|
||||
o = s:taboption("settings", Value, "v2ray_confdir", translate("Extra config directory"))
|
||||
o.description = translate("Additional v2ray config directory, files in it will be combined with config generated by v2rayA.")
|
||||
o.datatype = 'path'
|
||||
|
||||
o = s:taboption("settings", Value, "vless_grpc_inbound_cert_key", translate("Upload certificate"))
|
||||
o.description = translate("Specify the certification path instead of automatically generating a self-signed certificate.")
|
||||
o.template = "v2raya/v2raya_certupload"
|
||||
|
||||
cert_dir = "/etc/v2raya/"
|
||||
local path
|
||||
|
||||
luci.http.setfilehandler(function(meta, chunk, eof)
|
||||
if not fd then
|
||||
if (not meta) or (not meta.name) or (not meta.file) then
|
||||
return
|
||||
end
|
||||
fd = nixio.open(cert_dir .. meta.file, "w")
|
||||
if not fd then
|
||||
path = translate("Create upload file error.")
|
||||
return
|
||||
end
|
||||
end
|
||||
if chunk and fd then
|
||||
fd:write(chunk)
|
||||
end
|
||||
if eof and fd then
|
||||
fd:close()
|
||||
fd = nil
|
||||
path = '/etc/v2raya/' .. meta.file .. ''
|
||||
end
|
||||
end)
|
||||
if luci.http.formvalue("upload") then
|
||||
local f = luci.http.formvalue("ulfile")
|
||||
if #f <= 0 then
|
||||
path = translate("No specify upload file.")
|
||||
end
|
||||
end
|
||||
|
||||
o = s:taboption("settings", Value, "vless_grpc_inbound_cert_key", translate("Upload Certificate Path"))
|
||||
o.description = translate("This is the path where the certificate resides after the certificate is uploaded.")
|
||||
o.default = "/etc/v2raya/cert.crt,/etc/v2raya/cert.key"
|
||||
|
||||
o = s:taboption("log", Value, "log", translate("Logs"))
|
||||
o.template = "v2raya/v2raya_log"
|
||||
--[[o.rows = 50]]--
|
||||
|
||||
m.apply_on_parse = true
|
||||
m.on_after_apply = function(self,map)
|
||||
luci.sys.call("/etc/init.d/v2raya restart")
|
||||
end
|
||||
|
||||
--[[
|
||||
o.inputstyle = "reload"
|
||||
luci.sys.exec("/etc/init.d/v2raya start >/dev/null 2>&1 &")
|
||||
]]--
|
||||
|
||||
return m
|
@ -1,6 +0,0 @@
|
||||
m = Map("v2raya")
|
||||
m.reset = false
|
||||
m.submit = false
|
||||
m:append(Template("v2raya/v2raya_log"))
|
||||
|
||||
return m
|
@ -1,4 +0,0 @@
|
||||
<%+cbi/valueheader%>
|
||||
<input class="cbi-input-file" style="width: 240px" type="file" id="ulfile" name="ulfile" />
|
||||
<input type="submit" class="btn cbi-button cbi-input-apply" name="upload" value="<%:Upload%>" />
|
||||
<%+cbi/valuefooter%>
|
@ -1,33 +0,0 @@
|
||||
<%
|
||||
local dsp = require "luci.dispatcher"
|
||||
-%>
|
||||
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
function clearlog(btn) {
|
||||
XHR.get('<%=dsp.build_url("admin/services/v2raya/clear_log")%>', null,
|
||||
function(x, data) {
|
||||
if(x && x.status == 200) {
|
||||
var log_textarea = document.getElementById('log_textarea');
|
||||
log_textarea.innerHTML = "";
|
||||
log_textarea.scrollTop = log_textarea.scrollHeight;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
XHR.poll(2, '<%=dsp.build_url("admin/services/v2raya/get_log")%>', null,
|
||||
function(x, data) {
|
||||
if(x && x.status == 200 && document.getElementById("checkbox1").checked == true) {
|
||||
var log_textarea = document.getElementById('log_textarea');
|
||||
log_textarea.innerHTML = x.responseText;
|
||||
log_textarea.scrollTop = log_textarea.scrollHeight;
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]>
|
||||
</script>
|
||||
<fieldset class="cbi-section" id="_log_fieldset">
|
||||
<input type="checkbox" id="checkbox1" style="vertical-align:middle;height: auto;"checked><%:自动刷新%></input>
|
||||
<input class="btn cbi-button cbi-input-remove" type="button" onclick="clearlog()" value="<%:清除日志%>" />
|
||||
<textarea id="log_textarea" class="cbi-input-textarea" style="width: 100%;margin-top: 10px;" data-update="change" rows="30" wrap="off" readonly="readonly"></textarea>
|
||||
</fieldset>
|
@ -1,28 +0,0 @@
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(1, '<%=url([[admin]], [[services]], [[v2raya]], [[status]])%>', null,
|
||||
function(x, data) {
|
||||
var tb = document.getElementById('v2raya_status');
|
||||
|
||||
if (data && tb) {
|
||||
if (data.running) {
|
||||
var links = '<em><b style=color:green> <%:v2rayA%> <%:RUNNING%></b></em><input class="btn cbi-button mar-10" type="button" value="<%:Open v2rayA page%>" onclick="openwebui();" />';
|
||||
tb.innerHTML = links;
|
||||
} else {
|
||||
tb.innerHTML = '<em><b style=color:red> <%:v2rayA%> <%:NOT RUNNING%></b></em>';
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
function openwebui(){
|
||||
var url = window.location.host+":<%=luci.sys.exec("uci -q get v2raya.config.address"):match(":[0-9]+"):gsub(":", "")%>";
|
||||
window.open('http://'+url,'target','');
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
<style>.mar-10 {margin-left: 50px; margin-right: 10px;}</style>
|
||||
<fieldset class="cbi-section">
|
||||
<p id="v2raya_status">
|
||||
<em><%:Collecting data...%></em>
|
||||
</p>
|
||||
</fieldset>
|
207
luci-app-v2raya/po/templates/v2raya.pot
Normal file
207
luci-app-v2raya/po/templates/v2raya.pot
Normal file
@ -0,0 +1,207 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:155
|
||||
msgid ""
|
||||
"Additional v2ray config directory, files in it will be combined with config "
|
||||
"generated by v2rayA."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:114
|
||||
msgid "Auto"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:160
|
||||
msgid "Automatically generate"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:158
|
||||
msgid "Certpath for gRPC inbound"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:52
|
||||
msgid "Checking %s..."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:92
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:35
|
||||
msgid "Collecting data..."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/root/usr/share/rpcd/luci/menu.d/luci-app-v2raya.json:14
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:107
|
||||
msgid "Configuration directory"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:122
|
||||
msgid "Debug"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:142
|
||||
msgid "Disable log color output"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:146
|
||||
msgid "Disable log timestamp"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:98
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:125
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:151
|
||||
msgid ""
|
||||
"Executable v2ray binary path. Auto-detect if put it empty (recommended)."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:154
|
||||
msgid "Extra config directory"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/root/usr/share/rpcd/acl.d/luci-app-v2raya.json:3
|
||||
msgid "Grant access to v2rayA configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:112
|
||||
msgid "IPv6 support"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:123
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:102
|
||||
msgid "Listening address"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:33
|
||||
msgid "Loading..."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/root/usr/share/rpcd/luci/menu.d/luci-app-v2raya.json:22
|
||||
msgid "Log"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:53
|
||||
msgid "Log file does not exist."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:129
|
||||
msgid "Log file path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:44
|
||||
msgid "Log is clean."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:120
|
||||
msgid "Log level"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:113
|
||||
msgid "Make sure your IPv6 network works fine before you turn it on."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:136
|
||||
msgid "Max log retention period"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:137
|
||||
msgid "Maximum number of days to keep log files."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:41
|
||||
msgid "NOT RUNNING"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:116
|
||||
msgid "Off"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:115
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:38
|
||||
msgid "Open Web Interface"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:39
|
||||
msgid "RUNNING"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:70
|
||||
msgid "Refresh every %s seconds."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:159
|
||||
msgid ""
|
||||
"Specify the certification path instead of automatically generating a self-"
|
||||
"signed certificate."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:55
|
||||
msgid "The uploaded %s is empty."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:121
|
||||
msgid "Trace"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:57
|
||||
msgid "Unknown error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:163
|
||||
msgid "Upload certificate"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:169
|
||||
msgid "Upload privateKey"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:63
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:165
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:171
|
||||
msgid "Upload..."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:124
|
||||
msgid "Warn"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:59
|
||||
msgid "Your %s was successfully uploaded. Size: %sB."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:166
|
||||
msgid "certificate"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:172
|
||||
msgid "private key"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:150
|
||||
msgid "v2ray binary path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:39
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:41
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:78
|
||||
#: applications/luci-app-v2raya/root/usr/share/rpcd/luci/menu.d/luci-app-v2raya.json:3
|
||||
msgid "v2rayA"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:79
|
||||
msgid ""
|
||||
"v2rayA is a V2Ray Linux client supporting global transparent proxy, "
|
||||
"compatible with SS, SSR, Trojan(trojan-go), PingTunnel protocols."
|
||||
msgstr ""
|
1
luci-app-v2raya/po/zh-cn
Symbolic link
1
luci-app-v2raya/po/zh-cn
Symbolic link
@ -0,0 +1 @@
|
||||
zh_Hans
|
@ -1,117 +0,0 @@
|
||||
msgid "Basic Setting"
|
||||
msgstr "基本设置"
|
||||
|
||||
msgid "v2rayA Client"
|
||||
msgstr "v2rayA 客户端"
|
||||
|
||||
msgid "v2rayA is a V2Ray Linux client supporting global transparent proxy, compatible with SS, SSR, Trojan(trojan-go), PingTunnel protocols."
|
||||
msgstr "v2rayA 是一个支持全局透明代理的 V2Ray Linux 客户端,同时兼容 SS、SSR、Trojan(trojan-go)、PingTunnel 协议"
|
||||
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "未运行"
|
||||
|
||||
msgid "RUNNING"
|
||||
msgstr "运行中"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "v2rayA Version"
|
||||
msgstr "v2rayA 版本"
|
||||
|
||||
msgid "Open v2rayA page"
|
||||
msgstr "打开 v2rayA 页面"
|
||||
|
||||
msgid "GUI access address"
|
||||
msgstr "GUI访问地址"
|
||||
|
||||
msgid "Use 0.0.0.0:2017 to monitor all access."
|
||||
msgstr "使用 0.0.0.0:2017 监听所有访问。"
|
||||
|
||||
msgid "v2rayA configuration directory"
|
||||
msgstr "v2rayA 配置目录"
|
||||
|
||||
msgid "Ipv6 Support"
|
||||
msgstr "IPv6 支持"
|
||||
|
||||
msgid "Make sure your IPv6 network works fine before you turn it on."
|
||||
msgstr "在开启之前确保您的 IPv6 网络工作正常。"
|
||||
|
||||
msgid "AUTO"
|
||||
msgstr "自动"
|
||||
|
||||
msgid "ON"
|
||||
msgstr "开启"
|
||||
|
||||
msgid "OFF"
|
||||
msgstr "关闭"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "日志文件"
|
||||
|
||||
msgid "Log level"
|
||||
msgstr "日志等级"
|
||||
|
||||
msgid "Trace"
|
||||
msgstr "追踪"
|
||||
|
||||
msgid "Debug"
|
||||
msgstr "调试"
|
||||
|
||||
msgid "Info"
|
||||
msgstr "信息"
|
||||
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
msgid "Log Keepd Max Days"
|
||||
msgstr "日志记录天数"
|
||||
|
||||
msgid "Maximum number of days to keep log files is 3 day."
|
||||
msgstr "保留日志文件的最大天数为 3 天。"
|
||||
|
||||
msgid "Disable log color"
|
||||
msgstr "禁用日志颜色"
|
||||
|
||||
msgid "Log disable timestamp"
|
||||
msgstr "禁用日志时间戳"
|
||||
|
||||
msgid "v2ray binary path"
|
||||
msgstr "v2ray 二进制路径"
|
||||
|
||||
msgid ""
|
||||
"Executable v2ray binary path. Auto-detect if put it empty (recommended)."
|
||||
msgstr "v2ray 可执行二进制文件目录。留空以自动检测(推荐)。"
|
||||
|
||||
msgid "Extra config directory"
|
||||
msgstr "附加配置目录"
|
||||
|
||||
msgid ""
|
||||
"Additional v2ray config directory, files in it will be combined with config "
|
||||
"generated by v2rayA."
|
||||
msgstr ""
|
||||
"附加 v2ray 配置目录,包含在其中的文件将被合并至 v2rayA 生成的配置文件中。"
|
||||
|
||||
msgid "Upload certificate"
|
||||
msgstr "上传证书"
|
||||
|
||||
msgid "Upload"
|
||||
msgstr "上传"
|
||||
|
||||
msgid "Specify the certification path instead of automatically generating a self-signed certificate."
|
||||
msgstr "指定证书路径而不是自动生成自签名证书。"
|
||||
|
||||
msgid "No specify upload file."
|
||||
msgstr "没有上传证书"
|
||||
|
||||
msgid "Upload Certificate Path"
|
||||
msgstr "上传的证书路径"
|
||||
|
||||
msgid "This is the path where the certificate resides after the certificate is uploaded."
|
||||
msgstr "这里是上传证书后证书所在的路径。"
|
||||
|
||||
msgid "Logs"
|
||||
msgstr "日志"
|
@ -1 +0,0 @@
|
||||
zh-cn
|
217
luci-app-v2raya/po/zh_Hans/v2raya.po
Normal file
217
luci-app-v2raya/po/zh_Hans/v2raya.po
Normal file
@ -0,0 +1,217 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: zh-Hans\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:155
|
||||
msgid ""
|
||||
"Additional v2ray config directory, files in it will be combined with config "
|
||||
"generated by v2rayA."
|
||||
msgstr ""
|
||||
"附加 v2ray 配置目录,包含在其中的文件将被合并至 v2rayA 生成的配置文件中。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:114
|
||||
msgid "Auto"
|
||||
msgstr "自动"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:160
|
||||
msgid "Automatically generate"
|
||||
msgstr "自动生成"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:158
|
||||
msgid "Certpath for gRPC inbound"
|
||||
msgstr "gPRC 入站证书目录"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:52
|
||||
msgid "Checking %s..."
|
||||
msgstr "检查%s中..."
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:92
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:35
|
||||
msgid "Collecting data..."
|
||||
msgstr "收集数据中..."
|
||||
|
||||
#: applications/luci-app-v2raya/root/usr/share/rpcd/luci/menu.d/luci-app-v2raya.json:14
|
||||
msgid "Configuration"
|
||||
msgstr "配置"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:107
|
||||
msgid "Configuration directory"
|
||||
msgstr "配置文件目录"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:122
|
||||
msgid "Debug"
|
||||
msgstr "调试"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:142
|
||||
msgid "Disable log color output"
|
||||
msgstr "禁用日志彩色输出"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:146
|
||||
msgid "Disable log timestamp"
|
||||
msgstr "禁用日志时间戳"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:98
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:125
|
||||
msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:151
|
||||
msgid ""
|
||||
"Executable v2ray binary path. Auto-detect if put it empty (recommended)."
|
||||
msgstr "v2ray 可执行二进制文件目录。留空以自动检测(推荐)。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:154
|
||||
msgid "Extra config directory"
|
||||
msgstr "附加配置目录"
|
||||
|
||||
#: applications/luci-app-v2raya/root/usr/share/rpcd/acl.d/luci-app-v2raya.json:3
|
||||
msgid "Grant access to v2rayA configuration"
|
||||
msgstr "授予访问 v2rayA 配置的权限"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:112
|
||||
msgid "IPv6 support"
|
||||
msgstr "IPv6 支持"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:123
|
||||
msgid "Info"
|
||||
msgstr "信息"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:102
|
||||
msgid "Listening address"
|
||||
msgstr "监听地址"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:33
|
||||
msgid "Loading..."
|
||||
msgstr "加载中..."
|
||||
|
||||
#: applications/luci-app-v2raya/root/usr/share/rpcd/luci/menu.d/luci-app-v2raya.json:22
|
||||
msgid "Log"
|
||||
msgstr "日志"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:53
|
||||
msgid "Log file does not exist."
|
||||
msgstr "日志文件不存在。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:129
|
||||
msgid "Log file path"
|
||||
msgstr "日志文件路径"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:44
|
||||
msgid "Log is clean."
|
||||
msgstr "日志为空。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:120
|
||||
msgid "Log level"
|
||||
msgstr "日志等级"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:113
|
||||
msgid "Make sure your IPv6 network works fine before you turn it on."
|
||||
msgstr "开启前,请确保您的 IPv6 网络工作正常。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:136
|
||||
msgid "Max log retention period"
|
||||
msgstr "最长日志保留时间"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:137
|
||||
msgid "Maximum number of days to keep log files."
|
||||
msgstr "保留日志文件的最长天数。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:41
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "未运行"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:116
|
||||
msgid "Off"
|
||||
msgstr "关"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:115
|
||||
msgid "On"
|
||||
msgstr "开"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:38
|
||||
msgid "Open Web Interface"
|
||||
msgstr "打开 Web 界面"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:39
|
||||
msgid "RUNNING"
|
||||
msgstr "运行中"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:70
|
||||
msgid "Refresh every %s seconds."
|
||||
msgstr "每 %s 秒刷新。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:159
|
||||
msgid ""
|
||||
"Specify the certification path instead of automatically generating a self-"
|
||||
"signed certificate."
|
||||
msgstr "指定证书目录而不是自动生成自签证书。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:55
|
||||
msgid "The uploaded %s is empty."
|
||||
msgstr "上传的%s为空。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:121
|
||||
msgid "Trace"
|
||||
msgstr "跟踪"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/log.js:57
|
||||
msgid "Unknown error: %s"
|
||||
msgstr "未知错误:%s"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:163
|
||||
msgid "Upload certificate"
|
||||
msgstr "上传证书"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:169
|
||||
msgid "Upload privateKey"
|
||||
msgstr "上传私钥"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:63
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:165
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:171
|
||||
msgid "Upload..."
|
||||
msgstr "上传..."
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:124
|
||||
msgid "Warn"
|
||||
msgstr "警告"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:59
|
||||
msgid "Your %s was successfully uploaded. Size: %sB."
|
||||
msgstr "您的%s上传成功。大小:%sB。"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:166
|
||||
msgid "certificate"
|
||||
msgstr "证书"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:172
|
||||
msgid "private key"
|
||||
msgstr "私钥"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:150
|
||||
msgid "v2ray binary path"
|
||||
msgstr "v2ray 二进制路径"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:39
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:41
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:78
|
||||
#: applications/luci-app-v2raya/root/usr/share/rpcd/luci/menu.d/luci-app-v2raya.json:3
|
||||
msgid "v2rayA"
|
||||
msgstr "v2rayA"
|
||||
|
||||
#: applications/luci-app-v2raya/htdocs/luci-static/resources/view/v2raya/config.js:79
|
||||
msgid ""
|
||||
"v2rayA is a V2Ray Linux client supporting global transparent proxy, "
|
||||
"compatible with SS, SSR, Trojan(trojan-go), PingTunnel protocols."
|
||||
msgstr ""
|
||||
"v2rayA 是一个易用而强大的,跨平台的 V2Ray 客户端,支持 SS、SSR、"
|
||||
"Trojan(trojan-go)、PingTunnel 协议。"
|
@ -1,11 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@v2raya[-1]
|
||||
add ucitrack v2raya
|
||||
set ucitrack.@v2raya[-1].init=v2raya
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
|
||||
exit 0
|
@ -0,0 +1,29 @@
|
||||
{
|
||||
"admin/services/v2raya": {
|
||||
"title": "v2rayA",
|
||||
"order": 90,
|
||||
"action": {
|
||||
"type": "firstchild"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [ "luci-app-v2raya" ],
|
||||
"uci": { "v2raya": true }
|
||||
}
|
||||
},
|
||||
"admin/services/v2raya/config": {
|
||||
"title": "Configuration",
|
||||
"order": 10,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "v2raya/config"
|
||||
}
|
||||
},
|
||||
"admin/services/v2raya/log": {
|
||||
"title": "Log",
|
||||
"order": 20,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "v2raya/log"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,24 @@
|
||||
{
|
||||
"luci-app-v2raya": {
|
||||
"description": "Grant UCI access for luci-app-v2raya",
|
||||
"description": "Grant access to v2rayA configuration",
|
||||
"read": {
|
||||
"file": {
|
||||
"/bin/mkdir -p /etc/v2raya/": [ "exec" ],
|
||||
"/var/log/v2raya/v2raya.log": [ "read" ]
|
||||
},
|
||||
"ubus": {
|
||||
"service": [ "list" ]
|
||||
},
|
||||
"uci": [ "v2raya" ]
|
||||
},
|
||||
"write": {
|
||||
"file": {
|
||||
"/etc/v2raya/grpc_certificate.crt": [ "write" ],
|
||||
"/etc/v2raya/grpc_private.key": [ "write" ]
|
||||
},
|
||||
"ubus": {
|
||||
"luci": [ "setInitAction" ]
|
||||
},
|
||||
"uci": [ "v2raya" ]
|
||||
}
|
||||
}
|
||||
|
@ -9,10 +9,10 @@ include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=natflow
|
||||
PKG_VERSION:=20220926
|
||||
PKG_VERSION:=20220928
|
||||
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/ptpt52/natflow/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=e96ac4d0b12970fc6e4b29a3dfeb689c2e19a1f50818dedeb3ff3f1f52574cb9
|
||||
PKG_HASH:=e517ccb4c73b412ae6c5c08e0beab67c569eb561d5feccc22b22a4f4e0785cfd
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
|
||||
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
||||
|
Loading…
Reference in New Issue
Block a user