diff --git a/mysecrets.py b/mysecrets.py index cfe569e..b09cb03 100755 --- a/mysecrets.py +++ b/mysecrets.py @@ -4,6 +4,10 @@ import string import random import web from web import form +from urllib import urlopen +from urlparse import urlparse +from contextlib import closing + db = web.database(dbn='mysql', user='mysecrets', pw='horsebatteries', db='mysecrets') @@ -23,21 +27,45 @@ create = form.Form( form.Password('password'), ) +def get_domain(base_url): + with closing(urlopen('https://mxr.mozilla.org/mozilla/source/netwerk/dns/src/effective_tld_names.dat?raw=1')) as tldFile: + tlds = [line.strip() for line in tldFile if line[0] not in "/\n"] + + urlElements = base_url.split('.') + + for i in range(-len(urlElements),0): + lastIElements = urlElements[i:] + # i=-3: ["abcde","co","uk"] + # i=-2: ["co","uk"] + # i=-1: ["uk"] etc + + candidate = ".".join(lastIElements) # abcde.co.uk, co.uk, uk + wildcardCandidate = ".".join(["*"]+lastIElements[1:]) # *.co.uk, *.uk, * + exceptionCandidate = "!"+candidate + + if (exceptionCandidate in tlds): + return ".".join(urlElements[i:]) + if (candidate in tlds or wildcardCandidate in tlds): + return ".".join(urlElements[i-1:]) + + return base_url + + def mkpass(size=10): validChars = string.ascii_letters + string.digits validChars = validChars.strip("oO01l") return string.join([random.choice(validChars) for x in range(size)],"") -def get_pair_from_url(base_url): - return db.select('passwords', where='base_url LIKE "%'+base_url+'%"', order='id DESC') +def get_pair_from_url(domain): + return db.select('passwords', where='base_url LIKE "%'+domain+'%"', order='id DESC') -def get_generated_from_url(base_url): - gen = db.select('generated', where='base_url LIKE "%'+base_url+'%"', order='id DESC') +def get_generated_from_url(domain): + gen = db.select('generated', where='base_url LIKE "%'+domain+'%"', order='id DESC') while not len(gen) > 0: - db.insert('generated', base_url = base_url, password = mkpass()) - gen = db.select('generated', where='base_url LIKE "%'+base_url+'%"') + db.insert('generated', base_url = domain, password = mkpass()) + gen = db.select('generated', where='base_url LIKE "%'+domain+'%"') return gen @@ -73,18 +101,20 @@ class index: body = [] - body.append('
' + generated[0].password + '
\n') + body.append('' + generated[0].password + '
\n') body.append('