From 3cac53eb80859c016fbbe010edea459340186b73 Mon Sep 17 00:00:00 2001
From: bol-van <none@none.none>
Date: Thu, 17 Mar 2022 14:13:21 +0300
Subject: [PATCH] ipset: get_antizapret_domains.sh

---
 docs/readme.txt                 |  9 ++++---
 install_easy.sh                 |  9 +++----
 ipset/get_antizapret_domains.sh | 47 +++++++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+), 9 deletions(-)
 create mode 100755 ipset/get_antizapret_domains.sh

diff --git a/docs/readme.txt b/docs/readme.txt
index d3b66b1..2b358f4 100644
--- a/docs/readme.txt
+++ b/docs/readme.txt
@@ -810,13 +810,14 @@ ip2net фильтрует входные данные, выкидывая неп
 Альтернативой ipset является использование tpws или nfqws со списком доменов.
 Может быть только один hostlist.
 
-Поддерживаются 2 варианта :
+Поддерживаются следующие варианты :
 1) Внесите домены для дурения в ipset/zapret-hosts-users.txt. Удалите ipset/zapret-hosts.txt.gz.
-Тогда init скрипт будет запускать tpws с листом zapret-hosts-users.txt.
+Тогда init скрипт будет запускать tpws/nfqws с листом zapret-hosts-users.txt.
 
-2) Список доменов РКН может быть получен скриптом ipset/get_reestr_hostlist.sh - кладется в ipset/zapret-hosts.txt.gz.
+2) Список доменов РКН может быть получен скриптами ipset/get_reestr_hostlist.sh или ipset/get_antizapret_domains.sh
+- кладется в ipset/zapret-hosts.txt.gz.
 Этот скрипт автоматически добавляет к списку РКН домены из zapret-hosts-user.txt и исключает zapret-hosts-exclude.txt.
-init скрипт будет запускать tpws с листом zapret-hosts.txt.gz.
+init скрипт будет запускать tpws/nfqws с листом zapret-hosts.txt.gz.
 
 При фильтрации по именам доменов демон должен запускаться без фильтрации по ipset.
 tpws и nfqws решают нужно ли применять дурение в зависимости от поля Host: в http запросе или SNI в TLS ClientHello.
diff --git a/install_easy.sh b/install_easy.sh
index c3c4a05..3def7dd 100755
--- a/install_easy.sh
+++ b/install_easy.sh
@@ -240,14 +240,13 @@ select_getlist()
 		echo
 		if ask_yes_no $D "do you want to auto download ip/host list"; then
 			if [ "$MODE_FILTER" = "hostlist" ] ; then
-				local GL_OLD=$GETLIST
-				GETLIST="get_reestr_hostlist.sh"
-				[ "$GL_OLD" != "$GET_LIST" ] && write_config_var GETLIST
+				GETLISTS="get_antizapret_domains.sh get_reestr_hostlist.sh"
+				GETLIST_DEF="get_antizapret_domains.sh"
 			else
 				GETLISTS="get_user.sh get_antifilter_ip.sh get_antifilter_ipsmart.sh get_antifilter_ipsum.sh get_antifilter_ipresolve.sh get_antifilter_allyouneed.sh get_reestr_ip.sh get_reestr_combined.sh get_reestr_resolve.sh"
-				GETLIST_DEF="get_antifilter_ipsmart.sh"
-				ask_list GETLIST "$GETLISTS" "$GETLIST_DEF" && write_config_var GETLIST
+				GETLIST_DEF="get_antifilter_allyouneed.sh"
 			fi
+			ask_list GETLIST "$GETLISTS" "$GETLIST_DEF" && write_config_var GETLIST
 			return
 		fi
 	fi
diff --git a/ipset/get_antizapret_domains.sh b/ipset/get_antizapret_domains.sh
new file mode 100755
index 0000000..a6a3fd3
--- /dev/null
+++ b/ipset/get_antizapret_domains.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+IPSET_DIR="$(dirname "$0")"
+IPSET_DIR="$(cd "$IPSET_DIR"; pwd)"
+
+. "$IPSET_DIR/def.sh"
+
+# useful in case ipban set is used in custom scripts
+FAIL=
+getuser || FAIL=1
+"$IPSET_DIR/create_ipset.sh"
+[ -n "$FAIL" ] && exit
+
+ZURL=https://antizapret.prostovpn.org/domains-export.txt
+ZDOM="$TMPDIR/zapret.txt"
+
+
+curl -k --fail --max-time 600 --connect-timeout 5 --retry 3 --max-filesize 251658240 "$ZURL" >"$ZDOM" ||
+{
+ echo domain list download failed   
+ exit 2
+}
+
+composite_list()
+{
+ # combine reestr and user list
+ if [ -f "$ZUSERLIST_EXCLUDE" ]; then
+	nice -n 5 $GREP -xvFf "$ZUSERLIST_EXCLUDE" "$ZDOM"
+ else
+	cat "$ZDOM"
+ fi
+ [ -f "$ZUSERLIST" ] && $AWK '{ print tolower($0) }' <"$ZUSERLIST"
+}
+
+dlsize=$(LANG=C wc -c "$ZDOM" | xargs | cut -f 1 -d ' ')
+if test $dlsize -lt 102400; then
+ echo list file is too small. can be bad.
+ exit 2
+fi
+
+composite_list | sort -u | zz "$ZHOSTLIST"
+
+rm -f "$ZDOM"
+
+hup_zapret_daemons
+
+exit 0