|
@@ -0,0 +1,202 @@
|
|
|
|
+from string import digits, ascii_letters
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class Registration:
|
|
|
|
+
|
|
|
|
+ def __init__(self, login, password) -> None:
|
|
|
|
+ self.login = login
|
|
|
|
+ self.password = password
|
|
|
|
+
|
|
|
|
+ @property
|
|
|
|
+ def login(self):
|
|
|
|
+ return self.__login
|
|
|
|
+
|
|
|
|
+ @login.setter
|
|
|
|
+ def login(self, value: str):
|
|
|
|
+ if not isinstance(value, str):
|
|
|
|
+ raise TypeError
|
|
|
|
+ if '@' not in value:
|
|
|
|
+ raise ValueError
|
|
|
|
+ if value.rfind('.') < value.rfind('@'):
|
|
|
|
+ raise ValueError
|
|
|
|
+ self.__login = value
|
|
|
|
+
|
|
|
|
+ @staticmethod
|
|
|
|
+ def is_include_digit(value: str):
|
|
|
|
+ for i in value:
|
|
|
|
+ if i in digits:
|
|
|
|
+ return True
|
|
|
|
+ return False
|
|
|
|
+
|
|
|
|
+ @staticmethod
|
|
|
|
+ def is_include_all_register(value: str):
|
|
|
|
+ upper = False
|
|
|
|
+ lower = False
|
|
|
|
+ for i in value:
|
|
|
|
+ if not lower:
|
|
|
|
+ lower = i.islower()
|
|
|
|
+ if not upper:
|
|
|
|
+ upper = i.isupper()
|
|
|
|
+ return lower and upper
|
|
|
|
+
|
|
|
|
+ @staticmethod
|
|
|
|
+ def is_include_only_latin(value: str):
|
|
|
|
+ for i in value:
|
|
|
|
+ if not i.isdigit():
|
|
|
|
+ if i not in ascii_letters:
|
|
|
|
+ return False
|
|
|
|
+ return True
|
|
|
|
+
|
|
|
|
+ @staticmethod
|
|
|
|
+ def check_password_dictionary(value: str):
|
|
|
|
+ with open('easy_passwords.txt', 'r', encoding='utf-8') as f:
|
|
|
|
+ password_list = f.read().split('\n')
|
|
|
|
+ return value in password_list
|
|
|
|
+
|
|
|
|
+ @property
|
|
|
|
+ def password(self):
|
|
|
|
+ return self.__password
|
|
|
|
+
|
|
|
|
+ @password.setter
|
|
|
|
+ def password(self, value: str):
|
|
|
|
+ if not isinstance(value, str):
|
|
|
|
+ raise TypeError("Пароль должен быть строкой")
|
|
|
|
+ if len(value) < 5 or len(value) > 11:
|
|
|
|
+ raise ValueError("Пароль должен быть длиннее 4 и меньше 12 символов")
|
|
|
|
+ if not self.is_include_digit(value):
|
|
|
|
+ raise ValueError("Пароль должен содержать хотя бы одну цифру")
|
|
|
|
+ if not self.is_include_all_register(value):
|
|
|
|
+ raise ValueError("Пароль должен содержать хотя бы один символ верхнего и нижнего регистра")
|
|
|
|
+ if not self.is_include_only_latin(value):
|
|
|
|
+ raise ValueError("Пароль должен содержать только латинский алфавит")
|
|
|
|
+ if self.check_password_dictionary(value):
|
|
|
|
+ raise ValueError("Ваш пароль содержится в списке самых легких")
|
|
|
|
+ self.__password = value
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def check_password_dictionary(value: str):
|
|
|
|
+ with open('easy_passwords.txt', 'r', encoding='utf-8') as f:
|
|
|
|
+ password_list = f.read().split('\n')
|
|
|
|
+ print(password_list)
|
|
|
|
+ # password_list = open('easy_passwords.txt', 'r', encoding='utf-8').read().split('\n')
|
|
|
|
+ return value in password_list
|
|
|
|
+
|
|
|
|
+def main():
|
|
|
|
+ # reg = Registration('asdfa@sfsdf.werwe', 'QwerTy123')
|
|
|
|
+ # reg = Registration('asdfa@sfsdf.werwe', 'QwerTy123')
|
|
|
|
+ # print(reg.login)
|
|
|
|
+ # print(reg.password)
|
|
|
|
+
|
|
|
|
+ # print(check_password_dictionary('124244242'))
|
|
|
|
+ # print(check_password_dictionary('as1SNdf'))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2 = Registration("fga", "asd12")
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("Registration('fga', 'asd12') как можно записать такой логин?")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2 = Registration("fg@a", "asd12")
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("Registration('fg@a', 'asd12') как можно записать такой логин?")
|
|
|
|
+
|
|
|
|
+ s2 = Registration("translate@gmail.com", "as1SNdf")
|
|
|
|
+ try:
|
|
|
|
+ s2.login = "asdsa12asd."
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("asdsa12asd как можно записать такой логин?")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.login = "asdsa12@asd"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("asdsa12@asd как можно записать такой логин?")
|
|
|
|
+
|
|
|
|
+ assert Registration.check_password_dictionary('QwerTy123'), 'проверка на пароль в слове не работает'
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = "QwerTy123"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("QwerTy123 хранится в словаре паролей, как его можно было сохранить?")
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = "KissasSAd1f"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("KissasSAd1f хранится в словаре паролей, как его можно было сохранить?")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = "124244242"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("124244242 пароль НЕОЧЕНЬ, как его можно было сохранить?")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = "RYIWUhjkdbfjfgdsffds"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("RYIWUhjkdbfjfgdsffds пароль НЕОЧЕНЬ, как его можно было сохранить?")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = "CaT"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("CaT пароль НЕОЧЕНЬ, как его можно было сохранить?")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = "monkey"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("monkey пароль НЕОЧЕНЬ, как его можно было сохранить?")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = "QwerTy123"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("QwerTy123 пароль есть в слове, нельзя его использовать")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = "HelloQEWq"
|
|
|
|
+ except ValueError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("HelloQEWq пароль НЕОЧЕНЬ, как его можно было сохранить?")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = [4, 32]
|
|
|
|
+ except TypeError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise TypeError("Пароль должен быть строкой")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ s2.password = 123456
|
|
|
|
+ except TypeError as e:
|
|
|
|
+ pass
|
|
|
|
+ else:
|
|
|
|
+ raise TypeError("Пароль должен быть строкой")
|
|
|
|
+
|
|
|
|
+ print('U r hacked Pentagon')
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+if __name__ == '__main__':
|
|
|
|
+ main()
|