├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
└── workflows
│ ├── clear_cache.yml
│ ├── close_issues.yml
│ ├── compile_dev_core.yml
│ ├── compile_meta_core.yml
│ ├── compile_new_ipk.yml
│ ├── compile_premium_core.yml
│ ├── delete_old_workflow.yml
│ ├── master_release_sync.yml
│ └── update_third_party_resources.yml
├── LICENSE
├── README.md
├── announcement
├── img
├── BTC-Wallet.png
├── ETH-Wallet.png
├── USDT-Wallet.png
├── config-subscribe.png
├── config-subscribe1.png
├── config.png
├── game-settings.png
├── game1.png
├── game2.png
├── log.png
├── logo.png
├── meta.png
├── proxy1.png
├── proxy2.png
├── proxy3.png
├── proxy4.png
├── servers.png
├── set1.png
├── set10.png
├── set11.png
├── set12.png
├── set2.png
├── set3.png
├── set4.png
├── set6.png
├── set7.png
├── set8.png
├── set9.png
├── settings.png
├── state.png
├── state1.png
├── state2.png
├── state3.png
├── state4.png
└── state5.png
└── luci-app-openclash
├── Makefile
├── luasrc
├── controller
│ └── openclash.lua
├── model
│ └── cbi
│ │ └── openclash
│ │ ├── client.lua
│ │ ├── config-overwrite.lua
│ │ ├── config-subscribe-edit.lua
│ │ ├── config-subscribe.lua
│ │ ├── config.lua
│ │ ├── custom-dns-edit.lua
│ │ ├── game-rules-file-manage.lua
│ │ ├── game-rules-manage.lua
│ │ ├── groups-config.lua
│ │ ├── log.lua
│ │ ├── other-file-edit.lua
│ │ ├── other-rules-edit.lua
│ │ ├── proxy-provider-config.lua
│ │ ├── proxy-provider-file-manage.lua
│ │ ├── rule-providers-config.lua
│ │ ├── rule-providers-file-manage.lua
│ │ ├── rule-providers-manage.lua
│ │ ├── rule-providers-settings.lua
│ │ ├── servers-config.lua
│ │ ├── servers.lua
│ │ └── settings.lua
├── openclash.lua
└── view
│ └── openclash
│ ├── cfg_check.htm
│ ├── config_editor.htm
│ ├── debug.htm
│ ├── developer.htm
│ ├── dler_login.htm
│ ├── dlercloud.htm
│ ├── download_rule.htm
│ ├── dvalue.htm
│ ├── flush_fakeip_cache.htm
│ ├── input_file_name.htm
│ ├── input_rename.htm
│ ├── log.htm
│ ├── myip.htm
│ ├── other_button.htm
│ ├── other_stream_option.htm
│ ├── select_git_cdn.htm
│ ├── server_url.htm
│ ├── status.htm
│ ├── sub_info_show.htm
│ ├── switch_dashboard.htm
│ ├── switch_mode.htm
│ ├── tblsection.htm
│ ├── tblsection_dns.htm
│ ├── toolbar_show.htm
│ ├── update.htm
│ ├── update_config.htm
│ └── upload.htm
├── po
└── zh-cn
│ └── openclash.zh-cn.po
├── root
├── etc
│ ├── config
│ │ └── openclash
│ ├── init.d
│ │ └── openclash
│ ├── openclash
│ │ ├── Country.mmdb
│ │ ├── GeoIP.dat
│ │ ├── GeoSite.dat
│ │ ├── china_ip6_route.ipset
│ │ ├── china_ip_route.ipset
│ │ ├── custom
│ │ │ ├── openclash_custom_chnroute6_pass.list
│ │ │ ├── openclash_custom_chnroute_pass.list
│ │ │ ├── openclash_custom_domain_dns.list
│ │ │ ├── openclash_custom_domain_dns_policy.list
│ │ │ ├── openclash_custom_fake_filter.list
│ │ │ ├── openclash_custom_fallback_filter.yaml
│ │ │ ├── openclash_custom_firewall_rules.sh
│ │ │ ├── openclash_custom_hosts.list
│ │ │ ├── openclash_custom_localnetwork_ipv4.list
│ │ │ ├── openclash_custom_localnetwork_ipv6.list
│ │ │ ├── openclash_custom_overwrite.sh
│ │ │ ├── openclash_custom_rules.list
│ │ │ ├── openclash_custom_rules_2.list
│ │ │ └── openclash_custom_sniffer.yaml
│ │ ├── game_rules
│ │ │ ├── CS-GO.rules
│ │ │ ├── Monster-Hunter-World.rules
│ │ │ └── Steam.rules
│ │ └── rule_provider
│ │ │ ├── ABC
│ │ │ ├── AI Suite
│ │ │ ├── Abema_TV
│ │ │ ├── Amazon
│ │ │ ├── Apple
│ │ │ ├── Apple_Music
│ │ │ ├── Apple_News
│ │ │ ├── Apple_TV
│ │ │ ├── BBC_iPlayer
│ │ │ ├── Bahamut
│ │ │ ├── Bilibili
│ │ │ ├── Crypto
│ │ │ ├── DAZN
│ │ │ ├── Discord
│ │ │ ├── Discovery_Plus
│ │ │ ├── Disney_Plus
│ │ │ ├── Domestic
│ │ │ ├── Domestic_IPs
│ │ │ ├── F1_TV
│ │ │ ├── FCM
│ │ │ ├── Fox+
│ │ │ ├── Fox_Now
│ │ │ ├── Google FCM
│ │ │ ├── HBO
│ │ │ ├── HBO_Go
│ │ │ ├── HBO_Max
│ │ │ ├── Hulu
│ │ │ ├── Hulu_Japan
│ │ │ ├── IQI
│ │ │ ├── IQYI
│ │ │ ├── JOOX
│ │ │ ├── Japonx
│ │ │ ├── KKBOX
│ │ │ ├── KKTV
│ │ │ ├── LAN
│ │ │ ├── Letv
│ │ │ ├── Line_TV
│ │ │ ├── Microsoft
│ │ │ ├── Netease_Music
│ │ │ ├── Netflix
│ │ │ ├── Niconico
│ │ │ ├── PBS
│ │ │ ├── Pandora
│ │ │ ├── PayPal
│ │ │ ├── Pornhub
│ │ │ ├── Proxy
│ │ │ ├── Reject
│ │ │ ├── Scholar
│ │ │ ├── Soundcloud
│ │ │ ├── Special
│ │ │ ├── Speedtest
│ │ │ ├── Spotify
│ │ │ ├── Steam
│ │ │ ├── Telegram
│ │ │ ├── Tencent_Video
│ │ │ ├── ViuTV
│ │ │ ├── WeTV
│ │ │ ├── YouTube
│ │ │ ├── Youku
│ │ │ ├── encoreTVB
│ │ │ ├── iQiyi
│ │ │ ├── miHoYo
│ │ │ └── myTV_SUPER
│ └── uci-defaults
│ │ └── luci-openclash
├── usr
│ └── share
│ │ ├── openclash
│ │ ├── YAML.rb
│ │ ├── cfg_unused_servers_del.sh
│ │ ├── clash_version.sh
│ │ ├── log.sh
│ │ ├── openclash.sh
│ │ ├── openclash_chnroute.sh
│ │ ├── openclash_core.sh
│ │ ├── openclash_curl.sh
│ │ ├── openclash_custom_domain_dns.sh
│ │ ├── openclash_debug.sh
│ │ ├── openclash_debug_dns.lua
│ │ ├── openclash_debug_getcon.lua
│ │ ├── openclash_dler_checkin.lua
│ │ ├── openclash_download_dashboard.sh
│ │ ├── openclash_download_rule_list.sh
│ │ ├── openclash_geoasn.sh
│ │ ├── openclash_geoip.sh
│ │ ├── openclash_geosite.sh
│ │ ├── openclash_get_network.lua
│ │ ├── openclash_history_get.sh
│ │ ├── openclash_ipdb.sh
│ │ ├── openclash_ps.sh
│ │ ├── openclash_rule.sh
│ │ ├── openclash_streaming_unlock.lua
│ │ ├── openclash_update.sh
│ │ ├── openclash_urlencode.lua
│ │ ├── openclash_version.sh
│ │ ├── openclash_watchdog.sh
│ │ ├── res
│ │ │ ├── default.yaml
│ │ │ ├── game_rules.list
│ │ │ ├── lhie1.yaml
│ │ │ ├── rule_providers.list
│ │ │ └── sub_ini.list
│ │ ├── ruby.sh
│ │ ├── ui
│ │ │ ├── dashboard
│ │ │ │ ├── CNAME
│ │ │ │ ├── assets
│ │ │ │ │ ├── index-41a41303.css
│ │ │ │ │ ├── index-abc6db04.js
│ │ │ │ │ ├── logo-b453e72f.png
│ │ │ │ │ └── vendor-0c169955.js
│ │ │ │ ├── index.html
│ │ │ │ ├── manifest.webmanifest
│ │ │ │ ├── sw.js
│ │ │ │ └── workbox-4de3aa5f.js
│ │ │ ├── metacubexd
│ │ │ │ ├── CNAME
│ │ │ │ ├── apple-touch-icon-180x180.png
│ │ │ │ ├── assets
│ │ │ │ │ ├── Config-B1EwbU18.js
│ │ │ │ │ ├── Connections-WHEuHC_k.js
│ │ │ │ │ ├── DocumentTitle-qgMGpI7d.js
│ │ │ │ │ ├── FiraSans-Regular-BN6hITtY.ttf
│ │ │ │ │ ├── IconReload-bqqdFQ5q.js
│ │ │ │ │ ├── Logs-DmnD-Vbh.js
│ │ │ │ │ ├── Overview-BigJMrEz.js
│ │ │ │ │ ├── Proxies-DCaTGxZZ.js
│ │ │ │ │ ├── Rules-T7FAMMsr.js
│ │ │ │ │ ├── Setup-2nY6XKtT.js
│ │ │ │ │ ├── Twemoji.Mozilla-BSQKJ6aF.ttf
│ │ │ │ │ ├── fira-sans-cyrillic-400-normal-9itZEwnn.woff2
│ │ │ │ │ ├── fira-sans-cyrillic-400-normal-DivIpeVh.woff
│ │ │ │ │ ├── fira-sans-cyrillic-ext-400-normal-Ct_d_4pr.woff
│ │ │ │ │ ├── fira-sans-cyrillic-ext-400-normal-DVFiJ7cT.woff2
│ │ │ │ │ ├── fira-sans-greek-400-normal-B4JJYYvj.woff
│ │ │ │ │ ├── fira-sans-greek-400-normal-xziLJ4od.woff2
│ │ │ │ │ ├── fira-sans-greek-ext-400-normal-BA5_ngob.woff
│ │ │ │ │ ├── fira-sans-greek-ext-400-normal-DDGpGFz4.woff2
│ │ │ │ │ ├── fira-sans-latin-400-normal-CRr34ncs.woff
│ │ │ │ │ ├── fira-sans-latin-400-normal-DqUVgETp.woff2
│ │ │ │ │ ├── fira-sans-latin-ext-400-normal-BsVau5p6.woff2
│ │ │ │ │ ├── fira-sans-latin-ext-400-normal-Cah6ivqJ.woff
│ │ │ │ │ ├── fira-sans-vietnamese-400-normal-CiKzo2z6.woff
│ │ │ │ │ ├── fira-sans-vietnamese-400-normal-D5T8w5kG.woff2
│ │ │ │ │ ├── index-BfxF6Zjo.js
│ │ │ │ │ ├── index-Bg_1VLqf.css
│ │ │ │ │ ├── index-CXfh_Ffl.js
│ │ │ │ │ └── time-M8P-MK1v.js
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── favicon.svg
│ │ │ │ ├── index.html
│ │ │ │ ├── manifest.webmanifest
│ │ │ │ ├── maskable-icon-512x512.png
│ │ │ │ ├── pwa-192x192.png
│ │ │ │ ├── pwa-512x512.png
│ │ │ │ ├── pwa-64x64.png
│ │ │ │ ├── registerSW.js
│ │ │ │ ├── sw.js
│ │ │ │ └── workbox-3e8df8c8.js
│ │ │ ├── yacd
│ │ │ │ ├── CNAME
│ │ │ │ ├── Twemoji_Mozilla.ttf
│ │ │ │ ├── _headers
│ │ │ │ ├── apple-touch-icon-precomposed.png
│ │ │ │ ├── assets
│ │ │ │ │ ├── BaseModal-e9f180d4.css
│ │ │ │ │ ├── BaseModal-f42f892a.js
│ │ │ │ │ ├── Config-0abd223e.js
│ │ │ │ │ ├── Config-7eb3f1bb.css
│ │ │ │ │ ├── Connections-796224c1.css
│ │ │ │ │ ├── Connections-c9877694.js
│ │ │ │ │ ├── Fab-0b65516b.css
│ │ │ │ │ ├── Fab-47e19297.js
│ │ │ │ │ ├── Input-e46653b4.js
│ │ │ │ │ ├── Logs-7103293e.js
│ │ │ │ │ ├── Logs-beb8fc98.css
│ │ │ │ │ ├── Proxies-70a463d2.js
│ │ │ │ │ ├── Proxies-dfd53d55.css
│ │ │ │ │ ├── Rules-162ef666.css
│ │ │ │ │ ├── Rules-a8c74e6e.js
│ │ │ │ │ ├── Select-04258549.js
│ │ │ │ │ ├── Select-20369999.css
│ │ │ │ │ ├── TextFitler-3b17a569.js
│ │ │ │ │ ├── TextFitler-cbc3b0fe.css
│ │ │ │ │ ├── Twemoji_Mozilla-6d90152e.ttf
│ │ │ │ │ ├── chart-lib-9fcc76b8.js
│ │ │ │ │ ├── debounce-c1ba2006.js
│ │ │ │ │ ├── en-f84bd3d3.js
│ │ │ │ │ ├── index-1a05af9b.js
│ │ │ │ │ ├── index-6d3641b0.js
│ │ │ │ │ ├── index-7d3e766d.css
│ │ │ │ │ ├── index-84fa0cb3.js
│ │ │ │ │ ├── inter-latin-400-normal-0364d368.woff2
│ │ │ │ │ ├── inter-latin-400-normal-3ea830d4.woff
│ │ │ │ │ ├── inter-latin-800-normal-a51ac27d.woff2
│ │ │ │ │ ├── inter-latin-800-normal-d08d7178.woff
│ │ │ │ │ ├── logs-ca50193b.js
│ │ │ │ │ ├── memoize-one.esm-efa1e849.js
│ │ │ │ │ ├── play-cb571d64.js
│ │ │ │ │ ├── roboto-mono-latin-400-normal-7295944e.woff2
│ │ │ │ │ ├── roboto-mono-latin-400-normal-dffdffa7.woff
│ │ │ │ │ ├── rotate-cw-e799f805.js
│ │ │ │ │ ├── useRemainingViewPortHeight-dbe2192e.js
│ │ │ │ │ ├── vi-75c7db25.js
│ │ │ │ │ ├── zh-cn-d82b820c.js
│ │ │ │ │ └── zh-tw-9cdfa61b.js
│ │ │ │ ├── index.html
│ │ │ │ ├── logo.png
│ │ │ │ ├── manifest.webmanifest
│ │ │ │ ├── registerSW.js
│ │ │ │ ├── sw.js
│ │ │ │ ├── yacd.ico
│ │ │ │ └── yacd.png
│ │ │ └── zashboard
│ │ │ │ ├── apple-touch-icon.png
│ │ │ │ ├── assets
│ │ │ │ ├── NotoColorEmoji-flagsonly-CWWDk9km.ttf
│ │ │ │ ├── index-CZi4yu0u.css
│ │ │ │ ├── index-btPsSEfJ.js
│ │ │ │ └── metacubex-BlQkOUXT.jpg
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── favicon.svg
│ │ │ │ ├── icon.svg
│ │ │ │ ├── index.html
│ │ │ │ ├── manifest.webmanifest
│ │ │ │ ├── pwa-192x192.png
│ │ │ │ ├── pwa-512x512.png
│ │ │ │ ├── pwa-maskable-192x192.png
│ │ │ │ ├── pwa-maskable-512x512.png
│ │ │ │ ├── registerSW.js
│ │ │ │ ├── sw.js
│ │ │ │ └── workbox-3e8df8c8.js
│ │ ├── yml_change.sh
│ │ ├── yml_groups_get.sh
│ │ ├── yml_groups_name_ch.sh
│ │ ├── yml_groups_name_get.sh
│ │ ├── yml_groups_set.sh
│ │ ├── yml_proxys_get.sh
│ │ ├── yml_proxys_set.sh
│ │ └── yml_rules_change.sh
│ │ ├── rpcd
│ │ └── acl.d
│ │ │ └── luci-app-openclash.json
│ │ └── ucitrack
│ │ └── luci-app-openclash.json
└── www
│ └── luci-static
│ └── resources
│ └── openclash
│ ├── addon
│ ├── dialog
│ │ ├── dialog.css
│ │ └── dialog.js
│ ├── display
│ │ ├── autorefresh.js
│ │ ├── fullscreen.css
│ │ └── fullscreen.js
│ ├── edit
│ │ └── matchbrackets.js
│ ├── fold
│ │ ├── foldcode.js
│ │ ├── foldgutter.css
│ │ ├── foldgutter.js
│ │ └── indent-fold.js
│ ├── lint
│ │ ├── js-yaml.min.js
│ │ ├── lint.css
│ │ ├── lint.js
│ │ └── yaml-lint.js
│ ├── merge
│ │ ├── diff_match_patch.js
│ │ ├── merge.css
│ │ └── merge.js
│ ├── scroll
│ │ └── annotatescrollbar.js
│ ├── search
│ │ ├── jump-to-line.js
│ │ ├── match-highlighter.js
│ │ ├── matchesonscrollbar.css
│ │ ├── matchesonscrollbar.js
│ │ ├── search.js
│ │ └── searchcursor.js
│ └── selection
│ │ └── active-line.js
│ ├── img
│ ├── Sponsor.svg
│ ├── Star.svg
│ ├── Telegram.svg
│ ├── Tutorials.svg
│ ├── Wiki.svg
│ ├── arrow-clockwise-light.svg
│ ├── eye-light.svg
│ ├── eye-slash-light.svg
│ ├── logo.png
│ ├── megaphone-simple.svg
│ ├── version.svg
│ └── wrench-light.svg
│ ├── lib
│ ├── codemirror.css
│ └── codemirror.js
│ ├── mode
│ ├── lua
│ │ └── lua.js
│ ├── shell
│ │ └── shell.js
│ └── yaml
│ │ └── yaml.js
│ └── theme
│ ├── idea.css
│ ├── material-log.css
│ └── material.css
└── tools
└── po2lmo
├── Makefile
└── src
├── po2lmo
├── po2lmo.c
├── template_lmo.c
└── template_lmo.h
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: vernesong
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 |
3 | contact_links:
4 |
5 | - name: 发表Issue前请先在Issues与Discussions中搜索相关内容
6 | url: https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md#在提问之前
7 | about: 请有意义且描述明确的描述问题症状而非你的猜测 问题解决后加个简短的补充说明
8 |
9 | - name: 启动成功后无法访问个别网站 | 启动成功后个别网站不想走代理流量
10 | url: https://www.bing.com/search?q=clash+rule+写+教&ensearch=1
11 | about: 想要了解clash规则编写相关的问题
12 |
13 | - name: CLASH CORE | PERIUM CORE & 内核问题 | 节点协议加密方式 | 规则 | 内核功能建议
14 | url: https://github.com/Dreamacro/clash/issues/new/choose
15 | about: 原版内核 | P核
16 |
17 | - name: META CORE | MIHOMO CORE & 内核问题 | 节点协议加密方式 | 规则 | 内核功能建议
18 | url: https://github.com/MetaCubeX/mihomo/issues/new/choose
19 | about: M核
20 |
21 | - name: 在线订阅转换问题 | 在线订阅转换增加节点协议加密方式 | 在线订阅转换功能建议
22 | url: https://github.com/tindy2013/subconverter/issues/new/choose
23 | about: 提供并增加预设订阅转换服务地址请通过上方 功能请求 发表
24 |
25 | - name: DASHBOARD & 控制面板问题 | 面板功能建议
26 | url: https://github.com/Dreamacro/clash-dashboard/issues/new/choose
27 | about: 面板问题先请尝试 更换近期未使用过面板设备 或 使用浏览器隐私匿名无痕...模式 访问
28 |
29 | - name: YACD & 控制面板问题 | 面板功能建议
30 | url: https://github.com/haishanh/yacd/issues/new/choose
31 | about: 面板问题先请尝试 更换近期未使用过面板设备 或 使用浏览器隐私匿名无痕...模式 访问
32 |
33 | - name: METACUBEXD & 控制面板问题 | 面板功能建议
34 | url: https://github.com/MetaCubeX/metacubexd/issues/new/choose
35 | about: 面板问题先请尝试 更换近期未使用过面板设备 或 使用浏览器隐私匿名无痕...模式 访问
36 |
37 | - name: YACD-META & 控制面板问题 | 面板功能建议
38 | url: https://github.com/MetaCubeX/Yacd-meta/issues/new/choose
39 | about: 面板问题先请尝试 更换近期未使用过面板设备 或 使用浏览器隐私匿名无痕...模式 访问
40 |
41 | - name: DASHBOARD-META & 控制面板问题 | 面板功能建议
42 | url: https://github.com/MetaCubeX/Razord-meta/issues/new/choose
43 | about: 面板问题先请尝试 更换近期未使用过面板设备 或 使用浏览器隐私匿名无痕...模式 访问
44 |
45 | - name: 我想讨论OpenClash的某个功能 | 我不确定是什么问题 | 我的问题不属于上述选项 | 我的问题无法得到原作者原仓库的帮助
46 | url: https://github.com/vernesong/OpenClash/discussions/new/choose
47 | about: 礼多人不怪 而且有时还很有帮助
48 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: 功能请求
2 | description: Suggest an idea for this project
3 | title: "[Feature] "
4 | labels: [enhancement]
5 | body:
6 |
7 | - type: checkboxes
8 | id: verify_step
9 | attributes:
10 | label: Verify Steps
11 | description: "在提交之前,请确认 / Please verify that you've followed these steps"
12 | options:
13 | - label: Tracker 我已经在 [Issue Tracker](……/) 中找过我要提出的问题
14 | required: true
15 | - label: Latest 我已经**使用最新 Dev 版本**查看过,并不包含该功能特性或者还不完善
16 | required: true
17 | - label: Relevant 我知道 OpenClash 与 内核(Core)、控制面板(Dashboard)、在线订阅转换(Subconverter)等项目之间**无直接关系**,仅相互调用
18 | required: true
19 | - label: Definite 这确实是 OpenClash 应包含的特性
20 | required: true
21 | - label: Contributors 我有能力协助 OpenClash 开发或完善此功能特性
22 | required: false
23 | - label: Meaningless 我提交的**是无意义的**催促更新或修复请求
24 | required: false
25 |
26 | - type: textarea
27 | attributes:
28 | label: Describe the Feature
29 | description: |
30 | 清晰明了地描述您的想法. 例如你想实现什么 Feature 特性或功能? 如何实现该功能? 目前 OpenClash 的行为是什么?
31 | validations:
32 | required: true
33 |
34 | - type: textarea
35 | attributes:
36 | label: Describe Alternatives
37 | description: |
38 | 对您考虑过的任何替代解决方案或备选功能进行清晰、简洁的描述.
39 | validations:
40 | required: false
41 |
--------------------------------------------------------------------------------
/.github/workflows/clear_cache.yml:
--------------------------------------------------------------------------------
1 | name: Clean jsDelivr Cache
2 |
3 | on:
4 | push:
5 | branches:
6 | - master
7 | - dev
8 | - core
9 | - package
10 | paths-ignore:
11 | - 'README.md'
12 | - 'LICENSE'
13 |
14 | jobs:
15 | jsDelivr:
16 | runs-on: ubuntu-latest
17 |
18 | steps:
19 | - name: Apt Update
20 | env:
21 | DEBIAN_FRONTEND: noninteractive
22 | run: |
23 | sudo apt-get update
24 | sudo apt-get -y install jq
25 |
26 | - uses: actions/checkout@v4
27 |
28 | # https://github.com/marketplace/actions/git-changesets
29 | - id: changed_files
30 | name: git-changesets
31 | uses: collin-miller/git-changesets@v1
32 | with:
33 | # Default format is 'csv'. Other valid options are 'space-delimited' and 'json'.
34 | format: json
35 |
36 | - name: Clean jsDelivr Cache
37 | run: |
38 | echo '${{ steps.changed_files.outputs.added_modified }}' | jq -r '.[]' | while read file; do
39 | # echo ${{ steps.changed_files.outputs.all }}
40 | curl -sL --retry 3 "https://purge.jsdelivr.net/gh/vernesong/OpenClash@${{ github.ref_name }}/${file}"
41 | done
42 |
--------------------------------------------------------------------------------
/.github/workflows/close_issues.yml:
--------------------------------------------------------------------------------
1 |
2 | name: Mark and close stale issues
3 |
4 | on:
5 | schedule:
6 | - cron: "30 8 * * *"
7 |
8 | jobs:
9 | stale:
10 |
11 | runs-on: ubuntu-latest
12 |
13 | steps:
14 | - uses: actions/stale@v5
15 | with:
16 | stale-issue-message: 'This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 5 days'
17 | days-before-stale: 60
18 | days-before-close: 5
19 | operations-per-run: 200
20 |
--------------------------------------------------------------------------------
/.github/workflows/delete_old_workflow.yml:
--------------------------------------------------------------------------------
1 | name: Delete old workflow runs
2 | on:
3 | schedule:
4 | - cron: '0 0 1 * *'
5 | # Run monthly, at 00:00 on the 1st day of month.
6 |
7 | jobs:
8 | del_runs:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Delete workflow runs
12 | uses: Mattraks/delete-workflow-runs@v2
13 | with:
14 | token: ${{ github.token }}
15 | repository: ${{ github.repository }}
16 | retain_days: 30
17 | keep_minimum_runs: 6
--------------------------------------------------------------------------------
/.github/workflows/master_release_sync.yml:
--------------------------------------------------------------------------------
1 | name: Sync Core and Package to Master When release
2 | on:
3 | push:
4 | tags:
5 | - "v*"
6 | workflow_dispatch:
7 |
8 | jobs:
9 | Sync_core_to_master:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Apt Update
13 | env:
14 | DEBIAN_FRONTEND: noninteractive
15 | run: |
16 | sudo apt-get update
17 | sudo apt-get -y install git
18 |
19 | - name: Clone OpenClash Repository
20 | uses: actions/checkout@v4
21 | with:
22 | ref: core
23 |
24 | - name: Sync dev core to master
25 | run: |
26 | if [ -n "$(diff -r ./master/ ./dev/)" ]; then
27 | rm -rf ./master/premium/*
28 | rm -rf ./master/dev/*
29 | rm -rf ./master/meta/*
30 | rm -rf ./master/core_version
31 | cp -rf "./dev/." "./master/"
32 | git config user.name 'github-actions[bot]'
33 | git config user.email 'github-actions[bot]@users.noreply.github.com'
34 | git add .
35 | git commit -m "Release: Auto sync dev core"
36 | git push
37 | else
38 | echo "master core already sync to dev, exit"
39 | fi
40 |
41 | - name: Clone OpenClash Repository
42 | uses: actions/checkout@v4
43 | with:
44 | ref: package
45 |
46 | - name: Sync dev package to master
47 | run: |
48 | if [ -n "$(diff -r ./master/ ./dev/)" ]; then
49 | rm -rf ./master/README.md
50 | rm -rf ./master/luci-app-openclash*
51 | rm -rf ./master/version
52 | cp -rf "./dev/." "./master/"
53 | git config user.name 'github-actions[bot]'
54 | git config user.email 'github-actions[bot]@users.noreply.github.com'
55 | git add .
56 | git commit -m "Release: Auto sync dev package"
57 | git push
58 | else
59 | echo "master package already sync to dev, exit"
60 | fi
61 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019-2024 vernesong
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/announcement:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "zh": "Smart 策略组内核现已支持 policy-priority 参数来自定义调整节点权重,请自行替换测试、使用。",
4 | "en": "The Smart policy group core now supports the policy-priority parameter to customize node weights. Please replace it for testing and use."
5 | },
6 | {
7 | "zh": "如在更新内核后出现【Parse config error: path is not subpath of home directory】的错误时请在最新版插件设置页面启用【跳过安全路径检查】选项。",
8 | "en": "If you get [Parse config error: path is not subpath of home directory] after updating the core, please enable [Skip Safe Path Check] option in the settings page of the latest dev version of the OpenClash."
9 | }
10 | ]
--------------------------------------------------------------------------------
/img/BTC-Wallet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/BTC-Wallet.png
--------------------------------------------------------------------------------
/img/ETH-Wallet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/ETH-Wallet.png
--------------------------------------------------------------------------------
/img/USDT-Wallet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/USDT-Wallet.png
--------------------------------------------------------------------------------
/img/config-subscribe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/config-subscribe.png
--------------------------------------------------------------------------------
/img/config-subscribe1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/config-subscribe1.png
--------------------------------------------------------------------------------
/img/config.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/config.png
--------------------------------------------------------------------------------
/img/game-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/game-settings.png
--------------------------------------------------------------------------------
/img/game1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/game1.png
--------------------------------------------------------------------------------
/img/game2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/game2.png
--------------------------------------------------------------------------------
/img/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/log.png
--------------------------------------------------------------------------------
/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/logo.png
--------------------------------------------------------------------------------
/img/meta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/meta.png
--------------------------------------------------------------------------------
/img/proxy1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/proxy1.png
--------------------------------------------------------------------------------
/img/proxy2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/proxy2.png
--------------------------------------------------------------------------------
/img/proxy3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/proxy3.png
--------------------------------------------------------------------------------
/img/proxy4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/proxy4.png
--------------------------------------------------------------------------------
/img/servers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/servers.png
--------------------------------------------------------------------------------
/img/set1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set1.png
--------------------------------------------------------------------------------
/img/set10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set10.png
--------------------------------------------------------------------------------
/img/set11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set11.png
--------------------------------------------------------------------------------
/img/set12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set12.png
--------------------------------------------------------------------------------
/img/set2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set2.png
--------------------------------------------------------------------------------
/img/set3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set3.png
--------------------------------------------------------------------------------
/img/set4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set4.png
--------------------------------------------------------------------------------
/img/set6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set6.png
--------------------------------------------------------------------------------
/img/set7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set7.png
--------------------------------------------------------------------------------
/img/set8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set8.png
--------------------------------------------------------------------------------
/img/set9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/set9.png
--------------------------------------------------------------------------------
/img/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/settings.png
--------------------------------------------------------------------------------
/img/state.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/state.png
--------------------------------------------------------------------------------
/img/state1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/state1.png
--------------------------------------------------------------------------------
/img/state2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/state2.png
--------------------------------------------------------------------------------
/img/state3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/state3.png
--------------------------------------------------------------------------------
/img/state4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/state4.png
--------------------------------------------------------------------------------
/img/state5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/img/state5.png
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/model/cbi/openclash/log.lua:
--------------------------------------------------------------------------------
1 | --
2 | local NXFS = require "nixio.fs"
3 | local SYS = require "luci.sys"
4 | local HTTP = require "luci.http"
5 |
6 | m = Map("openclash", translate("Server Logs"))
7 | s = m:section(TypedSection, "openclash")
8 | m.pageaction = false
9 | s.anonymous = true
10 | s.addremove=false
11 |
12 | log = s:option(TextValue, "clog")
13 | log.readonly=true
14 | log.pollcheck=true
15 | log.template="openclash/log"
16 | log.description = translate("")
17 | log.rows = 29
18 |
19 | m:append(Template("openclash/toolbar_show"))
20 | m:append(Template("openclash/config_editor"))
21 |
22 | return m
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/model/cbi/openclash/other-file-edit.lua:
--------------------------------------------------------------------------------
1 | local NXFS = require "nixio.fs"
2 | local SYS = require "luci.sys"
3 | local HTTP = require "luci.http"
4 | local fs = require "luci.openclash"
5 | local file_path = ""
6 | local edit_file_name = "/tmp/openclash_edit_file_name"
7 |
8 | for i = 2, #(arg) do
9 | file_path = file_path .. "/" .. luci.http.urlencode(arg[i])
10 | end
11 |
12 | if not fs.isfile(file_path) and file_path ~= "" then
13 | file_path = luci.http.urldecode(file_path)
14 | end
15 |
16 | --re-get file path to save
17 | if NXFS.readfile(edit_file_name) ~= file_path and fs.isfile(file_path) then
18 | NXFS.writefile(edit_file_name, file_path)
19 | else
20 | if not fs.isfile(file_path) and fs.isfile(edit_file_name) then
21 | file_path = NXFS.readfile(edit_file_name)
22 | fs.unlink(edit_file_name)
23 | end
24 | end
25 |
26 | m = Map("openclash", translate("File Edit"))
27 | m.pageaction = false
28 | m.redirect = luci.dispatcher.build_url("admin/services/openclash/"..arg[1])
29 | s = m:section(TypedSection, "openclash")
30 | s.anonymous = true
31 | s.addremove=false
32 |
33 | o = s:option(TextValue, "edit_file")
34 | o.rows = 50
35 | o.wrap = "off"
36 |
37 | function o.write(self, section, value)
38 | if value then
39 | value = value:gsub("\r\n?", "\n")
40 | local old_value = NXFS.readfile(file_path)
41 | if value ~= old_value then
42 | NXFS.writefile(file_path, value)
43 | end
44 | end
45 | end
46 |
47 | function o.cfgvalue(self, section)
48 | return NXFS.readfile(file_path) or ""
49 | end
50 |
51 | local t = {
52 | {Commit, Back}
53 | }
54 |
55 | a = m:section(Table, t)
56 |
57 | o = a:option(Button, "Commit", " ")
58 | o.inputtitle = translate("Commit Settings")
59 | o.inputstyle = "apply"
60 | o.write = function()
61 | luci.http.redirect(m.redirect)
62 | end
63 |
64 | o = a:option(Button,"Back", " ")
65 | o.inputtitle = translate("Back Settings")
66 | o.inputstyle = "reset"
67 | o.write = function()
68 | luci.http.redirect(m.redirect)
69 | end
70 |
71 | m:append(Template("openclash/config_editor"))
72 | m:append(Template("openclash/toolbar_show"))
73 | return m
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/cfg_check.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 |
3 | <%
4 | local val = self:cfgvalue(section)
5 | if val == translate("Enable") or val == translate("Enabled") or val == translate("Config Normal") or val == translate("Exist") then
6 | %>
7 |
8 | <%
9 | else
10 | %>
11 |
12 | <%
13 | end
14 | write(pcdata(val))
15 | %>
16 |
17 |
18 | <%+cbi/valuefooter%>
19 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/download_rule.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 |
3 |
37 |
38 |
39 |
40 |
41 | <%+cbi/valuefooter%>
42 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/dvalue.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 |
3 |
4 | <%:Note: Please Upload File According To File Type, File Will Be Saved To The Prompt Path%>
5 |
6 |
7 | <%
8 | local val = self:cfgvalue(section) or self.default or ""
9 | write(pcdata(val))
10 | %>
11 |
12 |
13 | <%+cbi/valuefooter%>
14 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/flush_fakeip_cache.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 |
3 |
34 |
35 |
36 |
37 | <%+cbi/valuefooter%>
38 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/input_file_name.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 |
18 |
19 | <%+cbi/valuefooter%>
20 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/input_rename.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 |
22 |
23 | <%+cbi/valuefooter%>
24 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/other_button.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 | <% if self:cfgvalue(section) ~= false then %>
3 |
" style="display: <%= display %>" type="submit"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self.inputtitle or self.title)%> />
4 | <% else %>
5 | -
6 | <% end %>
7 | <%+cbi/valuefooter%>
8 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/switch_mode.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | <%:Collecting data...%>
7 |
8 |
9 |
10 |
11 |
12 |
45 |
46 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/update_config.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 | <%
3 | local fs = require "luci.openclash"
4 | local filename = fs.filename(self:cfgvalue(section)) or "config"
5 | local display = self.display or ""
6 | local idname = math.random(1000)..(string.match(filename, "[%w_]+") or "")
7 | %>
8 |
19 |
20 | <%
21 | if display == "" then
22 | %>
23 |
24 | <%
25 | end
26 | %>
27 | <%+cbi/valuefooter%>
28 |
--------------------------------------------------------------------------------
/luci-app-openclash/luasrc/view/openclash/upload.htm:
--------------------------------------------------------------------------------
1 | <%+cbi/valueheader%>
2 |
3 | <%:Upload File Type%> <%:(Click to select)%>
4 |
5 | <%:Config File%> (.yaml)
6 | <%:Proxy Provider File%>
7 | <%:Rule Provider File%>
8 | [Meta] <%:Core File%> (.tar.gz)
9 | <%:Backup File%> (.tar.gz)
10 |
11 |
12 |
13 |
14 |
15 | <%+cbi/valuefooter%>
16 |
17 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/Country.mmdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/etc/openclash/Country.mmdb
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/GeoIP.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/etc/openclash/GeoIP.dat
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/GeoSite.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/etc/openclash/GeoSite.dat
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_chnroute6_pass.list:
--------------------------------------------------------------------------------
1 | #baidu.com
2 | #2400:da00::dbf:0:100
3 | ##解决绕过大陆后谷歌商店无法更新
4 | services.googleapis.cn
5 | googleapis.cn
6 | xn--ngstr-lra8j.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_chnroute_pass.list:
--------------------------------------------------------------------------------
1 | #baidu.com
2 | #114.114.114.114
3 | ##解决绕过大陆后谷歌商店无法更新
4 | services.googleapis.cn
5 | googleapis.cn
6 | xn--ngstr-lra8j.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns.list:
--------------------------------------------------------------------------------
1 | #baidu.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_domain_dns_policy.list:
--------------------------------------------------------------------------------
1 | #'www.baidu.com': '114.114.114.114'
2 | #'+.internal.crop.com': '10.0.0.1'
3 | #"_vlmcs._tcp.lan": '127.0.0.1:53'
4 | #"geosite:category-games@cn": [https://doh.pub/dns-query, 114.114.114.114, 223.5.5.5]
5 | #"geosite:google": [tls://8.8.4.4, https://1.0.0.1/dns-query]
6 | #"geosite:cn": [https://doh.pub/dns-query, 114.114.114.114, 223.5.5.5]
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_fallback_filter.yaml:
--------------------------------------------------------------------------------
1 | # If IP addresses resolved with servers in `nameservers` are in the specified
2 | # subnets below, they are considered invalid and results from `fallback`
3 | # servers are used instead.
4 | #
5 | # IP address resolved with servers in `nameserver` is used when
6 | # `fallback-filter.geoip` is true and when GEOIP of the IP address is `CN`.
7 | #
8 | # If `fallback-filter.geoip` is false, results from `nameserver` nameservers
9 | # are always used if not match `fallback-filter.ipcidr`.
10 | #
11 | # This is a countermeasure against DNS pollution attacks.
12 |
13 | fallback-filter:
14 | geoip: true
15 | geoip-code: CN
16 | ipcidr:
17 | - ::/128
18 | - ::1/128
19 | - 2001::/32
20 | - 0.0.0.0/8
21 | - 10.0.0.0/8
22 | - 100.64.0.0/10
23 | - 127.0.0.0/8
24 | - 169.254.0.0/16
25 | - 172.16.0.0/12
26 | - 192.0.0.0/24
27 | - 192.0.2.0/24
28 | - 192.88.99.0/24
29 | - 192.168.0.0/16
30 | - 198.18.0.0/15
31 | - 198.51.100.0/24
32 | - 203.0.113.0/24
33 | - 224.0.0.0/4
34 | - 240.0.0.0/4
35 | - 255.255.255.255/32
36 | domain:
37 | - "+.google.com"
38 | - "+.facebook.com"
39 | - "+.youtube.com"
40 | - "+.githubusercontent.com"
41 | - "+.googlevideo.com"
42 | - "+.msftconnecttest.com"
43 | - "+.msftncsi.com"
44 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_firewall_rules.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . /usr/share/openclash/log.sh
3 | . /lib/functions.sh
4 |
5 | # This script is called by /etc/init.d/openclash
6 | # Add your custom firewall rules here, they will be added after the end of the OpenClash iptables rules
7 |
8 | LOG_OUT "Tip: Start Add Custom Firewall Rules..."
9 |
10 | exit 0
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_hosts.list:
--------------------------------------------------------------------------------
1 | # Static hosts for DNS server and connection establishment (like /etc/hosts)
2 | #
3 | # Wildcard hostnames are supported (e.g. *.clash.dev, *.foo.*.example.com)
4 | # Non-wildcard domain names have a higher priority than wildcard domain names
5 | # e.g. foo.example.com > *.example.com > .example.com
6 | # P.S. +.foo.com equals to .foo.com and foo.com
7 |
8 | # '*.clash.dev': 127.0.0.1
9 | # '.dev': 127.0.0.1
10 | # 'alpha.clash.dev': '::1'
11 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv4.list:
--------------------------------------------------------------------------------
1 | 0.0.0.0/8
2 | 10.0.0.0/8
3 | 100.64.0.0/10
4 | 127.0.0.0/8
5 | 169.254.0.0/16
6 | 172.16.0.0/12
7 | 192.168.0.0/16
8 | 224.0.0.0/4
9 | 240.0.0.0/4
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_localnetwork_ipv6.list:
--------------------------------------------------------------------------------
1 | ::/128
2 | ::1/128
3 | ::ffff:0:0/96
4 | ::ffff:0:0:0/96
5 | 64:ff9b::/96
6 | 100::/64
7 | 2001::/32
8 | 2001:20::/28
9 | 2001:db8::/32
10 | 2002::/16
11 | fc00::/7
12 | fe80::/10
13 | ff00::/8
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules.list:
--------------------------------------------------------------------------------
1 | rules:
2 | ##- PROCESS-NAME,curl,DIRECT #匹配路由自身进程(curl直连)
3 | ##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组)
4 | ##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组)
5 | ##- DOMAIN,google.com,Proxy #匹配域名(交由Proxy代理服务器组)
6 | ##- DOMAIN-SUFFIX,ad.com,REJECT #匹配域名后缀(拒绝)
7 | ##- IP-CIDR,127.0.0.0/8,DIRECT #匹配数据目标IP(直连)
8 | ##- SRC-IP-CIDR,192.168.1.201/32,DIRECT #匹配数据发起IP(直连)
9 | ##- DST-PORT,80,DIRECT #匹配数据目标端口(直连)
10 | ##- SRC-PORT,7777,DIRECT #匹配数据源端口(直连)
11 | ##- GEOSITE,category-public-tracker,DIRECT #匹配GEOSITE数据库规则(直连)
12 | ##- DOMAIN-REGEX,^abc.*com,PROXY #正则匹配域名
13 | ##- RULE-SET,providername,PROXY #匹配规则集
14 |
15 | ##- IP-CIDR6,2620:0:2d0:200::7/32,PROXY
16 | ##- IP-SUFFIX,8.8.8.8/24,PROXY
17 | ##- IP-ASN,13335,DIRECT
18 |
19 | ##- SRC-GEOIP,cn,DIRECT
20 | ##- SRC-IP-ASN,9808,DIRECT
21 | ##- SRC-IP-SUFFIX,192.168.1.201/8,DIRECT
22 |
23 | ##- IN-PORT,7890,PROXY
24 | ##- IN-TYPE,SOCKS/HTTP,PROXY
25 | ##- IN-USER,mihomo,PROXY
26 | ##- IN-NAME,ss,PROXY
27 |
28 | ##- PROCESS-NAME-REGEX,curl$,PROXY
29 | ##- PROCESS-NAME-REGEX,(?i)Telegram,PROXY
30 | ##- PROCESS-NAME-REGEX,.*telegram.*,PROXY
31 |
32 | ##- NETWORK,udp,DIRECT
33 | ##- DSCP,4,DIRECT
34 |
35 | ##- AND,((DOMAIN,baidu.com),(NETWORK,UDP)),DIRECT
36 | ##- OR,((NETWORK,UDP),(DOMAIN,baidu.com)),REJECT
37 | ##- NOT,((DOMAIN,baidu.com)),PROXY
38 | ##- SUB-RULE,(NETWORK,tcp),sub-rule
39 |
40 | ##排序在上的规则优先生效,如添加(去除规则前的#号):
41 | ##IP段:192.168.1.2-192.168.1.200 直连
42 | ##- SRC-IP-CIDR,192.168.1.2/31,DIRECT
43 | ##- SRC-IP-CIDR,192.168.1.4/30,DIRECT
44 | ##- SRC-IP-CIDR,192.168.1.8/29,DIRECT
45 | ##- SRC-IP-CIDR,192.168.1.16/28,DIRECT
46 | ##- SRC-IP-CIDR,192.168.1.32/27,DIRECT
47 | ##- SRC-IP-CIDR,192.168.1.64/26,DIRECT
48 | ##- SRC-IP-CIDR,192.168.1.128/26,DIRECT
49 | ##- SRC-IP-CIDR,192.168.1.192/29,DIRECT
50 | ##- SRC-IP-CIDR,192.168.1.200/32,DIRECT
51 |
52 | ##IP段:192.168.1.202-192.168.1.255 直连
53 | ##- SRC-IP-CIDR,192.168.1.202/31,DIRECT
54 | ##- SRC-IP-CIDR,192.168.1.204/30,DIRECT
55 | ##- SRC-IP-CIDR,192.168.1.208/28,DIRECT
56 | ##- SRC-IP-CIDR,192.168.1.224/27,DIRECT
57 |
58 | ##此时IP为192.168.1.1和192.168.1.201的客户端流量走代理(策略),其余客户端不走代理
59 | ##因为Fake-IP模式下,IP地址为192.168.1.1的路由器自身流量可走代理(策略),所以需要排除
60 |
61 | ##仅设置路由器自身直连:
62 | ##- SRC-IP-CIDR,192.168.1.1/32,DIRECT
63 | ##- SRC-IP-CIDR,198.18.0.1/32,DIRECT
64 |
65 | ##DDNS
66 | ##- DOMAIN-KEYWORD,synology,DIRECT
67 | ##- DOMAIN-KEYWORD,quickconnect,DIRECT
68 | ##- DOMAIN-SUFFIX,checkip.dyndns.org,DIRECT
69 | ##- DOMAIN-SUFFIX,checkipv6.dyndns.org,DIRECT
70 | ##- DOMAIN-SUFFIX,checkip.synology.com,DIRECT
71 | ##- DOMAIN-SUFFIX,ifconfig.co,DIRECT
72 | ##- DOMAIN-SUFFIX,api.myip.com,DIRECT
73 | ##- DOMAIN-SUFFIX,ip-api.com,DIRECT
74 | ##- DOMAIN-SUFFIX,ipapi.co,DIRECT
75 | ##- DOMAIN-SUFFIX,ip6.seeip.org,DIRECT
76 | ##- DOMAIN-SUFFIX,members.3322.org,DIRECT
77 |
78 | ##在线IP段转CIDR地址:http://ip2cidr.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_rules_2.list:
--------------------------------------------------------------------------------
1 | rules:
2 | ##- DOMAIN-SUFFIX,google.com,Proxy #匹配域名后缀(交由Proxy代理服务器组)
3 | ##- DOMAIN-KEYWORD,google,Proxy #匹配域名关键字(交由Proxy代理服务器组)
4 | ##- DOMAIN,google.com,Proxy #匹配域名(交由Proxy代理服务器组)
5 | ##- DOMAIN-SUFFIX,ad.com,REJECT #匹配域名后缀(拒绝)
6 | ##- IP-CIDR,127.0.0.0/8,DIRECT #匹配数据目标IP(直连)
7 | ##- SRC-IP-CIDR,192.168.1.201/32,DIRECT #匹配数据发起IP(直连)
8 | ##- DST-PORT,80,DIRECT #匹配数据目标端口(直连)
9 | ##- SRC-PORT,7777,DIRECT #匹配数据源端口(直连)
10 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/custom/openclash_custom_sniffer.yaml:
--------------------------------------------------------------------------------
1 | # 嗅探域名 可选配置
2 | sniffer:
3 | ## 对 redir-host 类型识别的流量进行强制嗅探
4 | ## 如:Tun、Redir 和 TProxy 并 DNS 为 redir-host 皆属于
5 | force-dns-mapping: true
6 | ## 对所有未获取到域名的流量进行强制嗅探
7 | parse-pure-ip: true
8 | # 是否使用嗅探结果作为实际访问,默认 true
9 | # 全局配置,优先级低于 sniffer.sniff 实际配置
10 | override-destination: true
11 | sniff: # TLS 和 QUIC 默认如果不配置 ports 默认嗅探 443
12 | QUIC:
13 | ports: [ 443 ]
14 |
15 | TLS:
16 | ports: [443, 8443]
17 |
18 | # 默认嗅探 80
19 | HTTP:
20 | ports: [80, 8080-8880]
21 | # 是否使用嗅探结果作为实际访问
22 | override-destination: true
23 | force-domain:
24 | # - '+' # Force all domain to use sniffer
25 | - "+.netflix.com"
26 | - "+.nflxvideo.net"
27 | - "+.amazonaws.com"
28 | - "+.media.dssott.com"
29 | ## 对嗅探结果进行跳过
30 | skip-domain:
31 | - '+.apple.com'
32 | - Mijia Cloud
33 | - dlg.io.mi.com
34 | - +.oray.com
35 | - +.sunlogin.net
36 | - +.push.apple.com
37 | #- geosite:cn
38 | # skip-src-address: # 对于来源ip跳过嗅探
39 | # - 192.168.0.3/32
40 | # skip-dst-address: # 对于目标ip跳过嗅探
41 | # - 192.168.0.3/32
42 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/ABC:
--------------------------------------------------------------------------------
1 | payload:
2 | # > ABC
3 | - DOMAIN-SUFFIX,edgedatg.com
4 | - DOMAIN-SUFFIX,go.com
5 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/AI Suite:
--------------------------------------------------------------------------------
1 | payload:
2 | # > ChatGPT
3 | - DOMAIN-SUFFIX,ai.com
4 | - DOMAIN-SUFFIX,chatgpt.com
5 | - DOMAIN-SUFFIX,openai.com
6 |
7 | # > Chat GPT API & CDN
8 | - DOMAIN-SUFFIX,cdn.oaistatic.com
9 | - DOMAIN,chat.openai.com.cdn.cloudflare.net
10 | - DOMAIN,openaiapi-site.azureedge.net
11 | - DOMAIN,openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net
12 | - DOMAIN,openaicomproductionae4b.blob.core.windows.net
13 | - DOMAIN,production-openaicom-storage.azureedge.net
14 |
15 | - DOMAIN-SUFFIX,oaistatic.com
16 | - DOMAIN-SUFFIX,oaiusercontent.com
17 |
18 | - DOMAIN-SUFFIX,o33249.ingest.sentry.io
19 |
20 | # > Claude
21 | - DOMAIN-SUFFIX,anthropic.com
22 | - DOMAIN-SUFFIX,claude.ai
23 |
24 | # > Copilot
25 | - DOMAIN-SUFFIX,copilot.microsoft.com
26 |
27 | # > Gemini
28 | - DOMAIN-SUFFIX,gemini.google.com
29 | - DOMAIN-SUFFIX,generativelanguage.googleapis.com
30 | - DOMAIN-SUFFIX,proactivebackend-pa.googleapis.com
31 |
32 | # > Meta AI
33 | - DOMAIN-SUFFIX,meta.ai
34 |
35 | # > Perplexity AI
36 | - DOMAIN-SUFFIX,perplexity.ai
37 |
38 | # > Siri
39 | - DOMAIN-SUFFIX,apple-relay.apple.com
40 | - DOMAIN,guzzoni.smoot.apple.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Abema_TV:
--------------------------------------------------------------------------------
1 | payload:
2 | # > AbemaTV
3 | # - USER-AGENT,AbemaTV*
4 | - PROCESS-NAME,tv.abema
5 | - DOMAIN-SUFFIX,abema.io
6 | - DOMAIN-SUFFIX,abema.tv
7 | - DOMAIN-SUFFIX,akamaized.net
8 | - DOMAIN-SUFFIX,ameba.jp
9 | - DOMAIN-SUFFIX,hayabusa.io
10 | - DOMAIN-KEYWORD,abematv.akamaized.net
11 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Amazon:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Amazon Prime Video
3 | # - USER-AGENT,InstantVideo.US*
4 | # - USER-AGENT,Prime%20Video*
5 |
6 | - DOMAIN-KEYWORD,avoddashs
7 |
8 | - DOMAIN-SUFFIX,aiv-cdn.net
9 | - DOMAIN-SUFFIX,aiv-delivery.net
10 | - DOMAIN-SUFFIX,amazonprimevideos.com
11 | - DOMAIN-SUFFIX,amazonvideo.cc
12 | - DOMAIN-SUFFIX,amazonvideo.com
13 | - DOMAIN-SUFFIX,amazonvideodirect.cc
14 | - DOMAIN-SUFFIX,atv-ext.amazon.com
15 | - DOMAIN-SUFFIX,atv-ext-eu.amazon.com
16 | - DOMAIN-SUFFIX,atv-ext-fe.amazon.com
17 | - DOMAIN-SUFFIX,atv-ps.amazon.com
18 | - DOMAIN-SUFFIX,atv-ps-eu.amazon.co.uk
19 | - DOMAIN-SUFFIX,atv-ps-eu.amazon.com
20 | - DOMAIN-SUFFIX,atv-ps-fe.amazon.co.jp
21 | - DOMAIN-SUFFIX,atv-ps-fe.amazon.com
22 | - DOMAIN-SUFFIX,fls-na.amazon.com
23 | - DOMAIN-SUFFIX,media-amazon.com
24 | - DOMAIN-SUFFIX,primevideo.cc
25 | - DOMAIN-SUFFIX,primevideo.com
26 | - DOMAIN-SUFFIX,prime-video.com
27 | - DOMAIN-SUFFIX,primevideo.info
28 | - DOMAIN-SUFFIX,primevideo.org
29 | - DOMAIN-SUFFIX,primevideo.tv
30 | - DOMAIN-SUFFIX,pv-cdn.net
31 | - DOMAIN-SUFFIX,video.a2z.com
32 |
33 | - DOMAIN,avodmp4s3ww-a.akamaihd.net
34 | - DOMAIN,d1v5ir2lpwr8os.cloudfront.net
35 | - DOMAIN,d1y002tclu9djj.cloudfront.net
36 | - DOMAIN,d22qjgkvxw22r6.cloudfront.net
37 | - DOMAIN,d25xi40x97liuc.cloudfront.net
38 | - DOMAIN,dmqdd6hw24ucf.cloudfront.net
39 | - DOMAIN,d27xxe7juh1us6.cloudfront.net
40 |
41 | - DOMAIN,dualstack.pefs-alb-266603904.eu-west-1.elb.amazonaws.com
42 |
43 | # // 美区网页版需二选一走代理,如 URL-REGEX 则需 MITM www.amazon.com
44 | # // DOMAIN,www.amazon.com
45 | # URL-REGEX,^https?:\/\/www\.amazon\.com\/(Amazon-Video|gp\/video)\/
46 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Apple:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Apple API
3 | - DOMAIN-KEYWORD,apple.com.akadns.net
4 | - DOMAIN-KEYWORD,icloud.com.akadns.net
5 | - DOMAIN-SUFFIX,aaplimg.com
6 | - DOMAIN-SUFFIX,apple.co
7 | - DOMAIN-SUFFIX,apple.com
8 | - DOMAIN-SUFFIX,apple-cloudkit.com
9 | - DOMAIN-SUFFIX,apple-mapkit.com
10 | - DOMAIN-SUFFIX,appsto.re
11 | - DOMAIN-SUFFIX,cdn-apple.com
12 | - DOMAIN-SUFFIX,icloud.com
13 | - DOMAIN-SUFFIX,icloud-content.com
14 | - DOMAIN-SUFFIX,itunes.com
15 | - DOMAIN-SUFFIX,me.com
16 | - DOMAIN-SUFFIX,mzstatic.com
17 | - IP-CIDR,17.0.0.0/8,no-resolve
18 | - IP-CIDR,63.92.224.0/19,no-resolve
19 | - IP-CIDR,65.199.22.0/23,no-resolve
20 | - IP-CIDR,139.178.128.0/18,no-resolve
21 | - IP-CIDR,144.178.0.0/19,no-resolve
22 | - IP-CIDR,144.178.36.0/22,no-resolve
23 | - IP-CIDR,144.178.48.0/20,no-resolve
24 | - IP-CIDR,192.35.50.0/24,no-resolve
25 | - IP-CIDR,198.183.17.0/24,no-resolve
26 | - IP-CIDR,205.180.175.0/24,no-resolve
27 |
28 | # > Apple News
29 | - DOMAIN-SUFFIX,apple.comscoreresearch.com
30 | - DOMAIN-SUFFIX,apple.news
31 |
32 | # > Apple Maps
33 | - PROCESS-NAME,com.apple.geod
34 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Apple_Music:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Apple Music
3 | # - USER-AGENT,Music*
4 | - PROCESS-NAME,music
5 | - DOMAIN-SUFFIX,applemusic.com
6 | - DOMAIN-SUFFIX,blobstore.apple.com
7 | - DOMAIN-SUFFIX,music.apple.com
8 | - DOMAIN,aod.itunes.apple.com
9 | - DOMAIN,aod-ssl.itunes.apple.com
10 | - DOMAIN,audio.itunes.apple.com
11 | - DOMAIN,audio-ssl.itunes.apple.com
12 | - DOMAIN,mvod.itunes.apple.com
13 | - DOMAIN,streamingaudio.itunes.apple.com
14 |
15 | # iCloud Music Library
16 | - DOMAIN-SUFFIX,blobstore.apple.com
17 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Apple_News:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Apple News and Apple Map TOMTOM Version
3 | # - USER-AGENT,AppleNews*
4 | # - USER-AGENT,com.apple.news*
5 | - DOMAIN,gspe1-ssl.ls.apple.com
6 | # - USER-AGENT,News*
7 | # - DOMAIN,apple.comscoreresearch.com
8 | # - DOMAIN,gateway.icloud.com
9 | # - DOMAIN,news-client.apple.com
10 | # - DOMAIN,news-edge.apple.com
11 | # - DOMAIN,news-events.apple.com
12 | # - DOMAIN-SUFFIX,apple.news
13 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Apple_TV:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Apple TV
3 | - DOMAIN,np-edge.itunes.apple.com
4 | - DOMAIN,play-edge.itunes.apple.com
5 | - DOMAIN-SUFFIX,tv.apple.com
6 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/BBC_iPlayer:
--------------------------------------------------------------------------------
1 | payload:
2 | # > BBC iPlayer
3 | - PROCESS-NAME,bbc.iplayer.android
4 | - DOMAIN-KEYWORD,bbcfmt
5 | - DOMAIN,aod-dash-uk-live.akamaized.net
6 | - DOMAIN,aod-hls-uk-live.akamaized.net
7 | - DOMAIN,vod-dash-uk-live.akamaized.net
8 | - DOMAIN,vod-thumb-uk-live.akamaized.net
9 | - DOMAIN-SUFFIX,bbc.co
10 | - DOMAIN-SUFFIX,bbc.co.uk
11 | - DOMAIN-SUFFIX,bbc.com
12 | - DOMAIN-SUFFIX,bbcfmt.hs.llnwd.net
13 | - DOMAIN-SUFFIX,bbci.co
14 | - DOMAIN-SUFFIX,bbci.co.uk
15 | - DOMAIN-SUFFIX,bidi.net.uk
16 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Bahamut:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Bahamut
3 | # - USER-AGENT,Anime*
4 | - PROCESS-NAME,tw.com.gamer.android.animad
5 | - DOMAIN-SUFFIX,bahamut.com.tw
6 | - DOMAIN-SUFFIX,gamer.com.tw
7 | - DOMAIN,gamer-cds.cdn.hinet.net
8 | - DOMAIN,gamer2-cds.cdn.hinet.net
9 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Bilibili:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Bilibili
3 | # - USER-AGENT,bili*
4 | - DOMAIN-SUFFIX,acg.tv
5 | - DOMAIN-SUFFIX,acgvideo.com
6 | - DOMAIN-SUFFIX,b23.tv
7 | - DOMAIN-SUFFIX,bilibili.com
8 | - DOMAIN-SUFFIX,bilibili.tv
9 | - DOMAIN-SUFFIX,biliapi.net
10 | - DOMAIN-SUFFIX,biliapi.com
11 | - DOMAIN-SUFFIX,bilivideo.com
12 | - DOMAIN-SUFFIX,hdslb.com
13 | - DOMAIN,upos-hz-mirrorakam.akamaized.net
14 | # Hong Kong, Macau, Taiwan
15 | # - USER-AGENT,bili-inter*
16 | - DOMAIN,apiintl.biliapi.net
17 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/DAZN:
--------------------------------------------------------------------------------
1 | payload:
2 | # > DAZN
3 | # - USER-AGENT,DAZN*
4 |
5 | - PROCESS-NAME,com.dazn
6 |
7 | - DOMAIN-KEYWORD,voddazn
8 |
9 | - DOMAIN-SUFFIX,dazn.com
10 | - DOMAIN-SUFFIX,dazn-api.com
11 | - DOMAIN-SUFFIX,dazndn.com
12 | - DOMAIN-SUFFIX,daznedge.net
13 | - DOMAIN-SUFFIX,daznfeeds.com
14 | - DOMAIN-SUFFIX,daznservices.com
15 | - DOMAIN-SUFFIX,indazn.com
16 | - DOMAIN-SUFFIX,indaznlab.com
17 |
18 | - DOMAIN,daznfeeds.com.edgekey.net
19 | - DOMAIN,dca-lm-livedazn.secure.footprint.net
20 | - DOMAIN,h-dazn.online-metrix.net
21 | - DOMAIN,images-daznservices-com.cdn.ampproject.org
22 | - DOMAIN,d151l6v8er5bdm.cloudfront.net
23 |
24 | - IP-CIDR,185.42.236.0/24,no-resolve
25 | - IP-CIDR,185.42.238.0/24,no-resolve
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Discord:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Discord
3 | - DOMAIN-SUFFIX,discord.com
4 | - DOMAIN-SUFFIX,discord.gg
5 | - DOMAIN-SUFFIX,discord.media
6 | - DOMAIN-SUFFIX,discordapp.com
7 | - DOMAIN-SUFFIX,discordapp.net
8 | - DOMAIN-SUFFIX,discordstatus.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Discovery_Plus:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Discovery Plus
3 | - PROCESS-NAME,com.discovery.discoveryplus.mobile
4 | - DOMAIN-SUFFIX,content-ause1-ur-discovery1.uplynk.com
5 | - DOMAIN-SUFFIX,disco-api.com
6 | - DOMAIN-SUFFIX,discoveryplus.com
7 | - DOMAIN-SUFFIX,fwmrm.net
8 | - DOMAIN-SUFFIX,getblueshift.com
9 | - DOMAIN-SUFFIX,litix.io
10 | - DOMAIN-SUFFIX,mobile-collector.newrelic.com
11 | - DOMAIN-SUFFIX,uplynk.com
12 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Disney_Plus:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Disney Plus
3 | # - USER-AGENT,Disney*
4 |
5 | - PROCESS-NAME,com.disney.disneyplus
6 |
7 | - DOMAIN-SUFFIX,adobedtm.com
8 | - DOMAIN-SUFFIX,bam.nr-date.net
9 | - DOMAIN-SUFFIX,bamgrid.com
10 | - DOMAIN-SUFFIX,braze.com
11 | - DOMAIN-SUFFIX,cdn.optimizely.com
12 | - DOMAIN-SUFFIX,d9.flashtalking.com
13 | - DOMAIN-SUFFIX,disney.demdex.net
14 | - DOMAIN-SUFFIX,disney.my.sentry.io
15 | - DOMAIN-SUFFIX,disneyplus.bn5x.net
16 | - DOMAIN-SUFFIX,disneyplus.com
17 | - DOMAIN-SUFFIX,disneyplus.com.ssl.sc.omtrdc.net
18 | - DOMAIN-SUFFIX,disney-plus.net
19 | - DOMAIN-SUFFIX,disney-portal.my.onetrust.com
20 | - DOMAIN-SUFFIX,dssott.com
21 | - DOMAIN-SUFFIX,registerdisney.go.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/F1_TV:
--------------------------------------------------------------------------------
1 | payload:
2 | # > F1 TV
3 | - DOMAIN,d2n9h2wits23hf.cloudfront.net
4 | - DOMAIN,f1prodlive.akamaized.net
5 | - DOMAIN,mobile-collector.newrelic.com
6 | - DOMAIN-SUFFIX,bitmovin.com
7 | - DOMAIN-SUFFIX,f1esports.com
8 | - DOMAIN-SUFFIX,f1manager.com
9 | - DOMAIN-SUFFIX,f1play.com
10 | - DOMAIN-SUFFIX,formula1.com
11 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/FCM:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Google FCM
3 | - DOMAIN,alt1-mtalk.google.com
4 | - DOMAIN,alt2-mtalk.google.com
5 | - DOMAIN,alt3-mtalk.google.com
6 | - DOMAIN,alt4-mtalk.google.com
7 | - DOMAIN,alt5-mtalk.google.com
8 | - DOMAIN,alt6-mtalk.google.com
9 | - DOMAIN,alt7-mtalk.google.com
10 | - DOMAIN,alt8-mtalk.google.com
11 | - DOMAIN,mtalk.google.com
12 | - IP-CIDR,64.233.177.188/32,no-resolve
13 | - IP-CIDR,64.233.186.188/32,no-resolve
14 | - IP-CIDR,64.233.187.188/32,no-resolve
15 | - IP-CIDR,64.233.188.188/32,no-resolve
16 | - IP-CIDR,64.233.189.188/32,no-resolve
17 | - IP-CIDR,74.125.23.188/32,no-resolve
18 | - IP-CIDR,74.125.24.188/32,no-resolve
19 | - IP-CIDR,74.125.28.188/32,no-resolve
20 | - IP-CIDR,74.125.127.188/32,no-resolve
21 | - IP-CIDR,74.125.137.188/32,no-resolve
22 | - IP-CIDR,74.125.203.188/32,no-resolve
23 | - IP-CIDR,74.125.204.188/32,no-resolve
24 | - IP-CIDR,74.125.206.188/32,no-resolve
25 | - IP-CIDR,108.177.125.188/32,no-resolve
26 | - IP-CIDR,142.250.4.188/32,no-resolve
27 | - IP-CIDR,142.250.10.188/32,no-resolve
28 | - IP-CIDR,142.250.31.188/32,no-resolve
29 | - IP-CIDR,142.250.96.188/32,no-resolve
30 | - IP-CIDR,172.217.194.188/32,no-resolve
31 | - IP-CIDR,172.217.218.188/32,no-resolve
32 | - IP-CIDR,172.217.219.188/32,no-resolve
33 | - IP-CIDR,172.253.63.188/32,no-resolve
34 | - IP-CIDR,172.253.122.188/32,no-resolve
35 | - IP-CIDR,173.194.175.188/32,no-resolve
36 | - IP-CIDR,173.194.218.188/32,no-resolve
37 | - IP-CIDR,209.85.233.188/32,no-resolve
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Fox+:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Fox+ (HK|TW|SG)
3 | # - USER-AGENT,FOXPlus*
4 | - DOMAIN-SUFFIX,akamaized.net
5 | - DOMAIN-SUFFIX,foxplus.com
6 | - DOMAIN-SUFFIX,theplatform.com
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Fox_Now:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Fox Now
3 | # - USER-AGENT,FOX%20NOW*
4 | - DOMAIN-SUFFIX,fox.com
5 | - DOMAIN-SUFFIX,foxdcg.com
6 | - DOMAIN-SUFFIX,uplynk.com
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Google FCM:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Google FCM
3 | - DOMAIN,alt1-mtalk.google.com
4 | - DOMAIN,alt2-mtalk.google.com
5 | - DOMAIN,alt3-mtalk.google.com
6 | - DOMAIN,alt4-mtalk.google.com
7 | - DOMAIN,alt5-mtalk.google.com
8 | - DOMAIN,alt6-mtalk.google.com
9 | - DOMAIN,alt7-mtalk.google.com
10 | - DOMAIN,alt8-mtalk.google.com
11 | - DOMAIN,mtalk.google.com
12 | - IP-CIDR,64.233.177.188/32,no-resolve
13 | - IP-CIDR,64.233.186.188/32,no-resolve
14 | - IP-CIDR,64.233.187.188/32,no-resolve
15 | - IP-CIDR,64.233.188.188/32,no-resolve
16 | - IP-CIDR,64.233.189.188/32,no-resolve
17 | - IP-CIDR,74.125.23.188/32,no-resolve
18 | - IP-CIDR,74.125.24.188/32,no-resolve
19 | - IP-CIDR,74.125.28.188/32,no-resolve
20 | - IP-CIDR,74.125.127.188/32,no-resolve
21 | - IP-CIDR,74.125.137.188/32,no-resolve
22 | - IP-CIDR,74.125.203.188/32,no-resolve
23 | - IP-CIDR,74.125.204.188/32,no-resolve
24 | - IP-CIDR,74.125.206.188/32,no-resolve
25 | - IP-CIDR,108.177.125.188/32,no-resolve
26 | - IP-CIDR,142.250.4.188/32,no-resolve
27 | - IP-CIDR,142.250.10.188/32,no-resolve
28 | - IP-CIDR,142.250.31.188/32,no-resolve
29 | - IP-CIDR,142.250.96.188/32,no-resolve
30 | - IP-CIDR,172.217.194.188/32,no-resolve
31 | - IP-CIDR,172.217.218.188/32,no-resolve
32 | - IP-CIDR,172.217.219.188/32,no-resolve
33 | - IP-CIDR,172.253.63.188/32,no-resolve
34 | - IP-CIDR,172.253.122.188/32,no-resolve
35 | - IP-CIDR,173.194.175.188/32,no-resolve
36 | - IP-CIDR,173.194.218.188/32,no-resolve
37 | - IP-CIDR,209.85.233.188/32,no-resolve
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/HBO:
--------------------------------------------------------------------------------
1 | payload:
2 | # > HBO Max
3 | - PROCESS-NAME,com.hbo.hbonow
4 | - DOMAIN-SUFFIX,hbo.com
5 | - DOMAIN-SUFFIX,hbogo.com
6 | - DOMAIN-SUFFIX,hbonow.com
7 | - DOMAIN-SUFFIX,hbomax.com
8 | - DOMAIN-SUFFIX,hbomaxcdn.com
9 |
10 | # > HBO GO
11 | - DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com
12 | - DOMAIN,bcbolthboa-a.akamaihd.net
13 | - DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net
14 | - DOMAIN,dai3fd1oh325y.cloudfront.net
15 | - DOMAIN,hboasia1-i.akamaihd.net
16 | - DOMAIN,hboasia2-i.akamaihd.net
17 | - DOMAIN,hboasia3-i.akamaihd.net
18 | - DOMAIN,hboasia4-i.akamaihd.net
19 | - DOMAIN,hboasia5-i.akamaihd.net
20 | - DOMAIN,players.brightcove.net
21 | - DOMAIN,s3-ap-southeast-1.amazonaws.com
22 | - DOMAIN-SUFFIX,hbogoasia.com
23 | - DOMAIN-SUFFIX,hbogoasia.hk
24 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/HBO_Go:
--------------------------------------------------------------------------------
1 | payload:
2 | # > HBO Max
3 | # - USER-AGENT,HBO%20GO%20PROD*
4 |
5 | # - DOMAIN-KEYWORD,hboasia
6 | - DOMAIN-KEYWORD,hbogoasia
7 |
8 | - DOMAIN-SUFFIX,hboasia.com
9 | - DOMAIN-SUFFIX,hbogo.co.th
10 | - DOMAIN-SUFFIX,hbogo.com
11 | - DOMAIN-SUFFIX,hbogo.eu
12 | - DOMAIN-SUFFIX,hbogoasia.com
13 | - DOMAIN-SUFFIX,hbogoasia.id
14 | - DOMAIN-SUFFIX,hbogoasia.ph
15 |
16 | - DOMAIN,hbolb.onwardsmg.com
17 | - DOMAIN,hbounify-prod.evergent.com
18 | # - DOMAIN,bcbolthboa-a.akamaihd.net
19 | - DOMAIN,dai3fd1oh325y.cloudfront.net
20 | # - DOMAIN,hboasialive.akamaized.net
21 | # - DOMAIN,hbogoprod-vod.akamaized.net
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/HBO_Max:
--------------------------------------------------------------------------------
1 | payload:
2 | # > HBO Max
3 | # - USER-AGENT,HBOMAX*
4 |
5 | - DOMAIN-SUFFIX,hbo.com
6 | - DOMAIN-SUFFIX,hbomax.com
7 | - DOMAIN-SUFFIX,hbomaxcdn.com
8 | - DOMAIN-SUFFIX,hbonow.com
9 | - DOMAIN-SUFFIX,hbomax.com
10 |
11 | - DOMAIN,execute-api.ap-southeast-1.amazonaws.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Hulu:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Hulu
3 | - PROCESS-NAME,com.hulu.plus
4 |
5 | - DOMAIN-SUFFIX,hulu.com
6 | - DOMAIN-SUFFIX,hulu.hb.omtrdc.net
7 | - DOMAIN-SUFFIX,hulu.sc.omtrdc.net
8 | - DOMAIN-SUFFIX,huluad.com
9 | - DOMAIN-SUFFIX,huluim.com
10 | - DOMAIN-SUFFIX,hulumail.com
11 | - DOMAIN-SUFFIX,huluqa.com
12 | - DOMAIN-SUFFIX,hulustream.com
13 |
14 | - DOMAIN,cs428.wpc.edgecastcdn.net
15 | - DOMAIN,cws-hulu.conviva.com
16 | - DOMAIN,hulu.com.c.footprint.net
17 | - DOMAIN,hulu.map.fastly.net
18 |
19 | - IP-CIDR,8.28.124.0/23
20 | - IP-CIDR,199.60.116.0/24
21 | - IP-CIDR,199.200.48.0/22
22 | - IP-CIDR,208.91.156.0/22
23 | - IP-CIDR6,2620:100:3000::/40
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Hulu_Japan:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Hulu(フールー)
3 | - PROCESS-NAME,jp.happyon.android
4 | - DOMAIN-SUFFIX,happyon.jp
5 | - DOMAIN-SUFFIX,hulu.jp
6 | - DOMAIN-SUFFIX,prod.hjholdings.tv
7 | - DOMAIN-SUFFIX,streaks.jp
8 | - DOMAIN-SUFFIX,yb.uncn.jp
9 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/IQI:
--------------------------------------------------------------------------------
1 | payload:
2 | # > iQIYI Intl
3 | # - USER-AGENT,iQIYI*
4 | # - USER-AGENT,QIYIVideo*
5 | # - USER-AGENT,QYPlayer*
6 | # - USER-AGENT,QTP*
7 | # - PROCESS-NAME,com.iqiyi.i18n
8 | # - PROCESS-NAME,com.iqiyi.i18n.tv
9 | - DOMAIN-SUFFIX,inter.iqiyi.com
10 | - DOMAIN-SUFFIX,iq.com
11 | # 首页
12 | - DOMAIN-SUFFIX,intl.iqiyi.com
13 | # 历史
14 | - DOMAIN,intl-rcd.iqiyi.com
15 | # 收藏
16 | - DOMAIN,intl-subscription.iqiyi.com
17 | # 播放
18 | - IP-CIDR,104.85.165.17/32,no-resolve
19 | - IP-CIDR,110.238.107.47/32,no-resolve
20 | - IP-CIDR,118.26.32.162/32,no-resolve
21 | - IP-CIDR,159.138.102.146/32,no-resolve
22 | - IP-CIDR,184.51.102.0/24,no-resolve
23 | - IP-CIDR,203.74.95.130/28,no-resolve
24 | - IP-CIDR,203.80.97.203/32,no-resolve
25 | - IP-CIDR,210.71.227.202/32,no-resolve
26 | - IP-CIDR,23.200.145.146/32,no-resolve
27 | - IP-CIDR,23.210.215.186/32,no-resolve
28 | - IP-CIDR,23.211.15.0/24,no-resolve
29 | - IP-CIDR,23.219.172.0/24,no-resolve
30 | - IP-CIDR,23.40.242.10/32,no-resolve
31 | - IP-CIDR,23.59.252.0/24,no-resolve
32 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/IQYI:
--------------------------------------------------------------------------------
1 | payload:
2 | # > IQIYI
3 | # - USER-AGENT,*QIYI*
4 | # - USER-AGENT,iQiYi*
5 | - DOMAIN-SUFFIX,iqiyi.com
6 | - DOMAIN-SUFFIX,iqiyipic.com
7 | - DOMAIN-SUFFIX,iq.com
8 | - DOMAIN-SUFFIX,qy.net
9 | - DOMAIN-SUFFIX,gitv.tv
10 | - DOMAIN-SUFFIX,71.am
11 | - DOMAIN-KEYWORD,qiyi
12 | - DOMAIN,cache.video.iqiyi.com
13 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/JOOX:
--------------------------------------------------------------------------------
1 | payload:
2 | # > JOOX
3 | - PROCESS-NAME,com.tencent.ibg.joox
4 | - PROCESS-NAME,com.tencent.ibg.jooxtv
5 | - DOMAIN-SUFFIX,joox.com
6 | - DOMAIN-KEYWORD,jooxweb-api
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Japonx:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Japonx
3 | - DOMAIN-KEYWORD,japonx
4 | - DOMAIN-KEYWORD,japronx
5 | - DOMAIN-SUFFIX,japonx.com
6 | - DOMAIN-SUFFIX,japonx.tv
7 | - DOMAIN-SUFFIX,japonx.net
8 | - DOMAIN-SUFFIX,japonx.vip
9 | - DOMAIN-SUFFIX,japronx.com
10 | - DOMAIN-SUFFIX,japronx.tv
11 | - DOMAIN-SUFFIX,japronx.net
12 | - DOMAIN-SUFFIX,japronx.vip
13 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/KKBOX:
--------------------------------------------------------------------------------
1 | payload:
2 | # > KKBOX
3 | - DOMAIN-SUFFIX,kkbox.com
4 | - DOMAIN-SUFFIX,kkbox.com.tw
5 | - DOMAIN-SUFFIX,kfs.io
6 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/KKTV:
--------------------------------------------------------------------------------
1 | payload:
2 | # > KKTV
3 | - PROCESS-NAME,com.kktv.kktv
4 | - DOMAIN-SUFFIX,kktv.me
5 | - DOMAIN-SUFFIX,kktv.com.tw
6 | - DOMAIN,kktv-theater.kk.stream
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/LAN:
--------------------------------------------------------------------------------
1 | payload:
2 | - DOMAIN-SUFFIX,local
3 | - IP-CIDR,127.0.0.0/8
4 | - IP-CIDR,172.16.0.0/12
5 | - IP-CIDR,192.168.0.0/16
6 | - IP-CIDR,10.0.0.0/8
7 | - IP-CIDR,17.0.0.0/8
8 | - IP-CIDR,100.64.0.0/10
9 | - IP-CIDR6,fe80::/10
10 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Letv:
--------------------------------------------------------------------------------
1 | payload:
2 | # > letv
3 | - DOMAIN-SUFFIX,api.mob.app.letv.com
4 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Line_TV:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Line TV
3 | # - USER-AGENT,LINE*
4 | - DOMAIN-SUFFIX,d3c7rimkq79yfu.cloudfront.net
5 | - DOMAIN-SUFFIX,linetv.tw
6 | - DOMAIN-SUFFIX,profile.line-scdn.net
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Netease_Music:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Netease Music
3 | - DOMAIN-SUFFIX,163yun.com
4 | - DOMAIN-SUFFIX,api.iplay.163.com
5 | - DOMAIN-SUFFIX,hz.netease.com
6 | - DOMAIN-SUFFIX,mam.netease.com
7 | - DOMAIN-SUFFIX,music.163.com
8 | - IP-CIDR,101.71.154.241/32,no-resolve
9 | - IP-CIDR,103.126.92.132/32,no-resolve
10 | - IP-CIDR,103.126.92.133/32,no-resolve
11 | - IP-CIDR,112.13.119.17/32,no-resolve
12 | - IP-CIDR,112.13.122.1/32,no-resolve
13 | - IP-CIDR,115.236.118.33/32,no-resolve
14 | - IP-CIDR,115.236.121.1/32,no-resolve
15 | - IP-CIDR,118.24.63.156/32,no-resolve
16 | - IP-CIDR,193.112.159.225/32,no-resolve
17 | - IP-CIDR,223.252.199.66/32,no-resolve
18 | - IP-CIDR,223.252.199.67/32,no-resolve
19 | - IP-CIDR,39.105.63.80/32,no-resolve
20 | - IP-CIDR,45.254.48.1/32,no-resolve
21 | - IP-CIDR,47.100.127.239/32,no-resolve
22 | - IP-CIDR,59.111.160.195/32,no-resolve
23 | - IP-CIDR,59.111.160.197/32,no-resolve
24 | - IP-CIDR,59.111.181.35/32,no-resolve
25 | - IP-CIDR,59.111.181.38/32,no-resolve
26 | - IP-CIDR,59.111.181.60/32,no-resolve
27 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Netflix:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Netflix
3 | - DOMAIN-SUFFIX,flxvpn.net
4 | - DOMAIN-SUFFIX,netflix.ca
5 | - DOMAIN-SUFFIX,netflix.com
6 | - DOMAIN-SUFFIX,netflix.com.au
7 | - DOMAIN-SUFFIX,netflixdnstest10.com
8 | - DOMAIN-SUFFIX,netflixdnstest1.com
9 | - DOMAIN-SUFFIX,netflixdnstest2.com
10 | - DOMAIN-SUFFIX,netflixdnstest3.com
11 | - DOMAIN-SUFFIX,netflixdnstest4.com
12 | - DOMAIN-SUFFIX,netflixdnstest5.com
13 | - DOMAIN-SUFFIX,netflixdnstest6.com
14 | - DOMAIN-SUFFIX,netflixdnstest7.com
15 | - DOMAIN-SUFFIX,netflixdnstest8.com
16 | - DOMAIN-SUFFIX,netflixdnstest9.com
17 | - DOMAIN-SUFFIX,netflixinvestor.com
18 | - DOMAIN-SUFFIX,netflix.net
19 | - DOMAIN-SUFFIX,netflixstudios.com
20 | - DOMAIN-SUFFIX,netflixtechblog.com
21 | - DOMAIN-SUFFIX,nflxext.com
22 | - DOMAIN-SUFFIX,nflximg.com
23 | - DOMAIN-SUFFIX,nflximg.net
24 | - DOMAIN-SUFFIX,nflxso.net
25 | - DOMAIN-SUFFIX,nflxvideo.net
26 |
27 | - DOMAIN-SUFFIX,e13252.dscg.akamaiedge.net
28 | - DOMAIN-SUFFIX,h-netflix.online-metrix.net
29 | - DOMAIN-SUFFIX,onetrust.com
30 | - DOMAIN-SUFFIX,cookielaw.org
31 |
32 | - IP-CIDR,23.246.0.0/18,no-resolve
33 | - IP-CIDR,37.77.184.0/21,no-resolve
34 | - IP-CIDR,38.72.126.0/24,no-resolve
35 | - IP-CIDR,45.57.0.0/17,no-resolve
36 | - IP-CIDR,64.120.128.0/17,no-resolve
37 | - IP-CIDR,66.197.128.0/17,no-resolve
38 | - IP-CIDR,69.53.224.0/19,no-resolve
39 | - IP-CIDR,103.87.204.0/22,no-resolve
40 | - IP-CIDR,108.175.32.0/20,no-resolve
41 | - IP-CIDR,185.2.220.0/22,no-resolve
42 | - IP-CIDR,185.9.188.0/22,no-resolve
43 | - IP-CIDR,192.173.64.0/18,no-resolve
44 | - IP-CIDR,198.38.96.0/19,no-resolve
45 | - IP-CIDR,198.45.48.0/20,no-resolve
46 | - IP-CIDR,208.75.76.0/22,no-resolve
47 | - IP-CIDR,34.210.42.111/32,no-resolve
48 | - IP-CIDR,52.89.124.203/32,no-resolve
49 | - IP-CIDR,54.148.37.5/32,no-resolve
50 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Niconico:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Niconico
3 | - DOMAIN-SUFFIX,dmc.nico
4 | - DOMAIN-SUFFIX,nicovideo.jp
5 | - DOMAIN-SUFFIX,nicodic.jp
6 | - DOMAIN-SUFFIX,nicomanga.jp
7 | - DOMAIN-SUFFIX,niconico.com
8 | - DOMAIN-SUFFIX,nicoseiga.jp
9 | - DOMAIN-SUFFIX,nimg.jp
10 | - DOMAIN-SUFFIX,simg.jp
11 | - DOMAIN-SUFFIX,socdm.com
12 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/PBS:
--------------------------------------------------------------------------------
1 | payload:
2 | # > PBS
3 | # - USER-AGENT,PBS*
4 | - DOMAIN-SUFFIX,pbs.org
5 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Pandora:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Pandora
3 | - PROCESS-NAME,com.pandora.android
4 | - DOMAIN-SUFFIX,pandora.com
5 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/PayPal:
--------------------------------------------------------------------------------
1 | payload:
2 | # > PayPal
3 | # - USER-AGENT,PayPal*
4 | - DOMAIN-KEYWORD,paypal
5 | - DOMAIN-SUFFIX,paypal.com
6 | - DOMAIN-SUFFIX,paypalobjects.com
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Pornhub:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Pornhub
3 | - DOMAIN-SUFFIX,phncdn.com
4 | - DOMAIN-SUFFIX,phprcdn.com
5 | - DOMAIN-SUFFIX,pornhub.com
6 | - DOMAIN-SUFFIX,pornhubpremium.com
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Scholar:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Scholar
3 | - DOMAIN-SUFFIX,acm.org
4 | - DOMAIN-SUFFIX,acs.org
5 | - DOMAIN-SUFFIX,aip.org
6 | - DOMAIN-SUFFIX,ams.org
7 | - DOMAIN-SUFFIX,annualreviews.org
8 | - DOMAIN-SUFFIX,aps.org
9 | - DOMAIN-SUFFIX,ascelibrary.org
10 | - DOMAIN-SUFFIX,asm.org
11 | - DOMAIN-SUFFIX,asme.org
12 | - DOMAIN-SUFFIX,astm.org
13 | - DOMAIN-SUFFIX,blackwell-synergy.com
14 | - DOMAIN-SUFFIX,bmj.com
15 | - DOMAIN-SUFFIX,cabdirect.org
16 | - DOMAIN-SUFFIX,cambridge.org
17 | - DOMAIN-SUFFIX,cas.org
18 | - DOMAIN-SUFFIX,cell.com
19 | - DOMAIN-SUFFIX,clarivate.com
20 | # - DOMAIN-SUFFIX,cnki.net
21 | # - DOMAIN-SUFFIX,cqvip.com
22 | - DOMAIN-SUFFIX,csiro.au
23 | - DOMAIN-SUFFIX,deepdyve.com
24 | - DOMAIN-SUFFIX,ebscohost.com
25 | - DOMAIN-SUFFIX,els-cdn.com
26 | - DOMAIN-SUFFIX,elsevier.com
27 | - DOMAIN-SUFFIX,emerald.com
28 | - DOMAIN-SUFFIX,endnote.com
29 | - DOMAIN-SUFFIX,engineeringvillage.com
30 | - DOMAIN-SUFFIX,icevirtuallibrary.com
31 | - DOMAIN-SUFFIX,ieee.org
32 | - DOMAIN-SUFFIX,imf.org
33 | - DOMAIN-SUFFIX,iop.org
34 | - DOMAIN-SUFFIX,jamanetwork.com
35 | - DOMAIN-SUFFIX,jbc.org
36 | - DOMAIN-SUFFIX,jhu.edu
37 | - DOMAIN-SUFFIX,jstor.org
38 | - DOMAIN-SUFFIX,karger.com
39 | - DOMAIN-SUFFIX,libguides.com
40 | - DOMAIN-SUFFIX,madsrevolution.net
41 | - DOMAIN-SUFFIX,mdpi.com
42 | - DOMAIN-SUFFIX,mpg.de
43 | - DOMAIN-SUFFIX,myilibrary.com
44 | - DOMAIN-SUFFIX,nature.com
45 | - DOMAIN-SUFFIX,ncbi.nlm.nih.gov
46 | - DOMAIN-SUFFIX,oecd-ilibrary.org
47 | - DOMAIN-SUFFIX,osapublishing.org
48 | - DOMAIN-SUFFIX,oup.com
49 | - DOMAIN-SUFFIX,ovid.com
50 | - DOMAIN-SUFFIX,oxfordartonline.com
51 | - DOMAIN-SUFFIX,oxfordbibliographies.com
52 | - DOMAIN-SUFFIX,oxfordmusiconline.com
53 | # - DOMAIN-SUFFIX,pkulaw.com
54 | - DOMAIN-SUFFIX,pnas.org
55 | - DOMAIN-SUFFIX,proquest.com
56 | - DOMAIN-SUFFIX,readcube.com
57 | - DOMAIN-SUFFIX,researchgate.net
58 | - DOMAIN-SUFFIX,rsc.org
59 | - DOMAIN-SUFFIX,sagepub.com
60 | - DOMAIN-SUFFIX,sci-hub.tw
61 | - DOMAIN-SUFFIX,sciencedirect.com
62 | - DOMAIN-SUFFIX,sciencemag.org
63 | - DOMAIN-SUFFIX,scitation.org
64 | - DOMAIN-SUFFIX,scopus.com
65 | - DOMAIN-SUFFIX,semanticscholar.org
66 | - DOMAIN-SUFFIX,siam.org
67 | - DOMAIN-SUFFIX,spiedigitallibrary.org
68 | - DOMAIN-SUFFIX,springer.com
69 | - DOMAIN-SUFFIX,springerlink.com
70 | - DOMAIN-SUFFIX,tandfonline.com
71 | - DOMAIN-SUFFIX,un.org
72 | - DOMAIN-SUFFIX,uni-bielefeld.de
73 | # - DOMAIN-SUFFIX,wanfangdata.com
74 | - DOMAIN-SUFFIX,webofknowledge.com
75 | - DOMAIN-SUFFIX,westlaw.com
76 | # - DOMAIN-SUFFIX,westlawchina.com
77 | - DOMAIN-SUFFIX,wiley.com
78 | - DOMAIN-SUFFIX,worldbank.org
79 | - DOMAIN-SUFFIX,worldscientific.com
80 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Soundcloud:
--------------------------------------------------------------------------------
1 | payload:
2 | # > SoundCloud
3 | # - USER-AGENT,SoundCloud*
4 |
5 | - DOMAIN-SUFFIX,sndcdn.com
6 | - DOMAIN-SUFFIX,soundcloud.app.goo.gl
7 | - DOMAIN-SUFFIX,soundcloud.com
8 | - DOMAIN-SUFFIX,soundcloudmail.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Speedtest:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Fast
3 | - DOMAIN-SUFFIX,fast.com
4 |
5 | # > Speedtest by Ookla
6 | # - USER-AGENT,SpeedTest*
7 | - DOMAIN-KEYWORD,speedtest
8 | - DOMAIN-SUFFIX,ooklaserver.net
9 | - DOMAIN,speed.dler.io
10 |
11 | # > Speed Test by Cloudflare
12 | - DOMAIN-SUFFIX,speed.cloudflare.com
13 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Spotify:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Spotify
3 | # - USER-AGENT,Spotify*
4 |
5 | - PROCESS-NAME,com.spotify.music
6 |
7 | - DOMAIN-SUFFIX,pscdn.co
8 | - DOMAIN-SUFFIX,scdn.co
9 | - DOMAIN-SUFFIX,spoti.fi
10 | - DOMAIN-SUFFIX,spotify.com
11 | - DOMAIN-SUFFIX,spotifycdn.com
12 | - DOMAIN-SUFFIX,spotifycdn.net
13 | - DOMAIN-SUFFIX,spotifycharts.com
14 | - DOMAIN-SUFFIX,spotifycodes.com
15 | - DOMAIN-SUFFIX,spotifyjobs.com
16 | - DOMAIN-SUFFIX,spotifynewsroom.jp
17 | - DOMAIN-SUFFIX,spotilocal.com
18 | - DOMAIN-SUFFIX,tospotify.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Steam:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Steam
3 | - DOMAIN-SUFFIX,fanatical.com
4 | - DOMAIN-SUFFIX,humblebundle.com
5 | - DOMAIN-SUFFIX,playartifact.com
6 | - DOMAIN-SUFFIX,s.team
7 | - DOMAIN-SUFFIX,steam-chat.com
8 | - DOMAIN-SUFFIX,steamcommunity.com
9 | - DOMAIN-SUFFIX,steampowered.com
10 | - DOMAIN-SUFFIX,steamgames.com
11 | - DOMAIN-SUFFIX,steamstatic.com
12 | - DOMAIN-SUFFIX,steamusercontent.com
13 | - DOMAIN-SUFFIX,underlords.com
14 | - DOMAIN-SUFFIX,valvesoftware.com
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Telegram:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Telegram
3 | - DOMAIN-SUFFIX,t.me
4 | - DOMAIN-SUFFIX,tx.me
5 | - DOMAIN-SUFFIX,tdesktop.com
6 | - DOMAIN-SUFFIX,telegra.ph
7 | - DOMAIN-SUFFIX,telegram.me
8 | - DOMAIN-SUFFIX,telegram.org
9 | - DOMAIN-SUFFIX,telegram-cdn.org
10 | - DOMAIN-SUFFIX,telesco.pe
11 |
12 | - IP-CIDR,91.105.192.0/23,no-resolve
13 | - IP-CIDR,91.108.56.0/22,no-resolve
14 | - IP-CIDR,91.108.4.0/22,no-resolve
15 | - IP-CIDR,91.108.8.0/22,no-resolve
16 | - IP-CIDR,91.108.12.0/22,no-resolve
17 | - IP-CIDR,91.108.16.0/22,no-resolve
18 | - IP-CIDR,91.108.20.0/22,no-resolve
19 | - IP-CIDR,149.154.160.0/20,no-resolve
20 | - IP-CIDR,185.76.151.0/24,no-resolve
21 | - IP-CIDR6,2001:67c:4e8::/48,no-resolve
22 | - IP-CIDR6,2001:b28:f23d::/48,no-resolve
23 | - IP-CIDR6,2001:b28:f23f::/48,no-resolve
24 | - IP-CIDR6,2a0a:f280::/32,no-resolve
25 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Tencent_Video:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Tencent Video
3 | - DOMAIN-SUFFIX,v.smtcdns.com
4 | - DOMAIN-SUFFIX,vv.video.qq.com
5 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/ViuTV:
--------------------------------------------------------------------------------
1 | payload:
2 | # > ViuTV
3 | - PROCESS-NAME,com.hktve.viutv
4 |
5 | - DOMAIN-SUFFIX,bootstrapcdn.com
6 | - DOMAIN-SUFFIX,cloudfront.net
7 | - DOMAIN-SUFFIX,cognito-identity.us-east-1.amazonaws.com
8 | - DOMAIN-SUFFIX,firebaseio.com
9 | - DOMAIN-SUFFIX,jwpcdn.com
10 | - DOMAIN-SUFFIX,jwplayer.com
11 | - DOMAIN-SUFFIX,mobileanalytics.us-east-1.amazonaws.com
12 | - DOMAIN-SUFFIX,nowe.com
13 | - DOMAIN-SUFFIX,viu.com
14 | - DOMAIN-SUFFIX,viu.tv
15 | - DOMAIN-SUFFIX,viu.now.com
16 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/WeTV:
--------------------------------------------------------------------------------
1 | payload:
2 | # > WeTV
3 | - PROCESS-NAME,com.tencent.qqlivei18n
4 | - DOMAIN-SUFFIX,wetv.vip
5 | - DOMAIN-SUFFIX,wetvinfo.com
6 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/Youku:
--------------------------------------------------------------------------------
1 | payload:
2 | # > Youku
3 | - DOMAIN-SUFFIX,youku.com
4 | - IP-CIDR,106.11.0.0/16,no-resolve
5 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/encoreTVB:
--------------------------------------------------------------------------------
1 | payload:
2 | # > encoreTVB
3 | - PROCESS-NAME,com.tvbusa.encore
4 | - DOMAIN-SUFFIX,encoretvb.com
5 | - DOMAIN,content.jwplatform.com
6 | - DOMAIN,videos-f.jwpsrv.com
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/iQiyi:
--------------------------------------------------------------------------------
1 | payload:
2 | # > iQiyi
3 | - PROCESS-NAME,com.qiyi.video
4 | - DOMAIN,intel-cache.m.iqiyi.com
5 | - DOMAIN,intel-cache.video.iqiyi.com
6 | - DOMAIN,intl-rcd.iqiyi.com
7 | - DOMAIN,intl-subscription.iqiyi.com
8 | - DOMAIN-SUFFIX,inter.iqiyi.com
9 | - DOMAIN-SUFFIX,inter.ptqy.gitv.tv
10 | - DOMAIN-SUFFIX,intl.iqiyi.com
11 | - DOMAIN-SUFFIX,iq.com
12 |
13 | - IP-CIDR,23.211.15.99/32,no-resolve
14 | - IP-CIDR,103.5.34.153/32,no-resolve
15 | - IP-CIDR,104.109.129.153/32,no-resolve
16 | - IP-CIDR,110.238.107.47/32,no-resolve
17 | - IP-CIDR,118.26.32.178/32,no-resolve
18 | - IP-CIDR,203.74.95.131/32,no-resolve
19 | - IP-CIDR,203.74.95.139/32,no-resolve
20 | - IP-CIDR,203.211.4.169/32,no-resolve
21 | - IP-CIDR,203.211.4.193/32,no-resolve
22 | - IP-CIDR,210.201.32.8/32,no-resolve
23 | - IP-CIDR,210.201.32.11/32,no-resolve
24 |
25 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/miHoYo:
--------------------------------------------------------------------------------
1 | payload:
2 | # > miHoYo
3 | - DOMAIN-SUFFIX,bh3.com
4 | - DOMAIN-SUFFIX,hoyolab.com
5 | - DOMAIN-SUFFIX,hoyoverse.com
6 | - DOMAIN-SUFFIX,mihayo.com
7 | - DOMAIN-SUFFIX,mihoyo.com
8 | - DOMAIN-SUFFIX,miyoushe.com
9 | - DOMAIN-SUFFIX,yuanshen.com
10 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/etc/openclash/rule_provider/myTV_SUPER:
--------------------------------------------------------------------------------
1 | payload:
2 | # > myTV_SUPER
3 | # - USER-AGENT,mytv*
4 | - DOMAIN-KEYWORD,nowtv100
5 | - DOMAIN-KEYWORD,rthklive
6 | - DOMAIN-SUFFIX,mytvsuper.com
7 | - DOMAIN-SUFFIX,tvb.com
8 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/YAML.rb:
--------------------------------------------------------------------------------
1 | module YAML
2 | class << self
3 | alias_method :load, :unsafe_load if YAML.respond_to? :unsafe_load
4 | end
5 |
6 | def self.LOG(info)
7 | puts Time.new.strftime("%Y-%m-%d %H:%M:%S") + " #{info}"
8 | end
9 | end
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/cfg_unused_servers_del.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . /lib/functions.sh
3 |
4 | cfg_unused_servers_del()
5 | {
6 |
7 | local section="$1"
8 | config_get_bool "enabled" "$section" "enabled" "1"
9 |
10 | if [ "$enabled" = "1" ]; then
11 | return
12 | fi
13 |
14 | #删除未选中节点
15 | uci delete openclash."$section" 2>/dev/null
16 | }
17 |
18 | config_load "openclash"
19 | config_foreach cfg_unused_servers_del "servers"
20 | uci commit openclash
21 |
22 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/clash_version.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | . /usr/share/openclash/openclash_curl.sh
3 |
4 | set_lock() {
5 | exec 884>"/tmp/lock/openclash_clash_version.lock" 2>/dev/null
6 | flock -x 884 2>/dev/null
7 | }
8 |
9 | del_lock() {
10 | flock -u 884 2>/dev/null
11 | rm -rf "/tmp/lock/openclash_clash_version.lock" 2>/dev/null
12 | }
13 |
14 | set_lock
15 |
16 | TIME=$(date "+%Y-%m-%d-%H")
17 | CHTIME=$(date "+%Y-%m-%d-%H" -r "/tmp/clash_last_version" 2>/dev/null)
18 | DOWNLOAD_FILE="/tmp/clash_last_version"
19 | RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
20 | github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
21 | if [ -n "$1" ]; then
22 | github_address_mod="$1"
23 | fi
24 |
25 | if [ "$TIME" != "$CHTIME" ]; then
26 | if [ "$github_address_mod" != "0" ]; then
27 | if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
28 | DOWNLOAD_URL="${github_address_mod}gh/vernesong/OpenClash@core/${RELEASE_BRANCH}/core_version"
29 | else
30 | DOWNLOAD_URL="${github_address_mod}https://raw.githubusercontent.com/vernesong/OpenClash/core/${RELEASE_BRANCH}/core_version"
31 | fi
32 | else
33 | DOWNLOAD_URL="https://raw.githubusercontent.com/vernesong/OpenClash/core/${RELEASE_BRANCH}/core_version"
34 | fi
35 |
36 | DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "$DOWNLOAD_FILE"
37 | fi
38 | del_lock
39 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/log.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | START_LOG="/tmp/openclash_start.log"
4 | LOG_FILE="/tmp/openclash.log"
5 |
6 | LOG_OUT()
7 | {
8 | if [ -n "${1}" ]; then
9 | echo -e "${1}" > $START_LOG
10 | echo -e "$(date "+%Y-%m-%d %H:%M:%S") ${1}" >> $LOG_FILE
11 | fi
12 | }
13 |
14 | LOG_INFO()
15 | {
16 | if [ -n "${1}" ]; then
17 | echo -e "$(date "+%Y-%m-%d %H:%M:%S") ${1}" >> $LOG_FILE
18 | fi
19 | }
20 |
21 | LOG_ALERT()
22 | {
23 | echo -e "$(tail -n 20 $LOG_FILE |grep -E 'level=fatal|level=error|FTL\ \[Config\]' |awk 'END {print}')" > $START_LOG
24 | sleep 3
25 | }
26 |
27 | SLOG_CLEAN()
28 | {
29 | echo "" > $START_LOG
30 | }
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_curl.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | . /usr/share/openclash/log.sh
3 |
4 | DOWNLOAD_FILE_CURL() {
5 | [ -z "$1" ] || [ -z "$2" ] && return 1
6 | DOWNLOAD_URL=$1
7 | DOWNLOAD_PATH=$2
8 | DOWNLOAD_UA=$3
9 | [ -z "$DOWNLOAD_UA" ] && DOWNLOAD_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
10 | OUTPUT=$(curl -w "%{http_code}" -SsL --connect-timeout 30 -m 60 --speed-time 30 --speed-limit 1 --retry 2 -H "User-Agent: ${DOWNLOAD_UA}" "$DOWNLOAD_URL" -o "$DOWNLOAD_PATH" 2>&1)
11 | EXIR_CODE=${PIPESTATUS[0]}
12 | HTTP_CODE=$(echo "$OUTPUT" | tail -n1)
13 | OUTPUT=$(echo "$OUTPUT" | sed '$d' | sed ':a;N;$!ba; s/\n/ /g')
14 | if [ "$EXIR_CODE" -ne 0 ] || [ "$HTTP_CODE" -ne 200 ]; then
15 | LOG_OUT "【$DOWNLOAD_PATH】Download Failed:【$OUTPUT】"
16 | rm -rf $DOWNLOAD_PATH
17 | SLOG_CLEAN
18 | return 1
19 | else
20 | return 0
21 | fi
22 | }
23 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_custom_domain_dns.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . /usr/share/openclash/log.sh
3 |
4 | set_lock() {
5 | exec 883>"/tmp/lock/openclash_cus_domian.lock" 2>/dev/null
6 | flock -x 883 2>/dev/null
7 | }
8 |
9 | del_lock() {
10 | flock -u 883 2>/dev/null
11 | rm -rf "/tmp/lock/openclash_cus_domian.lock"
12 | }
13 |
14 | set_lock
15 |
16 | # 获取默认的 DNSMASQ 配置 ID
17 | DEFAULT_DNSMASQ_CFGID="$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')"
18 | # 从 conf-dir 行中提取配置目录路径
19 | if [ -f "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID" ]; then
20 | DNSMASQ_CONF_DIR="$(awk -F '=' '/^conf-dir=/ {print $2}' "/tmp/etc/dnsmasq.conf.$DEFAULT_DNSMASQ_CFGID")"
21 | else
22 | DNSMASQ_CONF_DIR="/tmp/dnsmasq.d"
23 | fi
24 | # 设置 DNSMASQ_CONF_DIR,并去除路径末尾的斜杠
25 | DNSMASQ_CONF_DIR=${DNSMASQ_CONF_DIR%*/}
26 | rm -rf ${DNSMASQ_CONF_DIR}/dnsmasq_openclash_custom_domain.conf >/dev/null 2>&1
27 | if [ "$(uci get openclash.config.enable_custom_domain_dns_server 2>/dev/null)" = "1" ] && [ "$(uci get openclash.config.enable_redirect_dns 2>/dev/null)" = "1" ]; then
28 | LOG_OUT "Setting Secondary DNS Server List..."
29 |
30 | custom_domain_dns_server=$(uci get openclash.config.custom_domain_dns_server 2>/dev/null)
31 | [ -z "$custom_domain_dns_server" ] && {
32 | custom_domain_dns_server="114.114.114.114"
33 | }
34 |
35 | if [ -s "/etc/openclash/custom/openclash_custom_domain_dns.list" ]; then
36 | mkdir -p ${DNSMASQ_CONF_DIR}
37 | awk -v tag="$custom_domain_dns_server" '!/^$/&&!/^#/{printf("server=/%s/"'tag'"\n",$0)}' /etc/openclash/custom/openclash_custom_domain_dns.list >>${DNSMASQ_CONF_DIR}/dnsmasq_openclash_custom_domain.conf 2>/dev/null
38 | fi
39 | fi
40 |
41 | del_lock
42 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_debug_dns.lua:
--------------------------------------------------------------------------------
1 | #!/usr/bin/lua
2 |
3 | require "nixio"
4 | require "luci.util"
5 | require "luci.sys"
6 | local uci = require("luci.model.uci").cursor()
7 | local json = require "luci.jsonc"
8 | local datatype = require "luci.cbi.datatypes"
9 | local fs = require "luci.openclash"
10 |
11 | local addr = arg[1]
12 | local resolve = arg[2]
13 |
14 | local function debug_dns()
15 | local info, ip, host
16 | ip = fs.lanip()
17 | local port = uci:get("openclash", "config", "cn_port")
18 | local passwd = uci:get("openclash", "config", "dashboard_password") or ""
19 |
20 | if datatype.hostname(addr) and ip and port then
21 | info_v4 = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/dns/query?name="%s"', passwd, ip, port, addr))
22 | info_v6 = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET \"http://"%s":"%s"/dns/query?name="%s"&type=AAAA\"', passwd, ip, port, addr))
23 | if info_v4 then
24 | info_v4 = json.parse(info_v4)
25 | end
26 | if info_v6 then
27 | info_v6 = json.parse(info_v6)
28 | end
29 | for _, info in pairs({info_v4, info_v6}) do
30 | if info and not resolve then
31 | print("Status: "..(info.Status))
32 | print("TC: "..tostring(info.TC))
33 | print("RD: "..tostring(info.RD))
34 | print("RA: "..tostring(info.RA))
35 | print("AD: "..tostring(info.AD))
36 | print("CD: "..tostring(info.CD))
37 | print("")
38 | print("Question: ")
39 | for _, v in pairs(info.Question) do
40 | print(" Name: "..(v.Name))
41 | print(" Qtype: "..(v.Qtype))
42 | print(" Qclass: "..(v.Qclass))
43 | print("")
44 | end
45 | if info.Answer then
46 | print("Answer: ")
47 | for _, v in pairs(info.Answer) do
48 | print(" TTL: "..(v.TTL))
49 | print(" data: "..(v.data:gsub("\n?", "")))
50 | print(" name: "..(v.name))
51 | print(" type: "..(v.type))
52 | print("")
53 | end
54 | end
55 | if info.Additional then
56 | print("Additional: ")
57 | for _, v in pairs(info.Additional) do
58 | print(" TTL: "..(v.TTL))
59 | print(" data: "..(v.data:gsub("\n?", "")))
60 | print(" name: "..(v.name))
61 | print(" type: "..(v.type))
62 | print("")
63 | end
64 | end
65 | if info.Authority then
66 | print("Authority: ")
67 | for _, v in pairs(info.Authority) do
68 | print(" TTL: "..(v.TTL))
69 | print(" data: "..(v.data:gsub("\n?", "")))
70 | print(" name: "..(v.name))
71 | print(" type: "..(v.type))
72 | print("")
73 | end
74 | end
75 | end
76 | if info and resolve then
77 | if info.Answer then
78 | for _, v in pairs(info.Answer) do
79 | if v.type == 1 or v.type == 28 then
80 | print(v.data)
81 | end
82 | end
83 | end
84 | end
85 | end
86 | end
87 | os.exit(0)
88 | end
89 |
90 | debug_dns()
91 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_debug_getcon.lua:
--------------------------------------------------------------------------------
1 | #!/usr/bin/lua
2 |
3 | require "nixio"
4 | require "luci.util"
5 | require "luci.sys"
6 | local uci = require("luci.model.uci").cursor()
7 | local fs = require "luci.openclash"
8 | local json = require "luci.jsonc"
9 | local datatype = require "luci.cbi.datatypes"
10 | local addr = arg[1]
11 |
12 | local function s(e)
13 | local t=0
14 | local a={' KB',' MB',' GB',' TB',' PB'}
15 | repeat
16 | e=e/1024
17 | t=t+1
18 | until(e<=1024)
19 | return string.format("%.1f",e)..a[t]
20 | end
21 |
22 | local function debug_getcon()
23 | local info, ip, host, diag_info
24 | ip = fs.lanip()
25 | local port = uci:get("openclash", "config", "cn_port")
26 | local passwd = uci:get("openclash", "config", "dashboard_password") or ""
27 | if ip and port then
28 | info = luci.sys.exec(string.format('curl -sL -m 3 -H "Content-Type: application/json" -H "Authorization: Bearer %s" -XGET http://"%s":"%s"/connections', passwd, ip, port))
29 | if info then
30 | info = json.parse(info)
31 | end
32 | if info then
33 | for i = 1, #(info.connections) do
34 | if info.connections[i].metadata.host == "" then
35 | host = "Empty"
36 | else
37 | host = info.connections[i].metadata.host
38 | end
39 | if not addr then
40 | luci.sys.exec(string.format('echo "%s. SourceIP:【%s】 - Host:【%s】 - DestinationIP:【%s】 - Network:【%s】 - RulePayload:【%s】 - Lastchain:【%s】" >> /tmp/openclash_debug.log', i, (info.connections[i].metadata.sourceIP), host, (info.connections[i].metadata.destinationIP), (info.connections[i].metadata.network), (info.connections[i].rulePayload),(info.connections[i].chains[1])))
41 | else
42 | if datatype.hostname(addr) and string.lower(addr) == host or datatype.ipaddr(addr) and addr == (info.connections[i].metadata.destinationIP) then
43 | print("id: "..(info.connections[i].id))
44 | print("start: "..(info.connections[i].start))
45 | print("download: "..s(info.connections[i].download))
46 | print("upload: "..s(info.connections[i].upload))
47 | print("rule: "..(info.connections[i].rule))
48 | print("rulePayload: "..(info.connections[i].rulePayload))
49 | print("chains: ")
50 | for o = 1, #(info.connections[i].chains) do
51 | print(" "..o..": "..(info.connections[i].chains[o]))
52 | end
53 | print("metadata: ")
54 | print(" sourceIP: "..(info.connections[i].metadata.sourceIP))
55 | print(" sourcePort: "..(info.connections[i].metadata.sourcePort))
56 | print(" host: "..host)
57 | print(" destinationIP: "..(info.connections[i].metadata.destinationIP))
58 | print(" destinationPort: "..(info.connections[i].metadata.destinationPort))
59 | print(" network: "..(info.connections[i].metadata.network))
60 | print(" type: "..(info.connections[i].metadata.type))
61 | print("")
62 | end
63 | end
64 | end
65 | end
66 | end
67 | os.exit(0)
68 | end
69 |
70 | debug_getcon()
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_dler_checkin.lua:
--------------------------------------------------------------------------------
1 | #!/usr/bin/lua
2 |
3 | require "nixio"
4 | require "luci.util"
5 | require "luci.sys"
6 | local uci = require("luci.model.uci").cursor()
7 | local fs = require "luci.openclash"
8 | local json = require "luci.jsonc"
9 |
10 | local function dler_checkin()
11 | local info, path, checkin
12 | local token = uci:get("openclash", "config", "dler_token")
13 | local email = uci:get("openclash", "config", "dler_email")
14 | local passwd = uci:get("openclash", "config", "dler_passwd")
15 | local enable = uci:get("openclash", "config", "dler_checkin") or 0
16 | local interval = uci:get("openclash", "config", "dler_checkin_interval") or 1
17 | local multiple = uci:get("openclash", "config", "dler_checkin_multiple") or 1
18 | path = "/tmp/dler_checkin"
19 | if token and email and passwd and enable == "1" then
20 | checkin = string.format("curl -sL -H 'Content-Type: application/json' -d '{\"email\":\"%s\", \"passwd\":\"%s\", \"multiple\":\"%s\"}' -X POST https://dler.cloud/api/v1/checkin -o %s", email, passwd, multiple, path)
21 | if fs.readfile(path) == "" or not fs.readfile(path) then
22 | luci.sys.exec(checkin)
23 | else
24 | if (os.time() - fs.mtime(path) > interval*3600+1) then
25 | fs.unlink(path)
26 | luci.sys.exec(checkin)
27 | else
28 | os.exit(0)
29 | end
30 | end
31 | if fs.readfile(path) == "" or not fs.readfile(path) then
32 | fs.writefile(path, " ")
33 | end
34 | info = fs.readfile(path)
35 | if info then
36 | info = json.parse(info)
37 | end
38 | if info and info.ret == 200 then
39 | luci.sys.exec(string.format('echo "%s Dler Cloud Checkin Successful, Result:【%s】" >> /tmp/openclash.log', os.date("%Y-%m-%d %H:%M:%S"), info.data.checkin))
40 | else
41 | if info and info.msg then
42 | luci.sys.exec(string.format('echo "%s Dler Cloud Checkin Failed, Result:【%s】" >> /tmp/openclash.log', os.date("%Y-%m-%d %H:%M:%S"), info.msg))
43 | else
44 | luci.sys.exec(string.format('echo "%s Dler Cloud Checkin Failed! Please Check And Try Again..." >> /tmp/openclash.log', os.date("%Y-%m-%d %H:%M:%S")))
45 | end
46 | end
47 | end
48 | os.exit(0)
49 | end
50 |
51 | dler_checkin()
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_geoasn.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | . /usr/share/openclash/openclash_ps.sh
3 | . /usr/share/openclash/log.sh
4 | . /usr/share/openclash/openclash_curl.sh
5 |
6 | set_lock() {
7 | exec 874>"/tmp/lock/openclash_geoasn.lock" 2>/dev/null
8 | flock -x 874 2>/dev/null
9 | }
10 |
11 | del_lock() {
12 | flock -u 874 2>/dev/null
13 | rm -rf "/tmp/lock/openclash_geoasn.lock" 2>/dev/null
14 | }
15 |
16 | set_lock
17 |
18 | small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null)
19 | GEOASN_CUSTOM_URL=$(uci get openclash.config.geoasn_custom_url 2>/dev/null)
20 | github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
21 | restart=0
22 |
23 | if [ "$small_flash_memory" != "1" ]; then
24 | geoasn_path="/etc/openclash/ASN.mmdb"
25 | mkdir -p /etc/openclash
26 | else
27 | geoasn_path="/tmp/etc/openclash/ASN.mmdb"
28 | mkdir -p /tmp/etc/openclash
29 | fi
30 | LOG_OUT "Start Downloading Geo ASN Database..."
31 | if [ -z "$GEOASN_CUSTOM_URL" ]; then
32 | if [ "$github_address_mod" != "0" ]; then
33 | if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
34 | DOWNLOAD_URL="${github_address_mod}gh/xishang0128/geoip@release/GeoLite2-ASN.mmdb"
35 | else
36 | DOWNLOAD_URL="${github_address_mod}https://github.com/xishang0128/geoip/releases/latest/download/GeoLite2-ASN.mmdb"
37 | fi
38 | else
39 | DOWNLOAD_URL="https://github.com/xishang0128/geoip/releases/latest/download/GeoLite2-ASN.mmdb"
40 | fi
41 | else
42 | DOWNLOAD_URL=$GEOASN_CUSTOM_URL
43 | fi
44 | DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "/tmp/GeoLite2-ASN.mmdb"
45 | if [ "$?" -eq 0 ] && [ -s "/tmp/GeoLite2-ASN.mmdb" ]; then
46 | LOG_OUT "Geo ASN Database Download Success, Check Updated..."
47 | cmp -s /tmp/GeoLite2-ASN.mmdb "$geoasn_path"
48 | if [ "$?" -ne "0" ]; then
49 | LOG_OUT "Geo ASN Database Has Been Updated, Starting To Replace The Old Version..."
50 | rm -rf "/etc/openclash/GeoLite2-ASN.mmdb"
51 | mv /tmp/GeoLite2-ASN.mmdb "$geoasn_path" >/dev/null 2>&1
52 | LOG_OUT "Geo ASN Database Update Successful!"
53 | restart=1
54 | else
55 | LOG_OUT "Updated Geo ASN Database No Change, Do Nothing..."
56 | fi
57 | else
58 | LOG_OUT "Geo ASN Database Update Error, Please Try Again Later..."
59 | fi
60 |
61 | if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
62 | /etc/init.d/openclash restart >/dev/null 2>&1 &
63 | elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then
64 | /etc/init.d/openclash restart >/dev/null 2>&1 &
65 | uci -q set openclash.config.restart=0
66 | uci -q commit openclash
67 | elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
68 | uci -q set openclash.config.restart=1
69 | uci -q commit openclash
70 | fi
71 |
72 | rm -rf /tmp/GeoLite2-ASN.mmdb >/dev/null 2>&1
73 | SLOG_CLEAN
74 | del_lock
75 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_geoip.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | . /usr/share/openclash/openclash_ps.sh
3 | . /usr/share/openclash/log.sh
4 | . /usr/share/openclash/openclash_curl.sh
5 |
6 | set_lock() {
7 | exec 873>"/tmp/lock/openclash_geoip.lock" 2>/dev/null
8 | flock -x 873 2>/dev/null
9 | }
10 |
11 | del_lock() {
12 | flock -u 873 2>/dev/null
13 | rm -rf "/tmp/lock/openclash_geoip.lock" 2>/dev/null
14 | }
15 |
16 | set_lock
17 |
18 | small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null)
19 | GEOIP_CUSTOM_URL=$(uci get openclash.config.geoip_custom_url 2>/dev/null)
20 | github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
21 | restart=0
22 |
23 | if [ "$small_flash_memory" != "1" ]; then
24 | geoip_path="/etc/openclash/GeoIP.dat"
25 | mkdir -p /etc/openclash
26 | else
27 | geoip_path="/tmp/etc/openclash/GeoIP.dat"
28 | mkdir -p /tmp/etc/openclash
29 | fi
30 | LOG_OUT "Start Downloading GeoIP Dat..."
31 | if [ -z "$GEOIP_CUSTOM_URL" ]; then
32 | if [ "$github_address_mod" != "0" ]; then
33 | if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
34 | DOWNLOAD_URL="${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat"
35 | else
36 | DOWNLOAD_URL="${github_address_mod}https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
37 | fi
38 | else
39 | DOWNLOAD_URL="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
40 | fi
41 | else
42 | DOWNLOAD_URL=$GEOIP_CUSTOM_URL
43 | fi
44 | DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "/tmp/GeoIP.dat"
45 | if [ "$?" -eq 0 ] && [ -s "/tmp/GeoIP.dat" ]; then
46 | LOG_OUT "GeoIP Dat Download Success, Check Updated..."
47 | cmp -s /tmp/GeoIP.dat "$geoip_path"
48 | if [ "$?" -ne "0" ]; then
49 | LOG_OUT "GeoIP Dat Has Been Updated, Starting To Replace The Old Version..."
50 | rm -rf "/etc/openclash/geoip.dat"
51 | mv /tmp/GeoIP.dat "$geoip_path" >/dev/null 2>&1
52 | LOG_OUT "GeoIP Dat Update Successful!"
53 | restart=1
54 | else
55 | LOG_OUT "Updated GeoIP Dat No Change, Do Nothing..."
56 | fi
57 | else
58 | LOG_OUT "GeoIP Dat Update Error, Please Try Again Later..."
59 | fi
60 |
61 | if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
62 | /etc/init.d/openclash restart >/dev/null 2>&1 &
63 | elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then
64 | /etc/init.d/openclash restart >/dev/null 2>&1 &
65 | uci -q set openclash.config.restart=0
66 | uci -q commit openclash
67 | elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
68 | uci -q set openclash.config.restart=1
69 | uci -q commit openclash
70 | fi
71 |
72 | rm -rf /tmp/GeoIP.dat >/dev/null 2>&1
73 | SLOG_CLEAN
74 | del_lock
75 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_geosite.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | . /usr/share/openclash/openclash_ps.sh
3 | . /usr/share/openclash/log.sh
4 | . /usr/share/openclash/openclash_curl.sh
5 |
6 | set_lock() {
7 | exec 874>"/tmp/lock/openclash_geosite.lock" 2>/dev/null
8 | flock -x 874 2>/dev/null
9 | }
10 |
11 | del_lock() {
12 | flock -u 874 2>/dev/null
13 | rm -rf "/tmp/lock/openclash_geosite.lock" 2>/dev/null
14 | }
15 |
16 | set_lock
17 |
18 | small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null)
19 | GEOSITE_CUSTOM_URL=$(uci get openclash.config.geosite_custom_url 2>/dev/null)
20 | github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
21 | restart=0
22 |
23 | if [ "$small_flash_memory" != "1" ]; then
24 | geosite_path="/etc/openclash/GeoSite.dat"
25 | mkdir -p /etc/openclash
26 | else
27 | geosite_path="/tmp/etc/openclash/GeoSite.dat"
28 | mkdir -p /tmp/etc/openclash
29 | fi
30 | LOG_OUT "Start Downloading GeoSite Database..."
31 | if [ -z "$GEOSITE_CUSTOM_URL" ]; then
32 | if [ "$github_address_mod" != "0" ]; then
33 | if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
34 | DOWNLOAD_URL="${github_address_mod}gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat"
35 | else
36 | DOWNLOAD_URL="${github_address_mod}https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
37 | fi
38 | else
39 | DOWNLOAD_URL="https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
40 | fi
41 | else
42 | DOWNLOAD_URL=$GEOSITE_CUSTOM_URL
43 | fi
44 | DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "/tmp/GeoSite.dat"
45 | if [ "$?" -eq 0 ] && [ -s "/tmp/GeoSite.dat" ]; then
46 | LOG_OUT "GeoSite Database Download Success, Check Updated..."
47 | cmp -s /tmp/GeoSite.dat "$geosite_path"
48 | if [ "$?" -ne "0" ]; then
49 | LOG_OUT "GeoSite Database Has Been Updated, Starting To Replace The Old Version..."
50 | rm -rf "/etc/openclash/geosite.dat"
51 | mv /tmp/GeoSite.dat "$geosite_path" >/dev/null 2>&1
52 | LOG_OUT "GeoSite Database Update Successful!"
53 | restart=1
54 | else
55 | LOG_OUT "Updated GeoSite Database No Change, Do Nothing..."
56 | fi
57 | else
58 | LOG_OUT "GeoSite Database Update Error, Please Try Again Later..."
59 | fi
60 |
61 | if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
62 | /etc/init.d/openclash restart >/dev/null 2>&1 &
63 | elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then
64 | /etc/init.d/openclash restart >/dev/null 2>&1 &
65 | uci -q set openclash.config.restart=0
66 | uci -q commit openclash
67 | elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
68 | uci -q set openclash.config.restart=1
69 | uci -q commit openclash
70 | fi
71 |
72 | rm -rf /tmp/GeoSite.dat >/dev/null 2>&1
73 | SLOG_CLEAN
74 | del_lock
75 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_history_get.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . /lib/functions.sh
3 | . /usr/share/openclash/openclash_ps.sh
4 |
5 | set_lock() {
6 | exec 881>"/tmp/lock/openclash_history_get.lock" 2>/dev/null
7 | flock -x 881 2>/dev/null
8 | }
9 |
10 | del_lock() {
11 | flock -u 881 2>/dev/null
12 | rm -rf "/tmp/lock/openclash_history_get.lock" 2>/dev/null
13 | }
14 |
15 | close_all_conection() {
16 | SECRET=$(uci -q get openclash.config.dashboard_password)
17 | lan_interface_name=$(uci -q get openclash.config.lan_interface_name || echo "0")
18 | if [ "$lan_interface_name" = "0" ]; then
19 | LAN_IP=$(uci -q get network.lan.ipaddr |awk -F '/' '{print $1}' 2>/dev/null || ip address show $(uci -q -p /tmp/state get network.lan.ifname || uci -q -p /tmp/state get network.lan.device) | grep -w "inet" 2>/dev/null |grep -Eo 'inet [0-9\.]+' | awk '{print $2}' |head -1 || ip addr show 2>/dev/null | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Eo 'inet [0-9\.]+' | awk '{print $2}' | head -n 1)
20 | else
21 | LAN_IP=$(ip address show $lan_interface_name | grep -w "inet" 2>/dev/null |grep -Eo 'inet [0-9\.]+' | awk '{print $2}' |head -1)
22 | fi
23 | PORT=$(uci -q get openclash.config.cn_port)
24 | curl -m 2 -H "Authorization: Bearer ${SECRET}" -H "Content-Type:application/json" -X DELETE http://"$LAN_IP":"$PORT"/connections >/dev/null 2>&1
25 | }
26 |
27 | set_lock
28 |
29 | if [ "$1" = "close_all_conection" ]; then
30 | close_all_conection
31 | del_lock
32 | exit 0
33 | fi
34 |
35 | CONFIG_FILE=$(unify_ps_cfgname)
36 | CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $4}' 2>/dev/null)
37 | small_flash_memory=$(uci -q get openclash.config.small_flash_memory)
38 | HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}"
39 | HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db"
40 | core_version=$(uci -q get openclash.config.core_version || echo 0)
41 | CACHE_PATH_OLD="/etc/openclash/.cache"
42 | source "/etc/openwrt_release"
43 |
44 | if [ -z "$CONFIG_FILE" ] || [ ! -f "$CONFIG_FILE" ]; then
45 | CONFIG_FILE=$(uci get openclash.config.config_path 2>/dev/null)
46 | CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
47 | HISTORY_PATH_OLD="/etc/openclash/history/${CONFIG_NAME%.*}"
48 | HISTORY_PATH="/etc/openclash/history/${CONFIG_NAME%.*}.db"
49 | fi
50 |
51 | if [ -n "$(pidof clash)" ] && [ -f "$CONFIG_FILE" ]; then
52 | if [ "$small_flash_memory" == "1" ] || [ -n "$(echo $core_version |grep mips)" ] || [ -n "$(echo $DISTRIB_ARCH |grep mips)" ] || [ -n "$(opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' |grep mips)" ] || [ -n "$(apk list libc 2>/dev/null |grep mips)" ]; then
53 | CACHE_PATH="/tmp/etc/openclash/cache.db"
54 | if [ -f "$CACHE_PATH" ]; then
55 | cmp -s "$CACHE_PATH" "$HISTORY_PATH"
56 | if [ "$?" -ne "0" ]; then
57 | cp "$CACHE_PATH" "$HISTORY_PATH" 2>/dev/null
58 | fi
59 | fi
60 | fi
61 | if [ -f "$CACHE_PATH_OLD" ]; then
62 | cmp -s "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD"
63 | if [ "$?" -ne "0" ]; then
64 | cp "$CACHE_PATH_OLD" "$HISTORY_PATH_OLD" 2>/dev/null
65 | fi
66 | fi
67 | fi
68 |
69 | del_lock
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_ipdb.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | . /usr/share/openclash/openclash_ps.sh
3 | . /usr/share/openclash/log.sh
4 | . /usr/share/openclash/openclash_curl.sh
5 |
6 | set_lock() {
7 | exec 880>"/tmp/lock/openclash_ipdb.lock" 2>/dev/null
8 | flock -x 880 2>/dev/null
9 | }
10 |
11 | del_lock() {
12 | flock -u 880 2>/dev/null
13 | rm -rf "/tmp/lock/openclash_ipdb.lock" 2>/dev/null
14 | }
15 |
16 | set_lock
17 |
18 | small_flash_memory=$(uci get openclash.config.small_flash_memory 2>/dev/null)
19 | GEOIP_CUSTOM_URL=$(uci get openclash.config.geo_custom_url 2>/dev/null)
20 | github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
21 | restart=0
22 |
23 | if [ "$small_flash_memory" != "1" ]; then
24 | geoip_path="/etc/openclash/Country.mmdb"
25 | mkdir -p /etc/openclash
26 | else
27 | geoip_path="/tmp/etc/openclash/Country.mmdb"
28 | mkdir -p /tmp/etc/openclash
29 | fi
30 | LOG_OUT "Start Downloading Geoip Database..."
31 | if [ -z "$GEOIP_CUSTOM_URL" ]; then
32 | if [ "$github_address_mod" != "0" ]; then
33 | if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
34 | DOWNLOAD_URL="${github_address_mod}gh/alecthw/mmdb_china_ip_list@release/lite/Country.mmdb"
35 | else
36 | DOWNLOAD_URL="${github_address_mod}https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb"
37 | fi
38 | else
39 | DOWNLOAD_URL="https://raw.githubusercontent.com/alecthw/mmdb_china_ip_list/release/lite/Country.mmdb"
40 | fi
41 | else
42 | DOWNLOAD_URL=$GEOIP_CUSTOM_URL
43 | fi
44 | DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "/tmp/Country.mmdb"
45 | if [ "$?" -eq 0 ] && [ -s "/tmp/Country.mmdb" ]; then
46 | LOG_OUT "Geoip Database Download Success, Check Updated..."
47 | cmp -s /tmp/Country.mmdb "$geoip_path"
48 | if [ "$?" -ne 0 ]; then
49 | LOG_OUT "Geoip Database Has Been Updated, Starting To Replace The Old Version..."
50 | mv /tmp/Country.mmdb "$geoip_path" >/dev/null 2>&1
51 | LOG_OUT "Geoip Database Update Successful!"
52 | restart=1
53 | else
54 | LOG_OUT "Updated Geoip Database No Change, Do Nothing..."
55 | fi
56 | else
57 | LOG_OUT "Geoip Database Update Error, Please Try Again Later..."
58 | fi
59 |
60 | if [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
61 | /etc/init.d/openclash restart >/dev/null 2>&1 &
62 | elif [ "$restart" -eq 0 ] && [ "$(unify_ps_prevent)" -eq 0 ] && [ "$(uci -q get openclash.config.restart)" -eq 1 ]; then
63 | /etc/init.d/openclash restart >/dev/null 2>&1 &
64 | uci -q set openclash.config.restart=0
65 | uci -q commit openclash
66 | elif [ "$restart" -eq 1 ] && [ "$(unify_ps_prevent)" -eq 0 ]; then
67 | uci -q set openclash.config.restart=1
68 | uci -q commit openclash
69 | fi
70 |
71 | rm -rf /tmp/Country.mmdb >/dev/null 2>&1
72 | SLOG_CLEAN
73 | del_lock
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_ps.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | unify_ps_status() {
4 | if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ]; then
5 | echo "$(ps -efw |grep -v grep |grep -c "$1")"
6 | else
7 | echo "$(ps -w |grep -v grep |grep -c "$1")"
8 | fi
9 | }
10 |
11 | unify_ps_pids() {
12 | if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ]; then
13 | echo "$(ps -efw |grep "$1" |grep -v grep |awk '{print $2}' 2>/dev/null)"
14 | else
15 | echo "$(ps -w |grep "$1" |grep -v grep |awk '{print $1}' 2>/dev/null)"
16 | fi
17 | }
18 |
19 | unify_ps_prevent() {
20 | if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ]; then
21 | echo "$(ps -efw |grep -v grep |grep -c "/etc/init.d/openclash")"
22 | else
23 | echo "$(ps -w |grep -v grep |grep -c "/etc/init.d/openclash")"
24 | fi
25 | }
26 |
27 | unify_ps_cfgname() {
28 | if [ "$(ps --version 2>&1 |grep -c procps-ng)" -eq 1 ]; then
29 | echo "$(ps -efw |grep /etc/openclash/clash 2>/dev/null |grep -v grep |awk -F '-f ' '{print $2}' 2>/dev/null)"
30 | else
31 | echo "$(ps -w |grep /etc/openclash/clash 2>/dev/null |grep -v grep |awk -F '-f ' '{print $2}' 2>/dev/null)"
32 | fi
33 | }
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_urlencode.lua:
--------------------------------------------------------------------------------
1 | #!/usr/bin/lua
2 |
3 | require "nixio"
4 | require "luci.util"
5 | require "luci.sys"
6 | local HTTP = require "luci.http"
7 | local url = arg[1]
8 |
9 | if not url then os.exit(0) end
10 |
11 | print(HTTP.urlencode(url) or url)
12 |
13 | os.exit(0)
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/openclash_version.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | . /usr/share/openclash/openclash_curl.sh
3 |
4 | set_lock() {
5 | exec 869>"/tmp/lock/openclash_version.lock" 2>/dev/null
6 | flock -x 869 2>/dev/null
7 | }
8 |
9 | del_lock() {
10 | flock -u 869 2>/dev/null
11 | rm -rf "/tmp/lock/openclash_version.lock" 2>/dev/null
12 | }
13 |
14 | set_lock
15 |
16 | TIME=$(date "+%Y-%m-%d-%H")
17 | CHTIME=$(date "+%Y-%m-%d-%H" -r "/tmp/openclash_last_version" 2>/dev/null)
18 | DOWNLOAD_FILE="/tmp/openclash_last_version"
19 | RELEASE_BRANCH=$(uci -q get openclash.config.release_branch || echo "master")
20 | if [ -x "/bin/opkg" ]; then
21 | OP_CV=$(rm -f /var/lock/opkg.lock && opkg status luci-app-openclash 2>/dev/null |grep 'Version' |awk -F 'Version: ' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
22 | elif [ -x "/usr/bin/apk" ]; then
23 | OP_CV=$(apk list luci-app-openclash 2>/dev/null|grep 'installed' | grep -oE '[0-9]+(\.[0-9]+)*' | head -1 |awk -F '.' '{print $2$3}' 2>/dev/null)
24 | fi
25 | OP_LV=$(sed -n 1p $DOWNLOAD_FILE 2>/dev/null |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
26 | github_address_mod=$(uci -q get openclash.config.github_address_mod || echo 0)
27 | if [ -n "$1" ]; then
28 | github_address_mod="$1"
29 | fi
30 |
31 | if [ "$TIME" != "$CHTIME" ]; then
32 | if [ "$github_address_mod" != "0" ]; then
33 | if [ "$github_address_mod" == "https://cdn.jsdelivr.net/" ] || [ "$github_address_mod" == "https://fastly.jsdelivr.net/" ] || [ "$github_address_mod" == "https://testingcf.jsdelivr.net/" ]; then
34 | DOWNLOAD_URL="${github_address_mod}gh/vernesong/OpenClash@package/${RELEASE_BRANCH}/version"
35 | else
36 | DOWNLOAD_URL="${github_address_mod}https://raw.githubusercontent.com/vernesong/OpenClash/package/${RELEASE_BRANCH}/version"
37 | fi
38 | else
39 | DOWNLOAD_URL="https://raw.githubusercontent.com/vernesong/OpenClash/package/${RELEASE_BRANCH}/version"
40 | fi
41 |
42 | DOWNLOAD_FILE_CURL "$DOWNLOAD_URL" "$DOWNLOAD_FILE"
43 |
44 | if [ "$?" -eq 0 ]; then
45 | OP_LV=$(sed -n 1p $DOWNLOAD_FILE 2>/dev/null |awk -F 'v' '{print $2}' |awk -F '.' '{print $2$3}' 2>/dev/null)
46 | if [ "$(expr "$OP_CV" \>= "$OP_LV")" = "1" ]; then
47 | sed -i '/^https:/,$d' $DOWNLOAD_FILE
48 | fi
49 | fi
50 | fi
51 | del_lock
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/dashboard/CNAME:
--------------------------------------------------------------------------------
1 | clash.razord.top
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/dashboard/assets/logo-b453e72f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/dashboard/assets/logo-b453e72f.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/dashboard/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Clash
11 |
12 |
13 |
14 |
15 |
16 |
You need to enable JavaScript to run this app.
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/dashboard/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"Clash Dashboard","short_name":"Clash Dashboard","start_url":"/","display":"standalone","background_color":"#ffffff","lang":"en","scope":"./","icons":[{"src":"//cdn.jsdelivr.net/gh/Dreamacro/clash-dashboard/src/assets/Icon.png","sizes":"512x512","type":"image/png"}]}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/dashboard/sw.js:
--------------------------------------------------------------------------------
1 | if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()})).then((()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e})));self.define=(i,t)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const l=e=>n(e,r),d={module:{uri:r},exports:o,require:l};s[r]=Promise.all(i.map((e=>d[e]||l(e)))).then((e=>(t(...e),o)))}}define(["./workbox-4de3aa5f"],(function(e){"use strict";self.addEventListener("message",(e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()})),e.precacheAndRoute([{url:"assets/index-41a41303.css",revision:null},{url:"assets/index-abc6db04.js",revision:null},{url:"assets/vendor-0c169955.js",revision:null},{url:"index.html",revision:"9a8a6ecd862a646bcb1c971fed6d9e82"},{url:"manifest.webmanifest",revision:"d3dd1da0aa7614180924343e65244285"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/CNAME:
--------------------------------------------------------------------------------
1 | d.metacubex.one
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/apple-touch-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/apple-touch-icon-180x180.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/DocumentTitle-qgMGpI7d.js:
--------------------------------------------------------------------------------
1 | import{d as t,bx as r}from"./index-BfxF6Zjo.js";const o=({children:e})=>t(r,{get children(){return[e," - MetaCubeXD"]}});export{o as D};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/FiraSans-Regular-BN6hITtY.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/FiraSans-Regular-BN6hITtY.ttf
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/IconReload-bqqdFQ5q.js:
--------------------------------------------------------------------------------
1 | import{N as o}from"./index-BfxF6Zjo.js";/**
2 | * @license @tabler/icons-solidjs v3.31.0 - MIT
3 | *
4 | * This source code is licensed under the MIT license.
5 | * See the LICENSE file in the root directory of this source tree.
6 | */var e=o("outline","reload","IconReload",[["path",{d:"M19.933 13.041a8 8 0 1 1 -9.925 -8.788c3.899 -1 7.935 1.007 9.425 4.747"}],["path",{d:"M20 4v5h-5"}]]);export{e as I};
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/Twemoji.Mozilla-BSQKJ6aF.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/Twemoji.Mozilla-BSQKJ6aF.ttf
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-cyrillic-400-normal-9itZEwnn.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-cyrillic-400-normal-9itZEwnn.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-cyrillic-400-normal-DivIpeVh.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-cyrillic-400-normal-DivIpeVh.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-cyrillic-ext-400-normal-Ct_d_4pr.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-cyrillic-ext-400-normal-Ct_d_4pr.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-cyrillic-ext-400-normal-DVFiJ7cT.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-cyrillic-ext-400-normal-DVFiJ7cT.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-greek-400-normal-B4JJYYvj.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-greek-400-normal-B4JJYYvj.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-greek-400-normal-xziLJ4od.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-greek-400-normal-xziLJ4od.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-greek-ext-400-normal-BA5_ngob.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-greek-ext-400-normal-BA5_ngob.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-greek-ext-400-normal-DDGpGFz4.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-greek-ext-400-normal-DDGpGFz4.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-latin-400-normal-CRr34ncs.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-latin-400-normal-CRr34ncs.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-latin-400-normal-DqUVgETp.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-latin-400-normal-DqUVgETp.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-latin-ext-400-normal-BsVau5p6.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-latin-ext-400-normal-BsVau5p6.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-latin-ext-400-normal-Cah6ivqJ.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-latin-ext-400-normal-Cah6ivqJ.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-vietnamese-400-normal-CiKzo2z6.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-vietnamese-400-normal-CiKzo2z6.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-vietnamese-400-normal-D5T8w5kG.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/fira-sans-vietnamese-400-normal-D5T8w5kG.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/assets/time-M8P-MK1v.js:
--------------------------------------------------------------------------------
1 | import{W as a,b4 as m}from"./index-BfxF6Zjo.js";const s=o=>a(o).locale(m()).fromNow();export{s as f};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/favicon.ico
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
You need to enable JavaScript to run this app.
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"MetaCubeXD","short_name":"MetaCubeXD","description":"Mihomo Dashboard, The Official One, XD","start_url":"./","display":"standalone","background_color":"#ffffff","theme_color":"#000000","lang":"en","scope":"./","icons":[{"src":"pwa-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/pwa-512x512.png","sizes":"512x512","type":"image/png"},{"src":"pwa-512x512.png","sizes":"512x512","type":"image/png","purpose":"any maskable"}]}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/maskable-icon-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/maskable-icon-512x512.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/pwa-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/pwa-192x192.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/pwa-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/pwa-512x512.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/pwa-64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/pwa-64x64.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/registerSW.js:
--------------------------------------------------------------------------------
1 | if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/metacubexd/sw.js:
--------------------------------------------------------------------------------
1 | if(!self.define){let s,e={};const i=(i,n)=>(i=new URL(i+".js",n).href,e[i]||new Promise((e=>{if("document"in self){const s=document.createElement("script");s.src=i,s.onload=e,document.head.appendChild(s)}else s=i,importScripts(i),e()})).then((()=>{let s=e[i];if(!s)throw new Error(`Module ${i} didn’t register its module`);return s})));self.define=(n,r)=>{const l=s||("document"in self?document.currentScript.src:"")||location.href;if(e[l])return;let o={};const t=s=>i(s,l),u={module:{uri:l},exports:o,require:t};e[l]=Promise.all(n.map((s=>u[s]||t(s)))).then((s=>(r(...s),o)))}}define(["./workbox-3e8df8c8"],(function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"assets/Config-B1EwbU18.js",revision:null},{url:"assets/Connections-WHEuHC_k.js",revision:null},{url:"assets/DocumentTitle-qgMGpI7d.js",revision:null},{url:"assets/IconReload-bqqdFQ5q.js",revision:null},{url:"assets/index-BfxF6Zjo.js",revision:null},{url:"assets/index-Bg_1VLqf.css",revision:null},{url:"assets/index-CXfh_Ffl.js",revision:null},{url:"assets/Logs-DmnD-Vbh.js",revision:null},{url:"assets/Overview-BigJMrEz.js",revision:null},{url:"assets/Proxies-DCaTGxZZ.js",revision:null},{url:"assets/Rules-T7FAMMsr.js",revision:null},{url:"assets/Setup-2nY6XKtT.js",revision:null},{url:"assets/time-M8P-MK1v.js",revision:null},{url:"index.html",revision:"761f846e47c016c7f82446639da40073"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"f5b3372f312fbbe60a6ed8c03741ff80"},{url:"pwa-192x192.png",revision:"c45f48fc59b5bf47e6cbf1626aff51fc"},{url:"pwa-512x512.png",revision:"a311504ae6a46bd29b5678a410aaafc6"},{url:"manifest.webmanifest",revision:"9367f610ffbd3bb959a69b706013d50e"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html")))}));
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/CNAME:
--------------------------------------------------------------------------------
1 | yacd.metacubex.one
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/Twemoji_Mozilla.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/Twemoji_Mozilla.ttf
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/_headers:
--------------------------------------------------------------------------------
1 | # for netlify hosting
2 | # https://docs.netlify.com/routing/headers/#syntax-for-the-headers-file
3 |
4 | /*
5 | X-Frame-Options: DENY
6 | X-XSS-Protection: 1; mode=block
7 | X-Content-Type-Options: nosniff
8 | Referrer-Policy: same-origin
9 | /*.css
10 | Cache-Control: public, max-age=31536000, immutable
11 | /*.js
12 | Cache-Control: public, max-age=31536000, immutable
13 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/BaseModal-e9f180d4.css:
--------------------------------------------------------------------------------
1 | ._overlay_ukhe7_1{background-color:#0009}._cnt_ukhe7_5{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;box-shadow:#0000001f 0 4px 4px,#0000003d 0 16px 32px}._afterOpen_ukhe7_15{opacity:1}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/BaseModal-f42f892a.js:
--------------------------------------------------------------------------------
1 | import{r as y,R as p,p as s,c as f,m as v,b as h,M as m,x as O}from"./index-1a05af9b.js";function l(){return l=Object.assign||function(e){for(var n=1;n
=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}function b(e,n){if(e==null)return{};var r={},t=Object.keys(e),o,a;for(a=0;a=0)&&(r[o]=e[o]);return r}var c=y.forwardRef(function(e,n){var r=e.color,t=r===void 0?"currentColor":r,o=e.size,a=o===void 0?24:o,u=g(e,["color","size"]);return p.createElement("svg",l({ref:n,xmlns:"http://www.w3.org/2000/svg",width:a,height:a,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},u),p.createElement("polyline",{points:"6 9 12 15 18 9"}))});c.propTypes={color:s.string,size:s.oneOfType([s.string,s.number])};c.displayName="ChevronDown";const k=c,w="_overlay_ukhe7_1",d="_cnt_ukhe7_5",_="_afterOpen_ukhe7_15",i={overlay:w,cnt:d,afterOpen:_},{useMemo:j}=O;function C({isOpen:e,onRequestClose:n,children:r}){const t=j(()=>({base:f(v.content,i.cnt),afterOpen:i.afterOpen,beforeClose:""}),[]);return h(m,{isOpen:e,onRequestClose:n,className:t,overlayClassName:f(v.overlay,i.overlay),children:r})}export{C as B,k as C};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Config-7eb3f1bb.css:
--------------------------------------------------------------------------------
1 | ._root_1vck5_4,._section_1vck5_5{display:grid;grid-template-columns:repeat(auto-fill,minmax(49%,1fr));max-width:900px;grid-gap:5px;gap:5px}@media screen and (min-width: 30em){._root_1vck5_4,._section_1vck5_5{gap:15px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}}._root_1vck5_4,._section_1vck5_5{padding:6px 15px 10px}@media screen and (min-width: 30em){._root_1vck5_4,._section_1vck5_5{padding:10px 40px 15px}}._wrapSwitch_1vck5_30{height:40px;display:flex;align-items:center}._sep_1vck5_36{max-width:900px;padding:0 15px}@media screen and (min-width: 30em){._sep_1vck5_36{padding:0 40px}}._sep_1vck5_36>div{border-top:1px dashed #373737}._label_1vck5_49{padding:15px 0;font-size:small}._fieldset_1hnn2_1{margin:0;padding:0;border:0;display:flex;flex-wrap:wrap;flex-direction:row}._input_1hnn2_10+._cnt_1hnn2_10{border:1px solid transparent;border-radius:4px;cursor:pointer;margin-bottom:5px}._input_1hnn2_10:focus+._cnt_1hnn2_10{border-color:var(--color-focus-blue)}._input_1hnn2_10:checked+._cnt_1hnn2_10{border-color:var(--color-focus-blue)}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Fab-47e19297.js:
--------------------------------------------------------------------------------
1 | import{b as e,j as b,x as y,r as l}from"./index-1a05af9b.js";const E="_spining_4i8sg_1",F="_spining_keyframes_4i8sg_1",M={spining:E,spining_keyframes:F},{useState:j}=y;function B({children:s}){return e("span",{className:M.spining,children:s})}const H={right:10,bottom:10},L=({children:s,...n})=>e("button",{type:"button",...n,className:"rtf--ab",children:s}),v=({children:s,...n})=>e("button",{type:"button",className:"rtf--mb",...n,children:s}),O={bottom:24,right:24},R=({event:s="hover",style:n=O,alwaysShowTitle:o=!1,children:f,icon:g,mainButtonStyles:h,onClick:p,text:d,..._})=>{const[a,r]=j(!1),c=o||!a,u=()=>r(!0),m=()=>r(!1),x=()=>s==="hover"&&u(),k=()=>s==="hover"&&m(),N=t=>p?p(t):(t.persist(),s==="click"?a?m():u():null),$=(t,i)=>{t.persist(),r(!1),setTimeout(()=>{i(t)},1)},C=()=>l.Children.map(f,(t,i)=>l.isValidElement(t)?b("li",{className:`rtf--ab__c ${"top"in n?"top":""}`,children:[l.cloneElement(t,{"data-testid":`action-button-${i}`,"aria-label":t.props.text||`Menu button ${i+1}`,"aria-hidden":c,tabIndex:a?0:-1,...t.props,onClick:I=>{t.props.onClick&&$(I,t.props.onClick)}}),t.props.text&&e("span",{className:`${"right"in n?"right":""} ${o?"always-show":""}`,"aria-hidden":c,children:t.props.text})]}):null);return e("ul",{onMouseEnter:x,onMouseLeave:k,className:`rtf ${a?"open":"closed"}`,"data-testid":"fab",style:n,..._,children:b("li",{className:"rtf--mb__c",children:[e(v,{onClick:N,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0,children:g}),d&&e("span",{className:`${"right"in n?"right":""} ${o?"always-show":""}`,"aria-hidden":c,children:d}),e("ul",{children:C()})]})})};export{L as A,R as F,B as I,H as p};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Input-e46653b4.js:
--------------------------------------------------------------------------------
1 | import{b as s,T as a,R as f}from"./index-1a05af9b.js";const{useState:i,useRef:l,useEffect:p,useCallback:m}=f;function C(t){return s("input",{className:a.input,...t})}function R({value:t,...r}){const[u,n]=i(t),e=l(t);p(()=>{e.current!==t&&n(t),e.current=t},[t]);const c=m(o=>n(o.target.value),[n]);return s("input",{className:a.input,value:u,onChange:c,...r})}export{C as I,R as S};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Logs-beb8fc98.css:
--------------------------------------------------------------------------------
1 | ._RuleSearch_ue4xf_1{padding:0 40px 5px}@media (max-width: 768px){._RuleSearch_ue4xf_1{padding:0 25px 5px}}._RuleSearchContainer_ue4xf_10{position:relative;height:40px}@media (max-width: 768px){._RuleSearchContainer_ue4xf_10{height:30px}}._inputWrapper_ue4xf_20{position:absolute;top:50%;transform:translateY(-50%);left:0;width:100%}._input_ue4xf_20{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:var(--color-text-secondary);display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 15px 0 35px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._iconWrapper_ue4xf_45{position:absolute;top:50%;transform:translateY(-50%);left:10px;line-height:0}._logMeta_pycfb_1{font-size:.8em;margin-bottom:5px;display:block;line-height:1.55em}._logType_pycfb_8{flex-shrink:0;text-align:center;width:66px;border-radius:100px;padding:3px 5px;margin:0 8px}._logTime_pycfb_17{flex-shrink:0;color:#fb923c}._logText_pycfb_22{flex-shrink:0;color:#888;align-items:center;line-height:1.35em;width:100%}@media (max-width: 768px){._logText_pycfb_22{display:inline-block}}._logsWrapper_pycfb_37{margin:45px;padding:10px;background-color:var(--bg-log-info-card);border-radius:4px;color:var(--color-text);overflow-y:auto}@media (max-width: 768px){._logsWrapper_pycfb_37{margin:25px}}._logsWrapper_pycfb_37 .log{margin-bottom:10px}._logPlaceholder_pycfb_54{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#2d2d30}._logPlaceholder_pycfb_54 div:nth-child(2){color:var(--color-text-secondary);font-size:1.4em;opacity:.6}._logPlaceholderIcon_pycfb_67{opacity:.3}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Rules-162ef666.css:
--------------------------------------------------------------------------------
1 | ._RuleProviderItem_ly9yn_1{display:grid;grid-template-columns:40px 1fr 46px;height:100%}._left_ly9yn_7{display:inline-flex;align-items:center;color:var(--color-text-secondary);opacity:.4}._middle_ly9yn_14{display:grid;grid-template-rows:1fr auto auto;align-items:center}._gray_ly9yn_20{color:#777}._refreshButtonWrapper_ly9yn_24{display:grid;align-items:center;justify-items:center;place-items:center;opacity:0;transition:opacity .2s}._RuleProviderItem_ly9yn_1:hover ._refreshButtonWrapper_ly9yn_24{opacity:1}._rule_1e5p9_4{display:flex;align-items:center;padding:6px 15px}@media screen and (min-width: 30em){._rule_1e5p9_4{padding:10px 40px}}._left_1e5p9_15{width:40px;padding-right:15px;color:var(--color-text-secondary);opacity:.4}._a_1e5p9_22{display:flex;align-items:center;font-size:1em;opacity:.8}._b_1e5p9_29{flex-grow:1;padding:10px 0;font-family:Roboto Mono,Menlo,monospace;font-size:1em}@media screen and (min-width: 30em){._b_1e5p9_29{font-size:1em}}._type_1e5p9_41{width:110px;color:#3b5f76}._size_1e5p9_46{width:110px}._payloadAndSize_1e5p9_50{display:flex;align-items:center}._header_10x16_4{display:grid;grid-template-columns:1fr minmax(auto,290px);align-items:center;padding-right:15px}._RuleProviderItemWrapper_10x16_11{padding:6px 15px}@media screen and (min-width: 30em){._RuleProviderItemWrapper_10x16_11{padding:10px 40px}}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Select-04258549.js:
--------------------------------------------------------------------------------
1 | import{b as c}from"./index-1a05af9b.js";const r="_select_gfkcv_1",a={select:r};function m({options:s,selected:t,onChange:l,...n}){return c("select",{className:a.select,value:t,onChange:l,...n,children:s.map(([e,o])=>c("option",{value:e,children:o},e))})}export{m as S};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Select-20369999.css:
--------------------------------------------------------------------------------
1 | ._select_gfkcv_1{height:35px;line-height:1.5;width:100%;font-size:small;padding-left:15px;appearance:none;background-color:var(--color-input-bg);color:var(--color-text);padding-right:20px;border-radius:4px;border:1px solid var(--color-input-border);background-image:url(data:image/svg+xml,%0A%20%20%20%20%3Csvg%20width%3D%228%22%20height%3D%2224%22%20viewBox%3D%220%200%208%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%207L7%2011H1L4%207Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%2017L1%2013L7%2013L4%2017Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%3C%2Fsvg%3E%0A%20%20);background-position:right 8px center;background-repeat:no-repeat}._select_gfkcv_1:hover,._select_gfkcv_1:focus{outline:none!important}._select_gfkcv_1:hover,._select_gfkcv_1:focus{border-color:#343434;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}._select_gfkcv_1:focus{box-shadow:#4299e199 0 0 0 3px}._select_gfkcv_1 option{background-color:var(--color-background)}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/TextFitler-3b17a569.js:
--------------------------------------------------------------------------------
1 | import{c as r,b as n,a3 as u,x as l}from"./index-1a05af9b.js";import{R as p}from"./rotate-cw-e799f805.js";import{d as x}from"./debounce-c1ba2006.js";const _="_rotate_1dspl_1",g="_isRotating_1dspl_5",d="_rotating_1dspl_1",c={rotate:_,isRotating:g,rotating:d};function N({isRotating:t}){const e=r(c.rotate,{[c.isRotating]:t});return n("span",{className:e,children:n(p,{width:16})})}const{useCallback:m,useState:R,useMemo:h}=l;function f(t){const[,e]=u(t),[o,i]=R(""),s=h(()=>x(e,300),[e]);return[m(a=>{i(a.target.value),s(a.target.value)},[s]),o]}const T="_input_uqa0o_1",b={input:T};function j(t){const[e,o]=f(t.textAtom);return n("input",{className:b.input,type:"text",value:o,onChange:e,placeholder:t.placeholder})}export{N as R,j as T};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/TextFitler-cbc3b0fe.css:
--------------------------------------------------------------------------------
1 | ._rotate_1dspl_1{display:inline-flex}._isRotating_1dspl_5{animation:_rotating_1dspl_1 3s infinite linear;animation-fill-mode:forwards}@keyframes _rotating_1dspl_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._input_uqa0o_1{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:var(--color-text-secondary);display:inline-block;font-size:inherit;outline:none;padding:8px 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%;height:36px}._input_uqa0o_1:focus{border:1px solid var(--color-focus-blue)}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Twemoji_Mozilla-6d90152e.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/Twemoji_Mozilla-6d90152e.ttf
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/debounce-c1ba2006.js:
--------------------------------------------------------------------------------
1 | function O(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var M=typeof global=="object"&&global&&global.Object===Object&&global;const R=M;var w=typeof self=="object"&&self&&self.Object===Object&&self,B=R||w||Function("return this")();const W=B;var F=function(){return W.Date.now()};const S=F;var G=/\s/;function U(e){for(var n=e.length;n--&&G.test(e.charAt(n)););return n}var _=/^\s+/;function D(e){return e&&e.slice(0,U(e)+1).replace(_,"")}var H=W.Symbol;const y=H;var L=Object.prototype,X=L.hasOwnProperty,q=L.toString,g=y?y.toStringTag:void 0;function z(e){var n=X.call(e,g),i=e[g];try{e[g]=void 0;var o=!0}catch{}var f=q.call(e);return o&&(n?e[g]=i:delete e[g]),f}var J=Object.prototype,K=J.toString;function Q(e){return K.call(e)}var V="[object Null]",Y="[object Undefined]",$=y?y.toStringTag:void 0;function Z(e){return e==null?e===void 0?Y:V:$&&$ in Object(e)?z(e):Q(e)}function ee(e){return e!=null&&typeof e=="object"}var ne="[object Symbol]";function te(e){return typeof e=="symbol"||ee(e)&&Z(e)==ne}var E=0/0,re=/^[-+]0x[0-9a-f]+$/i,ie=/^0b[01]+$/i,oe=/^0o[0-7]+$/i,ae=parseInt;function k(e){if(typeof e=="number")return e;if(te(e))return E;if(O(e)){var n=typeof e.valueOf=="function"?e.valueOf():e;e=O(n)?n+"":n}if(typeof e!="string")return e===0?e:+e;e=D(e);var i=ie.test(e);return i||oe.test(e)?ae(e.slice(2),i?2:8):re.test(e)?E:+e}var fe="Expected a function",ce=Math.max,ue=Math.min;function se(e,n,i){var o,f,s,u,r,c,d=0,v=!1,l=!1,T=!0;if(typeof e!="function")throw new TypeError(fe);n=k(n)||0,O(i)&&(v=!!i.leading,l="maxWait"in i,s=l?ce(k(i.maxWait)||0,n):s,T="trailing"in i?!!i.trailing:T);function j(t){var a=o,b=f;return o=f=void 0,d=t,u=e.apply(b,a),u}function N(t){return d=t,r=setTimeout(m,n),v?j(t):u}function P(t){var a=t-c,b=t-d,I=n-a;return l?ue(I,s-b):I}function h(t){var a=t-c,b=t-d;return c===void 0||a>=n||a<0||l&&b>=s}function m(){var t=S();if(h(t))return x(t);r=setTimeout(m,P(t))}function x(t){return r=void 0,T&&o?j(t):(o=f=void 0,u)}function A(){r!==void 0&&clearTimeout(r),d=0,o=c=f=r=void 0}function C(){return r===void 0?u:x(S())}function p(){var t=S(),a=h(t);if(o=arguments,f=this,c=t,a){if(r===void 0)return N(c);if(l)return clearTimeout(r),r=setTimeout(m,n),j(c)}return r===void 0&&(r=setTimeout(m,n)),u}return p.cancel=A,p.flush=C,p}export{se as d};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/en-f84bd3d3.js:
--------------------------------------------------------------------------------
1 | const e={All:"All",Overview:"Overview",Proxies:"Proxies",Rules:"Rules",Conns:"Conns",Config:"Config",Logs:"Logs",Upload:"Upload",Download:"Download","Upload Total":"Upload Total","Download Total":"Download Total","Active Connections":"Active Connections","Memory Usage":"Memory Usage","Pause Refresh":"Pause Refresh","Resume Refresh":"Resume Refresh",close_all_connections:"Close All Connections",close_filter_connections:"Close all connections after filtering",Search:"Search",Up:"Up",Down:"Down","Test Latency":"Test Latency",settings:"settings",sort_in_grp:"Sorting in group",hide_unavail_proxies:"Hide unavailable proxies",auto_close_conns:"Automatically close old connections",order_natural:"Original order in config file",order_latency_asc:"By latency from small to big",order_latency_desc:"By latency from big to small",order_name_asc:"By name alphabetically (A-Z)",order_name_desc:"By name alphabetically (Z-A)",Connections:"Connections",current_backend:"Current Backend",Active:"Active",switch_backend:"Switch backend",Closed:"Closed",switch_theme:"Switch theme",theme:"theme",about:"about",no_logs:"No logs yet, hang tight...",chart_style:"Chart Style",latency_test_url:"Latency Test URL",lang:"Language",update_all_rule_provider:"Update all rule providers",update_all_proxy_provider:"Update all proxy providers",reload_config_file:"Reload config file",restart_core:"Restart core",upgrade_core:"Upgrade core",update_geo_databases_file:"Update GEO Databases ",flush_fake_ip_pool:"Flush fake-ip data",enable_tun_device:"Enable TUN Device",allow_lan:"Allow LAN",tls_sniffing:"Sniffer",c_host:"Host",c_sni:"Sniff Host",c_process:"Process",c_dl:"DL",c_ul:"UL",c_dl_speed:"DL Speed",c_ul_speed:"UP Speed",c_chains:"Chains",c_rule:"Rule",c_time:"Time",c_source:"Source",c_destination_ip:"Destination IP",c_type:"Type",c_ctrl:"Close",close_all_confirm:"Are you sure you want to close all connections?",close_all_confirm_yes:"I'm sure",close_all_confirm_no:"No",manage_column:"Custom columns",reset_column:"Reset columns",device_name:"Device Tag",delete:"Delete",add_tag:"Add tag",client_tag:"Client tags",sourceip_tip:"Prefix with / for regular expressions, otherwise it's a complete match",disconnect:"Close Connection",internel:"Internal Connection"};export{e as data};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/inter-latin-400-normal-0364d368.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/inter-latin-400-normal-0364d368.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/inter-latin-400-normal-3ea830d4.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/inter-latin-400-normal-3ea830d4.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/inter-latin-800-normal-a51ac27d.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/inter-latin-800-normal-a51ac27d.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/inter-latin-800-normal-d08d7178.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/inter-latin-800-normal-d08d7178.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/logs-ca50193b.js:
--------------------------------------------------------------------------------
1 | import{$,a0 as w,a1 as u}from"./index-1a05af9b.js";const v="/logs",D=new TextDecoder("utf-8"),L=()=>Math.floor((1+Math.random())*65536).toString(16);let h=!1,i=!1,f="",s,g;function m(e,n){let t;try{t=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=M(r);t.time=l,t.id=+r-0+L(),t.even=h=!h,n(t)}function M(e){const n=e.getFullYear()%100,t=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${n}-${t}-${r} ${l}:${o}:${c}`}function p(e,n){return e.read().then(({done:t,value:r})=>{const l=D.decode(r,{stream:!t});f+=l;const o=f.split(`
2 | `),c=o[o.length-1];for(let d=0;de[t]).join("|")}let b,a;function k(e,n){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=n;const t=$(e,v);s=new WebSocket(t),s.addEventListener("error",()=>{y(e,n)}),s.addEventListener("message",function(r){m(r.data,n)})}function O(){s.close(),a&&a.abort()}function R(e){!g||!s||(s.close(),i=!1,k(e,g))}function y(e,n){if(a&&S(e)!==b)a.abort();else if(i)return;i=!0,b=S(e),a=new AbortController;const t=a.signal,{url:r,init:l}=w(e);fetch(r+v+"?level="+e.logLevel,{...l,signal:t}).then(o=>{const c=o.body.getReader();p(c,n)},o=>{i=!1,!t.aborted&&console.log("GET /logs error:",o.message)})}export{k as f,R as r,O as s};
3 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/memoize-one.esm-efa1e849.js:
--------------------------------------------------------------------------------
1 | function h(e,r){if(e==null)return{};var t={},u=Object.keys(e),n,a;for(a=0;a=0)&&(t[n]=e[n]);return t}var o=Number.isNaN||function(r){return typeof r=="number"&&r!==r};function l(e,r){return!!(e===r||o(e)&&o(r))}function g(e,r){if(e.length!==r.length)return!1;for(var t=0;t=0)&&Object.prototype.propertyIsEnumerable.call(t,e)&&(r[e]=t[e])}return r}function y(t,o){if(t==null)return{};var r={},e=Object.keys(t),n,i;for(i=0;i=0)&&(r[n]=t[n]);return r}var c=g.forwardRef(function(t,o){var r=t.color,e=r===void 0?"currentColor":r,n=t.size,i=n===void 0?24:n,l=v(t,["color","size"]);return s.createElement("svg",p({ref:o,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:e,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},l),s.createElement("rect",{x:"6",y:"4",width:"4",height:"16"}),s.createElement("rect",{x:"14",y:"4",width:"4",height:"16"}))});c.propTypes={color:a.string,size:a.oneOfType([a.string,a.number])};c.displayName="Pause";const b=c;function f(){return f=Object.assign||function(t){for(var o=1;o=0)&&Object.prototype.propertyIsEnumerable.call(t,e)&&(r[e]=t[e])}return r}function O(t,o){if(t==null)return{};var r={},e=Object.keys(t),n,i;for(i=0;i=0)&&(r[n]=t[n]);return r}var u=g.forwardRef(function(t,o){var r=t.color,e=r===void 0?"currentColor":r,n=t.size,i=n===void 0?24:n,l=h(t,["color","size"]);return s.createElement("svg",f({ref:o,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:e,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},l),s.createElement("polygon",{points:"5 3 19 12 5 21 5 3"}))});u.propTypes={color:a.string,size:a.oneOfType([a.string,a.number])};u.displayName="Play";const w=u;export{w as P,b as a};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/roboto-mono-latin-400-normal-7295944e.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/roboto-mono-latin-400-normal-7295944e.woff2
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/roboto-mono-latin-400-normal-dffdffa7.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/roboto-mono-latin-400-normal-dffdffa7.woff
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/rotate-cw-e799f805.js:
--------------------------------------------------------------------------------
1 | import{r as c,R as s,p as a}from"./index-1a05af9b.js";function p(){return p=Object.assign||function(t){for(var n=1;n=0)&&Object.prototype.propertyIsEnumerable.call(t,e)&&(r[e]=t[e])}return r}function g(t,n){if(t==null)return{};var r={},e=Object.keys(t),o,i;for(i=0;i=0)&&(r[o]=t[o]);return r}var l=c.forwardRef(function(t,n){var r=t.color,e=r===void 0?"currentColor":r,o=t.size,i=o===void 0?24:o,f=u(t,["color","size"]);return s.createElement("svg",p({ref:n,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:e,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},f),s.createElement("polyline",{points:"23 4 23 10 17 10"}),s.createElement("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"}))});l.propTypes={color:a.string,size:a.oneOfType([a.string,a.number])};l.displayName="RotateCw";const y=l;export{y as R};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/useRemainingViewPortHeight-dbe2192e.js:
--------------------------------------------------------------------------------
1 | import{x as r}from"./index-1a05af9b.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/vi-75c7db25.js:
--------------------------------------------------------------------------------
1 | const n={All:"Tất cả",Overview:"Tổng quan",Proxies:"Proxy",Rules:"Quy tắc",Conns:"Kết nối",Config:"Cấu hình",Logs:"Nhật ký",Upload:"Tải lên",Download:"Tải xuống","Upload Total":"Tổng tải lên","Download Total":"Tổng tải xuống","Active Connections":"Kết nối hoạt động","Memory Usage":"Sử dụng bộ nhớ","Pause Refresh":"Tạm dừng làm mới","Resume Refresh":"Tiếp tục làm mới",close_all_connections:"Đóng tất cả kết nối",close_filter_connections:"Đóng tất cả kết nối sau khi lọc",Search:"Tìm kiếm",Up:"Lên",Down:"Xuống","Test Latency":"Kiểm tra độ trễ",settings:"Cài đặt",sort_in_grp:"Sắp xếp trong nhóm",hide_unavail_proxies:"Ẩn proxy không khả dụng",auto_close_conns:"Tự động đóng kết nối cũ",order_natural:"Thứ tự ban đầu trong tệp cấu hình",order_latency_asc:"Theo độ trễ từ nhỏ đến lớn",order_latency_desc:"Theo độ trễ từ lớn đến nhỏ",order_name_asc:"Theo tên theo thứ tự bảng chữ cái (A-Z)",order_name_desc:"Theo tên theo thứ tự bảng chữ cái (Z-A)",Connections:"Kết nối",current_backend:"Backend hiện tại",Active:"Hoạt động",switch_backend:"Chuyển đổi backend",Closed:"Đã đóng",switch_theme:"Chuyển đổi giao diện",theme:"Giao diện",about:"Về chúng tôi",no_logs:"Chưa có nhật ký, hãy kiên nhẫn...",chart_style:"Kiểu biểu đồ",latency_test_url:"URL kiểm tra độ trễ",lang:"Ngôn ngữ",update_all_rule_provider:"Cập nhật tất cả nhà cung cấp quy tắc",update_all_proxy_provider:"Cập nhật tất cả nhà cung cấp proxy",reload_config_file:"Tải lại tệp cấu hình",restart_core:"Khởi động lõi lại Clash",upgrade_core:"Nâng cấp lõi Clash",update_geo_databases_file:"Cập nhật tệp cơ sở dữ liệu GEO",flush_fake_ip_pool:"Xóa bộ nhớ đệm fake-ip",enable_tun_device:"Bật thiết bị TUN",allow_lan:"Cho phép LAN",tls_sniffing:"Bộ giám sát gói tin Sniffer",c_host:"Máy chủ",c_sni:"Phát hiện máy chủ Sniff ",c_process:"Quá trình",c_dl:"Tải Xuống",c_ul:"Tải Lên",c_dl_speed:"Tốc độ Tải Xuống",c_ul_speed:"Tốc độ Tải lên",c_chains:"Chuỗi",c_rule:"Quy tắc",c_time:"Thời gian",c_source:"Nguồn",c_destination_ip:"Địa chỉ IP đích",c_type:"Loại",c_ctrl:"Đóng",close_all_confirm:"Bạn có chắc chắn muốn đóng tất cả kết nối không?",close_all_confirm_yes:"Chắc chắn",close_all_confirm_no:"Không",manage_column:"Quản lý cột",reset_column:"Đặt lại cột",device_name:"Thẻ thiết bị",delete:"Xóa",add_tag:"Thêm thẻ",client_tag:"Thẻ khách hàng",sourceip_tip:"Thêm / vào đầu để sử dụng biểu thức chính quy, nếu không sẽ là kết quả khớp chính xác(By Ohoang7)",disconnect:"Đóng kết nối",internel:"Kết nối nội bộ"};export{n as data};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/zh-cn-d82b820c.js:
--------------------------------------------------------------------------------
1 | const e={All:"全部",Overview:"概览",Proxies:"代理",Rules:"规则",Conns:"连接",Config:"配置",Logs:"日志",Upload:"上传",Download:"下载","Upload Total":"上传总量","Download Total":"下载总量","Active Connections":"活动连接","Memory Usage":"内存使用情况",Memory:"内存","Pause Refresh":"暂停刷新","Resume Refresh":"继续刷新",close_all_connections:"关闭所有连接",close_filter_connections:"关闭所有过滤后的连接",Search:"查找",Up:"上传",Down:"下载","Test Latency":"延迟测速",settings:"设置",sort_in_grp:"代理组条目排序",hide_unavail_proxies:"隐藏不可用代理",auto_close_conns:"切换代理时自动断开旧连接",order_natural:"原 config 文件中的排序",order_latency_asc:"按延迟从小到大",order_latency_desc:"按延迟从大到小",order_name_asc:"按名称字母排序 (A-Z)",order_name_desc:"按名称字母排序 (Z-A)",Connections:"连接",current_backend:"当前后端",Active:"活动",switch_backend:"切换后端",Closed:"已断开",switch_theme:"切换主题",theme:"主题",about:"关于",no_logs:"暂无日志...",chart_style:"流量图样式",latency_test_url:"延迟测速 URL",lang:"语言",update_all_rule_provider:"更新所有 rule provider",update_all_proxy_provider:"更新所有 proxy provider",reload_config_file:"重载配置文件",update_geo_databases_file:"更新 GEO 数据库文件",flush_fake_ip_pool:"清空 FakeIP 数据库",enable_tun_device:"开启 TUN 转发",allow_lan:"允许局域网连接",tls_sniffing:"SNI 嗅探",c_host:"域名",c_sni:"嗅探域名",c_process:"进程",c_dl:"下载",c_ul:"上传",c_dl_speed:"下载速率",c_ul_speed:"上传速率",c_chains:"节点链",c_rule:"规则",c_time:"连接时间",c_source:"来源",c_destination_ip:"目标IP",c_type:"类型",c_ctrl:"关闭",restart_core:"重启核心",upgrade_core:"更新核心",close_all_confirm:"确定关闭所有连接?",close_all_confirm_yes:"确定",close_all_confirm_no:"取消",manage_column:"管理列",reset_column:"重置列",device_name:"设备名",delete:"删除",add_tag:"添加标签",client_tag:"客户端标签",sourceip_tip:"/开头为正则,否则为全匹配",disconnect:"断开连接",internel:"内部链接"};export{e as data};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/assets/zh-tw-9cdfa61b.js:
--------------------------------------------------------------------------------
1 | const e={All:"全部",Overview:"概覽",Proxies:"代理",Rules:"規則",Conns:"連線",Config:"設定",Logs:"紀錄",Upload:"上傳",Download:"下載","Upload Total":"總上傳","Download Total":"總下載","Active Connections":"活動中連線","Memory Usage":"記憶體使用狀況",Memory:"記憶體","Pause Refresh":"暫停重整","Resume Refresh":"繼續重整",close_all_connections:"斷開所有連線",close_filter_connections:"斷開所有過濾後的連線",Search:"搜尋",Up:"上傳",Down:"下載","Test Latency":"測試延遲速度",settings:"設定",sort_in_grp:"依代理群組排序",hide_unavail_proxies:"隱藏不可用的代理伺服器",auto_close_conns:"切換代理伺服器時自動斷開舊連線",order_natural:"原 config 文件中的順序",order_latency_asc:"按延遲從小到大",order_latency_desc:"按延遲從大到小",order_name_asc:"按名稱字母順序排序 (A-Z)",order_name_desc:"按名稱字母順序排序 (Z-A)",Connections:"連線",current_backend:"當前後端",Active:"活動中",switch_backend:"切換後端",Closed:"已斷線",switch_theme:"切換主題",theme:"主題",about:"關於",no_logs:"暫時沒有紀錄…",chart_style:"流量圖樣式",latency_test_url:"延遲測速 URL",lang:"語言",update_all_rule_provider:"更新所有規則提供者",update_all_proxy_provider:"更新所有代理伺服器提供者",reload_config_file:"重新載入設定檔",update_geo_databases_file:"更新 GEO 資料庫文件",flush_fake_ip_pool:"清除 Fake IP 資料庫",enable_tun_device:"開啟 TUN 轉發",allow_lan:"允許區域網路連接",tls_sniffing:"SNI 嗅探",c_host:"網域名稱",c_sni:"嗅探網域名稱",c_process:"處理程序",c_dl:"下載",c_ul:"上傳",c_dl_speed:"下載速度",c_ul_speed:"上傳速度",c_chains:"節點鍊",c_rule:"規則",c_time:"連線時間",c_source:"來源",c_destination_ip:"目標 IP",c_type:"類型",c_ctrl:"關閉",restart_core:"重啟核心",upgrade_core:"更新核心",close_all_confirm:"確定關閉所有連接?",close_all_confirm_yes:"確定",close_all_confirm_no:"取消",manage_column:"管理列",reset_column:"重置列",device_name:"設備名稱",delete:"刪除",add_tag:"新增標籤",client_tag:"客戶端標籤",sourceip_tip:"/開頭為正規表達式,否則為全面配對",disconnect:"斷開連線",internel:"內部連線"};export{e as data};
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | yacd
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/logo.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"yacd","short_name":"yacd","start_url":"./","display":"standalone","background_color":"#ffffff","lang":"en","scope":"./","icons":[{"src":"apple-touch-icon-precomposed.png","sizes":"512x512","type":"image/png"}]}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/registerSW.js:
--------------------------------------------------------------------------------
1 | if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/yacd.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/yacd.ico
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/yacd/yacd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/yacd/yacd.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/zashboard/apple-touch-icon.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/NotoColorEmoji-flagsonly-CWWDk9km.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/NotoColorEmoji-flagsonly-CWWDk9km.ttf
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/metacubex-BlQkOUXT.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/zashboard/assets/metacubex-BlQkOUXT.jpg
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/zashboard/favicon.ico
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/favicon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | zashboard
6 |
10 |
14 |
18 |
23 |
29 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"zashboard","short_name":"zashboard","description":"a dashboard using clash api","start_url":"./","display":"standalone","background_color":"#ffffff","theme_color":"#000000","lang":"en","scope":"./","icons":[{"src":"./pwa-192x192.png","sizes":"192x192","type":"image/png","purpose":"any"},{"src":"./pwa-512x512.png","sizes":"512x512","type":"image/png","purpose":"any"},{"src":"./pwa-maskable-192x192.png","sizes":"192x192","type":"image/png","purpose":"maskable"},{"src":"./pwa-maskable-512x512.png","sizes":"512x512","type":"image/png","purpose":"maskable"}]}
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/pwa-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/zashboard/pwa-192x192.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/pwa-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/zashboard/pwa-512x512.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/pwa-maskable-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/zashboard/pwa-maskable-192x192.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/pwa-maskable-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/usr/share/openclash/ui/zashboard/pwa-maskable-512x512.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/registerSW.js:
--------------------------------------------------------------------------------
1 | if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/ui/zashboard/sw.js:
--------------------------------------------------------------------------------
1 | if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise((i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()})).then((()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e})));self.define=(n,r)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(i[f])return;let d={};const c=e=>s(e,f),o={module:{uri:f},exports:d,require:c};i[f]=Promise.all(n.map((e=>o[e]||c(e)))).then((e=>(r(...e),d)))}}define(["./workbox-3e8df8c8"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-btPsSEfJ.js",revision:null},{url:"assets/index-CZi4yu0u.css",revision:null},{url:"index.html",revision:"025848d28f9df131cdb90f7dcd82e46d"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"6437e90df75a01bce95a7c03b16fc311"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
2 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/yml_groups_name_ch.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | . /lib/functions.sh
3 |
4 | set_lock() {
5 | exec 882>"/tmp/lock/openclash_name_ch.lock" 2>/dev/null
6 | flock -x 882 2>/dev/null
7 | }
8 |
9 | del_lock() {
10 | flock -u 882 2>/dev/null
11 | rm -rf "/tmp/lock/openclash_name_ch.lock"
12 | }
13 |
14 | cfg_groups_set()
15 | {
16 |
17 | CFG_FILE="/etc/config/openclash"
18 | local section="$1"
19 | local name old_name_cfg old_name
20 | config_get "name" "$section" "name" ""
21 | config_get "old_name_cfg" "$section" "old_name_cfg" ""
22 | config_get "old_name" "$section" "old_name" ""
23 |
24 | if [ -z "$name" ]; then
25 | return
26 | fi
27 |
28 | if [ -z "$old_name_cfg" ]; then
29 | uci -q set openclash."$section".old_name_cfg="$name"
30 | uci -q commit openclash
31 | fi
32 |
33 | if [ -z "$old_name" ]; then
34 | uci -q set openclash."$section".old_name="$name"
35 | uci -q commit openclash
36 | fi
37 |
38 | #名字变化时处理配置文件
39 | if [ "$name" != "$old_name_cfg" ] && [ ! -z "$old_name_cfg" ]; then
40 | convert_name=$(echo "$name" | sed 's/\//\\\//g' 2>/dev/null)
41 | convert_old_name_cfg=$(echo "$old_name_cfg" | sed 's/\//\\\//g' 2>/dev/null)
42 | sed -i "s/old_name_cfg \'${convert_old_name_cfg}\'/old_name_cfg \'${convert_name}\'/g" $CFG_FILE 2>/dev/null
43 | sed -i "s/groups \'${convert_old_name_cfg}\'/groups \'${convert_name}\'/g" $CFG_FILE 2>/dev/null
44 | sed -i "s/option group \'${convert_old_name_cfg}\'/option group \'${convert_name}\'/g" $CFG_FILE 2>/dev/null
45 | sed -i "s/option specific_group \'${convert_old_name_cfg}\'/option specific_group \'${convert_name}\'/g" $CFG_FILE 2>/dev/null
46 | sed -i "s/other_group \'${convert_old_name_cfg}\'/other_group \'${convert_name}\'/g" $CFG_FILE 2>/dev/null
47 | sed -i "s/new_servers_group \'${convert_old_name_cfg}\'/new_servers_group \'${convert_name}\'/g" $CFG_FILE 2>/dev/null
48 | sed -i "s/relay_groups \'${convert_old_name_cfg}\'/relay_groups \'${convert_name}\'/g" $CFG_FILE 2>/dev/null
49 | #第三方规则处理
50 | OTHER_RULE_NAMES=("GlobalTV" "AsianTV" "MainlandTV" "Proxy" "Youtube" "Bilibili" "Bahamut" "HBOMax" "Pornhub" "Apple" "GoogleFCM" "Scholar" "Microsoft" "Netflix" "Disney Plus" "Spotify" "Steam" "TikTok" "Speedtest" "Telegram" "PayPal" "Netease_Music" "AdBlock" "Domestic" "Others" "miHoYo" "AI_Suite" "AppleTV" "Crypto" "Discord" "HTTPDNS")
51 | for i in ${OTHER_RULE_NAMES[@]}; do
52 | sed -i "s/option ${i} \'${convert_old_name_cfg}\'/option ${i} \'${convert_name}\'/g" $CFG_FILE 2>/dev/null
53 | done 2>/dev/null
54 | config_load "openclash"
55 | fi
56 |
57 | }
58 |
59 | set_lock
60 | config_load "openclash"
61 | config_foreach cfg_groups_set "groups"
62 | del_lock
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/openclash/yml_groups_name_get.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . /usr/share/openclash/ruby.sh
3 |
4 | CFG_FILE=$(uci -q get openclash.config.config_path)
5 | UPDATE_CONFIG_FILE=$(uci -q get openclash.config.config_update_path)
6 |
7 | if [ ! -z "$UPDATE_CONFIG_FILE" ]; then
8 | CFG_FILE="$UPDATE_CONFIG_FILE"
9 | fi
10 |
11 | if [ -z "$CFG_FILE" ]; then
12 | for file_name in /etc/openclash/config/*
13 | do
14 | if [ -f "$file_name" ]; then
15 | CFG_FILE=$file_name
16 | break
17 | fi
18 | done
19 | fi
20 |
21 | if [ -f "$CFG_FILE" ]; then
22 | rm -rf "/tmp/Proxy_Group" 2>/dev/null
23 | ruby_read_hash_arr "$CFG_FILE" "['proxy-groups']" "['name']" >/tmp/Proxy_Group 2>&1
24 |
25 | if [ -f "/tmp/Proxy_Group" ]; then
26 | echo 'DIRECT' >>/tmp/Proxy_Group
27 | echo 'REJECT' >>/tmp/Proxy_Group
28 | echo 'REJECT-DROP' >>/tmp/Proxy_Group
29 | echo 'PASS' >>/tmp/Proxy_Group
30 | echo 'GLOBAL' >>/tmp/Proxy_Group
31 | else
32 | return 1
33 | fi
34 | else
35 | return 1
36 | fi
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/rpcd/acl.d/luci-app-openclash.json:
--------------------------------------------------------------------------------
1 | {
2 | "luci-app-openclash": {
3 | "description": "Grant UCI access for luci-app-openclash",
4 | "read": {
5 | "uci": [ "openclash" ]
6 | },
7 | "write": {
8 | "uci": [ "openclash" ]
9 | }
10 | }
11 | }
--------------------------------------------------------------------------------
/luci-app-openclash/root/usr/share/ucitrack/luci-app-openclash.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": "openclash",
3 | "init": "openclash"
4 | }
5 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/dialog/dialog.css:
--------------------------------------------------------------------------------
1 | .CodeMirror-dialog {
2 | position: absolute;
3 | left: 0; right: 0;
4 | background: inherit;
5 | z-index: 15;
6 | padding: .1em .8em;
7 | overflow: hidden;
8 | color: inherit;
9 | }
10 |
11 | .CodeMirror-dialog-top {
12 | border-bottom: 1px solid #eee;
13 | top: 0;
14 | }
15 |
16 | .CodeMirror-dialog-bottom {
17 | border-top: 1px solid #eee;
18 | bottom: 0;
19 | }
20 |
21 | .CodeMirror-dialog input {
22 | border: none;
23 | outline: none;
24 | background: transparent;
25 | width: 20em;
26 | color: inherit;
27 | font-family: monospace;
28 | }
29 |
30 | .CodeMirror-dialog button {
31 | font-size: 70%;
32 | }
33 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/autorefresh.js:
--------------------------------------------------------------------------------
1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3 |
4 | (function(mod) {
5 | if (typeof exports == "object" && typeof module == "object") // CommonJS
6 | mod(require("../../lib/codemirror"))
7 | else if (typeof define == "function" && define.amd) // AMD
8 | define(["../../lib/codemirror"], mod)
9 | else // Plain browser env
10 | mod(CodeMirror)
11 | })(function(CodeMirror) {
12 | "use strict"
13 |
14 | CodeMirror.defineOption("autoRefresh", false, function(cm, val) {
15 | if (cm.state.autoRefresh) {
16 | stopListening(cm, cm.state.autoRefresh)
17 | cm.state.autoRefresh = null
18 | }
19 | if (val && cm.display.wrapper.offsetHeight == 0)
20 | startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})
21 | })
22 |
23 | function startListening(cm, state) {
24 | function check() {
25 | if (cm.display.wrapper.offsetHeight) {
26 | stopListening(cm, state)
27 | if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)
28 | cm.refresh()
29 | } else {
30 | state.timeout = setTimeout(check, state.delay)
31 | }
32 | }
33 | state.timeout = setTimeout(check, state.delay)
34 | state.hurry = function() {
35 | clearTimeout(state.timeout)
36 | state.timeout = setTimeout(check, 50)
37 | }
38 | CodeMirror.on(window, "mouseup", state.hurry)
39 | CodeMirror.on(window, "keyup", state.hurry)
40 | }
41 |
42 | function stopListening(_cm, state) {
43 | clearTimeout(state.timeout)
44 | CodeMirror.off(window, "mouseup", state.hurry)
45 | CodeMirror.off(window, "keyup", state.hurry)
46 | }
47 | });
48 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/fullscreen.css:
--------------------------------------------------------------------------------
1 | .CodeMirror-fullscreen {
2 | position: fixed;
3 | top: 0; left: 0; right: 0; bottom: 0;
4 | height: auto;
5 | z-index: 9;
6 | }
7 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/display/fullscreen.js:
--------------------------------------------------------------------------------
1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3 |
4 | (function(mod) {
5 | if (typeof exports == "object" && typeof module == "object") // CommonJS
6 | mod(require("../../lib/codemirror"));
7 | else if (typeof define == "function" && define.amd) // AMD
8 | define(["../../lib/codemirror"], mod);
9 | else // Plain browser env
10 | mod(CodeMirror);
11 | })(function(CodeMirror) {
12 | "use strict";
13 |
14 | CodeMirror.defineOption("fullScreen", false, function(cm, val, old) {
15 | if (old == CodeMirror.Init) old = false;
16 | if (!old == !val) return;
17 | if (val) setFullscreen(cm);
18 | else setNormal(cm);
19 | });
20 |
21 | function setFullscreen(cm) {
22 | var wrap = cm.getWrapperElement();
23 | cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,
24 | width: wrap.style.width, height: wrap.style.height};
25 | wrap.style.width = "";
26 | wrap.style.height = "auto";
27 | wrap.className += " CodeMirror-fullscreen";
28 | document.documentElement.style.overflow = "hidden";
29 | cm.refresh();
30 | }
31 |
32 | function setNormal(cm) {
33 | var wrap = cm.getWrapperElement();
34 | wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, "");
35 | document.documentElement.style.overflow = "";
36 | var info = cm.state.fullScreenRestore;
37 | wrap.style.width = info.width; wrap.style.height = info.height;
38 | window.scrollTo(info.scrollLeft, info.scrollTop);
39 | cm.refresh();
40 | }
41 | });
42 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/foldgutter.css:
--------------------------------------------------------------------------------
1 | .CodeMirror-foldmarker {
2 | color: blue;
3 | text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px;
4 | font-family: arial;
5 | line-height: .3;
6 | cursor: pointer;
7 | }
8 | .CodeMirror-foldgutter {
9 | width: .7em;
10 | }
11 | .CodeMirror-foldgutter-open,
12 | .CodeMirror-foldgutter-folded {
13 | cursor: pointer;
14 | }
15 | .CodeMirror-foldgutter-open:after {
16 | content: "\25BE";
17 | }
18 | .CodeMirror-foldgutter-folded:after {
19 | content: "\25B8";
20 | }
21 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/fold/indent-fold.js:
--------------------------------------------------------------------------------
1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3 |
4 | (function(mod) {
5 | if (typeof exports == "object" && typeof module == "object") // CommonJS
6 | mod(require("../../lib/codemirror"));
7 | else if (typeof define == "function" && define.amd) // AMD
8 | define(["../../lib/codemirror"], mod);
9 | else // Plain browser env
10 | mod(CodeMirror);
11 | })(function(CodeMirror) {
12 | "use strict";
13 |
14 | function lineIndent(cm, lineNo) {
15 | var text = cm.getLine(lineNo)
16 | var spaceTo = text.search(/\S/)
17 | if (spaceTo == -1 || /\bcomment\b/.test(cm.getTokenTypeAt(CodeMirror.Pos(lineNo, spaceTo + 1))))
18 | return -1
19 | return CodeMirror.countColumn(text, null, cm.getOption("tabSize"))
20 | }
21 |
22 | CodeMirror.registerHelper("fold", "indent", function(cm, start) {
23 | var myIndent = lineIndent(cm, start.line)
24 | if (myIndent < 0) return
25 | var lastLineInFold = null
26 |
27 | // Go through lines until we find a line that definitely doesn't belong in
28 | // the block we're folding, or to the end.
29 | for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) {
30 | var indent = lineIndent(cm, i)
31 | if (indent == -1) {
32 | } else if (indent > myIndent) {
33 | // Lines with a greater indent are considered part of the block.
34 | lastLineInFold = i;
35 | } else {
36 | // If this line has non-space, non-comment content, and is
37 | // indented less or equal to the start line, it is the start of
38 | // another block.
39 | break;
40 | }
41 | }
42 | if (lastLineInFold) return {
43 | from: CodeMirror.Pos(start.line, cm.getLine(start.line).length),
44 | to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length)
45 | };
46 | });
47 |
48 | });
49 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/lint/yaml-lint.js:
--------------------------------------------------------------------------------
1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3 |
4 | (function(mod) {
5 | if (typeof exports == "object" && typeof module == "object") // CommonJS
6 | mod(require("../../lib/codemirror"));
7 | else if (typeof define == "function" && define.amd) // AMD
8 | define(["../../lib/codemirror"], mod);
9 | else // Plain browser env
10 | mod(CodeMirror);
11 | })(function(CodeMirror) {
12 | "use strict";
13 |
14 | // Depends on js-yaml.js from https://github.com/nodeca/js-yaml
15 |
16 | // declare global: jsyaml
17 |
18 | CodeMirror.registerHelper("lint", "yaml", function(text) {
19 | var found = [];
20 | if (!window.jsyaml) {
21 | if (window.console) {
22 | window.console.error("Error: window.jsyaml not defined, CodeMirror YAML linting cannot run.");
23 | }
24 | return found;
25 | }
26 | try { jsyaml.loadAll(text); }
27 | catch(e) {
28 | var loc = e.mark,
29 | // js-yaml YAMLException doesn't always provide an accurate lineno
30 | // e.g., when there are multiple yaml docs
31 | // ---
32 | // ---
33 | // foo:bar
34 | from = loc ? CodeMirror.Pos(loc.line, loc.column) : CodeMirror.Pos(0, 0),
35 | to = from;
36 | found.push({ from: from, to: to, message: e.message });
37 | }
38 | return found;
39 | });
40 |
41 | });
42 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/jump-to-line.js:
--------------------------------------------------------------------------------
1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3 |
4 | // Defines jumpToLine command. Uses dialog.js if present.
5 |
6 | (function(mod) {
7 | if (typeof exports == "object" && typeof module == "object") // CommonJS
8 | mod(require("../../lib/codemirror"), require("../dialog/dialog"));
9 | else if (typeof define == "function" && define.amd) // AMD
10 | define(["../../lib/codemirror", "../dialog/dialog"], mod);
11 | else // Plain browser env
12 | mod(CodeMirror);
13 | })(function(CodeMirror) {
14 | "use strict";
15 |
16 | // default search panel location
17 | CodeMirror.defineOption("search", {bottom: false});
18 |
19 | function dialog(cm, text, shortText, deflt, f) {
20 | if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true, bottom: cm.options.search.bottom});
21 | else f(prompt(shortText, deflt));
22 | }
23 |
24 | function getJumpDialog(cm) {
25 | return cm.phrase("Jump to line:") + ' ' + cm.phrase("(Use line:column or scroll% syntax)") + ' ';
26 | }
27 |
28 | function interpretLine(cm, string) {
29 | var num = Number(string)
30 | if (/^[-+]/.test(string)) return cm.getCursor().line + num
31 | else return num - 1
32 | }
33 |
34 | CodeMirror.commands.jumpToLine = function(cm) {
35 | var cur = cm.getCursor();
36 | dialog(cm, getJumpDialog(cm), cm.phrase("Jump to line:"), (cur.line + 1) + ":" + cur.ch, function(posStr) {
37 | if (!posStr) return;
38 |
39 | var match;
40 | if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) {
41 | cm.setCursor(interpretLine(cm, match[1]), Number(match[2]))
42 | } else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) {
43 | var line = Math.round(cm.lineCount() * Number(match[1]) / 100);
44 | if (/^[-+]/.test(match[1])) line = cur.line + line + 1;
45 | cm.setCursor(line - 1, cur.ch);
46 | } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) {
47 | cm.setCursor(interpretLine(cm, match[1]), cur.ch);
48 | }
49 | });
50 | };
51 |
52 | CodeMirror.keyMap["default"]["Alt-G"] = "jumpToLine";
53 | });
54 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/search/matchesonscrollbar.css:
--------------------------------------------------------------------------------
1 | .CodeMirror-search-match {
2 | background: gold;
3 | border-top: 1px solid orange;
4 | border-bottom: 1px solid orange;
5 | -moz-box-sizing: border-box;
6 | box-sizing: border-box;
7 | opacity: .5;
8 | }
9 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/addon/selection/active-line.js:
--------------------------------------------------------------------------------
1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 | // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3 |
4 | (function(mod) {
5 | if (typeof exports == "object" && typeof module == "object") // CommonJS
6 | mod(require("../../lib/codemirror"));
7 | else if (typeof define == "function" && define.amd) // AMD
8 | define(["../../lib/codemirror"], mod);
9 | else // Plain browser env
10 | mod(CodeMirror);
11 | })(function(CodeMirror) {
12 | "use strict";
13 | var WRAP_CLASS = "CodeMirror-activeline";
14 | var BACK_CLASS = "CodeMirror-activeline-background";
15 | var GUTT_CLASS = "CodeMirror-activeline-gutter";
16 |
17 | CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) {
18 | var prev = old == CodeMirror.Init ? false : old;
19 | if (val == prev) return
20 | if (prev) {
21 | cm.off("beforeSelectionChange", selectionChange);
22 | clearActiveLines(cm);
23 | delete cm.state.activeLines;
24 | }
25 | if (val) {
26 | cm.state.activeLines = [];
27 | updateActiveLines(cm, cm.listSelections());
28 | cm.on("beforeSelectionChange", selectionChange);
29 | }
30 | });
31 |
32 | function clearActiveLines(cm) {
33 | for (var i = 0; i < cm.state.activeLines.length; i++) {
34 | cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS);
35 | cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS);
36 | cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS);
37 | }
38 | }
39 |
40 | function sameArray(a, b) {
41 | if (a.length != b.length) return false;
42 | for (var i = 0; i < a.length; i++)
43 | if (a[i] != b[i]) return false;
44 | return true;
45 | }
46 |
47 | function updateActiveLines(cm, ranges) {
48 | var active = [];
49 | for (var i = 0; i < ranges.length; i++) {
50 | var range = ranges[i];
51 | var option = cm.getOption("styleActiveLine");
52 | if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())
53 | continue
54 | var line = cm.getLineHandleVisualStart(range.head.line);
55 | if (active[active.length - 1] != line) active.push(line);
56 | }
57 | if (sameArray(cm.state.activeLines, active)) return;
58 | cm.operation(function() {
59 | clearActiveLines(cm);
60 | for (var i = 0; i < active.length; i++) {
61 | cm.addLineClass(active[i], "wrap", WRAP_CLASS);
62 | cm.addLineClass(active[i], "background", BACK_CLASS);
63 | cm.addLineClass(active[i], "gutter", GUTT_CLASS);
64 | }
65 | cm.state.activeLines = active;
66 | });
67 | }
68 |
69 | function selectionChange(cm, sel) {
70 | updateActiveLines(cm, sel.ranges);
71 | }
72 | });
73 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/Sponsor.svg:
--------------------------------------------------------------------------------
1 | Sponsor: Sponsor Sponsor
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/Star.svg:
--------------------------------------------------------------------------------
1 | Star: Star Star
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/Telegram.svg:
--------------------------------------------------------------------------------
1 | Telegram: Telegram Telegram
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/Tutorials.svg:
--------------------------------------------------------------------------------
1 | Tutorials: Tutorials Tutorials
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/Wiki.svg:
--------------------------------------------------------------------------------
1 | Wiki: Wiki Wiki
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/arrow-clockwise-light.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/eye-light.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/eye-slash-light.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/root/www/luci-static/resources/openclash/img/logo.png
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/megaphone-simple.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/version.svg:
--------------------------------------------------------------------------------
1 | Current Version: v0.00.00 Current Version Current Version v0.00.00 v0.00.00
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/img/wrench-light.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/luci-app-openclash/root/www/luci-static/resources/openclash/theme/idea.css:
--------------------------------------------------------------------------------
1 | /**
2 | Name: IDEA default theme
3 | From IntelliJ IDEA by JetBrains
4 | */
5 |
6 | .cm-s-idea span.cm-meta { color: #808000; }
7 | .cm-s-idea span.cm-number { color: #0000FF; }
8 | .cm-s-idea span.cm-keyword { line-height: 1em; font-weight: bold; color: #000080; }
9 | .cm-s-idea span.cm-atom { font-weight: bold; color: #000080; }
10 | .cm-s-idea span.cm-def { color: #000000; }
11 | .cm-s-idea span.cm-variable { color: black; }
12 | .cm-s-idea span.cm-variable-2 { color: black; }
13 | .cm-s-idea span.cm-variable-3, .cm-s-idea span.cm-type { color: black; }
14 | .cm-s-idea span.cm-property { color: black; }
15 | .cm-s-idea span.cm-operator { color: black; }
16 | .cm-s-idea span.cm-comment { color: #808080; }
17 | .cm-s-idea span.cm-string { color: #008000; }
18 | .cm-s-idea span.cm-string-2 { color: #008000; }
19 | .cm-s-idea span.cm-qualifier { color: #555; }
20 | .cm-s-idea span.cm-error { line-height: 1em; font-weight: bold; color: #FF0000; }
21 | .cm-s-idea span.cm-attribute { color: #0000FF; }
22 | .cm-s-idea span.cm-tag { color: #000080; }
23 | .cm-s-idea span.cm-link { color: #0000FF; }
24 | .cm-s-idea span.cm-tip { color: #ff6f00; }
25 | .cm-s-idea span.cm-watchdog { color: #b300ff; }
26 | .cm-s-idea span.cm-warn { line-height: 1em; font-weight: bold; color: #ff00bb; }
27 | .cm-s-idea .CodeMirror-activeline-background { background: #FFFAE3; }
28 |
29 | .cm-s-idea span.cm-builtin { color: #30a; }
30 | .cm-s-idea span.cm-bracket { color: #cc7; }
31 | .cm-s-idea { font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, sans-serif;}
32 |
33 |
34 | .cm-s-idea .CodeMirror-matchingbracket { outline:1px solid grey; color:black !important; }
35 |
36 | .CodeMirror-hints.idea {
37 | font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;
38 | color: #616569;
39 | background-color: #ebf3fd !important;
40 | }
41 |
42 | .CodeMirror-hints.idea .CodeMirror-hint-active {
43 | background-color: #a2b8c9 !important;
44 | color: #5c6065 !important;
45 | }
--------------------------------------------------------------------------------
/luci-app-openclash/tools/po2lmo/Makefile:
--------------------------------------------------------------------------------
1 |
2 | INSTALL = install
3 | PREFIX = /usr/bin
4 |
5 | po2lmo: src/po2lmo.o src/template_lmo.o
6 | $(CC) $(LDFLAGS) -o src/po2lmo src/po2lmo.o src/template_lmo.o
7 |
8 | install:
9 | $(INSTALL) -m 755 src/po2lmo $(PREFIX)
10 |
11 | clean:
12 | $(RM) src/po2lmo src/*.o
13 |
--------------------------------------------------------------------------------
/luci-app-openclash/tools/po2lmo/src/po2lmo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vernesong/OpenClash/fdfd0320789a5f58194b5093de919d425bd4f858/luci-app-openclash/tools/po2lmo/src/po2lmo
--------------------------------------------------------------------------------
/luci-app-openclash/tools/po2lmo/src/template_lmo.h:
--------------------------------------------------------------------------------
1 | /*
2 | * lmo - Lua Machine Objects - General header
3 | *
4 | * Copyright (C) 2009-2012 Jo-Philipp Wich
5 | *
6 | * Licensed under the Apache License, Version 2.0 (the "License");
7 | * you may not use this file except in compliance with the License.
8 | * You may obtain a copy of the License at
9 | *
10 | * http://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing, software
13 | * distributed under the License is distributed on an "AS IS" BASIS,
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | * See the License for the specific language governing permissions and
16 | * limitations under the License.
17 | */
18 |
19 | #ifndef _TEMPLATE_LMO_H_
20 | #define _TEMPLATE_LMO_H_
21 |
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include
31 | #include
32 | #include
33 | #include
34 | #include
35 | #include
36 |
37 | #if (defined(__GNUC__) && defined(__i386__))
38 | #define sfh_get16(d) (*((const uint16_t *) (d)))
39 | #else
40 | #define sfh_get16(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\
41 | +(uint32_t)(((const uint8_t *)(d))[0]) )
42 | #endif
43 |
44 |
45 | struct lmo_entry {
46 | uint32_t key_id;
47 | uint32_t val_id;
48 | uint32_t offset;
49 | uint32_t length;
50 | } __attribute__((packed));
51 |
52 | typedef struct lmo_entry lmo_entry_t;
53 |
54 |
55 | struct lmo_archive {
56 | int fd;
57 | int length;
58 | uint32_t size;
59 | lmo_entry_t *index;
60 | char *mmap;
61 | char *end;
62 | struct lmo_archive *next;
63 | };
64 |
65 | typedef struct lmo_archive lmo_archive_t;
66 |
67 |
68 | struct lmo_catalog {
69 | char lang[6];
70 | struct lmo_archive *archives;
71 | struct lmo_catalog *next;
72 | };
73 |
74 | typedef struct lmo_catalog lmo_catalog_t;
75 |
76 |
77 | uint32_t sfh_hash(const char *data, int len);
78 | uint32_t lmo_canon_hash(const char *data, int len);
79 |
80 | lmo_archive_t * lmo_open(const char *file);
81 | void lmo_close(lmo_archive_t *ar);
82 |
83 |
84 | extern lmo_catalog_t *_lmo_catalogs;
85 | extern lmo_catalog_t *_lmo_active_catalog;
86 |
87 | int lmo_load_catalog(const char *lang, const char *dir);
88 | int lmo_change_catalog(const char *lang);
89 | int lmo_translate(const char *key, int keylen, char **out, int *outlen);
90 | void lmo_close_catalog(const char *lang);
91 |
92 | #endif
93 |
--------------------------------------------------------------------------------