added boot and locked out scripts
This commit is contained in:
parent
c99e2c9f2b
commit
766ba8f7bc
6 changed files with 134 additions and 34 deletions
|
@ -17,5 +17,6 @@ To use the login in another program:
|
|||
```
|
||||
import fallout_login
|
||||
|
||||
# returns true if the correct password is entered, false otherwise
|
||||
fallout_login.beginLogin()
|
||||
```
|
||||
|
|
11
fallout.py
11
fallout.py
|
@ -1,6 +1,11 @@
|
|||
#! /usr/bin/env python
|
||||
import fallout_login as login
|
||||
import fallout_boot as boot
|
||||
import fallout_locked as locked
|
||||
|
||||
login.beginLogin()
|
||||
|
||||
|
||||
if boot.beginBoot(False):
|
||||
if login.beginLogin():
|
||||
print 'Login successful'
|
||||
else:
|
||||
locked.beginLocked()
|
||||
print 'Login failed'
|
||||
|
|
40
fallout_boot.py
Normal file
40
fallout_boot.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
import curses
|
||||
from fallout_functions import slowWrite
|
||||
|
||||
######################## global 'constants' ##############
|
||||
|
||||
ENTRY_1 = 'set terminal/inquire'
|
||||
|
||||
######################## text strings ####################
|
||||
|
||||
MESSAGE_1 = 'WELCOME TO ROBCO INDUSTRIES (TM) TERMLINK'
|
||||
|
||||
MESSAGE_2 = 'RIT-V300'
|
||||
|
||||
######################## functions #######################
|
||||
|
||||
def runBoot(scr):
|
||||
"""
|
||||
Start the boot portion of the terminal
|
||||
"""
|
||||
curses.use_default_colors()
|
||||
# set screen to initial position
|
||||
scr.erase()
|
||||
scr.move(0, 0)
|
||||
|
||||
slowWrite(scr, MESSAGE_1 + '\n\n>')
|
||||
|
||||
curses.napms(500)
|
||||
|
||||
return True
|
||||
|
||||
def beginBoot(hardMode):
|
||||
"""
|
||||
Initialize curses and start the boot process
|
||||
|
||||
hardMode - boolean indicating whether the user has to enter the ENTRY
|
||||
constants, or if they are entered automatically
|
||||
Returns true if hardMode == false or if the user entered the correct string
|
||||
"""
|
||||
res = curses.wrapper(runBoot)
|
||||
return res
|
12
fallout_functions.py
Normal file
12
fallout_functions.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
import curses
|
||||
|
||||
LETTER_PAUSE = 20
|
||||
|
||||
def slowWrite(window, text, pause = LETTER_PAUSE):
|
||||
"""
|
||||
wrapper for curses.addstr() which writes the text slowely
|
||||
"""
|
||||
for i in xrange(len(text)):
|
||||
window.addstr(text[i])
|
||||
window.refresh()
|
||||
curses.napms(pause)
|
40
fallout_locked.py
Normal file
40
fallout_locked.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
import curses
|
||||
|
||||
from fallout_functions import slowWrite
|
||||
|
||||
################## text strings ######################
|
||||
|
||||
LOCKED_1 = 'TERMINAL LOCKED'
|
||||
LOCKED_2 = 'PLEASE CONTACT AN ADMINISTRATOR'
|
||||
|
||||
################## global 'constants' ################
|
||||
|
||||
# amount of time to pause after lockout
|
||||
LOCKED_OUT_TIME = 5000
|
||||
|
||||
################## functions #########################
|
||||
|
||||
def runLocked(scr):
|
||||
"""
|
||||
Start the locked out portion of the terminal
|
||||
"""
|
||||
curses.use_default_colors()
|
||||
size = scr.getmaxyx()
|
||||
width = size[1]
|
||||
height = size[0]
|
||||
# set screen to initial position
|
||||
scr.erase()
|
||||
scr.move(height / 2 - 1, width / 2 - len(LOCKED_1) / 2)
|
||||
scr.addstr(LOCKED_1)
|
||||
scr.move(height / 2 + 1, width / 2 - len(LOCKED_2) / 2)
|
||||
scr.addstr(LOCKED_2)
|
||||
curses.curs_set(0)
|
||||
scr.refresh()
|
||||
curses.napms(LOCKED_OUT_TIME)
|
||||
|
||||
|
||||
def beginLocked():
|
||||
"""
|
||||
Initialize curses and start the locked out process
|
||||
"""
|
||||
curses.wrapper(runLocked)
|
|
@ -3,11 +3,16 @@
|
|||
import curses
|
||||
import random
|
||||
import os
|
||||
from fallout_functions import slowWrite
|
||||
|
||||
################## text strings ######################
|
||||
|
||||
HEADER_TEXT = 'ROBCO INDUSTRIES (TM) TERMLINK PROTOCOL'
|
||||
|
||||
################## global "constants" ################
|
||||
|
||||
# number of characters for hex digits and spaces
|
||||
CONST_WIDTH = 16
|
||||
CONST_CHARS = 16
|
||||
|
||||
# position of the attempt squares
|
||||
SQUARE_X = 19
|
||||
|
@ -18,9 +23,6 @@ LOGIN_ATTEMPTS = 4
|
|||
# amount of time to pause after correct password input
|
||||
LOGIN_PAUSE = 3000
|
||||
|
||||
# amount of time to pause after lockout
|
||||
LOCKED_OUT_TIME = 5000
|
||||
|
||||
# starting number for hex generation
|
||||
START_HEX = 0xf650
|
||||
|
||||
|
@ -102,16 +104,17 @@ def initScreen(scr):
|
|||
scr - curses window returned from curses.initscr()
|
||||
"""
|
||||
size = scr.getmaxyx()
|
||||
height = size[0]
|
||||
width = size[1]
|
||||
height = size[0] - 5 # - 5 for header lines
|
||||
fillerHeight = height - 5 # - 5 for header lines
|
||||
|
||||
hexes = generateHex(height * 2)
|
||||
hexes = generateHex(fillerHeight * 2)
|
||||
|
||||
hexCol1 = hexes[:height]
|
||||
hexCol2 = hexes[height:]
|
||||
hexCol1 = hexes[:fillerHeight]
|
||||
hexCol2 = hexes[fillerHeight:]
|
||||
|
||||
# generate the symbols and passwords
|
||||
fillerLength = width / 2 * height
|
||||
fillerLength = width / 2 * fillerHeight
|
||||
passwords = getPasswords()
|
||||
filler = getFiller(fillerLength, passwords)
|
||||
fillerCol1 = filler[:len(filler) / 2]
|
||||
|
@ -121,8 +124,8 @@ def initScreen(scr):
|
|||
fillerWidth = width / 4
|
||||
|
||||
# print the header stuff
|
||||
scr.addstr('ROBCO INDUSTRIES (TM) TERMLINK PROTOCOL\n')
|
||||
scr.addstr('ENTER PASSWORD NOW\n\n')
|
||||
scr.addstr(HEADER_TEXT)
|
||||
scr.addstr('\nENTER PASSWORD NOW\n\n')
|
||||
scr.addstr(str(LOGIN_ATTEMPTS) + ' ATTEMPT(S) LEFT: ')
|
||||
for i in xrange(LOGIN_ATTEMPTS):
|
||||
scr.addch(curses.ACS_BLOCK)
|
||||
|
@ -130,9 +133,9 @@ def initScreen(scr):
|
|||
scr.addstr('\n\n')
|
||||
|
||||
# print the hex and filler
|
||||
for i in xrange(height):
|
||||
for i in xrange(fillerHeight):
|
||||
scr.addstr("0x%X %s 0x%X %s" % (hexCol1[i], fillerCol1[i * fillerWidth: (i + 1) * fillerWidth], hexCol2[i], fillerCol2[i * fillerWidth: (i + 1) * fillerWidth]))
|
||||
if i < height - 1:
|
||||
if i < fillerHeight - 1:
|
||||
scr.addstr('\n')
|
||||
|
||||
scr.refresh()
|
||||
|
@ -155,7 +158,7 @@ def moveInput(scr, inputPad):
|
|||
|
||||
inputPad.refresh(0, 0,
|
||||
height - cursorPos[0] - 1,
|
||||
width / 2 + CONST_WIDTH,
|
||||
width / 2 + CONST_CHARS,
|
||||
height - 1,
|
||||
width - 1)
|
||||
|
||||
|
@ -172,7 +175,7 @@ def userInput(scr, passwords):
|
|||
width = size[1]
|
||||
|
||||
# set up a pad for user input
|
||||
inputPad = curses.newpad(height, width / 2 + CONST_WIDTH)
|
||||
inputPad = curses.newpad(height, width / 2 + CONST_CHARS)
|
||||
|
||||
attempts = LOGIN_ATTEMPTS
|
||||
|
||||
|
@ -182,7 +185,7 @@ def userInput(scr, passwords):
|
|||
|
||||
while attempts > 0:
|
||||
# move the curser to the correct spot for typing
|
||||
scr.move(height - 1, width / 2 + CONST_WIDTH + 1)
|
||||
scr.move(height - 1, width / 2 + CONST_CHARS + 1)
|
||||
|
||||
# scroll user input up as the user tries passwords
|
||||
moveInput(scr, inputPad)
|
||||
|
@ -204,7 +207,7 @@ def userInput(scr, passwords):
|
|||
moveInput(scr, inputPad)
|
||||
|
||||
curses.napms(LOGIN_PAUSE)
|
||||
return
|
||||
return True
|
||||
|
||||
# wrong password
|
||||
else:
|
||||
|
@ -234,28 +237,27 @@ def userInput(scr, passwords):
|
|||
scr.addstr(' ')
|
||||
|
||||
# Out of attempts
|
||||
scr.erase()
|
||||
scr.move(height / 2 - 1, width / 2 - 7)
|
||||
scr.addstr('TERMINAL LOCKED')
|
||||
scr.move(height / 2 + 1, width / 2 - 16)
|
||||
scr.addstr('PLEASE CONTACT AN ADMINISTRATOR')
|
||||
curses.curs_set(0)
|
||||
scr.refresh()
|
||||
|
||||
curses.napms(LOCKED_OUT_TIME)
|
||||
return False
|
||||
|
||||
def runLogin(scr):
|
||||
"""
|
||||
Start the login portion of the terminal
|
||||
"""
|
||||
curses.use_default_colors()
|
||||
size = scr.getmaxyx()
|
||||
width = size[1]
|
||||
height = size[0]
|
||||
random.seed()
|
||||
# set screen to initial position
|
||||
scr.erase()
|
||||
scr.move(0, 0)
|
||||
passwords = initScreen(scr)
|
||||
userInput(scr, passwords)
|
||||
return userInput(scr, passwords)
|
||||
|
||||
|
||||
def beginLogin():
|
||||
"""
|
||||
Initialize curses and start the login process
|
||||
Returns true if the user correctly guesses the password
|
||||
"""
|
||||
scr = curses.initscr()
|
||||
curses.wrapper(runLogin)
|
||||
return curses.wrapper(runLogin)
|
||||
|
|
Loading…
Reference in a new issue