@ -20,16 +20,20 @@ try:
args = argparser . parse_args ( )
args = argparser . parse_args ( )
CONF_FILE = args . config
CONF_FILE = args . config
except :
except :
# intended broad, @TODO check them all for errors instead of everything in one
logging . exception ( " Argumentparser-Exception: " )
logging . exception ( " Argumentparser-Exception: " )
exit ( 0 )
try :
try :
config = configparser . ConfigParser ( )
config = configparser . ConfigParser ( )
config . read ( CONF_FILE )
config . read ( CONF_FILE )
logging . basicConfig ( format = " %(asctime)s : %(message)s " , filename = config [ ' DEFAULT ' ] [ ' log_file ' ] , level = int ( config [ ' LOG_LEVEL ' ] [ ' log_level ' ] ) )
logging . basicConfig ( format = " %(asctime)s : %(message)s " , filename = config [ ' DEFAULT ' ] [ ' log_file ' ] ,
del ( cwd )
level = int ( config [ ' LOG_LEVEL ' ] [ ' log_level ' ] ) )
REG_FILE = config [ ' DEFAULT ' ] [ ' applications_db ' ]
REG_FILE = config [ ' DEFAULT ' ] [ ' applications_db ' ]
except :
except :
# intended broad, @TODO check them all for errors instead of everything in one
logging . exception ( " logging or configparser-Exception: " )
logging . exception ( " logging or configparser-Exception: " )
exit ( 0 )
VALID_SSH = False
VALID_SSH = False
VALID_USER = False
VALID_USER = False
@ -38,22 +42,24 @@ VALID_USER=False
def __createTable ( cursor , connection ) :
def __createTable ( cursor , connection ) :
try :
try :
cursor . execute (
cursor . execute (
" CREATE TABLE IF NOT EXISTS applications( " \
" CREATE TABLE IF NOT EXISTS applications( "
" id INTEGER PRIMARY KEY AUTOINCREMENT, " \
" id INTEGER PRIMARY KEY AUTOINCREMENT, "
" username TEXT NOT NULL, email TEXT NOT NULL, " \
" username TEXT NOT NULL, email TEXT NOT NULL, "
" name TEXT NOT NULL, pubkey TEXT NOT NULL, " \
" name TEXT NOT NULL, pubkey TEXT NOT NULL, "
" timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, status INTEGER NOT NULL DEFAULT 0); " )
" timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, status INTEGER NOT NULL DEFAULT 0); " )
connection . commit ( )
connection . commit ( )
except :
except sqlite3 . Error as e :
logging . exception ( " Couldn ' t create needed SQLite Table! " )
logging . exception ( " Couldn ' t create needed SQLite Table! Exception: %s " % e )
def addtotable ( cursor , connection , username , name , email , pubkey ) :
def addtotable ( cursor , connection , username , name , email , pubkey ) :
try :
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 ] )
" ?,?,?,?) " , [ username , name , email , pubkey ] )
connection . commit ( )
connection . commit ( )
except :
except sqlite3 . Error as e :
logging . exception ( " Couldn ' t insert user into the db " )
logging . exception ( " Couldn ' t insert user into the db: %s " % e )
# check if sqlite file does exists or already and has our structure
# check if sqlite file does exists or already and has our structure
def __checkSQLite ( cursor , connection ) :
def __checkSQLite ( cursor , connection ) :
@ -61,15 +67,16 @@ def __checkSQLite(cursor, connection):
cursor . execute ( " SELECT name FROM sqlite_master WHERE type= ' table ' AND name= ' applications ' " )
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 :
try :
__createTable ( cursor , connection )
__createTable ( cursor , connection )
except :
except sqlite3 . Error as e :
logging . exception ( " couldn ' t create table on given database. Exception: " )
logging . exception ( " couldn ' t create table on given database. Exception: %s " % e )
else :
else :
pass
pass
return True
return True
def check_username ( value ) :
def check_username ( value ) :
global VALID_USER
global VALID_USER
if len ( value ) < 3 :
if len ( value ) < 3 :
@ -79,7 +86,8 @@ def check_username(value):
from pwd import getpwnam
from pwd import getpwnam
getpwnam ( value )
getpwnam ( value )
VALID_USER = False
VALID_USER = False
except :
# intended broad
except Exception :
VALID_USER = True
VALID_USER = True
return True
return True
return False
return False
@ -111,38 +119,34 @@ def validate_pubkey(value):
return True
return True
def main ( ) :
def main ( ) :
print ( " ▗▀▖ \n ▗▖▖ ▐ ▌ ▌▛▀▖ \n ▘▝▗▖▜▀ ▌ ▌▌ ▌ \n ▝▘▐ ▝▀▘▘ ▘ " )
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 " )
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 ) ) :
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 " )
" \n What is your desired username? [a-z0-9] allowed: \n " )
fullname = input ( " \n Please enter your full name: \n " )
fullname = input ( " \n Please enter your full name: \n " )
while not re . match ( " \ w+ \ s* \ w* " , username ) :
while not re . match ( " \ w+ \ s* \ w* " , username ) :
fullname = input ( " \n That is not your real name. \n Please enter your full name: \n " )
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 " )
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 ) :
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 " )
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 " )
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 ) ) :
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 )
validate_pubkey ( pubkey )
print ( " \n Username: {0!s} " . format ( username ) )
print ( " \n Username: {0!s} " . format ( username ) )
print ( " Full Name: {0!s} " . format ( fullname ) )
print ( " Full Name: {0!s} " . format ( fullname ) )
print ( " Email: {0!s} " . format ( email ) )
print ( " Email: {0!s} " . format ( email ) )
print ( " Public {0!s} " . format ( pubkey ) )
print ( " Public {0!s} " . format ( pubkey ) )
validation = input ( " \n Is this information correct? [y/N] " )
validation = input ( " \n Is this information correct? [y/N] " )
while not re . match ( " [yYnN \n ] " , validation ) :
while not re . match ( " [yYnN \n ] " , validation ) :
print ( " Please answer y for yes or n for no " )
print ( " Please answer y for yes or n for no " )
@ -156,13 +160,16 @@ def main():
addtotable ( cursor , connection , username , fullname , email , pubkey )
addtotable ( cursor , connection , username , fullname , email , pubkey )
connection . commit ( )
connection . commit ( )
connection . close ( )
connection . close ( )
except :
except sqlite3 . Error as e :
logging . exception ( " Database {0!s} couldnt be accessed or created. Exception: " . format ( config [ ' DEFAULT ' ] [ ' applications_db ' ] ) )
logging . exception ( " Database {0!s} couldnt be accessed or created. Exception: {0!s} " .
format ( config [ ' DEFAULT ' ] [ ' applications_db ' ] , e ) )
if connection :
connection . close ( )
connection . close ( )
exit ( 1 )
exit ( 1 )
pass
return 0
return 0
if __name__ == " __main__ " :
if __name__ == " __main__ " :
try :
try :
main ( )
main ( )