zoukankan      html  css  js  c++  java
  • 对应sslocal的简易luci web界面

    直接通过官方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
  • 相关阅读:
    TCP和UDP的一些区别: TCP提供可靠传输的机制:
    rpc和 http的区别
    熔断原理与实现Golang版
    源码解读 Golang 的 sync.Map 实现原理
    mysql底层为啥用b 树不用红黑树_MySQL索引底层数据结构
    一条sql 查询语句是如何执行的
    网络相关知识
    为什么遍历 Go map 是无序的?
    Go语言 参数传递究竟是值传递还是引用传递的问题分析
    解决goland debug 调试问题 Version of Delve is too old for this version of Go
  • 原文地址:https://www.cnblogs.com/milton/p/6259288.html
Copyright © 2011-2022 走看看