servers.lua 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. -- Licensed to the public under the GNU General Public License v3.
  2. require "luci.http"
  3. require "luci.dispatcher"
  4. require "luci.model.uci"
  5. local m, s, o
  6. local shadowsocksr = "shadowsocksr"
  7. local uci = luci.model.uci.cursor()
  8. local server_count = 0
  9. uci:foreach("shadowsocksr", "servers", function(s)
  10. server_count = server_count + 1
  11. end)
  12. m = Map(shadowsocksr, translate("Servers subscription and manage"))
  13. -- Server Subscribe
  14. s = m:section(TypedSection, "server_subscribe")
  15. s.anonymous = true
  16. o = s:option(Flag, "auto_update", translate("Auto Update"))
  17. o.rmempty = false
  18. o.description = translate("Auto Update Server subscription, GFW list and CHN route")
  19. o = s:option(ListValue, "auto_update_time", translate("Update time (every day)"))
  20. for t = 0,23 do
  21. o:value(t, t..":00")
  22. end
  23. o.default=2
  24. o.rmempty = false
  25. o = s:option(DynamicList, "subscribe_url", translate("Subscribe URL"))
  26. o.rmempty = true
  27. o = s:option(Value, "filter_words", translate("Subscribe Filter Words"))
  28. o.rmempty = true
  29. o.description = translate("Filter Words splited by /")
  30. o = s:option(Button,"update_Sub",translate("Update Subscribe List"))
  31. o.inputstyle = "reload"
  32. o.description = translate("Update subscribe url list first")
  33. o.write = function()
  34. luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
  35. end
  36. o = s:option(Flag, "switch", translate("Subscribe Default Auto-Switch"))
  37. o.rmempty = false
  38. o.description = translate("Subscribe new add server default Auto-Switch on")
  39. o.default="1"
  40. o = s:option(Flag, "proxy", translate("Through proxy update"))
  41. o.rmempty = false
  42. o.description = translate("Through proxy update list, Not Recommended ")
  43. o = s:option(Button,"subscribe", translate("Update All Subscribe Severs"))
  44. o.rawhtml = true
  45. o.template = "shadowsocksr/subscribe"
  46. o = s:option(Button,"delete",translate("Delete All Subscribe Severs"))
  47. o.inputstyle = "reset"
  48. o.description = string.format(translate("Server Count") .. ": %d", server_count)
  49. o.write = function()
  50. uci:delete_all("shadowsocksr", "servers", function(s)
  51. if s.hashkey or s.isSubscribe then
  52. return true
  53. else
  54. return false
  55. end
  56. end)
  57. uci:save("shadowsocksr")
  58. uci:commit("shadowsocksr")
  59. luci.sys.exec("/etc/init.d/shadowsocksr restart")
  60. luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
  61. return
  62. end
  63. -- [[ Servers Manage ]]--
  64. s = m:section(TypedSection, "servers")
  65. s.anonymous = true
  66. s.addremove = true
  67. s.template = "cbi/tblsection"
  68. s.sortable = true
  69. s.extedit = luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers", "%s")
  70. function s.create(...)
  71. local sid = TypedSection.create(...)
  72. if sid then
  73. luci.http.redirect(s.extedit % sid)
  74. return
  75. end
  76. end
  77. o = s:option(DummyValue, "type", translate("Type"))
  78. function o.cfgvalue(...)
  79. return Value.cfgvalue(...) or ""
  80. end
  81. o = s:option(DummyValue, "alias", translate("Alias"))
  82. function o.cfgvalue(...)
  83. return Value.cfgvalue(...) or translate("None")
  84. end
  85. o = s:option(DummyValue, "server_port", translate("Server Port"))
  86. function o.cfgvalue(...)
  87. return Value.cfgvalue(...) or "N/A"
  88. end
  89. o = s:option(DummyValue, "server_port", translate("Socket Connected"))
  90. o.template="shadowsocksr/socket"
  91. o.width="10%"
  92. o = s:option(DummyValue, "server", translate("Ping Latency"))
  93. o.template="shadowsocksr/ping"
  94. o.width="10%"
  95. node = s:option(Button,"apply_node",translate("Apply"))
  96. node.inputstyle = "apply"
  97. node.write = function(self, section)
  98. uci:set("shadowsocksr", '@global[0]', 'global_server', section)
  99. uci:save("shadowsocksr")
  100. uci:commit("shadowsocksr")
  101. luci.sys.exec("/etc/init.d/shadowsocksr restart")
  102. luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "client"))
  103. end
  104. o = s:option(Flag, "switch_enable", translate("Auto Switch"))
  105. o.rmempty = false
  106. function o.cfgvalue(...)
  107. return Value.cfgvalue(...) or 1
  108. end
  109. m:append(Template("shadowsocksr/server_list"))
  110. return m