↓ Перейти к основному содержимому

Как я контрибьютил в Social Mapper

·510 слов·3 минут
Alexander Sokolov aka s0k0l
Автор
Alexander Sokolov aka s0k0l
Имитирую поведение пользователей, добываю данные и защищаю информацию. Довожу проекты от идеи до релиза.

Разбирал старые аккаунты и наткнулся на свой след в 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 лет я поменял мнение, но главное правило осталось прежним: в одном проекте один стиль отступов, и следит за ним инструмент, а не человек.

Сейчас проект не поддерживается активно, но автор принимает пулл-реквесты. Если пользуетесь им, используйте только в рамках легальных пентестов и с согласия заказчика.