Разбирал старые аккаунты и наткнулся на свой след в Social Mapper. Это OSINT-инструмент Джейкоба Уилкина (Greenwolf): он ищет людей по соцсетям и через распознавание лиц склеивает профили одного человека с разных сайтов в один отчет. Его используют пентестеры и red team, чтобы собрать список сотрудников компании и их страниц. У репозитория больше 4000 звезд и 800 форков.
В сентябре 2020 года я прислал туда 20 коммитов в двух пулл-реквестах и до сих пор числюсь третьим по количеству коммитов, после двух аккаунтов самого автора. Расскажу, что там было.
Douban#
Все началось с issue #166. Китайская соцсеть Douban перестала работать: модуль падал с HTTP 418 и было непонятно, залогинился он или нет. Issue висел с апреля, автор ответил, что сайт, похоже, поменялся, но проверить не может, потому что не нашел, где там регистрироваться.
Social Mapper работает через Selenium и Firefox, так что для меня это была знакомая территория. Douban поменял заголовок страницы и форму входа, а модуль искал старые. В PR #193 я:
- поправил вход под новую форму и проверку заголовка
- добавил понятное сообщение, если страница входа загрузилась не так, как ожидается, вместо молчаливого падения
- вынес пути к Firefox и geckodriver в переменные окружения
FIREFOX_BINARYиGECKODRIVER, чтобы не держать их строго вPATH - починил несколько ошибок Python 3 с
bytesиstrпри чтении и записи файлов, которые остались после перехода с Python 2
Самое забавное, что у меня тоже не было аккаунта на Douban, поэтому проверить вход до конца я не мог. Попросил автора issue склонировать мой форк и переключиться на ветку с фиксом.
Пока PR ждал ревью, автор запушил пачку своих исправлений и пропустил мой. Извинился и попросил перевыложить. Я разрешил конфликты, через день напомнил о себе, и 9 сентября PR влили.
Табы и пробелы#
Пока разбирался в коде, заметил, что social_mapper.py написан с отступом в 4 пробела, а остальные модули табами. В Python это не косметика: смешанные отступы ломают код или, что хуже, делают его обманчивым. Завел issue #195 и сразу прислал PR #196:
- весь проект переведен на 4 пробела, как рекомендует PEP 8
- строковые литералы, которые использовались вместо комментариев, заменены на нормальные комментарии
- код отформатирован по PEP 8, лишние импорты удалены
- добавлены
.gitignoreи.editorconfig
Итого 11 файлов, +1657 и −1430 строк. Автор влил его в тот же день, написал, что я, похоже, вошел в раж, и спросил, нет ли у меня идей, как обойти новый rate limit Facebook. А еще добавил меня в список благодарностей в README, где я и вишу до сих пор.
Что я из этого вынес#
Чужой открытый проект оказался отличным местом, чтобы потренироваться читать незнакомый код и общаться с мейнтейнером. Маленький точечный фикс, который решает чью-то проблему, принимают охотно. А после него можно предлагать и что-то крупнее, вроде рефакторинга всего проекта.
И да, сейчас в моих Стандартах разработки записаны табы вместо пробелов. Спустя 6 лет я поменял мнение, но главное правило осталось прежним: в одном проекте один стиль отступов, и следит за ним инструмент, а не человек.
Сейчас проект не поддерживается активно, но автор принимает пулл-реквесты. Если пользуетесь им, используйте только в рамках легальных пентестов и с согласия заказчика.
