def session_sweeper(lifetime): "The process that will kill the session daemon eventually" get_logger(__name__).info("sweeper starts") sleep(lifetime) conn = Client(parameters.get_session_address(), authkey=parameters.get_session_connection_password()) conn.send({'action': 'stop', 'password': None}) ret = conn.recv() get_logger(__name__).debug(ret['status']) get_logger(__name__).info("Sweeper ends")
def session_listener(seed, timeout): """ Session service function with an initial value as a seed input: seed the initial value stored in the session timeout the validity period of the session value (in seconds """ get_logger(__name__).info("Listener starts") serv = Listener(parameters.get_session_address(), authkey=parameters.get_session_connection_password()) serv.password = seed serv.pwd_timeout = timeout serv.start_time = datetime.datetime.now() serv.origin_time = datetime.datetime.now() while True: with serv.accept() as conn: try: req = conn.recv() except EOFError: break if 'action' in req and req['action'] == 'set': serv.password = req['password'] serv.start_time = datetime.datetime.now() conn.send({'status': 'done', 'password': serv.password}) elif 'action' in req and req['action'] == 'get': if (datetime.datetime.now() - serv.start_time).total_seconds() < serv.pwd_timeout: conn.send({'status': 'fresh', 'password': serv.password}) serv.start_time = datetime.datetime.now() else: serv.password = None conn.send({'status': 'stale', 'password': None}) elif 'action' in req and req['action'] == 'stop': get_logger(__name__).info("Goodbye from listener") conn.send({'status': 'terminated', 'password': None}) break else: conn.send({'status': 'bad command', 'password': None}) get_logger(__name__).info("Listener ends")
from password_strength import PasswordPolicy from secretwallet.constants import PWD_LENGTH, PWD_NUMBERS, PWD_SPECIAL, PWD_UPPER, PWD_ATTEMPTS, parameters from secretwallet.utils.logging import get_logger import secretwallet.session.client as sc import secretwallet.utils.ioutils as iou logger = get_logger(__name__) __policy = PasswordPolicy.from_names(length = PWD_LENGTH, uppercase = PWD_UPPER, numbers = PWD_NUMBERS, special = PWD_SPECIAL ) __explanation = {f'Length({PWD_LENGTH})' : f'The minimum password length is {PWD_LENGTH}', f'Uppercase({PWD_UPPER})' : f'The minimum number of upper-case characters in password is {PWD_UPPER}', f'Numbers({PWD_NUMBERS})' : f'The minimum number of numbers in password is {PWD_NUMBERS}', f'Special({PWD_SPECIAL})' : f'The minimum number of special characters in password is {PWD_SPECIAL}',} def validate(pwd): return __policy.test(pwd) def explain(pwd): faults = validate(pwd) #it is a set if len(faults)==0: return None else: return __explanation[str(faults[0])] def get_password(prompt, attempts): num_attempts = attempts
import getpass import logging from secretwallet.constants import parameters from secretwallet.utils.logging import get_logger logger = get_logger(__name__, logging.DEBUG) def display_list(message, secrets): field_lenght = max([len(x[0]) for x in secrets], default=0) + 5 format_header = f"<%-{field_lenght-1}s: <access>" format_record = f"%-{field_lenght}s: %s" print("**********************************************************") print(f"{message}: ") print(format_header % 'domain>') for d, a in secrets: print(format_record % (d, a)) print("**********************************************************") def display_numbered_list(message, secrets): field_lenght = max([len(x[0]) for x in secrets], default=0) + 5 format_header = f"%-7s: <%-{field_lenght-1}s: <access>" format_record = f"%-7d: %-{field_lenght}s: %s" print("**********************************************************") print(f"{message}: ") print(format_header % ('<num>', 'domain>')) idx = 1 for d, a in secrets: print(format_record % (idx, d, a))