对应sslocal的简易luci web界面
2023-03-07 09:41:56 时间
直接通过官方ss代码库安装的ss, 只有一个可执行的sslocal, 也没找到对应的luci-app, 所以就自己写了一个. 因为/etc/init.d/sslocal 和 /etc/config/sslocal是现成的, 所以只需要写 controller 和 cbi model 就可以了.
1. 创建 /usr/lib/lua/luci/controller/admin/sslocal.lua
module("luci.controller.admin.sslocal", package.seeall) function index() entry({"admin", "network", "sslocal"}, cbi("admin_network/sslocal"), _("Shadowsocks Local"), 100) end
2. 创建 /usr/lib/lua/luci/model/cbi/admin_network/sslocal.lua
--[[ Shadowsocks LuCI Configuration Page Customized by RockBB ]]-- local m, s, o, e local fs = require "nixio.fs" local state_msg = "" local sslocal_on = (luci.sys.call("pidof sslocal > /dev/null") == 0) if sslocal_on then state_msg = "<br><font color=\"green\">" .. translate("sslocal Running") .. "</font>" else state_msg = "<br>" .. translate("sslocal off") end m = Map("sslocal", translate("Shadowsocks Local"), translate("Shadowsocks is an encrypted proxy designed to protect your Internet traffic.") .. " - " .. state_msg) --[[ config sslocal option server_addr 'aa.bb.cc' option server_port '8189' option local_addr '0.0.0.0' option local_port '1080' option password 'some.phrase' option method 'aes-256-cfb' ]] s = m:section(TypedSection, "sslocal", translate("Setting")) s.addremove = false s.anonymous = true -- --------------------------------------------------- o = s:option(Value, "server_addr", translate("Server Address")) o.datatype = "host" o.rmempty = false o = s:option(Value, "server_port", translate("Server Port")) o.datatype = "port" o.rmempty = false o = s:option(Value, "local_addr", translate("Local Address")) o.datatype = "ipaddr" o.rmempty = false o = s:option(Value, "local_port", translate("Local Port")) o.datatype = "range(1,65535)" o.rmempty = false o = s:option(Value, "password", translate("Password")) o.password = true o = s:option(ListValue, "method", translate("Encryption Method")) o:value("table") o:value("rc4") o:value("rc4-md5") o:value("aes-128-cfb") o:value("aes-192-cfb") o:value("aes-256-cfb") o:value("bf-cfb") o:value("cast5-cfb") o:value("des-cfb") o:value("camellia-128-cfb") o:value("camellia-192-cfb") o:value("camellia-256-cfb") o:value("idea-cfb") o:value("rc2-cfb") o:value("seed-cfb") o:value("salsa20") o:value("chacha20") local apply = luci.http.formvalue("cbi.apply") if apply then io.popen("/etc/init.d/sslocal restart") end return m
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的