diff --git a/src/console.py b/src/console.py index 0550f8df0687af4f312108c4772e6b999a85fe15..b8dc59c1616ffd73214c1a171d582876de409f3d 100644 --- a/src/console.py +++ b/src/console.py @@ -16,32 +16,20 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -from zxcvbn import zxcvbn -from dateutil.parser import parse -import getpass +from getpass import getpass from test_pass import test_pass # Read password -passwd = getpass.getpass("Merci d'entrer un mot de passe qui ne sera pas affiché\n") +passwd = getpass("Merci d'entrer un mot de passe qui ne sera pas affiché\n") -word = "a" user_inputs = [] -while word != "": +while True: word = input("Veuillez entrer un mot d'aide ou une date au format jj/mm/yyyy pour le système ou tappez [entrer]" - "pour arrêter\n") - if word != "": - try: - date = parse(word) - words = [date.day] - words.append(date.month) - words.append(date.year) - except: - words = [word] - finally: - for word in words: - user_inputs.append(word) + " pour arrêter\n") + if word == "": + break + user_inputs.append(word) -# TODO call wrapper - lines = test_pass(passwd, user_inputs) +lines = test_pass(passwd, user_inputs) for line in lines: print(line) diff --git a/src/index.py b/src/index.py index 7f6ccc718aa4da4e22edbc738678c93840847a29..029e8acf607d3496b204dae4c568de9fef60e70d 100755 --- a/src/index.py +++ b/src/index.py @@ -28,7 +28,7 @@ html = """<!DOCTYPE html> <meta charset="UTF-8"> <meta name="author" content="David Beniamine"> <link type="text/css" rel="stylesheet" href="css/style.css" /> -<title>Testeur de mot de passes</title> +<title>Tetras Pass</title> </head> <body> <div id="box"> @@ -44,7 +44,7 @@ Tetras Pass if form.getvalue("password") is None: # Password not defined => show the form passwordPrompt = "Veuillez saisir le mot de passe à tester ci dessous :" - inputsPrompt = "Veuillez saisir une liste de mots ou de dates au format jj/mm/yyyy, un indice par ligne:" + inputsPrompt = "Veuillez saisir une liste d'indices : mots ou de dates au format jj/mm/yyyy, un indice par ligne:" sendPrompt = "Lancer le test" html += """ @@ -66,7 +66,7 @@ else: # Split user inputs field = form.getvalue("inputs") if field is not None: - inputs = field.split('\n') + inputs = field.split('\r\n') else: inputs = None # Retrieve results diff --git a/src/test_pass.py b/src/test_pass.py index 473edc21a4d3e25190d4fb50dfe0acab620ca5bc..0c8ba26c56b1c193ec6863d3d569a0ee9cbcde24 100644 --- a/src/test_pass.py +++ b/src/test_pass.py @@ -17,6 +17,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import os +from dateutil.parser import parse +from itertools import combinations from zxcvbn import zxcvbn from zxcvbn.matching import add_frequency_lists @@ -38,11 +40,29 @@ def add_dictionnaries(): add_frequency_lists(dicts) +# Process user inputs: +# Generate all possibile combinations of 2 parts of dates +def process_input(inputs): + dates = [] + words = [] + for i in inputs: + try: + date = parse(i) + dates += date.strftime("%d-%m-%y-%B-%Y-%A").split('-') + except: + words.append(i) + for n in range(2, 4): + for subset in combinations(dates, n): + words.append("".join(subset)) + print(words) + return words + + def test_pass(password, inputs): # Read input add_dictionnaries() - results = zxcvbn(password, inputs) + results = zxcvbn(password, process_input(inputs)) lines = [] lines.append("Résultats du test\n") @@ -63,6 +83,7 @@ def test_pass(password, inputs): lines.append("\n") lines.append("Methode de hack utilisées") # Print hack methods + print(results["sequence"]) for seq in results["sequence"]: if seq["pattern"] == "bruteforce": lines.append("\tMot de passe trouvé par force brute") @@ -83,16 +104,13 @@ def test_pass(password, inputs): lines.append("Score Global {}/4 : {}".format(results["score"], valeur[results["score"]])) for key, values in results["feedback"].items(): - # Tel that we sould add the key line if there are some contents - needappend = True + if values != [] and values != "": + lines.append("{} :".format(tr(key))) + else: + continue if not isinstance(values, list): # Simplify things by always using lists values = [values] for val in values: - if val != "": - if needappend: - # Append key line - lines.append("{} :".format(tr(key))) - needappend = False - lines.append("\t{}".format(tr(val))) + lines.append("\t{}".format(tr(val))) return lines