113 lines
3.4 KiB
Python
113 lines
3.4 KiB
Python
#!/usr/bin/env python
|
|
|
|
"""
|
|
Copyright (c) 2014 Jan Rude
|
|
"""
|
|
|
|
import re
|
|
import os
|
|
import sys
|
|
import time
|
|
import urllib2
|
|
from Queue import Queue
|
|
try:
|
|
from colorama import Fore
|
|
except:
|
|
pass
|
|
from os.path import isfile
|
|
from threading import Thread, Lock
|
|
from lib import settings
|
|
|
|
def generate_list():
|
|
print ''
|
|
for ext_file in settings.EXTENSION_FILE:
|
|
if not isfile(os.path.join('extensions', ext_file)):
|
|
output("Could not find extension file " + ext_file
|
|
+ "\nPossible values are: experimental | alpha | beta | stable | outdated | all", False)
|
|
sys.exit(-1)
|
|
|
|
with open(os.path.join('extensions', ext_file), 'r') as f:
|
|
count = 0
|
|
print "[+] Loading:", ext_file
|
|
for extension in f:
|
|
if settings.TOP_EXTENSION > count:
|
|
settings.EXTENSION_LIST.append(extension.split('\n')[0])
|
|
count += 1
|
|
else:
|
|
f.close()
|
|
return
|
|
|
|
def copy():
|
|
for extension in settings.EXTENSION_LIST:
|
|
settings.in_queue.put(extension)
|
|
|
|
# Searching installed extensions
|
|
# Check version if getting 200 or 403.
|
|
def check_extension():
|
|
while True:
|
|
extension = settings.in_queue.get()
|
|
for path in settings.EXTENSION_PATHS:
|
|
try:
|
|
req = urllib2.Request(settings.DOMAIN + path + extension + '/', None, settings.user_agent)
|
|
connection = urllib2.urlopen(req, timeout = settings.TIMEOUT)
|
|
connection.close()
|
|
check_extension_version(path, extension)
|
|
settings.in_queue.task_done()
|
|
return
|
|
except urllib2.HTTPError, e:
|
|
if e.code == 403:
|
|
check_extension_version(path, extension)
|
|
settings.in_queue.task_done()
|
|
return
|
|
except urllib2.URLError, e:
|
|
pass
|
|
#retry = raw_input('Error on checking ' + extension + ': ' + str(e.reason) + '\nRetrying? (y/n) ')
|
|
#if retry is 'y':
|
|
# settings.in_queue.put(extension)
|
|
# if extension is not in any given path, it's not installed
|
|
if settings.verbose:
|
|
output(extension.ljust(32) + 'not installed', False)
|
|
settings.in_queue.task_done()
|
|
|
|
# Searching version of installed extension
|
|
def check_extension_version(path, extension):
|
|
settings.EXTENSIONS_FOUND += 1
|
|
# if no version information is available, skip version search
|
|
if extension in settings.NO_VERSIONINFO:
|
|
if settings.verbose:
|
|
output(extension.ljust(32) + 'installed (no version information available)', True)
|
|
else:
|
|
output(extension.ljust(32) + 'installed', True)
|
|
else:
|
|
try:
|
|
request = urllib2.Request(settings.DOMAIN + path + extension +'/ChangeLog', None, settings.user_agent)
|
|
response = urllib2.urlopen(request, timeout = settings.TIMEOUT)
|
|
changelog = response.read(1500)
|
|
response.close()
|
|
try:
|
|
regex = re.compile("(\d{1,2}\.\d{1,2}\.?[0-9]?[0-9]?[' '\n])")
|
|
searchVersion = regex.search(changelog)
|
|
version = searchVersion.groups()
|
|
output(extension.ljust(32) + 'installed (v' + version[0].split()[0] + ')', True)
|
|
except:
|
|
try:
|
|
regex = re.compile("(\d{2,4}[\.\-]\d{1,2}[\.\-]\d{1,4})")
|
|
search = regex.search(changelog)
|
|
version = search.groups()
|
|
output(extension.ljust(32) + 'installed (last entry from ' + version[0] + ')', True)
|
|
except:
|
|
if settings.verbose:
|
|
output(extension.ljust(32) + 'installed (no version information found)', True)
|
|
else:
|
|
output(extension.ljust(32) + 'installed', True)
|
|
except:
|
|
output(extension.ljust(32) + "installed", True)
|
|
|
|
def output(message, status):
|
|
if settings.COLORAMA:
|
|
if status:
|
|
print Fore.GREEN + message + Fore.RESET
|
|
else:
|
|
print Fore.RED + message + Fore.RESET
|
|
else:
|
|
print message |