Задача 1. Аутентификация
Сконфигурируйте логгер программы из темы 4 так, чтобы он:
- писал логи в файл stderr.txt;
- не писал дату, но писал время в формате HH:MM:SS, где HH — часы, MM — минуты, SS — секунды с ведущими нулями. Например, 16:00:09;
- выводил логи уровня INFO и выше.
В первом задании все довольно просто, я даже не знаю как можно пояснить, всё итак понятно из кода:
level=logging.INFO меняет уровень логгирования с DEBUG на INFO, сообщения уровня DEBUG уже не будут записываться в файл.
filename="stderr.txt" имя файла в который будут писаться логи
format="" в каком формате будут записываться сообщения (время, имя логгера, уровень логгирования, само сообщение).
datefmt="" в каком формате будет писаться дата и время (у меня в примере пишется только часы:минуты:секунды).
На выходе получается вот такой лог:
Задача 2. Сложность пароля
К нам пришли сотрудники отдела безопасности и сказали, что, согласно новым стандартам безопасности, хорошим паролем считается такой пароль, который не содержит в себе слов английского языка (то есть, символы пароля должны быть бессмысленными, что-то типа: zmdxKpfn1oHJXw==, а не что-то типа: "super_password"). Так что нужно доработать программу из предыдущей задачи.
Напишите функцию is_strong_password, которая принимает на вход пароль в виде строки, а возвращает булево значение, которое показывает, является ли пароль хорошим по новым стандартам безопасности.
Список английских слов по идее должен храниться в файле /usr/share/dict/words. Но у меня тут не было никакого файла кроме cracklib-small, в котором тоже содержатся какие-то слова... Я на всякий случай скачал и сохранил слова по пути указанному выше. Если что, буду от туда и плясать.
- Берите слова длиной больше четырёх символов. Учтите, что функция может запускаться несколько раз, поэтому стоит сделать предобработку списка слов.
- Подумайте, какая структура данных лучше всего подойдёт для того, чтобы быстро узнать, есть ли конкретное слово в списке слов из файла.
- Для извлечения всех слов из пароля воспользуйтесь регулярными выражениями.
По началу я было написал короткую программу, которая берет из файла все слова длинней 4 символов и сохраняет их в отдельный файл, но это была не очень хорошая идея.
Я решил сделать проще, в самом начале программы, я вызываю открытие файла и через лямбду наполняю переменную словами длинней 4х символов. Самое интересное - эта переменная становится почему-то глобальной...
Я не уверен что это решение точное. Потому как в условиях задачи был совет - воспользоваться "регулярными выражениями" для поиска слов в пароле, но мне так показалось проще. Можно было найти все слова в пароле, слово могло быть не одно. Но для проверки пароля - нам достаточно найти одно слово из списка, чтобы забраковать пароль.
Лог получается такой: