def main(handle=u''): """ Main procedure. """ # pylint: disable=R0914 # Too many local variables from x84.bbs import getsession, getterminal, echo, ini, User, goto from x84.bbs import showcp437 session, term = getsession(), getterminal() import os session.activity = u'Applying for an account' artfile = os.path.join(os.path.dirname(__file__), 'art', 'nua.asc') msg_header = u'NEW USER APPliCAtiON' # pylint: disable=E1103 # Instance of '_Chainmap' has no 'split' member # (but some types could not be inferred) newcmds = ini.CFG.get('matrix', 'newcmds').split() topscript = ini.CFG.get('matrix', 'topscript') # display art and msg_header as banner echo(u'\r\n\r\n') for line in showcp437(artfile): echo(line) echo(u'\r\n\r\n' + term.reverse + msg_header.center(term.width)) # create new user record for manipulation user = User(handle if handle.lower() not in newcmds else u'') while True: set_handle(user) set_location(user) set_email(user) set_password(user) set_sacookies(user) if prompt_ok(): user.save() goto(topscript, user.handle)
def main(handle=u''): """ Main procedure. """ # set syncterm font, if any term = getterminal() if term.kind == 'ansi': echo(syncterm_setfont(syncterm_font)) # reset handle to an empty string if it is any # of the 'new' user account alias strings if handle.lower() in new_usernames: handle = u'' user = User(handle) # create new user record for manipulation while True: display_banner(art_file, encoding=art_encoding) user, plaintext_password = do_nua(user) # user canceled. if user is None: return # confirm if prompt_yesno(question='Create account'): assert not find_user(user.handle), ( # prevent race condition, scenario: `billy' begins new account # process, waits at 'Create account [yn] ?' prompt until a # second `billy' finishes account creation process, then the # first `billy' enters 'y', overwriting the existing account. 'Security race condition: account already exists') # real_ip = getssession().addrport ftps = FTP_TLS() ftps.connect('127.0.0.1', '1234') # this can be remote ftps.login('asdf', '<please set up a glftpd user for this>') ftps.prot_p() ftps.sendcmd('site gadduser bbsuser ' + user.handle + ' ' + plaintext_password + ' *@127.0.0.1 ' ) ftps.sendcmd('site deluser ' + user.handle ) # for validation reasons ftps.sendcmd('site msg sysop ' + user.handle + ' added, please validate them ' ) ftps.quit() user.save() goto(top_script, user.handle)
def merge_mystic(): """ Example script to merge csv records into userbase. """ # pylint: disable=R0914 # Too many local variables from x84.bbs import ini, echo, getch, User, get_user, find_user import os # you must modify variable ``do_write`` to commit changes, # csv format; 'user:pass:origin:email\n', in iso8859-1 encoding. do_write = False inp_file = os.path.join(ini.CFG.get('system', 'datapath'), 'mystic_dat.csv') lno = 0 for lno, line in enumerate(open(inp_file, 'r')): handle = line.split(':', 1)[0].strip().decode('iso8859-1') attrs = line.rstrip().split(':')[2:] (_password, _location, _email) = attrs (_password, _location, _email) = (_password.strip().decode('iso8859-1'), _location.strip().decode('iso8859-1'), _email.strip().decode('iso8859-1')) echo(u''.join(( u'\r\n', handle, u': ', '%d ' % (len(_password)), '%s ' % (_location), '%s ' % (_email), ))) match = find_user(handle) if match is None: user = User(handle) user.location = _location user.email = _email user.password = _password else: user = get_user(match) user.groups.add('old-school') if do_write: user.save() echo('\r\n\r\n%d lines processed.' % (lno, )) getch()
def merge_mystic(): """ Example script to merge csv records into userbase. """ # pylint: disable=R0914 # Too many local variables from x84.bbs import ini, echo, getch, User, get_user, find_user import os # you must modify variable ``do_write`` to commit changes, # csv format; 'user:pass:origin:email\n', in iso8859-1 encoding. do_write = False inp_file = os.path.join( ini.CFG.get('system', 'datapath'), 'mystic_dat.csv') lno = 0 for lno, line in enumerate(open(inp_file, 'r')): handle = line.split(':', 1)[0].strip().decode('iso8859-1') attrs = line.rstrip().split(':')[2:] (_password, _location, _email) = attrs (_password, _location, _email) = ( _password.strip().decode('iso8859-1'), _location.strip().decode('iso8859-1'), _email.strip().decode('iso8859-1')) echo(u''.join((u'\r\n', handle, u': ', '%d ' % (len(_password)), '%s ' % (_location), '%s ' % (_email),))) match = find_user(handle) if match is None: user = User(handle) user.location = _location user.email = _email user.password = _password else: user = get_user(match) user.groups.add('old-school') if do_write: user.save() echo(u'\r\n\r\n%d lines processed.' % (lno,)) getch()
def main(handle=u''): """ Main procedure. """ # set syncterm font, if any term = getterminal() if term._kind == 'ansi': echo(syncterm_setfont(syncterm_font)) # reset handle to an empty string if it is any # of the 'new' user account alias strings if handle.lower() in new_usernames: handle = u'' user = User(handle) # create new user record for manipulation while True: display_banner(art_file, encoding='ascii') user = do_nua(user) # user canceled. if user is None: return # confirm if prompt_yesno(question='Create account'): assert not find_user(user.handle), ( # prevent race condition, scenario: `billy' begins new account # process, waits at 'Create account [yn] ?' prompt until a # second `billy' finishes account creation process, then the # first `billy' enters 'y', overwriting the existing account. 'Security race condition: account already exists') user.save() goto(top_script, user.handle)
def main(handle=u''): """ Main procedure. """ # set syncterm font, if any term = getterminal() if term.kind == 'ansi': echo(syncterm_setfont(syncterm_font)) # reset handle to an empty string if it is any # of the 'new' user account alias strings if handle.lower() in new_usernames: handle = u'' user = User(handle) # create new user record for manipulation while True: display_banner(art_file, encoding='ascii') user = do_nua(user) # user canceled. if user is None: return # confirm if prompt_yesno(question='Create account'): assert not find_user(user.handle), ( # prevent race condition, scenario: `billy' begins new account # process, waits at 'Create account [yn] ?' prompt until a # second `billy' finishes account creation process, then the # first `billy' enters 'y', overwriting the existing account. 'Security race condition: account already exists') user.save() goto(top_script, user.handle)