예제 #1
0
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")
예제 #2
0
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")
예제 #3
0
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
예제 #4
0
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))