@ -1,6 +1,3 @@
|
|||||||
1. Fix: Changed geo category(block adult sites)
|
1. Fix: Block users based on total data usage
|
||||||
2. Reject(malware, phishing, cryptominers)
|
2. Increasing the chunk size to 32768 bytes(GeoFiles)
|
||||||
3. Add: GeoCountry(Iran, China, and Russia)
|
3. Update Requirements
|
||||||
4. Add: Geo Update flag --country option(cli)
|
|
||||||
5. Add: CPU monitoring module(Telegram-Bot)
|
|
||||||
6. Add: Search users by the `blocked` status(Telegram-Bot)
|
|
||||||
|
|||||||
@ -46,6 +46,9 @@ for USERNAME in $(jq -r 'keys[]' "$USERS_FILE"); do
|
|||||||
EXPIRATION_DAYS=$(jq -r --arg user "$USERNAME" '.[$user].expiration_days // 0' "$USERS_FILE")
|
EXPIRATION_DAYS=$(jq -r --arg user "$USERNAME" '.[$user].expiration_days // 0' "$USERS_FILE")
|
||||||
ACCOUNT_CREATION_DATE=$(jq -r --arg user "$USERNAME" '.[$user].account_creation_date' "$USERS_FILE")
|
ACCOUNT_CREATION_DATE=$(jq -r --arg user "$USERNAME" '.[$user].account_creation_date' "$USERS_FILE")
|
||||||
CURRENT_DOWNLOAD_BYTES=$(jq -r --arg user "$USERNAME" '.[$user].download_bytes // 0' "$USERS_FILE")
|
CURRENT_DOWNLOAD_BYTES=$(jq -r --arg user "$USERNAME" '.[$user].download_bytes // 0' "$USERS_FILE")
|
||||||
|
CURRENT_UPLOAD_BYTES=$(jq -r --arg user "$USERNAME" '.[$user].upload_bytes // 0' "$USERS_FILE")
|
||||||
|
|
||||||
|
TOTAL_BYTES=$((CURRENT_DOWNLOAD_BYTES + CURRENT_UPLOAD_BYTES))
|
||||||
|
|
||||||
if [ -z "$ACCOUNT_CREATION_DATE" ]; then
|
if [ -z "$ACCOUNT_CREATION_DATE" ]; then
|
||||||
echo "$(date): [INFO] Skipping $USERNAME due to missing account creation date." >> $LOGFILE
|
echo "$(date): [INFO] Skipping $USERNAME due to missing account creation date." >> $LOGFILE
|
||||||
@ -55,8 +58,8 @@ for USERNAME in $(jq -r 'keys[]' "$USERS_FILE"); do
|
|||||||
CURRENT_DATE=$(date +%s)
|
CURRENT_DATE=$(date +%s)
|
||||||
EXPIRATION_DATE=$(date -d "$ACCOUNT_CREATION_DATE + $EXPIRATION_DAYS days" +%s)
|
EXPIRATION_DATE=$(date -d "$ACCOUNT_CREATION_DATE + $EXPIRATION_DAYS days" +%s)
|
||||||
|
|
||||||
if [ "$MAX_DOWNLOAD_BYTES" -gt 0 ] && [ "$CURRENT_DOWNLOAD_BYTES" -ge 0 ] && [ "$EXPIRATION_DAYS" -gt 0 ]; then
|
if [ "$MAX_DOWNLOAD_BYTES" -gt 0 ] && [ "$TOTAL_BYTES" -ge 0 ] && [ "$EXPIRATION_DAYS" -gt 0 ]; then
|
||||||
if [ "$CURRENT_DOWNLOAD_BYTES" -ge "$MAX_DOWNLOAD_BYTES" ] || [ "$CURRENT_DATE" -ge "$EXPIRATION_DATE" ]; then
|
if [ "$TOTAL_BYTES" -ge "$MAX_DOWNLOAD_BYTES" ] || [ "$CURRENT_DATE" -ge "$EXPIRATION_DATE" ]; then
|
||||||
for i in {1..3}; do
|
for i in {1..3}; do
|
||||||
jq --arg user "$USERNAME" '.[$user].blocked = true' "$USERS_FILE" > temp.json && mv temp.json "$USERS_FILE" && break
|
jq --arg user "$USERNAME" '.[$user].blocked = true' "$USERS_FILE" > temp.json && mv temp.json "$USERS_FILE" && break
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|||||||
@ -31,7 +31,7 @@ def remove_file(file_path):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error removing file {file_path}: {e}")
|
print(f"Error removing file {file_path}: {e}")
|
||||||
|
|
||||||
def download_file(url, destination, chunk_size=8192):
|
def download_file(url, destination, chunk_size=32768):
|
||||||
try:
|
try:
|
||||||
destination_dir = os.path.dirname(destination)
|
destination_dir = os.path.dirname(destination)
|
||||||
if destination_dir and not os.path.exists(destination_dir):
|
if destination_dir and not os.path.exists(destination_dir):
|
||||||
|
|||||||
@ -14,6 +14,9 @@ EXPIRATION_DAYS=$(jq -r --arg user "$USERNAME" '.[$user].expiration_days' "$USER
|
|||||||
ACCOUNT_CREATION_DATE=$(jq -r --arg user "$USERNAME" '.[$user].account_creation_date' "$USERS_FILE")
|
ACCOUNT_CREATION_DATE=$(jq -r --arg user "$USERNAME" '.[$user].account_creation_date' "$USERS_FILE")
|
||||||
BLOCKED=$(jq -r --arg user "$USERNAME" '.[$user].blocked' "$USERS_FILE")
|
BLOCKED=$(jq -r --arg user "$USERNAME" '.[$user].blocked' "$USERS_FILE")
|
||||||
CURRENT_DOWNLOAD_BYTES=$(jq -r --arg user "$USERNAME" '.[$user].download_bytes' "$USERS_FILE")
|
CURRENT_DOWNLOAD_BYTES=$(jq -r --arg user "$USERNAME" '.[$user].download_bytes' "$USERS_FILE")
|
||||||
|
CURRENT_UPLOAD_BYTES=$(jq -r --arg user "$USERNAME" '.[$user].upload_bytes' "$USERS_FILE")
|
||||||
|
|
||||||
|
TOTAL_BYTES=$((CURRENT_DOWNLOAD_BYTES + CURRENT_UPLOAD_BYTES))
|
||||||
|
|
||||||
if [ "$BLOCKED" == "true" ]; then
|
if [ "$BLOCKED" == "true" ]; then
|
||||||
sleep 20
|
sleep 20
|
||||||
@ -33,7 +36,7 @@ if [ "$CURRENT_DATE" -ge "$EXPIRATION_DATE" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$CURRENT_DOWNLOAD_BYTES" -ge "$MAX_DOWNLOAD_BYTES" ]; then
|
if [ "$TOTAL_BYTES" -ge "$MAX_DOWNLOAD_BYTES" ]; then
|
||||||
SECRET=$(jq -r '.trafficStats.secret' "$CONFIG_FILE")
|
SECRET=$(jq -r '.trafficStats.secret' "$CONFIG_FILE")
|
||||||
KICK_ENDPOINT="http://127.0.0.1:25413/kick"
|
KICK_ENDPOINT="http://127.0.0.1:25413/kick"
|
||||||
curl -s -H "Authorization: $SECRET" -X POST -d "[\"$USERNAME\"]" "$KICK_ENDPOINT"
|
curl -s -H "Authorization: $SECRET" -X POST -d "[\"$USERNAME\"]" "$KICK_ENDPOINT"
|
||||||
|
|||||||
@ -1,7 +1,22 @@
|
|||||||
pyTelegramBotAPI==4.22.1
|
aiohappyeyeballs==2.4.4
|
||||||
qrcode==7.4.2
|
aiohttp==3.11.11
|
||||||
python-dotenv==1.0.1
|
aiosignal==1.3.2
|
||||||
requests==2.32.3
|
async-timeout==4.0.3
|
||||||
aiohttp==3.10.5
|
attrs==24.3.0
|
||||||
click==8.1.7
|
certifi==2024.12.14
|
||||||
|
charset-normalizer==3.4.1
|
||||||
|
click==8.1.8
|
||||||
|
frozenlist==1.5.0
|
||||||
|
idna==3.10
|
||||||
|
multidict==6.1.0
|
||||||
|
pillow==11.1.0
|
||||||
|
propcache==0.2.1
|
||||||
psutil==6.1.1
|
psutil==6.1.1
|
||||||
|
pypng==0.20220715.0
|
||||||
|
pyTelegramBotAPI==4.26.0
|
||||||
|
python-dotenv==1.0.1
|
||||||
|
qrcode==8.0
|
||||||
|
requests==2.32.3
|
||||||
|
typing_extensions==4.12.2
|
||||||
|
urllib3==2.3.0
|
||||||
|
yarl==1.18.3
|
||||||
|
|||||||
Reference in New Issue
Block a user