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