· 5 years ago · Oct 02, 2020, 08:56 AM
1import sqlite3
2import argparse
3import sys
4import subprocess
5import time
6import logging
7import hashlib
8DATABASE_NAME = "C:\\Code\\passwordstorer\\users.db"
9
10parser = argparse.ArgumentParser()
11parser.add_argument('-u', '--username', help='Username')
12parser.add_argument('-p', '--password', help='Password')
13parser.add_argument('-t', '--test', action="store_true", help='Test password against db')
14
15args = parser.parse_args()
16global logger
17logger = logging.getLogger(__name__)
18logger.setLevel(logging.INFO)
19
20ch = logging.StreamHandler(sys.stdout)
21ch.setLevel(logging.DEBUG)
22formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(module)s - %(message)s')
23ch.setFormatter(formatter)
24logger.addHandler(ch)
25
26def ensureDatabase():
27 logger.debug("Ensuring databases exists")
28 query = '''CREATE TABLE IF NOT EXISTS `users` (name VARCHAR(50), password VARCHAR(500))'''
29 db_execute(DATABASE_NAME, query)
30
31def db_execute(name, query, params = None):
32 conn = get_connection(name)
33 c = conn.cursor()
34 if params is not None:
35 c.execute(query, params)
36 else:
37 c.execute(query)
38 conn.commit()
39
40def db_select(name, query, params = None):
41 result = None
42 conn = get_connection(name)
43 c = conn.cursor()
44 if params is not None:
45 c.execute(query, params)
46 else:
47 c.execute(query)
48 return c.fetchall()
49
50def get_connection(db):
51 conn = sqlite3.connect(db)
52 return conn
53
54def get_user(username):
55 query = "SELECT * FROM users WHERE name = ?"
56 params = (username,)
57 user = db_select(DATABASE_NAME, query, params)
58 return user
59
60def add_user(username, password):
61 query = "INSERT INTO users VALUES (?, ?)"
62 m = hashlib.sha256(password.encode()).hexdigest()
63 params = (username,m)
64 db_execute(DATABASE_NAME, query, params)
65
66ensureDatabase()
67existing_user = get_user(args.username)
68if args.test:
69 (user, password) = existing_user[0]
70 m = hashlib.sha256(args.password.encode()).hexdigest()
71 if password == m:
72 logger.info("Password match!")
73 else:
74 logger.error("Password mismatch!")
75 exit()
76if len(existing_user) > 0:
77 logger.error("User already exist in DB!")
78 exit()
79add_user(args.username, args.password)
80logger.info(f"User {args.username} added!")