base.lua 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. require("luci.sys")
  2. require("luci.util")
  3. require("io")
  4. local m,s,o
  5. local fs=require"nixio.fs"
  6. local uci=require"luci.model.uci".cursor()
  7. local configpath=uci:get("AdGuardHome","AdGuardHome","configpath")
  8. if (configpath==nil) then
  9. configpath="/etc/AdGuardHome.yaml"
  10. end
  11. local binpath=uci:get("AdGuardHome","AdGuardHome","binpath")
  12. if (binpath==nil) then
  13. binpath="/usr/bin/AdGuardHome/AdGuardHome"
  14. end
  15. local httpport=luci.sys.exec("awk '/bind_port:/{printf($2);exit;}' "..configpath.." 2>/dev/null")
  16. if (httpport=="") then
  17. httpport=uci:get("AdGuardHome","AdGuardHome","httpport") or "3000"
  18. end
  19. m = Map("AdGuardHome", "AdGuard Home")
  20. m.description = translate("Free and open source, powerful network-wide ads & trackers blocking DNS server.")
  21. m:section(SimpleSection).template = "AdGuardHome/AdGuardHome_status"
  22. s = m:section(TypedSection, "AdGuardHome")
  23. s.anonymous=true
  24. s.addremove=false
  25. ---- enable
  26. o = s:option(Flag, "enabled", translate("Enable"))
  27. o.default = 0
  28. o.rmempty = false
  29. ---- httpport
  30. o =s:option(Value,"httpport",translate("Browser management port"))
  31. o.placeholder=3000
  32. o.default=3000
  33. o.datatype="port"
  34. o.rmempty=false
  35. o.description = translate("<input type=\"button\" style=\"width:210px;border-color:Teal; text-align:center;font-weight:bold;color:Green;\" value=\"AdGuardHome Web:"..httpport.."\" onclick=\"window.open('http://'+window.location.hostname+':"..httpport.."/')\"/>")
  36. ---- update warning not safe
  37. local version=uci:get("AdGuardHome","AdGuardHome","version")
  38. local e=""
  39. if not fs.access(configpath) then
  40. e=e.." no config"
  41. end
  42. if not fs.access(binpath) then
  43. e=e.." no bin"
  44. else
  45. if (version ~= nil) then
  46. e=version..e
  47. else
  48. e="unknown"..e
  49. end
  50. end
  51. o=s:option(Button,"restart",translate("Update"))
  52. o.inputtitle=translate("Update core version")
  53. o.template = "AdGuardHome/AdGuardHome_check"
  54. if fs.access(configpath) then
  55. o.showfastconfig=false
  56. else
  57. o.showfastconfig=true
  58. end
  59. o.description=string.format(translate("core version got last time:").."<strong><font id=\"updateversion\" color=\"green\">%s </font></strong>",e)
  60. ---- port warning not safe
  61. local port=luci.sys.exec("awk '/ port:/{printf($2);exit;}' "..configpath.." 2>nul")
  62. if (port=="") then
  63. port="?"
  64. end
  65. ---- Redirect
  66. o = s:option(ListValue, "redirect", port..translate("Redirect"), translate("AdGuardHome redirect mode"))
  67. o.placeholder = "none"
  68. o:value("none", translate("none"))
  69. o:value("dnsmasq-upstream", translate("Run as dnsmasq upstream server"))
  70. o:value("redirect", translate("Redirect 53 port to AdGuardHome"))
  71. o:value("exchange", translate("Use port 53 replace dnsmasq"))
  72. o.default = "none"
  73. ---- bin path
  74. o = s:option(Value, "binpath", translate("Bin Path"), translate("AdGuardHome Bin path if no bin will auto download"))
  75. o.default = "/usr/bin/AdGuardHome/AdGuardHome"
  76. o.datatype = "string"
  77. o.validate=function(self, value)
  78. if fs.stat(value,"type")=="dir" then
  79. m.message ="error!bin path is a dir"
  80. return nil
  81. end
  82. return value
  83. end
  84. --- upx
  85. o = s:option(ListValue, "upxflag", translate("use upx to compress bin after download"))
  86. o:value("", translate("none"))
  87. o:value("-1", translate("compress faster"))
  88. o:value("-9", translate("compress better"))
  89. o:value("--best", translate("compress best(can be slow for big files)"))
  90. o:value("--brute", translate("try all available compression methods & filters [slow]"))
  91. o:value("--ultra-brute", translate("try even more compression variants [very slow]"))
  92. o.default = ""
  93. o.description=translate("bin use less space,but may have compatibility issues")
  94. ---- config path
  95. o = s:option(Value, "configpath", translate("Config Path"), translate("AdGuardHome config path"))
  96. o.default = "/etc/AdGuardHome.yaml"
  97. o.datatype = "string"
  98. o.validate=function(self, value)
  99. if fs.stat(value,"type")=="dir" then
  100. m.message ="error!config path is a dir"
  101. return nil
  102. end
  103. return value
  104. end
  105. ---- work dir
  106. o = s:option(Value, "workdir", translate("Work dir"), translate("AdGuardHome work dir include rules,audit log and database"))
  107. o.default = "/usr/bin/AdGuardHome"
  108. o.datatype = "string"
  109. o.validate=function(self, value)
  110. if fs.stat(value,"type")=="reg" then
  111. m.message ="error!work dir is a file"
  112. return nil
  113. end
  114. return value
  115. end
  116. ---- log file
  117. o = s:option(Value, "logfile", translate("Runtime log file"), translate("AdGuardHome runtime Log file if 'syslog': write to system log;if empty no log"))
  118. o.default = ""
  119. o.datatype = "string"
  120. o.validate=function(self, value)
  121. if fs.stat(value,"type")=="dir" then
  122. m.message ="error!log file is a dir"
  123. return nil
  124. end
  125. return value
  126. end
  127. ---- debug
  128. o = s:option(Flag, "verbose", translate("Verbose log"))
  129. o.default = 0
  130. ---- gfwlist
  131. local a=luci.sys.call("grep -m 1 -q programadd "..configpath)
  132. if (a==0) then
  133. a="Added"
  134. else
  135. a="Not added"
  136. end
  137. o=s:option(Button,"gfwadd",translate("Add gfwlist"),translate(a))
  138. o.inputtitle=translate("Add")
  139. o.write=function()
  140. luci.sys.exec("sh /usr/share/AdGuardHome/gfw2adg.sh 2>&1")
  141. luci.http.redirect(luci.dispatcher.build_url("admin","services","AdGuardHome"))
  142. end
  143. o = s:option(Value, "gfwupstream", translate("Gfwlist upstream dns server"), translate("Gfwlist domain upstream dns service"))
  144. o.default = "tcp://208.67.220.220:5353"
  145. o.datatype = "string"
  146. ---- chpass
  147. o = s:option(Value, "hashpass", translate("Change browser management password"), translate("Press load culculate model and culculate finally save/apply"))
  148. o.default = ""
  149. o.datatype = "string"
  150. o.template = "AdGuardHome/AdGuardHome_chpass"
  151. ---- database protect
  152. o = s:option(Flag, "keepdb", translate("Keep database when system upgrade"))
  153. o.default = 0
  154. ---- wait net on boot
  155. o = s:option(Flag, "waitonboot", translate("Boot delay until network ok"))
  156. o.default = 1
  157. ---- backup workdir on shutdown
  158. o = s:option(Flag, "backupwd", translate("Backup workdir when shutdown"))
  159. o.default = 0
  160. o.description=translate("Will be restore when workdir/data is empty")
  161. ----backup workdir path
  162. o = s:option(Value, "backupwdpath", translate("Backup workdir path"))
  163. o.default = "/usr/bin/AdGuardHome"
  164. o.datatype = "string"
  165. o.validate=function(self, value)
  166. if fs.stat(value,"type")=="reg" then
  167. m.message ="error!backup dir is a file"
  168. return nil
  169. end
  170. return value
  171. end
  172. o = s:option(Flag, "autoupdate", translate("Auto update core with crontab"))
  173. o.default = 0
  174. fs.writefile("/var/run/lucilogpos","0")
  175. return m