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('

'+i.base_url+'

\n') + domain = get_domain(i.base_url) - selected = get_pair_from_url(i.base_url) - generated = get_generated_from_url(i.base_url) + body.append('

'+domain+'

\n') + + selected = get_pair_from_url(domain) + generated = get_generated_from_url(domain) if selected: body.append('

Existing:

\n') - body.append('

Generated:

\n

' + generated[0].password + '

\n') + body.append('

Suggested:

\n

' + generated[0].password + '

\n') body.append('

Create:

\n') body.append('
\n'+ \ @@ -120,7 +150,91 @@ class index: return render.page('Generated', body) - + if method == 'js-overlay': + return '''\ + (function() { + function cleanHouse() { + elements = document.querySelectorAll('.myS'); + for (i=0; iThese are mySecrets. There is nothing for you here.

')