From 659c55e4a24fd1f2a643791c5e5c982b6b35c7f0 Mon Sep 17 00:00:00 2001 From: David Beniamine <david.beniamine@imag.fr> Date: Fri, 24 Feb 2017 14:53:36 +0100 Subject: [PATCH] WIP refactor for packaging --- setup.py | 30 +++++++++++++++++++++ src/apache/pass-checker.conf | 22 +++++++++++++++ src/{console.py => commands/cli.py} | 25 ++++++++++------- src/{server.py => commands/web.py} | 4 +-- src/{ => lib}/translations.py | 0 src/{test_pass.py => lib/zxcvbn-wrapper.py} | 0 src/pass-checker.py | 15 +++++++++++ src/service/pass-checker.service | 12 +++++++++ 8 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 setup.py create mode 100644 src/apache/pass-checker.conf rename src/{console.py => commands/cli.py} (65%) rename src/{server.py => commands/web.py} (95%) rename src/{ => lib}/translations.py (100%) rename src/{test_pass.py => lib/zxcvbn-wrapper.py} (100%) create mode 100644 src/pass-checker.py create mode 100644 src/service/pass-checker.service diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..b67b8d2 --- /dev/null +++ b/setup.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +# coding: utf-8 + +from setuptools import setup, find_packages + +setup( + name="Pass-Checker", + version="0.1", + packages=find_packages(), + scripts=['pass-checker.py'], + + # Project uses reStructuredText, so ensure that the docutils get + # installed or upgraded on the target machine + install_requires=['click', 'zxcvbn', 'http.server', 'cgi', 'cgitb', 'getpass'], + + package_data={ + # If any package contains *.txt or *.rst files, include them: + '': ['*.txt', '*.rst'], + }, + + # metadata for upload to PyPI + author="Tetras Libre", + author_email="David.Beniamine@Tetras-Libre.fr", + description="PassCheker est un système d'évaluation de mot de passes basé sur zxcvbn-python", + license="AGPL", + keywords="password, zxcvbn", + url="https://gitlab.tetras-libre.fr/tetras-libre/PasswordTester", # project home page, if any + + # could also include long_description, download_url, classifiers, etc. +) diff --git a/src/apache/pass-checker.conf b/src/apache/pass-checker.conf new file mode 100644 index 0000000..d06b7b4 --- /dev/null +++ b/src/apache/pass-checker.conf @@ -0,0 +1,22 @@ +<VirtualHost *> + ServerAdmin <ADMIN> + ServerName <FQDN> + ServerSignature Off + CustomLog /var/log/apache2/passchecker_access.log combined + ErrorLog /var/log/apache2/passchecker_error.log + ErrorLog syslog:local2 + + ProxyVia On + ProxyRequests Off + ProxyPass / http://localhost:8842/ + ProxyPassReverse / http://localhost:8842/ + ProxyPreserveHost on + <Proxy *> + Options FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + </Proxy> + Include /etc/apache2//ssl.conf +</VirtualHost> + diff --git a/src/console.py b/src/commands/cli.py similarity index 65% rename from src/console.py rename to src/commands/cli.py index 223f74e..40fbcbc 100644 --- a/src/console.py +++ b/src/commands/cli.py @@ -19,15 +19,20 @@ from getpass import getpass from test_pass import test_pass -# Read password -passwd = getpass("Merci d'entrer un mot de passe qui ne sera pas affiché\n") -user_inputs = [] -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 == "": - break - user_inputs.append(word) +def cli(): + # Read password + passwd = getpass("Merci d'entrer un mot de passe qui ne sera pas affiché\n") -print(test_pass(passwd, user_inputs)) + user_inputs = [] + 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 == "": + break + user_inputs.append(word) + + print(test_pass(passwd, user_inputs)) + +if __name__ == '__main__': + cli() diff --git a/src/server.py b/src/commands/web.py similarity index 95% rename from src/server.py rename to src/commands/web.py index d9103d2..36a1f69 100644 --- a/src/server.py +++ b/src/commands/web.py @@ -23,7 +23,7 @@ import cgitb cgitb.enable() -def run(addr, port): +def serve(addr, port): server_address = (addr, port) server = HTTPServer handler = CGIHTTPRequestHandler @@ -34,4 +34,4 @@ def run(addr, port): httpd.serve_forever() if __name__ == "__main__": - run("localhost", 8080) + serve("localhost", 8080) diff --git a/src/translations.py b/src/lib/translations.py similarity index 100% rename from src/translations.py rename to src/lib/translations.py diff --git a/src/test_pass.py b/src/lib/zxcvbn-wrapper.py similarity index 100% rename from src/test_pass.py rename to src/lib/zxcvbn-wrapper.py diff --git a/src/pass-checker.py b/src/pass-checker.py new file mode 100644 index 0000000..b5ea760 --- /dev/null +++ b/src/pass-checker.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 +# coding: utf-8 + +import click +from server import serve +from console import cli + +@click.option('--server/--no-server', default=False, help='Start the server for web interface, no means use CLI') +@click.option('--port', default=8842, help='Port on which the web server should listen') +@click.option('--address', default='localhost', help='Address on which the web server should listen') +def passchecker(server, port, address): + + +if __name__ == '__main__': + passchecker() diff --git a/src/service/pass-checker.service b/src/service/pass-checker.service new file mode 100644 index 0000000..9de43e6 --- /dev/null +++ b/src/service/pass-checker.service @@ -0,0 +1,12 @@ +[Unit] +Description=Pass-Checker Service +After=network.target + +[Service] +Type=simple +User=root +ExecStart=python3 /usr/local/sbin/pass-checker.py --server + +[Install] +WantedBy=multi-user.target + -- GitLab