diff --git a/userdb-cli.py b/userdb-cli.py new file mode 100644 index 0000000000000000000000000000000000000000..5fa2f3cda3ac8a36f7b1d7f184fca613c4bab4c6 --- /dev/null +++ b/userdb-cli.py @@ -0,0 +1,54 @@ +from apiserver import settings + +from apiserver.security import JsonDBInterface, get_password_hash, UserInDB + +import getopt, sys, getpass + +def main(argv): + userdb = JsonDBInterface(settings) + noarg = True + try: + opts, args = getopt.getopt(argv,"hla:d:g:",["list", "add=", "delete=", "get=", "help"]) + except getopt.GetoptError: + print("Run \"userdb-cli.py -h\" for help.") + sys.exit(2) + + for opt, arg in opts: + noarg = False + if opt == '-h': + # print help info + print("The following options are supported:") + print("\t-l | --list \t\t\t\tLists all users in the userdb-file") + print("\t-a <username> | --add <username>\tAdd a user with the given username. Email and password will be queried via the terminal.") + print("\t-g <username> | --get <username>\tPrint all information about the given username (i.e. username, email and password hash).") + print("\t-d <username> | --delete <username>\tDelete the given user from the file. This also deletes email and the stored password hash. This can not be undone. A Confirmation via the Terminal is required.") + print("Multiple operations can be done with one call, but they can be executed in any order. Email/password entry and deletion confirmation will have a label to show which username is currently used.") + elif opt in ("-l", "--list"): + for user in userdb.list(): + print(user) + elif opt in ("-a", "--add"): + user = UserInDB(username=arg) + user.email = input("Enter email for user \"" + arg + "\": ") + password = getpass.getpass() + user.hashed_password = get_password_hash(password) + userdb.add(user) + elif opt in ("-g", "--get"): + user = userdb.get(arg) + print(user) + elif opt in ("-d", "--delete"): + confirmation = input("Are you sure you want to delete user \"" + arg +"\"?(Y/default:N)") + if confirmation == "Y" or confirmation == "y": + userdb.delete(arg) + print("User deleted.") + else: + print("User not deleted") + else: + print("Wrong argument: " + opt) + print("Run \"userdb-cli.py -h\" for help.") + if noarg: + print("No arguments.") + print("Run \"userdb-cli.py -h\" for help.") + + +if __name__ == "__main__": + main(sys.argv[1:]) \ No newline at end of file