@ -14,62 +14,69 @@ try:
else :
if ospath . isfile ( cwd ) is False :
cwd = getcwd ( ) + " /applicationsconfig.ini "
# cwd is now either cwd/applicationsconfig or $TILDE_CONF
# cwd is now either cwd/applicationsconfig or $TILDE_CONF
argparser = argparse . ArgumentParser ( description = ' interactive registration formular for tilde platforms ' )
argparser . add_argument ( ' -c ' , ' --config ' , default = cwd , type = str , help = ' Config file ' , required = False )
args = argparser . parse_args ( )
CONF_FILE = args . config
CONF_FILE = args . config
except :
# intended broad, @TODO check them all for errors instead of everything in one
logging . exception ( " Argumentparser-Exception: " )
exit ( 0 )
try :
config = configparser . ConfigParser ( )
config . read ( CONF_FILE )
logging . basicConfig ( format = " %(asctime)s : %(message)s " , filename = config [ ' DEFAULT ' ] [ ' log_file ' ] , level = int ( config [ ' LOG_LEVEL ' ] [ ' log_level ' ] ) )
del ( cwd )
REG_FILE = config [ ' DEFAULT ' ] [ ' applications_db ' ]
logging . basicConfig ( format = " %(asctime)s : %(message)s " , filename = config [ ' DEFAULT ' ] [ ' log_file ' ] ,
level = int ( config [ ' LOG_LEVEL ' ] [ ' log_level ' ] ) )
REG_FILE = config [ ' DEFAULT ' ] [ ' applications_db ' ]
except :
# intended broad, @TODO check them all for errors instead of everything in one
logging . exception ( " logging or configparser-Exception: " )
exit ( 0 )
VALID_SSH = False
VALID_USER = False
VALID_SSH = False
VALID_USER = False
def __createTable ( cursor , connection ) :
try :
cursor . execute (
" CREATE TABLE IF NOT EXISTS applications( " \
" id INTEGER PRIMARY KEY AUTOINCREMENT, " \
" username TEXT NOT NULL, email TEXT NOT NULL, " \
" name TEXT NOT NULL, pubkey TEXT NOT NULL, " \
" CREATE TABLE IF NOT EXISTS applications( "
" id INTEGER PRIMARY KEY AUTOINCREMENT, "
" username TEXT NOT NULL, email TEXT NOT NULL, "
" name TEXT NOT NULL, pubkey TEXT NOT NULL, "
" timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, status INTEGER NOT NULL DEFAULT 0); " )
connection . commit ( )
except :
logging . exception ( " Couldn ' t create needed SQLite Table! " )
except sqlite3 . Error as e :
logging . exception ( " Couldn ' t create needed SQLite Table! Exception: %s " % e )
def addtotable ( cursor , connection , username , name , email , pubkey ) :
try :
cursor . execute ( " INSERT INTO ' applications ' (username, name, email, pubkey)VALUES( " \
cursor . execute ( " INSERT INTO ' applications ' (username, name, email, pubkey)VALUES( "
" ?,?,?,?) " , [ username , name , email , pubkey ] )
connection . commit ( )
except :
logging . exception ( " Couldn ' t insert user into the db " )
except sqlite3 . Error as e :
logging . exception ( " Couldn ' t insert user into the db: %s " % e )
# check if sqlite file does exists or already and has our structure
def __checkSQLite ( cursor , connection ) :
# SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';
# SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';
cursor . execute ( " SELECT name FROM sqlite_master WHERE type= ' table ' AND name= ' applications ' " )
res = cursor . fetchall ( )
res = cursor . fetchall ( )
if res == [ ] :
if not res :
try :
__createTable ( cursor , connection )
except :
logging . exception ( " couldn ' t create table on given database. Exception: " )
except sqlite3 . Error as e :
logging . exception ( " couldn ' t create table on given database. Exception: %s " % e )
else :
pass
return True
def check_username ( value ) :
global VALID_USER
if len ( value ) < 3 :
@ -78,9 +85,10 @@ def check_username(value):
try :
from pwd import getpwnam
getpwnam ( value )
VALID_USER = False
except :
VALID_USER = True
VALID_USER = False
# intended broad
except Exception :
VALID_USER = True
return True
return False
@ -111,38 +119,34 @@ def validate_pubkey(value):
return True
def main ( ) :
print ( " ▗▀▖ \n ▗▖▖ ▐ ▌ ▌▛▀▖ \n ▘▝▗▖▜▀ ▌ ▌▌ ▌ \n ▝▘▐ ▝▀▘▘ ▘ " )
username = input ( " Welcome to the ~.fun user application form! \n \n What is your desired username? [a-z0-9] allowed: \n " )
while ( not re . match ( " [a-z]+[a-z0-9] " , username ) ) or ( not check_username ( username ) ) :
username = input ( " Invalid Username, maybe it exists already? \n Valid characters are only a-z and 0-9. \n Make sure your username starts with a character and not a number. " \
username = input ( " Invalid Username, maybe it exists already? \n Valid characters are only a-z and 0-9. "
" \n Make sure your username starts with a character and not a number. "
" \n What is your desired username? [a-z0-9] allowed: \n " )
fullname = input ( " \n Please enter your full name: \n " )
while not re . match ( " \ w+ \ s* \ w* " , username ) :
fullname = input ( " \n That is not your real name. \n Please enter your full name: \n " )
email = input ( " \n Please enter your email address: \n " )
while not re . match ( " (^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+ \ .[a-zA-Z0-9-.]+$) " , email ) :
email = input ( " \n That is not a valid mail address. \n Please enter your email address: \n " )
pubkey = input ( " \n Please paste your ssh public key: \n " )
while ( not re . match ( " ssh-( \ w)+ \ s( \ w+)( \ s*)([a-zA-Z0-9@]*) " , pubkey ) ) or ( not validate_pubkey ( pubkey ) ) :
pubkey = input ( " \n Please enter a valid public key. You can show it with ssh-keygen -f .ssh/id_rsa -y on your local machine. \n Please enter your pubkey: \n " )
pubkey = input ( " \n Please enter a valid public key. You can show it with ssh-keygen -f .ssh/id_rsa -y on your "
" local machine. \n Please enter your pubkey: \n " )
validate_pubkey ( pubkey )
print ( " \n Username: {0!s} " . format ( username ) )
print ( " Full Name: {0!s} " . format ( fullname ) )
print ( " Email: {0!s} " . format ( email ) )
print ( " Public {0!s} " . format ( pubkey ) )
validation = input ( " \n Is this information correct? [y/N] " )
while not re . match ( " [yYnN \n ] " , validation ) :
print ( " Please answer y for yes or n for no " )
@ -156,13 +160,16 @@ def main():
addtotable ( cursor , connection , username , fullname , email , pubkey )
connection . commit ( )
connection . close ( )
except :
logging . exception ( " Database {0!s} couldnt be accessed or created. Exception: " . format ( config [ ' DEFAULT ' ] [ ' applications_db ' ] ) )
except sqlite3 . Error as e :
logging . exception ( " Database {0!s} couldnt be accessed or created. Exception: {0!s} " .
format ( config [ ' DEFAULT ' ] [ ' applications_db ' ] , e ) )
if connection :
connection . close ( )
exit ( 1 )
pass
return 0
if __name__ == " __main__ " :
try :
main ( )