mirror of
https://github.com/sirpdboy/sirpdboy-package.git
synced 2025-01-09 04:17:45 +08:00
opentopd 1.2.0
This commit is contained in:
parent
41caa9a1a0
commit
7eb6560792
237
luci-app-adguardhome/root/etc/AdGuardHome.yaml
Normal file
237
luci-app-adguardhome/root/etc/AdGuardHome.yaml
Normal file
@ -0,0 +1,237 @@
|
||||
bind_host: 0.0.0.0
|
||||
bind_port: 3000
|
||||
users:
|
||||
- name: admin
|
||||
password: $2y$10$vHRcARdPCieYG3RXWomV5evDYN.Nj/edtwEkQgQJZcK6z7qTLaIc6
|
||||
http_proxy: ""
|
||||
language: zh-cn
|
||||
rlimit_nofile: 0
|
||||
debug_pprof: false
|
||||
web_session_ttl: 720
|
||||
dns:
|
||||
bind_host: 0.0.0.0
|
||||
port: 5553
|
||||
statistics_interval: 1
|
||||
querylog_enabled: true
|
||||
querylog_file_enabled: true
|
||||
querylog_interval: 1
|
||||
querylog_size_memory: 1000
|
||||
anonymize_client_ip: false
|
||||
protection_enabled: true
|
||||
blocking_mode: default
|
||||
blocking_ipv4: ""
|
||||
blocking_ipv6: ""
|
||||
blocked_response_ttl: 60
|
||||
parental_block_host: family-block.dns.adguard.com
|
||||
safebrowsing_block_host: standard-block.dns.adguard.com
|
||||
ratelimit: 0
|
||||
ratelimit_whitelist: []
|
||||
refuse_any: true
|
||||
upstream_dns:
|
||||
- tls://1dot1dot1dot1.cloudflare-dns.com
|
||||
- tls://dns.google
|
||||
- https://cloudflare-dns.com/dns-query
|
||||
- https://1.0.0.1/dns-query
|
||||
- https://dns.adgk.net:4433/dns-query
|
||||
- https://esdns.kbsml.com/dns-query
|
||||
- tcp://8.8.4.4
|
||||
- 117.50.11.11
|
||||
- 117.50.22.22
|
||||
- 223.5.5.5
|
||||
- 208.67.222.222
|
||||
- 114.114.114.114
|
||||
- 180.76.76.76
|
||||
bootstrap_dns:
|
||||
- 119.29.29.29
|
||||
- 223.5.5.5
|
||||
- 114.114.114.114
|
||||
- 8.8.4.4:53
|
||||
- 1.0.0.1:53
|
||||
- 2620:fe::10
|
||||
- 2620:fe::fe:10
|
||||
all_servers: false
|
||||
fastest_addr: false
|
||||
allowed_clients: []
|
||||
disallowed_clients: []
|
||||
blocked_hosts: []
|
||||
cache_size: 1194304
|
||||
cache_ttl_min: 60
|
||||
cache_ttl_max: 86400
|
||||
bogus_nxdomain: []
|
||||
aaaa_disabled: true
|
||||
enable_dnssec: true
|
||||
edns_client_subnet: true
|
||||
filtering_enabled: true
|
||||
filters_update_interval: 24
|
||||
parental_enabled: false
|
||||
safesearch_enabled: false
|
||||
safebrowsing_enabled: false
|
||||
safebrowsing_cache_size: 1048576
|
||||
safesearch_cache_size: 1048576
|
||||
parental_cache_size: 1048576
|
||||
cache_time: 30
|
||||
rewrites: []
|
||||
blocked_services: []
|
||||
tls:
|
||||
enabled: false
|
||||
server_name: ""
|
||||
force_https: false
|
||||
port_https: 443
|
||||
port_dns_over_tls: 853
|
||||
allow_unencrypted_doh: false
|
||||
strict_sni_check: false
|
||||
certificate_chain: ""
|
||||
private_key: ""
|
||||
certificate_path: ""
|
||||
private_key_path: ""
|
||||
filters:
|
||||
- enabled: true
|
||||
url: https://adaway.org/hosts.txt
|
||||
name: Adaway HOST
|
||||
id: 139789111
|
||||
- enabled: true
|
||||
url: https://raw.githubusercontent.com/neodevpro/neodevhost/master/adblocker
|
||||
name: NEO DEV HOST
|
||||
id: 139789112
|
||||
- enabled: true
|
||||
url: https://banbendalao.coding.net/p/adgk/d/ADgk/git/raw/master/ADgk.txt
|
||||
name: adgk手机去广告规则
|
||||
id: 139789121
|
||||
- enabled: true
|
||||
url: https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD@master/anti-ad-easylist.txt
|
||||
name: anti-AD命中率最高列表
|
||||
id: 139789122
|
||||
- enabled: true
|
||||
url: https://gitee.com/halflife/list/raw/master/ad.txt
|
||||
name: halflife合并乘风
|
||||
id: 139789131
|
||||
- enabled: true
|
||||
url: https://easylist.to/easylist/easyprivacy.txt
|
||||
name: EasyPrivacy隐私相关
|
||||
id: 139789132
|
||||
- enabled: true
|
||||
url: https://www.i-dont-care-about-cookies.eu/abp/
|
||||
name: I don't care about cookies隐私相关
|
||||
id: 139789133
|
||||
- enabled: true
|
||||
url: https://gitee.com/cjx82630/cjxlist/raw/master/cjx-ublock.txt
|
||||
name: CJX's uBlock list隐私相关
|
||||
id: 139789141
|
||||
- enabled: false
|
||||
url: https://gitee.com/xinggsf/Adblock-Rule/raw/master/rule.txt
|
||||
name: 乘风 广告过滤规则
|
||||
id: 139789142
|
||||
- enabled: false
|
||||
url: https://gitee.com/xinggsf/Adblock-Rule/raw/master/mv.txt
|
||||
name: 乘风 视频广告过滤规则
|
||||
id: 139789143
|
||||
- enabled: false
|
||||
url: https://raw.githubusercontent.com/Goooler/1024_hosts/master/hosts
|
||||
name: 1024host
|
||||
id: 139789151
|
||||
- enabled: false
|
||||
url: https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext
|
||||
name: Peter Lowe’s Ad and tracking server list
|
||||
id: 139789152
|
||||
- enabled: false
|
||||
url: https://easylist.to/easylist/fanboy-social.txt
|
||||
name: Fanboy's Social Blocking List
|
||||
id: 139789153
|
||||
- enabled: false
|
||||
url: https://easylist.to/easylist/fanboy-annoyance.txt
|
||||
name: Fanboy's Annoyance List
|
||||
id: 139789154
|
||||
- enabled: false
|
||||
url: https://secure.fanboy.co.nz/fanboy-cookiemonster.txt
|
||||
name: EasyList Cookie List
|
||||
id: 139789155
|
||||
- enabled: false
|
||||
url: https://fanboy.co.nz/fanboy-antifacebook.txt
|
||||
name: Anti-Facebook List
|
||||
id: 139789161
|
||||
- enabled: false
|
||||
url: https://filters.adtidy.org/extension/ublock/filters/14.txt
|
||||
name: AdGuard Annoyances filter
|
||||
id: 139789162
|
||||
- enabled: false
|
||||
url: https://www.malwaredomainlist.com/hostslist/hosts.txt
|
||||
name: MalwareDomainList.com Hosts List
|
||||
id: 139789163
|
||||
- enabled: false
|
||||
url: https://www.fanboy.co.nz/enhancedstats.txt
|
||||
name: Fanboy's Enhanced Tracking List
|
||||
id: 139789164
|
||||
- enabled: false
|
||||
url: https://filters.adtidy.org/extension/ublock/filters/3.txt
|
||||
name: AdGuard Tracking Protection filter
|
||||
id: 139789165
|
||||
- enabled: false
|
||||
url: https://easylist.to/easylist/easylist.txt
|
||||
name: EasyList
|
||||
id: 139789171
|
||||
- enabled: false
|
||||
url: https://filters.adtidy.org/extension/ublock/filters/11.txt
|
||||
name: AdGuard Mobile Ads filter
|
||||
id: 139789172
|
||||
- enabled: false
|
||||
url: https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt
|
||||
name: AdGuard Base filter
|
||||
id: 139789173
|
||||
- enabled: false
|
||||
url: https://easylist-downloads.adblockplus.org/antiadblockfilters.txt
|
||||
name: Adblock Warning Removal List
|
||||
id: 139789174
|
||||
- enabled: false
|
||||
url: https://fanboy.co.nz/fanboy-problematic-sites.txt
|
||||
name: Fanboy's problematic-sites
|
||||
id: 139789175
|
||||
- enabled: false
|
||||
url: http://sub.adtchrome.com/adt-chinalist-easylist.txt
|
||||
name: ChinaList+EasyList(修正)
|
||||
id: 139789181
|
||||
- enabled: false
|
||||
url: https://raw.githubusercontent.com/adbyby/xwhyc-rules/master/lazy.txt
|
||||
name: Adbyby Lazy Rule
|
||||
id: 139789182
|
||||
- enabled: false
|
||||
url: https://raw.githubusercontent.com/VeleSila/yhosts/master/hosts.txt
|
||||
name: hosts
|
||||
id: 139789183
|
||||
- enabled: false
|
||||
url: https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-notubo.txt
|
||||
name: aak-cont-list-notubo
|
||||
id: 139789184
|
||||
whitelist_filters: []
|
||||
user_rules:
|
||||
- '@@||jd.com^important'
|
||||
- '@@||flyme.cn^$important'
|
||||
- '@@||meizu.com^$important'
|
||||
- '@@||wl.jd.com^$important'
|
||||
- '@@||flydigi.com^'
|
||||
- '@@||pv.sohu.com^$important'
|
||||
- /googleads.$~script,domain=~googleads.github.io
|
||||
- /pagead/lvz?
|
||||
- '||google.com/pagead/'
|
||||
- '||static.doubleclick.net^$domain=youtube.com'
|
||||
- '||youtube.com/get_midroll_'
|
||||
- '@@||g.live.com^$important'
|
||||
- '@@||s.click.taobao.com^$important'
|
||||
- '@@||ipassport.ele.me^$important'
|
||||
dhcp:
|
||||
enabled: false
|
||||
interface_name: ""
|
||||
gateway_ip: ""
|
||||
subnet_mask: ""
|
||||
range_start: ""
|
||||
range_end: ""
|
||||
lease_duration: 86400
|
||||
icmp_timeout_msec: 1000
|
||||
clients: []
|
||||
log_compress: false
|
||||
log_localtime: false
|
||||
log_max_backups: 0
|
||||
log_max_size: 100
|
||||
log_max_age: 3
|
||||
log_file: ""
|
||||
verbose: false
|
||||
schema_version: 6
|
15
luci-app-dnspod/Makefile
Normal file
15
luci-app-dnspod/Makefile
Normal file
@ -0,0 +1,15 @@
|
||||
#
|
||||
#-- Copyright (C) 2019 dz <dingzhong110@gmail.com>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI Support for Auto DNS for dnspod
|
||||
LUCI_DEPENDS:= +bash +curl
|
||||
PKG_VERSION:=1.14
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
14
luci-app-dnspod/luasrc/controller/dnspod.lua
Normal file
14
luci-app-dnspod/luasrc/controller/dnspod.lua
Normal file
@ -0,0 +1,14 @@
|
||||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
#
|
||||
#-- Copyright (C) 2019 dz <dingzhong110@gmail.com>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
]]--
|
||||
module("luci.controller.dnspod", package.seeall)
|
||||
|
||||
function index()
|
||||
entry({"admin", "network", "dnspod"}, cbi("dnspod"), _("动态DNSPOD"), 59)
|
||||
end
|
135
luci-app-dnspod/luasrc/model/cbi/dnspod.lua
Normal file
135
luci-app-dnspod/luasrc/model/cbi/dnspod.lua
Normal file
@ -0,0 +1,135 @@
|
||||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
#
|
||||
#-- Copyright (C) 2019 dz <dingzhong110@gmail.com>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
]]--
|
||||
|
||||
require("luci.sys")
|
||||
|
||||
if luci.sys.call("ps -w | grep ddnspod |grep -v grep >/dev/null") == 0 then
|
||||
m = Map("dnspod", translate("动态DNSPOD"), "%s - %s" %{translate("DDNSPOD"), translate("<strong><font color=\"green\">Running</font></strong>")})
|
||||
else
|
||||
m = Map("dnspod", translate("动态DNSPOD"), "%s - %s" %{translate("DDNSPOD"), translate("<strong><font color=\"red\">Not Running</font></strong>")})
|
||||
end
|
||||
|
||||
------------------------------------------------------------
|
||||
s = m:section(TypedSection, "base_arg", translate("基本设置"))
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
enable = s:option(Flag, "enabled", translate("Enable"), translate("Enable or disable server"))
|
||||
enable.default = 0
|
||||
enable.rmempty = false
|
||||
|
||||
o = s:option(Value,"time",translate("Inspection Time"),translate("域名检查间隔时间,单位秒"))
|
||||
o.default = 600
|
||||
o.rmempty=false
|
||||
|
||||
o = s:option(Button,"delete",translate("删除全部域名记录"))
|
||||
o.inputstyle = "reset"
|
||||
o.write = function()
|
||||
luci.sys.call("cat /dev/null > /usr/share/dnspod/last.ip")
|
||||
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnspod"))
|
||||
end
|
||||
|
||||
------------------------------------------------------------
|
||||
s = m:section(TypedSection, "ip_last", translate("ip获取设置"))
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
o = s:option(ListValue, "IPtype", translate("ip获取途径"))
|
||||
o:value("1", translate("网络获取一"))
|
||||
o:value("2", translate("网络获取二"))
|
||||
o:value("3", translate("网络获取三"))
|
||||
o:value("4", translate("网络获取四"))
|
||||
o:value("5", translate("本地获取"))
|
||||
o.default = 1
|
||||
|
||||
o = s:option(Value, "iface", translate("选择接口"))
|
||||
o:value("wan", translate("WAN"))
|
||||
o:value("lan", translate("LAN"))
|
||||
o.default = "wan"
|
||||
o:depends("IPtype", "5")
|
||||
|
||||
o = s:option(Value, "ipv6iface", translate("ipv6选择接口"))
|
||||
o:value("wan", translate("WAN"))
|
||||
o:value("lan", translate("LAN"))
|
||||
o.default = "lan"
|
||||
o:depends("IPtype", "5")
|
||||
|
||||
o = s:option(Value, "linenumber", translate("ipv6选择"))
|
||||
o:value("1p", translate("第一行"))
|
||||
o:value("2p", translate("第二行"))
|
||||
o:value("3p", translate("第三行"))
|
||||
o:value("4p", translate("第四行"))
|
||||
o:value("5p", translate("第五行"))
|
||||
o:value("6p", translate("第六行"))
|
||||
o.default = "2p"
|
||||
o:depends("IPtype", "5")
|
||||
|
||||
------------------------------------------------------------
|
||||
s = m:section(TypedSection, "login_mode", translate("账号设置"))
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
o = s:option(ListValue, "mode", translate("解析模式"))
|
||||
o:value("login", translate("账号解析"))
|
||||
o:value("token", translate("token解析"))
|
||||
|
||||
email = s:option(Value, "login_email", translate("登录邮箱"),"登录DNSPOD的用户名")
|
||||
email:depends("mode", "login")
|
||||
pass = s:option(Value, "login_password", translate("登录密码"),"登录DNSPOD的密码")
|
||||
pass.password=true
|
||||
pass:depends("mode", "login")
|
||||
|
||||
token = s:option(Value, "artoken", translate("ID,TOKEN"))
|
||||
token:depends("mode", "token")
|
||||
|
||||
-----------------------------------------------------------
|
||||
|
||||
s = m:section(TypedSection, "domain_name", translate("域名"))
|
||||
s.template = "cbi/tblsection"
|
||||
s.anonymous = true
|
||||
s.addremove = true
|
||||
s.sortable = true
|
||||
|
||||
record_type = s:option(ListValue, "record_type", translate("记录类型"),"A,AAAA")
|
||||
record_type:value("A", translate("A"))
|
||||
record_type:value("AAAA", translate("AAAA"))
|
||||
|
||||
sub = s:option(Value, "sub_domain", translate("子域名"),"想要解析的子域名,例如:www")
|
||||
|
||||
main = s:option(Value, "main_domain", translate("主域名"),"想要解析的主域名,例如:baidu.com")
|
||||
|
||||
comment = s:option(Value, "comment", translate("Comment"))
|
||||
|
||||
-------------------------------------------------------
|
||||
s=m:section(TypedSection,"base",translate("Update Log"))
|
||||
s.anonymous=true
|
||||
local a="/var/log/ddnspod.log"
|
||||
tvlog=s:option(TextValue,"sylogtext")
|
||||
tvlog.rows=16
|
||||
tvlog.readonly="readonly"
|
||||
tvlog.wrap="off"
|
||||
|
||||
function tvlog.cfgvalue(s,s)
|
||||
sylogtext=""
|
||||
if a and nixio.fs.access(a) then
|
||||
sylogtext=luci.sys.exec("tail -n 100 %s"%a)
|
||||
end
|
||||
return sylogtext
|
||||
end
|
||||
|
||||
tvlog.write=function(s,s,s)
|
||||
end
|
||||
|
||||
local apply = luci.http.formvalue("cbi.apply")
|
||||
if apply then
|
||||
io.popen("/etc/init.d/dnspod restart &")
|
||||
end
|
||||
|
||||
return m
|
6
luci-app-dnspod/po/zh-cn/dnspod.po
Normal file
6
luci-app-dnspod/po/zh-cn/dnspod.po
Normal file
@ -0,0 +1,6 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
msgid "Enable or disable server"
|
||||
msgstr "启用或禁用服务"
|
||||
|
25
luci-app-dnspod/root/etc/config/dnspod
Normal file
25
luci-app-dnspod/root/etc/config/dnspod
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
config base_arg 'base_arg'
|
||||
option enabled '0'
|
||||
option time '600'
|
||||
|
||||
config domain_name
|
||||
option record_type 'AAAA'
|
||||
option sub_domain 'ipv6'
|
||||
option main_domain '12345.xyz'
|
||||
|
||||
config domain_name
|
||||
option record_type 'A'
|
||||
option sub_domain 'www'
|
||||
option main_domain '12345.xyz'
|
||||
|
||||
config ip_last
|
||||
option ip_all '2'
|
||||
option IPtype '1'
|
||||
|
||||
config login_mode
|
||||
option mode 'token'
|
||||
option artoken '12424,532453245345b2301e22bca69b1f06ef55'
|
||||
|
||||
config base
|
||||
|
70
luci-app-dnspod/root/etc/init.d/dnspod
Normal file
70
luci-app-dnspod/root/etc/init.d/dnspod
Normal file
@ -0,0 +1,70 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
START=80
|
||||
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
|
||||
logfile="/var/log/ddnspod.log"
|
||||
|
||||
uci_get_by_name() {
|
||||
local ret=$(uci get dnspod.$1.$2 2>/dev/null)
|
||||
echo ${ret:=$3}
|
||||
}
|
||||
|
||||
start(){
|
||||
enable=$(uci get dnspod.base_arg.enabled 2>/dev/null)
|
||||
if [ $enable -eq 1 ]; then
|
||||
sleeptime=$(uci get dnspod.base_arg.time 2>/dev/null)
|
||||
icount=`ps -w | grep ddnspod.sh |grep -v grep| wc -l`
|
||||
if [ $icount = 1 ] ;then
|
||||
kill -9 $(ps | grep ddnspod.sh | grep -v "grep" | awk '{print $1}') >/dev/null 2>&1
|
||||
cat /dev/null > /var/log/ddnspod.log
|
||||
cat /dev/null > /var/log/ddnspod1.log
|
||||
cat /dev/null > /usr/share/dnspod/dns.conf
|
||||
fi
|
||||
local login_email=$(uci get dnspod.@login_mode[0].login_email 2>/dev/null)
|
||||
local login_password=$(uci get dnspod.@login_mode[0].login_password 2>/dev/null)
|
||||
local artoken=$(uci get dnspod.@login_mode[0].artoken 2>/dev/null)
|
||||
rm -f /usr/share/dnspod/dns.conf
|
||||
|
||||
cat >>/usr/share/dnspod/dns.conf <<EOF
|
||||
# For security reasons, it is recommended that you use token-based auth instead
|
||||
arMail="$login_email"
|
||||
arPass="$login_password"
|
||||
|
||||
# Combine your token ID and token together as follows
|
||||
arToken="$artoken"
|
||||
|
||||
# Place each domain you want to check as follows
|
||||
# you can have multiple arDdnsCheck blocks
|
||||
EOF
|
||||
|
||||
for arDdnsCheck in $(uci -X show dnspod | grep domain_name | awk -F'[.=]' '{print $2}'); do
|
||||
local main_domain=$(uci_get_by_name $arDdnsCheck main_domain)
|
||||
local sub_domain=$(uci_get_by_name $arDdnsCheck sub_domain)
|
||||
local record_type=$(uci_get_by_name $arDdnsCheck record_type)
|
||||
|
||||
cat >>/usr/share/dnspod/dns.conf <<EOF
|
||||
arDdnsCheck "$main_domain" "$sub_domain" "$record_type"
|
||||
EOF
|
||||
|
||||
done
|
||||
sleep 2
|
||||
bash /usr/share/dnspod/ddnspod.sh >> /var/log/ddnspod1.log 2>&1 &
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") >>>>>>>>正在运行:检查更新DNS记录间隔时间为${sleeptime}秒<<<<<<<<" >> ${logfile}
|
||||
|
||||
#nohup /usr/share/dnspod/ddnspod.sh > /var/log/ddnspod.log 2>&1 &
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
stop()
|
||||
{
|
||||
enable=$(uci get dnspod.base_arg.enabled 2>/dev/null)
|
||||
if [ $enable -ne 1 ]; then
|
||||
kill -9 $(ps | grep ddnspod.sh | grep -v "grep" | awk '{print $1}') >/dev/null 2>&1
|
||||
kill $(ps -w | grep ddnspod |grep -v grep) >/dev/null 2>&1
|
||||
cat /dev/null > /var/log/ddnspod1.log
|
||||
cat /dev/null > /usr/share/dnspod/dns.conf
|
||||
cat /dev/null > /var/log/ddnspod.log && echo "$(date "+%Y-%m-%d %H:%M:%S") >>>>>>>>停止运行:DNS记录以保存<<<<<<<<" >> ${logfile}
|
||||
fi
|
||||
}
|
14
luci-app-dnspod/root/etc/uci-defaults/luci-dnspod
Normal file
14
luci-app-dnspod/root/etc/uci-defaults/luci-dnspod
Normal file
@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@dnspod[-1]
|
||||
add ucitrack dnspod
|
||||
set ucitrack.@dnspod[-1].init=dnspod
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
|
||||
/etc/init.d/dnspod stop
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
exit 0
|
357
luci-app-dnspod/root/usr/share/dnspod/ddnspod.sh
Normal file
357
luci-app-dnspod/root/usr/share/dnspod/ddnspod.sh
Normal file
@ -0,0 +1,357 @@
|
||||
#!/bin/bash
|
||||
|
||||
#################################################
|
||||
# AnripDdns v5.08
|
||||
# Dynamic DNS using DNSPod API
|
||||
# Original by anrip<mail@anrip.com>, http://www.anrip.com/ddnspod
|
||||
# Edited by ProfFan
|
||||
# Edited by dz
|
||||
#################################################
|
||||
enable=1
|
||||
sleeptime=60
|
||||
ip_mode=2
|
||||
WanIp=""
|
||||
LastIpFile=/usr/share/dnspod/last.ip
|
||||
logfile="/var/log/ddnspod.log"
|
||||
sleeptime=$(uci get dnspod.base_arg.time 2>/dev/null)
|
||||
enable=$(uci get dnspod.base_arg.enabled 2>/dev/null)
|
||||
IPtype=$(uci get dnspod.@ip_last[0].IPtype 2>/dev/null)
|
||||
iface=$(uci get dnspod.@ip_last[0].iface 2>/dev/null)
|
||||
ipv6iface=$(uci get dnspod.@ip_last[0].ipv6iface 2>/dev/null)
|
||||
linenumber=$(uci get dnspod.@ip_last[0].linenumber 2>/dev/null)
|
||||
|
||||
clean_log(){
|
||||
logrow=$(grep -c "" ${logfile})
|
||||
if [ $logrow -ge 100 ];then
|
||||
cat /dev/null > ${logfile}
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") Log条数超限,清空处理!" >> ${logfile}
|
||||
fi
|
||||
|
||||
logrow1=$(grep -c "" ${logfile1})
|
||||
if [ $logrow1 -ge 300 ];then
|
||||
cat /dev/null > ${logfile1}
|
||||
echo "Log条数超限,清空处理!" >> ${logfile1}
|
||||
fi
|
||||
}
|
||||
|
||||
while [ "$enable" = "1" ];
|
||||
do
|
||||
|
||||
clean_log
|
||||
|
||||
function getPublicIp() {
|
||||
record_type=$record_type
|
||||
if [ $record_type = 'AAAA' ]; then
|
||||
case $IPtype in
|
||||
'1')
|
||||
WanIp=`curl -6 -s 'https://api.myip.com' | grep ip |sed 's/.*ip":"\([^"]*\)".*/\1/g'`
|
||||
echo $WanIp
|
||||
;;
|
||||
'2')
|
||||
WanIp=`curl -6 -s 'http://ip-api.com/json/?fields=query' | grep query |sed 's/.*query":"\([^"]*\)".*/\1/g'`
|
||||
echo $WanIp
|
||||
;;
|
||||
'3')
|
||||
WanIp=`curl -6 -s 'https://ipapi.co/ip/'`
|
||||
echo $WanIp
|
||||
;;
|
||||
'4')
|
||||
WanIp=`curl -6 -s 'https://ifconfig.co'`
|
||||
echo $WanIp
|
||||
;;
|
||||
'5')
|
||||
WanIp=`ubus call network.interface.$ipv6iface status | grep '"address"' | grep -oE '([a-f0-9]{1,4}(:[a-f0-9]{1,4}){7}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){0,7}::[a-f0-9]{0,4}(:[a-f0-9]{1,4}){0,7})' |sed -n ''$linenumber''`
|
||||
echo $WanIp
|
||||
;;
|
||||
'6')
|
||||
WanIp=`curl -6 -s 'https://ip6.seeip.org'`
|
||||
echo $WanIp
|
||||
;;
|
||||
esac
|
||||
|
||||
else
|
||||
|
||||
case $IPtype in
|
||||
'1')
|
||||
#WanIp=`curl -4 -s 'https://api.myip.com' | grep ip |sed 's/.*ip":"\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)".*/\1/g'`
|
||||
WanIp=`curl -sL --connect-timeout 3 14.215.150.17:6666`
|
||||
echo $WanIp
|
||||
;;
|
||||
'2')
|
||||
#WanIp=`curl -4 -s 'http://ip-api.com/json/?fields=query' | grep query |sed 's/.*query":"\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)".*/\1/g'`
|
||||
WanIp=`curl -sL --connect-timeout 3 members.3322.org/dyndns/getip`
|
||||
echo $WanIp
|
||||
;;
|
||||
'3')
|
||||
WanIp=`curl -4 -s 'https://ipapi.co/ip/'`
|
||||
echo $WanIp
|
||||
;;
|
||||
'4')
|
||||
WanIp=`curl -4 -s 'https://ifconfig.co'`
|
||||
echo $WanIp
|
||||
;;
|
||||
'5')
|
||||
WanIp=`ubus call network.interface.$iface status | grep '"address"' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'`
|
||||
echo $WanIp
|
||||
;;
|
||||
'6')
|
||||
WanIp=`curl -4 -s 'https://ip4.seeip.org'`
|
||||
echo $WanIp
|
||||
;;
|
||||
esac
|
||||
|
||||
fi
|
||||
|
||||
|
||||
}
|
||||
|
||||
# OS Detection
|
||||
case $(uname) in
|
||||
'Linux')
|
||||
echo "Linux"
|
||||
arIpAddress() {
|
||||
# local extip
|
||||
# extip=$(ip -o -4 addr list | grep -Ev '\s(docker|lo)' | awk '{print $4}' | cut -d/ -f1 | grep -Ev '(^127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^172\.1[6-9]{1}[0-9]{0,1}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^172\.2[0-9]{1}[0-9]{0,1}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^172\.3[0-1]{1}[0-9]{0,1}\.[0-9]{1,3}\.[0-9]{1,3}$)|(^192\.168\.[0-9]{1,3}\.[0-9]{1,3}$)')
|
||||
# if [ "x${extip}" = "x" ]; then
|
||||
# extip=$(ip -o -4 addr list | grep -Ev '\s(docker|lo)' | awk '{print $4}' | cut -d/ -f1 )
|
||||
# fi
|
||||
# echo $extip
|
||||
|
||||
if [ "x${WanIp}" = "x" ]; then
|
||||
WanIp=$(getPublicIp)
|
||||
fi
|
||||
|
||||
if [ "x${WanIp}" = "x" ]; then
|
||||
IPtype="1"
|
||||
WanIp=$(getPublicIp)
|
||||
fi
|
||||
|
||||
if [ "x${WanIp}" = "x" ]; then
|
||||
IPtype="2"
|
||||
WanIp=$(getPublicIp)
|
||||
fi
|
||||
|
||||
if [ "x${WanIp}" = "x" ]; then
|
||||
IPtype="3"
|
||||
WanIp=$(getPublicIp)
|
||||
fi
|
||||
|
||||
if [ "x${WanIp}" = "x" ]; then
|
||||
IPtype="4"
|
||||
WanIp=$(getPublicIp)
|
||||
fi
|
||||
|
||||
if [ "x${WanIp}" = "x" ]; then
|
||||
IPtype="6"
|
||||
WanIp=$(getPublicIp)
|
||||
fi
|
||||
|
||||
|
||||
echo $WanIp
|
||||
}
|
||||
;;
|
||||
'FreeBSD')
|
||||
echo 'FreeBSD'
|
||||
exit 100
|
||||
;;
|
||||
'WindowsNT')
|
||||
echo "Windows"
|
||||
exit 100
|
||||
;;
|
||||
'Darwin')
|
||||
echo "Mac"
|
||||
arIpAddress() {
|
||||
ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
|
||||
}
|
||||
;;
|
||||
'SunOS')
|
||||
echo 'Solaris'
|
||||
exit 100
|
||||
;;
|
||||
'AIX')
|
||||
echo 'AIX'
|
||||
exit 100
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
# Get script dir
|
||||
# See: http://stackoverflow.com/a/29835459/4449544
|
||||
rreadlink() ( # Execute the function in a *subshell* to localize variables and the effect of `cd`.
|
||||
|
||||
target=$1 fname= targetDir= CDPATH=
|
||||
|
||||
# Try to make the execution environment as predictable as possible:
|
||||
# All commands below are invoked via `command`, so we must make sure that `command`
|
||||
# itself is not redefined as an alias or shell function.
|
||||
# (Note that command is too inconsistent across shells, so we don't use it.)
|
||||
# `command` is a *builtin* in bash, dash, ksh, zsh, and some platforms do not even have
|
||||
# an external utility version of it (e.g, Ubuntu).
|
||||
# `command` bypasses aliases and shell functions and also finds builtins
|
||||
# in bash, dash, and ksh. In zsh, option POSIX_BUILTINS must be turned on for that
|
||||
# to happen.
|
||||
{ \unalias command; \unset -f command; } >/dev/null 2>&1
|
||||
[ -n "$ZSH_VERSION" ] && options[POSIX_BUILTINS]=on # make zsh find *builtins* with `command` too.
|
||||
|
||||
while :; do # Resolve potential symlinks until the ultimate target is found.
|
||||
[ -L "$target" ] || [ -e "$target" ] || { command printf '%s\n' "ERROR: '$target' does not exist." >&2; return 1; }
|
||||
command cd "$(command dirname -- "$target")" # Change to target dir; necessary for correct resolution of target path.
|
||||
fname=$(command basename -- "$target") # Extract filename.
|
||||
[ "$fname" = '/' ] && fname='' # !! curiously, `basename /` returns '/'
|
||||
if [ -L "$fname" ]; then
|
||||
# Extract [next] target path, which may be defined
|
||||
# *relative* to the symlink's own directory.
|
||||
# Note: We parse `ls -l` output to find the symlink target
|
||||
# which is the only POSIX-compliant, albeit somewhat fragile, way.
|
||||
target=$(command ls -l "$fname")
|
||||
target=${target#* -> }
|
||||
continue # Resolve [next] symlink target.
|
||||
fi
|
||||
break # Ultimate target reached.
|
||||
done
|
||||
targetDir=$(command pwd -P) # Get canonical dir. path
|
||||
# Output the ultimate target's canonical path.
|
||||
# Note that we manually resolve paths ending in /. and /.. to make sure we have a normalized path.
|
||||
if [ "$fname" = '.' ]; then
|
||||
command printf '%s\n' "${targetDir%/}"
|
||||
elif [ "$fname" = '..' ]; then
|
||||
# Caveat: something like /var/.. will resolve to /private (assuming /var@ -> /private/var), i.e. the '..' is applied
|
||||
# AFTER canonicalization.
|
||||
command printf '%s\n' "$(command dirname -- "${targetDir}")"
|
||||
else
|
||||
command printf '%s\n' "${targetDir%/}/$fname"
|
||||
fi
|
||||
)
|
||||
|
||||
DIR=$(dirname -- "$(rreadlink "$0")")
|
||||
|
||||
# Global Variables:
|
||||
|
||||
# Token-based Authentication
|
||||
arToken=""
|
||||
# Account-based Authentication
|
||||
arMail=""
|
||||
arPass=""
|
||||
|
||||
# Load config
|
||||
|
||||
#. $DIR/dns.conf
|
||||
|
||||
# Get Domain IP
|
||||
# arg: domain
|
||||
arNslookup() {
|
||||
#wget --quiet --output-document=- $inter$1
|
||||
if [ ! -f $LastIpFile ]; then
|
||||
echo ""
|
||||
return
|
||||
fi
|
||||
|
||||
cat $LastIpFile | grep $1 | awk '{print $2}'
|
||||
}
|
||||
|
||||
# Get data
|
||||
# arg: type data
|
||||
arApiPost() {
|
||||
local inter="https://dnsapi.cn/${1:?'Info.Version'}"
|
||||
if [ "x${arToken}" = "x" ]; then # undefine token
|
||||
local param="login_email=${arMail}&login_password=${arPass}&format=json&${2}"
|
||||
else
|
||||
local param="login_token=${arToken}&format=json&${2}"
|
||||
fi
|
||||
curl -s -k -X POST $inter -d $param
|
||||
}
|
||||
|
||||
# Update
|
||||
# arg: main domain sub domain
|
||||
arDdnsUpdate() {
|
||||
local domainID recordID recordRS recordCD myIP
|
||||
# Get domain ID
|
||||
domainID=$(arApiPost "Domain.Info" "domain=${1}")
|
||||
domainID=$(echo $domainID | sed 's/.*{"id":"\([0-9]*\)".*/\1/')
|
||||
|
||||
# Update IP
|
||||
arIpAddress
|
||||
myIP=$(arIpAddress)
|
||||
|
||||
if echo $myIP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; then
|
||||
post_type="Record.Ddns"
|
||||
record_types="A"
|
||||
else
|
||||
post_type="Record.Modify"
|
||||
record_types="AAAA"
|
||||
fi
|
||||
|
||||
# Get Record ID
|
||||
recordID=$(arApiPost "Record.List" "domain_id=${domainID}&sub_domain=${2}&record_type=${record_types}&record_line=默认")
|
||||
recordID=$(echo $recordID | sed 's/.*\[{"id":"\([0-9]*\)".*/\1/')
|
||||
|
||||
recordRS=$(arApiPost "$post_type" "domain_id=${domainID}&record_id=${recordID}&sub_domain=${2}&record_type=${record_types}&value=${myIP}&record_line=默认")
|
||||
recordCD=$(echo $recordRS | sed 's/.*{"code":"\([0-9]*\)".*/\1/')
|
||||
|
||||
# Output IP
|
||||
if [ "$recordCD" = "1" ]; then
|
||||
echo $recordRS | sed 's/.*,"value":"\([^"]*\)".*/\1/'
|
||||
return 1
|
||||
fi
|
||||
# Echo error message
|
||||
echo $recordRS | sed 's/.*,"message":"\([^"]*\)".*/\1/'
|
||||
|
||||
}
|
||||
|
||||
# DDNS Check
|
||||
# Arg: Main Sub
|
||||
arDdnsCheck() {
|
||||
record_type=${3}
|
||||
#arIpAddress
|
||||
|
||||
local postRS
|
||||
local hostIP=$(arIpAddress)
|
||||
local lastIP=$(arNslookup "${3}-${2}.${1}")
|
||||
echo "domain name: ${2}.${1}"
|
||||
echo "hostIP: ${3} ${hostIP}"
|
||||
echo "lastIP: ${3} ${lastIP}"
|
||||
if [ "$lastIP" != "$hostIP" ]; then
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") 域名: ${2}.${1} 记录类型: ${3}" >> ${logfile}
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") 当前IP: ${hostIP}" >> ${logfile}
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") 记录IP: ${lastIP}" >> ${logfile}
|
||||
echo "--- Update last.ip"
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") 更新域名记录" >> ${logfile}
|
||||
if [ -f $LastIpFile ]
|
||||
then
|
||||
grep -v "${3}-${2}.${1}" $LastIpFile > $LastIpFile.bak
|
||||
fi
|
||||
echo "${3}-${2}.${1} ${hostIP}" >> $LastIpFile.bak
|
||||
mv $LastIpFile.bak $LastIpFile
|
||||
|
||||
echo "--- Update dns zone"
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") 更新DNS日志" >> ${logfile}
|
||||
postRS=$(arDdnsUpdate $1 $2)
|
||||
echo "postRS: ${postRS}"
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") 输出记录: ${postRS}" >> ${logfile}
|
||||
sleep 2
|
||||
echo "$(date "+%Y-%m-%d %H:%M:%S") >>>>>>>>正在运行:检查更新DNS记录间隔时间为${sleeptime}秒<<<<<<<<" >> ${logfile}
|
||||
if [ $? -ne 1 ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# DDNS
|
||||
#echo ${#domains[@]}
|
||||
#for index in ${!domains[@]}; do
|
||||
# echo "${domains[index]} ${subdomains[index]}"
|
||||
# arDdnsCheck "${domains[index]}" "${subdomains[index]}"
|
||||
#done
|
||||
|
||||
date
|
||||
. $DIR/dns.conf
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo ""
|
||||
echo "+++++++++++++++++++++++++++"
|
||||
|
||||
sleep ${sleeptime}
|
||||
continue
|
||||
done
|
12
luci-app-dnspod/root/usr/share/dnspod/dns.conf
Normal file
12
luci-app-dnspod/root/usr/share/dnspod/dns.conf
Normal file
@ -0,0 +1,12 @@
|
||||
# For security reasons, it is recommended that you use token-based auth instead
|
||||
# arMail=""
|
||||
# arPass=""
|
||||
|
||||
# Combine your token ID and token together as follows
|
||||
arToken="6541626156242"
|
||||
|
||||
# Place each domain you want to check as follows
|
||||
# you can have multiple arDdnsCheck blocks
|
||||
arDdnsCheck "1" "11"
|
||||
arDdnsCheck "2" "22"
|
||||
arDdnsCheck "3" "33"
|
@ -11,7 +11,7 @@ THEME_NAME:=opentopd
|
||||
THEME_TITLE:=opentopd Theme
|
||||
|
||||
PKG_NAME:=luci-theme-$(THEME_NAME)
|
||||
PKG_VERSION:=1.1.9
|
||||
PKG_VERSION:=1.2.0
|
||||
PKG_RELEASE:=20201007
|
||||
|
||||
|
||||
@ -19,4 +19,12 @@ include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
|
||||
define Package/luci-theme-opentopd/postinst
|
||||
#!/bin/sh
|
||||
rm -Rf /var/luci-modulecache
|
||||
rm -Rf /var/luci-indexcache
|
||||
exit 0
|
||||
endef
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
@ -48,8 +48,10 @@
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-expand_more:before {
|
||||
content: "\e20b";
|
||||
|
||||
|
||||
.icon-expand_more:before{
|
||||
content: "\e20b";
|
||||
}
|
||||
|
||||
.icon-menu:before {
|
||||
|
@ -177,6 +177,7 @@ hr {
|
||||
border-color: #EEE;
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
.main {
|
||||
top: 4rem;
|
||||
bottom: 0rem;
|
||||
@ -184,33 +185,36 @@ hr {
|
||||
height: 100%;
|
||||
height: calc(100% - 4rem);
|
||||
}
|
||||
|
||||
.main>.loading {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1000;
|
||||
display: block;
|
||||
background-color: rgba(239,195,145,1.00);
|
||||
top: 0;
|
||||
.main > .loading {
|
||||
position: fixed;
|
||||
z-index: 1000;
|
||||
top: 0;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
background-color: #rgba(239,195,145,1.00);
|
||||
}
|
||||
|
||||
.main>.loading>span {
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin-top: 2rem;
|
||||
color: #888;
|
||||
font-size: 1.2rem;
|
||||
.main > .loading > span {
|
||||
font-family: monospace;
|
||||
font-size: 2rem;
|
||||
font-size-adjust: 0.35;
|
||||
position: relative;
|
||||
top: 12.5%;
|
||||
display: block;
|
||||
text-align: center;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.main>.loading>span>.loading-img:before {
|
||||
content: "\e603";
|
||||
}
|
||||
|
||||
.main>.loading>span>.loading-img {
|
||||
animation: anim-rotate 2s infinite linear;
|
||||
margin-right: 0.2rem;
|
||||
display: inline-block;
|
||||
.main > .loading > span > .loading-img {
|
||||
position: relative;
|
||||
top: 0.1rem;
|
||||
left: 0.05rem;
|
||||
display: inline-block;
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
margin-right: 1rem;
|
||||
animation: anim-rotate 2s infinite linear;
|
||||
background: url(../icons/spinner.svg) no-repeat center;
|
||||
}
|
||||
|
||||
@keyframes anim-rotate {
|
||||
@ -243,6 +247,7 @@ header {
|
||||
header .container {
|
||||
margin-top: .5rem;
|
||||
padding: .5rem 1rem 0 1rem
|
||||
|
||||
}
|
||||
header .container .pull-right>* {
|
||||
position: relative;
|
||||
@ -265,16 +270,19 @@ header .fill {
|
||||
}
|
||||
header .fill .container {
|
||||
height: 3rem;
|
||||
padding: 0 1.25rem;
|
||||
padding: 0 1rem;
|
||||
background: #333;
|
||||
background-color:#333;
|
||||
vertical-align:middle;
|
||||
}
|
||||
|
||||
header>.container>.brand, header > .fill > .container > .brand {
|
||||
font-size: 1.3rem;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
padding-left: 1rem;
|
||||
|
||||
cursor: default;
|
||||
vertical-align: text-bottom;
|
||||
display: none
|
||||
@ -283,6 +291,9 @@ header>.container>.brand, header > .fill > .container > .brand {
|
||||
footer {
|
||||
text-align: right;
|
||||
padding: 1rem;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-shadow: 0 0 2px #bbb;
|
||||
color: #aaa;
|
||||
font-size: .8rem
|
||||
}
|
||||
@ -534,6 +545,8 @@ background-color:#fff;
|
||||
li {
|
||||
list-style-type: none
|
||||
}
|
||||
|
||||
|
||||
.main .main-right {
|
||||
width: calc(100% - 15rem);
|
||||
float: right;
|
||||
@ -579,37 +592,14 @@ li {
|
||||
margin-top: 2rem;
|
||||
text-decoration: inherit
|
||||
}
|
||||
.main .loading {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 2000;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #F4BF8B;
|
||||
top: 0
|
||||
}
|
||||
.main .loading span {
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin-top: 2rem;
|
||||
color: #fe7a00;
|
||||
font-size: 2rem
|
||||
}
|
||||
.main .loading span .loading-img {
|
||||
animation: anim-rotate 2s infinite linear;
|
||||
margin-right: .4rem;
|
||||
display: inline-block
|
||||
}
|
||||
.main .loading span .loading-img::before {
|
||||
content: "\e903"
|
||||
}
|
||||
|
||||
/* button style */
|
||||
.btn,
|
||||
.cbi-button {
|
||||
-webkit-appearance: none;
|
||||
text-transform: uppercase;
|
||||
height: auto;
|
||||
color: rgba(0,0,0,0.87);
|
||||
color: #fe7a00;
|
||||
background-color: #F0F0F0;
|
||||
transition: all .2s ease-in-out;
|
||||
display: inline-block;
|
||||
@ -630,10 +620,50 @@ li {
|
||||
font-size: .875rem;
|
||||
width: auto !important;
|
||||
line-height: 1em
|
||||
|
||||
}
|
||||
.cbi-button:hover, .cbi-button:focus, .cbi-button:active {
|
||||
outline: 0;
|
||||
text-decoration: none
|
||||
|
||||
.cbi-button-up, .cbi-button-down {
|
||||
display: inline-block;
|
||||
min-width: 0;
|
||||
padding: .2rem .6rem;
|
||||
font-size: 1.2rem;
|
||||
color: #fe7a00 !important;
|
||||
/*background: url(../icons/arrow.svg) no-repeat center;
|
||||
background-size: 12px 20px;*/
|
||||
content:"\e20b";
|
||||
}
|
||||
.cbi-button-up {
|
||||
transform: scaleY(-1);
|
||||
}
|
||||
|
||||
.cbi-button:not(select) {
|
||||
-webkit-appearance: none !important;
|
||||
}
|
||||
.btn:hover,
|
||||
.btn:focus,
|
||||
.btn:active,
|
||||
.cbi-button:hover,
|
||||
.cbi-button:focus,
|
||||
.cbi-button:active,
|
||||
.item:hover::after,
|
||||
.item:focus::after,
|
||||
.item:active::after,
|
||||
.cbi-page-actions .cbi-button-apply + .cbi-button-save:hover,
|
||||
.cbi-page-actions .cbi-button-apply + .cbi-button-save:focus,
|
||||
.cbi-page-actions .cbi-button-apply + .cbi-button-save:active {
|
||||
text-decoration: none;
|
||||
outline: 0;
|
||||
}
|
||||
button:hover,
|
||||
.btn:hover,
|
||||
.btn:focus,
|
||||
.cbi-button:hover,
|
||||
.cbi-button:focus,
|
||||
.item:hover::after,
|
||||
.item:focus::after {
|
||||
opacity: 0.7;
|
||||
top:0.15rem;
|
||||
}
|
||||
.cbi-button:hover, .cbi-button:focus {
|
||||
box-shadow: 0 0 2px rgba(0,0,0,0.12), 0 2px 2px rgba(0,0,0,0.2)
|
||||
@ -641,11 +671,12 @@ li {
|
||||
.cbi-button:active {
|
||||
box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23)
|
||||
}
|
||||
.btn:disabled,
|
||||
.cbi-button:disabled {
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
opacity: .6;
|
||||
box-shadow: none
|
||||
cursor: not-allowed;
|
||||
pointer-events: none;
|
||||
opacity: 0.6;
|
||||
box-shadow: none;
|
||||
}
|
||||
.cbi-button-check {
|
||||
margin-top: .25rem !important
|
||||
@ -692,7 +723,7 @@ form.inline+form.inline, .cbi-button+.cbi-button {
|
||||
min-width: 15rem
|
||||
}
|
||||
select {
|
||||
min-width: 20rem;
|
||||
min-width: 15rem;
|
||||
appearance: none;
|
||||
-webkit-appearance: none;
|
||||
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTY1MzQ4MDM3OTIyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI1ODMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4qIHsgdGV4dC1zaGFkb3c6IHRyYW5zcGFyZW50IDBweCAwcHggMHB4LCByZ2JhKDAsIDAsIDAsIDAuNSkgMHB4IDBweCAwcHggIWltcG9ydGFudDsgfQo8L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMjAuNDggMjQ1Ljc2aDk4My4wNEw1MTIgNzc4LjI0eiIgcC1pZD0iMjU4NCIgZmlsbD0iIzcwNzA3MCI+PC9wYXRoPjwvc3ZnPg==') !important;
|
||||
@ -918,13 +949,7 @@ small {
|
||||
white-space: normal;
|
||||
line-height: 1.42857143
|
||||
}
|
||||
.cbi-button-up, .cbi-button-down {
|
||||
display: inline-block;
|
||||
min-width: 0;
|
||||
padding: .2rem .6rem;
|
||||
font-size: 1.2rem;
|
||||
color: #fe7a00 !important;
|
||||
}
|
||||
|
||||
.cbi-optionals {
|
||||
padding: 1rem 1rem 0 1rem;
|
||||
border-top: 1px solid #CCC
|
||||
@ -1072,14 +1097,16 @@ td>table>tbody>tr>td, .td>.table>.tbody>.tr>.td {
|
||||
|
||||
.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell {
|
||||
width: auto !important;
|
||||
background-color: #e9ecef;
|
||||
/* background-color: #e9ecef; */
|
||||
}
|
||||
|
||||
.td.cbi-section-actions {
|
||||
text-align: right;
|
||||
vertical-align: middle
|
||||
/* text-align: right; */
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.td.cbi-section-actions>* {
|
||||
display: flex
|
||||
/* display: flex; */
|
||||
}
|
||||
.td.cbi-section-actions>*>*, .td.cbi-section-actions>*>form>* {
|
||||
flex: 1 1 4em;
|
||||
@ -1161,6 +1188,7 @@ td>table>tbody>tr>td, .td>.table>.tbody>.tr>.td {
|
||||
display: none;
|
||||
color: #fff;
|
||||
font-size: 1.4rem
|
||||
|
||||
}
|
||||
.darkMask {
|
||||
width: 100%;
|
||||
@ -1189,19 +1217,22 @@ body.lang_pl.node-main-login .cbi-value-title {
|
||||
width: 12rem
|
||||
}
|
||||
|
||||
/* fix Main Login*/
|
||||
.node-main-login>.main>.main-right>header {
|
||||
background: none !important;
|
||||
box-shadow: none !important;
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* fix Main Login */
|
||||
|
||||
.node-main-login .main .main-right header {
|
||||
background: none !important;
|
||||
box-shadow: none !important;
|
||||
display: none !important;
|
||||
}
|
||||
.node-main-login>.main>.main-right>header>.fill>.container {
|
||||
margin: 2rem auto;
|
||||
max-width: 1140px;
|
||||
}
|
||||
|
||||
.node-main-login>.main>.main-right>header>.fill>.container>.brand {
|
||||
font-size: 2rem;
|
||||
color: #fe7a00;
|
||||
display: none;
|
||||
|
||||
}
|
||||
@ -1210,16 +1241,13 @@ body.lang_pl.node-main-login .cbi-value-title {
|
||||
top: 0;
|
||||
height: 100% !important;
|
||||
}
|
||||
|
||||
.node-main-login>.main>.main-left {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.node-main-login > .main > .main-right {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.node-main-login>.main>.main-right>.login-bg {
|
||||
.node-main-login .main .main-right .login-bg {
|
||||
display: block;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
@ -1268,7 +1296,10 @@ body.lang_pl.node-main-login .cbi-value-title {
|
||||
margin-top: 2rem !important;
|
||||
background-color: #D5CAB6 !important;
|
||||
border-radius: .375rem;
|
||||
box-shadow: rgba(0,0,0,0.75) 0 0 35px -5px;
|
||||
/* text-align: left;
|
||||
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
|
||||
transition: box-shadow .25s, -webkit-box-shadow .25s;*/
|
||||
box-shadow: rgba(0,0,0,0.75) 0 0 35px -5px;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
@ -1415,7 +1446,7 @@ body.lang_pl.node-main-login .cbi-value-title {
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
content: "\e901";
|
||||
content: "\e910";
|
||||
color: #adb5bd;
|
||||
font-size: 1.5rem;
|
||||
position: absolute;
|
||||
@ -1563,19 +1594,7 @@ body.lang_pl.node-main-login .cbi-value-title {
|
||||
.cbi-rowstyle-2 .cbi-button-up, .cbi-rowstyle-2 .cbi-button-down {
|
||||
background-color: #FFF !important
|
||||
}
|
||||
.cbi-button-up, .cbi-button-down, .cbi-value-helpicon, .showSide, .main>.loading>span {
|
||||
font-family: 'advancedtomato' !important;
|
||||
font-style: normal !important;
|
||||
font-weight: normal !important;
|
||||
font-variant: normal !important;
|
||||
text-transform: none !important;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale
|
||||
}
|
||||
.cbi-button-up {
|
||||
transform: rotate(180deg)
|
||||
}
|
||||
|
||||
select {
|
||||
padding: .36rem .8rem;
|
||||
color: #555;
|
||||
@ -1587,7 +1606,7 @@ select, input {
|
||||
font-size: .875rem;
|
||||
transition: all .15s ease-in-out;
|
||||
line-height: 1.5;
|
||||
padding: .625rem .75rem;
|
||||
padding: .75rem;
|
||||
color: #8898aa;
|
||||
border: 1px solid #dee2e6;
|
||||
border-radius: .25rem;
|
||||
@ -1596,7 +1615,7 @@ select, input {
|
||||
box-shadow: 0 3px 2px rgba(233,236,239,0.05);
|
||||
outline: none;
|
||||
transition: box-shadow .15s ease;
|
||||
margin: .25rem
|
||||
margin: 0;
|
||||
}
|
||||
select:not([multiple="multiple"]):focus, input:focus {
|
||||
border-color: #fe7a00;
|
||||
@ -2399,15 +2418,8 @@ div.cbi-value var, td.cbi-value-field var {
|
||||
font-style: italic;
|
||||
color: #0069D6
|
||||
}
|
||||
small {
|
||||
font-size: 90%;
|
||||
white-space: normal;
|
||||
line-height: 1.42857143
|
||||
}
|
||||
.cbi-optionals {
|
||||
padding: 1rem 1rem 0 1rem;
|
||||
border-top: 1px solid #CCC
|
||||
}
|
||||
|
||||
|
||||
input[name="ping"], input[name="traceroute"], input[name="nslookup"] {
|
||||
width: 80%
|
||||
}
|
||||
@ -2636,19 +2648,14 @@ input[name="ping"], input[name="traceroute"], input[name="nslookup"] {
|
||||
}
|
||||
|
||||
@media screen and (max-width:1600px) {
|
||||
.cbi-value input[type="password"],
|
||||
.cbi-value input[type="text"] {
|
||||
min-width: 25rem;
|
||||
|
||||
.main-left {
|
||||
width: calc(0% + 13rem);
|
||||
}
|
||||
.cbi-value-field .cbi-input-select {
|
||||
min-width: 25rem;
|
||||
|
||||
.main-right {
|
||||
width: calc(100% - 13rem);
|
||||
}
|
||||
.main .main-left {
|
||||
width: calc(0% + 13rem)
|
||||
}
|
||||
.main .main-right {
|
||||
width: calc(100% - 13rem)
|
||||
}
|
||||
.cbi-button {
|
||||
font-size: .8rem
|
||||
}
|
||||
@ -2677,22 +2684,18 @@ select {
|
||||
}
|
||||
|
||||
@media screen and (max-width:1280px) {
|
||||
.cbi-value input[type="password"],
|
||||
.cbi-value input[type="text"] {
|
||||
min-width: 22rem;
|
||||
}
|
||||
.cbi-value-field .cbi-input-select {
|
||||
min-width: 22rem;
|
||||
}
|
||||
|
||||
header>.container {
|
||||
margin-top: .25rem
|
||||
}
|
||||
.main .main-left {
|
||||
width: calc(0% + 13rem)
|
||||
}
|
||||
.main .main-right {
|
||||
width: calc(100% - 13rem)
|
||||
}
|
||||
.main-left {
|
||||
width: calc(0% + 13rem);
|
||||
}
|
||||
|
||||
.main-right {
|
||||
width: calc(100% - 13rem);
|
||||
}
|
||||
|
||||
.cbi-tabmenu li a, .tabs li a {
|
||||
padding: .2rem .5rem
|
||||
}
|
||||
@ -2700,7 +2703,8 @@ header>.container {
|
||||
font-size: 1.1rem;
|
||||
padding-bottom: 1rem
|
||||
}
|
||||
table {
|
||||
.table,
|
||||
table {
|
||||
font-size: .7rem !important;
|
||||
width: 100% !important
|
||||
}
|
||||
@ -2712,33 +2716,7 @@ table {
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width:600px) {
|
||||
::-webkit-scrollbar {
|
||||
width:10px;
|
||||
height:10px
|
||||
}
|
||||
::-webkit-scrollbar, ::-webkit-scrollbar-corner {
|
||||
background:transparent
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background:#9e9e9e
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background:#757575
|
||||
}
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
background:#424242
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width:992px) {
|
||||
.cbi-value input[type="password"],
|
||||
.cbi-value input[type="text"] {
|
||||
min-width: 20rem;
|
||||
}
|
||||
.cbi-value-field .cbi-input-select {
|
||||
min-width: 20rem;
|
||||
}
|
||||
.main .main-left {
|
||||
width: 0;
|
||||
position: fixed;
|
||||
@ -2747,10 +2725,12 @@ background:#424242
|
||||
.main .main-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.showSide {
|
||||
padding: .1rem;
|
||||
padding: .5rem;
|
||||
position: relative;
|
||||
display: inline-block
|
||||
|
||||
}
|
||||
.showSide:hover {
|
||||
text-decoration: none
|
||||
@ -2759,14 +2739,17 @@ background:#424242
|
||||
content: "\e90d";
|
||||
font-size: 1.8rem
|
||||
}
|
||||
.node-main-login .showSide {
|
||||
display: none !important;
|
||||
}
|
||||
header>.fill>.container>.brand {
|
||||
display: inline-block
|
||||
}
|
||||
|
||||
|
||||
.cbi-value-title {
|
||||
width: 9rem;
|
||||
padding-right: 1rem
|
||||
width: 9rem;
|
||||
padding-right: 1rem
|
||||
}
|
||||
.node-network-diagnostics>.main .cbi-map fieldset>div * {
|
||||
width: 100% !important
|
||||
@ -2783,31 +2766,31 @@ header>.fill>.container>.brand {
|
||||
.node-network-diagnostics>.main .cbi-map fieldset>div {
|
||||
width: 100% !important
|
||||
}
|
||||
.node-main-login>.main .cbi-value-title {
|
||||
text-align: left;
|
||||
}
|
||||
#diag-rc-output>pre {
|
||||
font-size: 1rem
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width:480px) {
|
||||
body {
|
||||
font-size: .8rem
|
||||
}
|
||||
|
||||
div.cbi-section,
|
||||
fieldset {
|
||||
padding: 0;
|
||||
margin: 1rem 0 0 0;
|
||||
overflow-x: auto;
|
||||
}
|
||||
.pull-right {
|
||||
float: right;
|
||||
margin-top: 0rem !important
|
||||
}
|
||||
.cbi-value input[type="password"],
|
||||
.cbi-value input[type="text"] {
|
||||
min-width: 18rem;
|
||||
}
|
||||
.cbi-value-field .cbi-input-select {
|
||||
min-width: 18rem;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
padding: 0;
|
||||
margin: 1rem 0 0 0
|
||||
}
|
||||
|
||||
.tabs {
|
||||
margin: .5rem 0
|
||||
}
|
||||
@ -2830,6 +2813,10 @@ h2 {
|
||||
.main>.main-left>.nav>.slide>.slide-menu>li>a {
|
||||
font-size: .9rem
|
||||
}
|
||||
/* .main>.main-left>.nav>.slide>.menu:before {
|
||||
padding-top: 5px;
|
||||
}
|
||||
*/
|
||||
.main>.main-left>.nav>.slide>.menu:after {
|
||||
top: .9rem
|
||||
}
|
||||
@ -2848,30 +2835,97 @@ h2 {
|
||||
text-align: left;
|
||||
padding: 0 .25rem
|
||||
}
|
||||
.cbi-value input[type="password"], .cbi-value input[type="text"] {
|
||||
min-width: 15rem
|
||||
}
|
||||
select {
|
||||
width: 15rem;
|
||||
min-width: auto
|
||||
}
|
||||
.cbi-value>.cbi-value-field {
|
||||
display: inline-block
|
||||
}
|
||||
.cbi-value-field,
|
||||
.cbi-value-description {
|
||||
width: 95%;
|
||||
|
||||
.cbi-value input[type="password"],
|
||||
.cbi-value input[type="text"] {
|
||||
min-width: 15rem;
|
||||
}
|
||||
|
||||
.cbi-value-field .cbi-input-select {
|
||||
min-width: 15rem;
|
||||
}
|
||||
/*
|
||||
.cbi-value-field .cbi-input-select {
|
||||
width: 95%;
|
||||
min-width: unset;
|
||||
}
|
||||
*/
|
||||
.cbi-value-field,
|
||||
.cbi-value-description {
|
||||
width: 95%;
|
||||
}
|
||||
select,
|
||||
input {
|
||||
width: 95%;
|
||||
min-width: unset;
|
||||
|
||||
}
|
||||
|
||||
.cbi-value>.cbi-value-field {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.cbi-value-field .cbi-input-textarea {
|
||||
width: 95% !important;
|
||||
min-width: unset;
|
||||
}
|
||||
.node-main-login {
|
||||
width: 18rem;
|
||||
padding-left: 0rem;
|
||||
}
|
||||
|
||||
.cbi-tabmenu>li,
|
||||
.tabs>li {
|
||||
padding: 0.6rem 0rem;
|
||||
}
|
||||
|
||||
.cbi-tabmenu>li>a,
|
||||
.tabs>li>a {
|
||||
padding: 0.2rem 0.3rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.cbi-page-actions>div>input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.node-main-login>.main .container {
|
||||
padding: 0.5rem 1rem 2rem 1rem;
|
||||
margin: 0 auto !important;
|
||||
}
|
||||
|
||||
.node-main-login>.main form>div:nth-last-child(1) {
|
||||
margin-top: 0rem;
|
||||
}
|
||||
|
||||
.node-main-login>.main .cbi-value-title {
|
||||
width: 100% !important;
|
||||
margin-top: 0rem;
|
||||
font-size: 1rem;
|
||||
margin-bottom: 0;
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
|
||||
.node-main-login>.main fieldset {
|
||||
margin: 0;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.node-main-login .alert-message.warning {
|
||||
width: calc(100% - 2rem);
|
||||
padding: 1rem 1rem;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
|
||||
}
|
||||
.node-main-login>.main .container h2 {
|
||||
|
||||
margin: -70px auto 15px auto;
|
||||
|
||||
}
|
||||
.cbi-value-field .cbi-input-checkbox, .cbi-value-field .cbi-input-radio {
|
||||
margin: 0 .25rem 0 .25rem;
|
||||
height: 1rem;
|
||||
@ -2887,12 +2941,19 @@ height:0px
|
||||
.tabs>li>a {
|
||||
font-size: .9rem
|
||||
}
|
||||
select, input {
|
||||
font-size: .9rem
|
||||
}
|
||||
select,
|
||||
input {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.mobile-hide {
|
||||
display: none
|
||||
}
|
||||
|
||||
.panel-title {
|
||||
font-size: 1.4rem;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
.node-status-realtime table>tbody>tr>td, .node-status-realtime table>tfoot>tr>td, .node-status-realtime table>thead>tr>td {
|
||||
font-size: .8125rem;
|
||||
color: #525f7f;
|
||||
@ -2953,3 +3014,61 @@ width:10rem !important
|
||||
height: auto
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (min-width:600px) {
|
||||
::-webkit-scrollbar {
|
||||
width:10px;
|
||||
height:10px
|
||||
}
|
||||
::-webkit-scrollbar, ::-webkit-scrollbar-corner {
|
||||
background:transparent
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background:#9e9e9e
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background:#757575
|
||||
}
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
background:#424242
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
|
||||
.cbi-value input[type="password"],
|
||||
.cbi-value input[type="text"] {
|
||||
min-width: 18rem;
|
||||
}
|
||||
|
||||
.cbi-value-field .cbi-input-select {
|
||||
min-width: 18rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (min-width: 1280px) {
|
||||
|
||||
.cbi-value input[type="password"],
|
||||
.cbi-value input[type="text"] {
|
||||
min-width: 22rem;
|
||||
}
|
||||
|
||||
.cbi-value-field .cbi-input-select {
|
||||
min-width: 22rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1600px) {
|
||||
|
||||
.cbi-value input[type="password"],
|
||||
.cbi-value input[type="text"] {
|
||||
min-width: 25rem;
|
||||
}
|
||||
|
||||
.cbi-value-field .cbi-input-select {
|
||||
min-width: 25rem;
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#202124" d="m8,10.033663l-6.898535,-6.013274l-1.060688,0.972974l7.959223,6.986249l7.959223,-6.986249l-1.060688,-0.972974l-6.898535,6.013274z"/></svg>
|
After Width: | Height: | Size: 221 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill="#888" d="M8,0c-4.355,0-7.898,3.481-7.998,7.812,0.092-3.779,2.966-6.812,6.498-6.812,3.59,0,6.5,3.134,6.5,7,0,0.828,0.672,1.5,1.5,1.5s1.5-0.672,1.5-1.5c0-4.418-3.582-8-8-8zM8,16c4.355,0,7.898-3.481,7.998-7.812-0.092,3.779-2.966,6.812-6.498,6.812-3.59,0-6.5-3.134-6.5-7,0-0.828-0.672-1.5-1.5-1.5s-1.5,0.672-1.5,1.5c0,4.418,3.582,8,8,8z"/></svg>
|
After Width: | Height: | Size: 413 B |
@ -1,9 +1,7 @@
|
||||
#!/bin/sh
|
||||
if [ "$PKG_UPGRADE" != 1 ]; then
|
||||
uci batch <<-EOF
|
||||
set luci.themes.opentopd=/luci-static/opentopd
|
||||
set luci.main.mediaurlbase=/luci-static/opentopd
|
||||
commit luci
|
||||
EOF
|
||||
fi
|
||||
exit 0
|
||||
|
@ -1,8 +1,18 @@
|
||||
#
|
||||
# Copyright (c) 2018-2020 Nick Peng (pymumu@gmail.com)
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
# Copyright (C) 2018-2020 Ruilin Peng (Nick) <pymumu@gmail.com>.
|
||||
#
|
||||
|
||||
# smartdns is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# smartdns is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=smartdns
|
||||
@ -21,7 +31,7 @@ PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
MAKE_VARS += VER=$(PKG_VERSION)
|
||||
MAKE_VARS += VER=$(PKG_VERSION)
|
||||
MAKE_PATH:=src
|
||||
|
||||
define Package/smartdns
|
||||
@ -34,7 +44,7 @@ endef
|
||||
|
||||
define Package/smartdns/description
|
||||
SmartDNS is a local DNS server which accepts DNS query requests from local network clients,
|
||||
gets DNS query results from multiple upstream DNS servers concurrently, and returns the fastest IP to clients.
|
||||
get DNS query results from multiple upstream DNS servers concurrently, and returns the fastest IP to clients.
|
||||
Unlike dnsmasq's all-servers, smartdns returns the fastest IP.
|
||||
endef
|
||||
|
||||
@ -42,7 +52,6 @@ define Package/smartdns/conffiles
|
||||
/etc/config/smartdns
|
||||
/etc/smartdns/address.conf
|
||||
/etc/smartdns/blacklist-ip.conf
|
||||
/etc/smartdns/anti-ad-smartdns.conf
|
||||
/etc/smartdns/custom.conf
|
||||
endef
|
||||
|
||||
@ -53,7 +62,6 @@ define Package/smartdns/install
|
||||
$(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/address.conf $(1)/etc/smartdns/address.conf
|
||||
$(INSTALL_CONF) $(PKG_BUILD_DIR)/package/openwrt/blacklist-ip.conf $(1)/etc/smartdns/blacklist-ip.conf
|
||||
$(INSTALL_CONF) $(CURDIR)/conf/custom.conf $(1)/etc/smartdns/custom.conf
|
||||
$(INSTALL_CONF) $(CURDIR)/conf/anti-ad-smartdns.conf $(1)/etc/smartdns/anti-ad-smartdns.conf
|
||||
$(INSTALL_CONF) $(CURDIR)/conf/smartdns.conf $(1)/etc/config/smartdns
|
||||
endef
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -15,5 +15,3 @@ cache-size 10240
|
||||
#bind: 6053 -group smartdns
|
||||
#bind: 7053 -group world
|
||||
|
||||
# 去广告文件,去掉#就可以使用自带去广告的文件了,也可以自己上传。
|
||||
# conf-file /etc/smartdns/anti-ad-smartdns.conf
|
||||
|
Loading…
Reference in New Issue
Block a user