Лепробиблиотека. Что это? (Часть 1)
Всем привет.
С вероятностью 99% вы каким-то образом услышали про booksdump.com и задавались вопросом как туда попасть.
Возможно, вы хотите знать, жив ли проект и какие планы на него.
Я думаю, что сегодня я немного раскрою карты, расскажу, что это такое, зачем это всё и когда закроется лепробиблиотека (и закроется ли вообще).
Если коротко, это не было каким-либо проектом. Началось всё, когда Роскомнадзор устроил активную борьбу с LibRusEc и Flibusta, всеми способами блокируя эти сайты. Ими пользуются почти все, кто по той или иной причине не хочет покупать книги, а хочет просто скачать и прочитать.
В интернете стали появляться раздачи с архивами флибусты и либрусека, чтобы любой мог сохранить их у себя и брать книги локально. Такие архивы занимают довольно много места на диске - не меньше 300 гигабайт. Довольно много и не каждый готов такое скачать и держать у себя на компьютере. Да и компьютер не всегда с собой.
В итоге я захостил у себя библиотеку из такого архива. Для веб-морды и OPDS я использовал проект sopds. И это вполне работало. Мне было удобно пользоваться, я скачивал книги, читал их, но у проекта этого был ряд проблем: отсутствие базы пользователей (технически она была, но работало плохо), криво написанный проект на Django, довольно медленная работа.
Но я решил поделиться этим на лепре. Чего добру пропадать, если книги все равно в интернете висят. Это вызвало волну регистраций, которую я делал своими руками - генерировал пароли, отправлял их в личку, собирал e-mail пользователей и уже тогда планировал съехать с SOPDS на что-то другое. Но ничего другого на тот момент не было, что могло бы реализовать всё так, как мне нравилось бы.
В какой-то момент я начал прикручитвать к booksdump (тогда еще aladex.ru) интерфейс на bootstrap и даже пустил туда тестовых пользователей. Но по сути это был тот же SOPDS, просто с новым натянутым плохо интерфейсом.
Годы шли, ничего не менялось, библиотеку хотелось сжечь.
Я начал изучать VueJS и Go. Написал несколькоо сервисов на работе, но библиотека меня упорно не отпускала.
Дело в том, что архитектура библиотеки является классчической архитектурной задачей про связи в базе данных. На ней очень хорошо отрабатывать работу с SQL, использовать вложенные запросы и т.д.
В итоге я взялся полностью переписывать всё. Совсем всё.
Это превратилось в два кривеньких проекта на Github, которые я периодически в свободное время пилю и дальше.
Был реализовать REST API и VueJS с Material Design. Интерфейс стал до безобразия простым, а в библиотеке добавилось избранное. Со временем я еще и реализовал OPDS на Go, что работает очень неплохо, но всё равно косячит со старыми ридерами. Возможно, проблема в принудительном использовании https.
Мне надо было шифровать данные. Это суровая необходимость в 21 веке. А чтобы авторизовать пользователя, все ридеры до сих пор используют Basic Auth, которая позволяет без проблем узнать логин и пароль пользователя. И без шифрования тут никак. Мне не жалко, если пароли пользователь сольет сам, но мне не хотелось бы в этом участвовать. Дело в том, что пользователи часто используют одинаковые пароли на нескольких ресурсах. Мы часто видим утечки таких данных. К счастью, я сразу строил архитектуру так, чтобы не знать пароли пользователя.
Конечно, я могу перехватить заголовки и читать пароли, когда пользователь приходит ко мне с ними, но я не храню пароли у себя. Если мою базу данных сольют, то пароли будут в виде хэша, к которому еще годами придется перебором угадывать пароли. Разве что могут слить e-mail, но это уже совсем другое.
Получился неплохой проект, который требует code review и вообще тяп-ляп и в продакшн. Но он работает теперь гораздо лучше, быстрее и стабильнее, чем это было с SOPDS.