В настоящее время я разрабатываю базу данных учетных данных, предназначенную для хранения имени сервера, имени пользователя и пароля в текстовом файле. Тем не менее, для имени сервера и паролей я пытаюсь сделать их уникальными (никакие два учетных данных / логина не могут иметь одинаковое имя сервера и пароль, имена пользователей могут дублироваться).
Например,
# This is NOT acceptable because the servername is duplicated.
servername : username : password
google : john : 123
google : john : 321
# This is acceptable because the servername and password are unique.
servername : username : password
google : john : 123
yahoo : john : 321
Я искал stackoverflow для некоторых ответов, но мне не удалось найти именно то, что я ищу. В текущем состоянии моей программы, когда вводятся учетные данные, они просто перечисляются прямо под существующим и продолжают добавлять все дополнительные учетные данные без проверки на наличие дубликатов.
# Creates the file "passdatabase.txt" for use with this code.
with open('passdatabase.txt', 'a+') as searchfile:
searchfile.close()
# Here I initialize the variable / count for the while loop
x = 1
print("\n======================="+
"\nYou chose to add a credential."
"\n-----------------------")
# User enters in a server name to be saved.
addservername = input("Server Name: ")
# User enters in a username to be saved.
addusername = input("Username: ")
# User enters in a password to be saved.
addpassword = input("Password: ")
# All inputs are combined to create a single variable in the format (servername : username : password)
addCredential = addservername + " : " + addusername + " : " + addpassword
# Loops until the user enters a valid submission (either [y] or [n]) to confirm information.
while x == 1:
# Input information is displayed for user to confirm.
confirmCredential = input("~~~~~~~~~~~~~~~~~~~~~~~" +
"\nPlease verify the entered credentials.\n" +
"\nServer Name: [" +
addservername + "]" +
"\nUsername: [" +
addusername + "]" +
"\nPassword: [" +
addpassword + "]" +
"\n\nIs the information correct? (y/n): ")
print("~~~~~~~~~~~~~~~~~~~~~~~")
if confirmCredential == "y":
x = 2
with open('passdatabase.txt', 'r') as searchfile:
lines_seen = set(open('passdatabase.txt'))
for addCredential in (searchfile, 1):
if addCredential not in lines_seen:
with open('passdatabase.txt', 'a+') as searchfile:
# I set the format of the credential to save in the text file as
# servername : username : password.
searchfile.write("\n" + addservername + " : " + addusername + " : " + addpassword)
print("[!] SUCCESS! Your credentials have successfully been stored [!]" +
"\n=======================")
# This breaks the for loop so it does not continue the code.
break
else:
print('Duplicate credential detected!')
elif confirmCredential == "n":
x = 2
print("[!] Your credentials have not been stored [!]" +
"\n=======================")
else:
print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" +
"\n[!!!ERROR!!!] PLEASE ENTER EITHER [y] OR [n]. [!!!ERROR!!!]\n" +
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
Мои вопросы / запросы в одном простом списке следующим образом:
- Как я могу гарантировать, что пользователь может вводить только уникальные записи для своих учетных данных имени сервера и пароля при разрешении дублирования записей имени пользователя?
- Если обнаружен дубликат, я бы например, код, чтобы остановить дальнейшее продвижение и снова запрашивать ввод у пользователя, пока не будут предоставлены надлежащие уникальные учетные данные. Я должен использовать набор или массив? (Порядок данных не имеет значения)
- Я видел довольно много дублирующих скриптов проверки, которые включают использование 2 .txt файлов, возможно ли это только с 1?
- В будущем я планирую добавить шифрование записей пароля, проверка надежности пароля и, возможно, журнал учетных данных (о том, кто вошел в систему).
- Любые входные данные приветствуются, поскольку я всегда готов их изучить!
Я довольно новичок в Python кодирования, и мне бы очень хотелось, чтобы некоторые указания о том, что я должен смотреть дальше, я, честно говоря, не уверен, если я даже движусь в правильном направлении.
Спасибо