Nettacker/core/update.py

112 lines
3.4 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import socket
import socks
from core.alert import info
from core.alert import warn
from core.alert import messages
from core.compatible import version
from lib.socks_resolver.engine import getaddrinfo
from database.db import get_update_log
from database.db import save_update_log
from datetime import timedelta
from datetime import datetime
url = 'https://raw.githubusercontent.com/zdresearch/OWASP-Nettacker/master/version.txt'
def _update(__version__, __code_name__, language, socks_proxy):
"""
update the framework
Args:
__version__: version number
__code_name__: code name
language: language
socks_proxy: socks proxy
Returns:
True if success otherwise None
"""
try:
if socks_proxy is not None:
socks_version = socks.SOCKS5 if socks_proxy.startswith(
'socks5://') else socks.SOCKS4
socks_proxy = socks_proxy.rsplit('://')[1]
socks.set_default_proxy(socks_version, str(
socks_proxy.rsplit(':')[0]), int(socks_proxy.rsplit(':')[1]))
socket.socket = socks.socksocket
socket.getaddrinfo = getaddrinfo
data = requests.get(
url, headers={"User-Agent": "OWASP Nettacker"}).content
if version() is 3:
data = data.decode("utf-8")
if __version__ + ' ' + __code_name__ == data.rsplit('\n')[0]:
info(messages(language, "last_version"))
else:
warn(messages(language, "not_last_version"))
warn(messages(language, "feature_unavailable"))
except:
warn(messages(language, "cannot_update"))
return True
def _update_check(language):
"""
This Function checks if an Update has happened in the previous day and if not, it checks for update
Args:
language
Return:
True or False depending on if update should happen or not
"""
try:
logs = (get_update_log(language))
except Exception:
save_update_log(language)
logs = (get_update_log(language))
logs2 = logs[len(logs)-1].last_update_time
if datetime.now() > datetime.strptime(logs2, "%Y-%m-%d %H:%M:%S.%f") + timedelta(days=1):
save_update_log(language)
return True
else:
return False
def _check(__version__, __code_name__, language, socks_proxy):
"""
check for update
Args:
__version__: version number
__code_name__: code name
language: language
socks_proxy: socks proxy
Returns:
True if success otherwise None
"""
try:
if socks_proxy is not None:
socks_version = socks.SOCKS5 if socks_proxy.startswith(
'socks5://') else socks.SOCKS4
socks_proxy = socks_proxy.rsplit('://')[1]
socks.set_default_proxy(socks_version, str(
socks_proxy.rsplit(':')[0]), int(socks_proxy.rsplit(':')[1]))
socket.socket = socks.socksocket
socket.getaddrinfo = getaddrinfo
data = requests.get(
url, headers={"User-Agent": "OWASP Nettacker"}).content
if version() is 3:
data = data.decode("utf-8")
if __version__ + ' ' + __code_name__ == data.rsplit('\n')[0]:
info(messages(language, "last_version"))
else:
warn(messages(language, "not_last_version"))
except:
warn(messages(language, "cannot_update"))
return True