Лепробиблиотека. Что это? (Часть 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.

📌
Продолжение следует...