minor adjustemenets

feature-admin-split
Darksider3 5 years ago
parent f31117e940
commit fb4b577eb8

@ -30,9 +30,9 @@ def import_from_file(file_path: str, db: str, user_ids: tuple = tuple([])) -> bo
# noinspection PyBroadException # noinspection PyBroadException
try: try:
with open(file_path, 'r', newline='') as f: with open(file_path, 'r', newline='') as f:
import lib.validator import lib.Validator
sql = lib.sqlitedb.SQLitedb(db) sql = lib.sqlitedb.SQLitedb(db)
err = lib.validator.checkImportFile(file_path, db) err = lib.Validator.checkImportFile(file_path, db)
if err is not True: if err is not True:
print(err) print(err)
exit(0) exit(0)
@ -46,18 +46,8 @@ def import_from_file(file_path: str, db: str, user_ids: tuple = tuple([])) -> bo
sys_ctl.setUser(row["username"]) sys_ctl.setUser(row["username"])
sys_ctl.aio_register(row["pubkey"]) sys_ctl.aio_register(row["pubkey"])
print(row['username'], "====> Registered.") print(row['username'], "====> Registered.")
except lib.UserExceptions.UserExistsAlready as UEA: except lib.UserExceptions.General as GeneralExcept:
pass # @TODO User was determined to exists already, shouldn't happen but is possible print(f"Something didnt work out! {GeneralExcept}")
except lib.UserExceptions.UnknownReturnCode as URC:
pass # @TODO Unknown Return Codes. Can happen in various function
except lib.UserExceptions.SSHDirUncreatable as SDU:
pass # @TODO SSH Directory doesn't exist AND couldn't be created. Inherently wrong design!
except lib.UserExceptions.ModifyFilesystem as MFS:
pass # @TODO Same as SSH Dir but more general, same problem: Wrong Permissions,
# Missing Dirs etc
except Exception as E: # @TODO well less broad is hard to achieve Kappa
print(E)
continue
elif row["status"] == "0": elif row["status"] == "0":
print(row['username'] + " not approved, therefore not registered.") print(row['username'] + " not approved, therefore not registered.")
try: try:

@ -2,13 +2,12 @@
import configparser import configparser
import lib.uis.config_ui # only follow -c flag import lib.uis.config_ui # only follow -c flag
import lib.validator import lib.Validator
import lib.sqlitedb import lib.sqlitedb
import lib.System import lib.System
import lib.UserExceptions import lib.UserExceptions
import sqlite3 import sqlite3
if __name__ == "__main__": if __name__ == "__main__":
lib.uis.config_ui.argparser.description += " - Edit Tilde Users" lib.uis.config_ui.argparser.description += " - Edit Tilde Users"
ArgParser = lib.uis.config_ui.argparser ArgParser = lib.uis.config_ui.argparser
@ -43,7 +42,7 @@ if __name__ == "__main__":
print(f"Well, SOMETHING must be done with {args.user} ;-)") print(f"Well, SOMETHING must be done with {args.user} ;-)")
exit(1) exit(1)
# --> --user # --> --user
if not lib.validator.checkUserInDB(args.user, db): if not lib.Validator.checkUserInDB(args.user, db):
print(f"User {args.user} does not exist in the database.") print(f"User {args.user} does not exist in the database.")
exit(1) exit(1)
DB = lib.sqlitedb.SQLitedb(db) DB = lib.sqlitedb.SQLitedb(db)
@ -72,26 +71,25 @@ if __name__ == "__main__":
# --> --sshpubkey # --> --sshpubkey
if args.sshpubkey: if args.sshpubkey:
if not lib.validator.checkSSHKey(args.sshpubkey): if not lib.Validator.checkSSHKey(args.sshpubkey):
print(f"Pubkey '{args.sshpubkey}' isn't valid.") print(f"Pubkey '{args.sshpubkey}' isn't valid.")
exit(1) exit(1)
try: try:
DB.safequery("UPDATE `applications` SET `pubkey`=? WHERE `username`=?", DB.safequery("UPDATE `applications` SET `pubkey`=? WHERE `username`=?",
tuple([args.sshpubkey, args.user])) tuple([args.sshpubkey, args.user]))
CurrentUser = DB.safequery("SELECT * FROM `applications` WHERE `username` = ? ", tuple([args.user]))[0]
if int(CurrentUser["status"]) == 1:
sys_ctl.make_ssh_usable(args.sshpubkey)
except sqlite3.Error as e: except sqlite3.Error as e:
print(f"Something unexpected happened! {e}") print(f"Something unexpected happened! {e}")
exit(1) exit(1)
fetch = DB.safequery("SELECT * FROM `applications` WHERE `username` = ? ", tuple([args.user])) except lib.UserExceptions.ModifyFilesystem as e:
if int(fetch[0]["status"]) == 1: print(f"One action failed during writing the ssh key back to the authorization file. {e}")
try:
sys_ctl.make_ssh_usable(args.sshpubkey)
except lib.UserExceptions.ModifyFilesystem as e:
print(f"One action failed during writing the ssh key back to the authorization file. {e}")
print(f"'{args.user}'s SSH-Key updated successfully.") print(f"'{args.user}'s SSH-Key updated successfully.")
# --> --name # --> --name
if args.name: if args.name:
if not lib.validator.checkName(args.name): if not lib.Validator.checkName(args.name):
print(f"'{args.name}' is not a valid Name.") print(f"'{args.name}' is not a valid Name.")
exit(1) exit(1)
try: try:
@ -102,7 +100,7 @@ if __name__ == "__main__":
# --> --email # --> --email
if args.email: if args.email:
if not lib.validator.checkEmail(args.email): if not lib.Validator.checkEmail(args.email):
print(f"'{args.email}' is not a valid Mail address!") print(f"'{args.email}' is not a valid Mail address!")
exit(1) exit(1)
try: try:
@ -116,43 +114,35 @@ if __name__ == "__main__":
if args.status != 0 and args.status != 1: if args.status != 0 and args.status != 1:
print("Only 0 and 1 are valid status, where 1 is activated and 0 is unapproved.") print("Only 0 and 1 are valid status, where 1 is activated and 0 is unapproved.")
exit(0) exit(0)
# just takes first result out of the dict # just takes first result out of the dict
if args.status == int(CurrentUser["status"]): if args.status == int(CurrentUser["status"]):
print(f"New and old status are the same.") print(f"New and old status are the same.")
if args.status == 0 and int(CurrentUser["status"]) == 1: if args.status == 0 and int(CurrentUser["status"]) == 1:
try: try:
DB.safequery("UPDATE `applications` SET `status` =? WHERE `id`=?", DB.safequery("UPDATE `applications` SET `status` =? WHERE `id`=?",
tuple([args.status, CurrentUser["id"]])) tuple([args.status, CurrentUser["id"]]))
sys_ctl.remove_user()
except sqlite3.Error as e: except sqlite3.Error as e:
print(f"Could not update database entry for '{args.user}', did not touch the system") print(f"Could not update database entry for '{args.user}', did not touch the system")
exit(1) exit(1)
try:
sys_ctl.remove_user()
except lib.UserExceptions.UnknownReturnCode as e: except lib.UserExceptions.UnknownReturnCode as e:
print(f"Could not remove '{args.user}' from the system, unknown return code: {e}. DB is modified.") print(f"Could not remove '{args.user}' from the system, unknown return code: {e}. DB is modified.")
exit(1) exit(1)
print(f"Successfully changed '{args.user}'s status to 0 and cleared from the system.") print(f"Successfully changed '{args.user}'s status to 0 and cleared from the system.")
if args.status == 1 and int(CurrentUser["status"]) == 0: if args.status == 1 and int(CurrentUser["status"]) == 0:
try: try:
DB.safequery("UPDATE `applications` SET `status`=? WHERE `username`=?", DB.safequery("UPDATE `applications` SET `status`=? WHERE `username`=?",
tuple([args.status, args.user])) tuple([args.status, args.user]))
sys_ctl.aio_register(CurrentUser["pubkey"])
except sqlite3.Error as e: except sqlite3.Error as e:
print(f"Could not update Users status in database") print(f"Could not update Users status in database")
exit(1) exit(1)
try: except lib.UserExceptions.General as ChangeUser:
sys_ctl.aio_register(CurrentUser["pubkey"]) print(f"Some chain in the cattle just slipped away, my lord! {ChangeUser}")
except lib.UserExceptions.UserExistsAlready as UEA:
print(f"Somehow the user exists already on the system! {UEA}")
exit(1)
except lib.UserExceptions.UnknownReturnCode as URC:
print(f"Unknown return code: {URC}")
exit(1)
except lib.UserExceptions.SSHDirUncreatable as SDU:
print(f"Could not create ssh directory for {args.user}, exception: {SDU}")
exit(1) exit(1)
except lib.UserExceptions.ModifyFilesystem as MFS:
pass
print(f"Successfully changed '{args.user}'s status to 1 and created on the system.") print(f"Successfully changed '{args.user}'s status to 1 and created on the system.")
exit(0) exit(0)
except KeyboardInterrupt as e: except KeyboardInterrupt as e:

@ -178,15 +178,15 @@ def checkImportFile(path: str, db: str):
reader = csv.DictReader(f) reader = csv.DictReader(f)
for row in reader: for row in reader:
# if any of this fails move on to the next user, just print a relatively helpful message lel # if any of this fails move on to the next user, just print a relatively helpful message lel
if not lib.validator.checkName(row["name"]): if not lib.Validator.checkName(row["name"]):
errstr += f"Line {ln}: Name: '{row['name']}' seems not legit. Character followed by character should" \ errstr += f"Line {ln}: Name: '{row['name']}' seems not legit. Character followed by character should" \
f" be correct.\n" f" be correct.\n"
valid = False valid = False
if not lib.validator.checkUsernameCharacters(row["username"]): if not lib.Validator.checkUsernameCharacters(row["username"]):
errstr += (f"Line {ln}: Username contains unsupported characters or starts with a number: '" errstr += (f"Line {ln}: Username contains unsupported characters or starts with a number: '"
f"{row['username']}'.\n") f"{row['username']}'.\n")
valid = False valid = False
if not lib.validator.checkUsernameLength(row["username"]): if not lib.Validator.checkUsernameLength(row["username"]):
errstr += f"Line {ln}: Username '{row['username']}' is either too long(>16) or short(<3)\n" errstr += f"Line {ln}: Username '{row['username']}' is either too long(>16) or short(<3)\n"
valid = False valid = False
# dup checking # dup checking
@ -196,17 +196,17 @@ def checkImportFile(path: str, db: str):
else: else:
valid_names_list.append(row["username"]) valid_names_list.append(row["username"])
# dup end # dup end
if not lib.validator.checkSSHKey(row["pubkey"]): if not lib.Validator.checkSSHKey(row["pubkey"]):
errstr += f"Line {ln}: Following SSH-Key of user '{row['username']}' isn't valid: " \ errstr += f"Line {ln}: Following SSH-Key of user '{row['username']}' isn't valid: " \
f"'{row['pubkey']}'.\n" f"'{row['pubkey']}'.\n"
valid = False valid = False
if not lib.validator.checkEmail(row["email"]): if not lib.Validator.checkEmail(row["email"]):
errstr += f"Line {ln}: E-Mail address of user '{row['username']}' '{row['email']}' is not valid.\n" errstr += f"Line {ln}: E-Mail address of user '{row['username']}' '{row['email']}' is not valid.\n"
valid = False valid = False
if not lib.validator.checkUserExists(row["username"]) or checkUserInDB(row["username"], db): if not lib.Validator.checkUserExists(row["username"]) or checkUserInDB(row["username"], db):
errstr += f"Line {ln}: User '{row['username']}' already exists.\n" errstr += f"Line {ln}: User '{row['username']}' already exists.\n"
valid = False valid = False
if not lib.validator.checkDatetimeFormat(row["timestamp"]): if not lib.Validator.checkDatetimeFormat(row["timestamp"]):
errstr += f"Line {ln}: Timestamp '{row['timestamp']}' from user '{row['username']}' is invalid.\n" errstr += f"Line {ln}: Timestamp '{row['timestamp']}' from user '{row['username']}' is invalid.\n"
valid = False valid = False
if int(row["status"]) > 1 or int(row["status"]) < 0: if int(row["status"]) > 1 or int(row["status"]) < 0:
Loading…
Cancel
Save