ShadowCloud — универсальный облачный клиент

В настоящее время многие компании предоставляют сервис облачного хранилища, но каждая имеет свой проприетарный клиент и их функционал, как правило, оставляет желать лучшего.
Существующие альтернативы мне не подошли в силу многих причин, поэтому я решил сделать собственный универсальный клиент — shadowcloud


Как-то так он выглядит:


image


Что умеет


  • Прямая загрузка (без использования локального диска) в Google Drive, Яндекс Диск (WebDAV), Облако Mail.Ru, Dropbox
  • Полное шифрование по умолчанию, большой выбор алгоритмов и настроек
  • Защищённая паролем база данных
  • Чексуммы и дедупликация
  • Убирает ограничение на размер файла
  • Репликация или разбиение файлов по разным хранилищам
  • Стриминг медиа без ограничений
  • Создаёт превью и извлекает метаданные и текст документов
  • Версионирование файлов и всей структуры директорий
  • Markdown заметки, подсветка кода
  • Быстрое сохранение веб-страниц со встроенными ресурсами
  • Кэширование файлов в памяти
  • Использование в виде локального диска с помощью FUSE (требуется winfsp)
  • Открытый исходный код, почти каждый аспект настраивается через shadowcloud.conf

image


image


Как использовать


Собственно, репозиторий


Для использования необходимо:


  • Сгенерировать ключ шифрования (позже его нужно импортировать на других устройствах)
  • Настроить облачное хранилище
  • Создать регион данных и подключить к нему хранилище (ID региона должны совпадать на всех устройствах)

image


После этого можно переходить в панель с файлами, выбирать регион и загружать документы.


Немного о реализации


Программа написана на Scala и практически целиком построена на фреймворке Akka (акторы, стримы, http, persistence), фронтенд написан полностью на Scala.js.


Для шифрования используется Bouncy Castle и опционально libsodium (алгоритмы по умолчанию: Blake2b/ChaCha20/ECIES/ECDSA).


Из версии light исключены Apache Tika и JavaCV из-за большого размера, они используются для извлечения метаданных из документов и создания превью для видеозаписей.

Поделиться публикацией
Комментарии 26
    +2
    Не могли бы вы подробнее рассказать про уже существующие решения? Какие у них недостатки и достоинства по сравнению с вашей программой?
      0

      Вот одно из таких решений — облачный криптографический токен PKCS#11, включая Android.

        +2
        Навскидку rclone, AirExplorer, NetDrive, BoxCryptor, Cryptomator, Диск-О от майл.ру
        Проблема в том, что они либо решают только какую-то одну из проблем, либо неудобны в использовании (для меня), либо проприетарные и требуют денег.
        Тот же rclone упомянутый ниже страдает от того что шифрование там не из коробки, а прикручено как бы сбоку. ShadowCloud изначально заточен под изолированную файловую систему, поэтому не имеет ограничений на имена файлов и структуру директорий, практически не зависит от используемого хранилища (достаточно маппить ключ в поток байт), имеет гибкое версионирование и универсальный расширяемый формат метаданных.
        0

        Чем вам не подошёл rclone, вроде бы основную задачу выполняет.
        Скажите, на raspberry pi заработает?

          0
          Плюсую за rclone. Использую в связке с OneDrive (т.к. в свое время это оказалось самым дешевым облаком для физиков). Под убунтой rclone есть в репозитории. Сам rclone умеет fuse. Тут очень сложно будет его переплюнуть.
            0
            rclone лучше подходит для загрузки больших файлов, например бэкапов в 10тб, shadowcloud же предназначен для организации документов и быстрого доступа к ним (метаданные, превью, версии, markdown и моментальное сохранение страниц в веб-интерфейсе, константное время сканирования директорий).
            На raspberry pi теоретически можно, но рантайм у скалы очень тяжелый, и программа заточена под десктоп.
              0

              К слову "консольная" версия также доступна в виде Docker-образа: https://hub.docker.com/r/karasiq/shadowcloud/

              0

              У меня под Linux ни разу не получилось загрузить на Яндекс.Диск большой файл (размером более 150-200 Мб) посредством WebDAV. Перепробовал несколько различных WebDAV клиентов. Соединение рвется или загрузка зависает если загружаемый файл больше 100-150 Мб.


              Это только у меня такой опыт?


              К сожалению, Яндекс перестал выпускать новые версии клиента для Linux, а старая не обновлялась уже много лет и содержит баги (в моем случае всегда удалялся определенный файл с диска, сколько бы я его не пытался создавать, к счастью, была резервная копия).

                0
                У меня с Nextcloud и Dolphin такая проблема, не вышло побороть
                  0
                  Нормально загружал файлы по паре гигабайт объёмом.
                  Правда, только по офисному каналу — дома таки рвалось.
                    0

                    Каким клиентом?

                      0
                      Смонтировал через mount.davfs и потом копировал штатными средствами.
                      Дебиановский пакет davfs2 из Debian/Stretch, если что.
                    0
                    WebDAV — это тот http, может где-то прокси или что-то вмешивается в транспорт?
                      0
                      Здесь файл режется на чанки, а загрузка всегда возобновляется с места обрыва.
                      Также если к региону присоединено несколько хранилищ, при отказе одного из них часть файла заливается в следующее (replication factor и приоритет можно настроить для каждого региона).
                      0
                      Крутая тема, но, как я понимаю, такие клиенты абсолютно невыгодны провайдерам облачный хранилищ (можно сказать, что профиль пользователя shadowcloud ортогонален целевой аудитории), поэтому при достаточной популярности надо делать постоянные фиксы для возвращения работоспособности + даже при отсутствии противодействия со стороны провайдеров, со временем будут меняться протоколы, методы апи, и, если не сформируется ядро людей, непрерывно поддерживающих проект, он будет по крупицам терять функционал.

                      Сразу приходит на ум SAS Gis — крутой бесплатный инструмент для составления офлайн карт со спутниковыми фото, который умеет вытягивать тайлы с дестков провайдеров карт, включая гугл, яндекс, майкрософт, нокиа, и кучи других. Но, когда мне понадобилось подготовить офлайн карту три месяца назад, то программа представляла жалкое зрелище, и 95% сервисов карт возвращали 404, 500, wrong API KEY… Кстати, самому интересно, есть ли сейчас рабочее решение для составления офлайн карты со спутниковыми снимками для смартфона
                        +1

                        Чем не выгоден? Клиент платит за дисковое пространство — провайдер имеет прибыль. А каким образом — неважно, поэтому все облачные провайдеры предоставляют публичный апи

                          0
                          По возможности используется официальное апи, мейлруклоуд единственное самописное (При этом и самое быстрое и надёжное, как ни странно. Самое тормозное у гугла.).
                          +1
                          А можете вкратце про использование написать, как именно происходит загрузка файлов в облако, к примеру?
                          По принципу ftp-клиента, перекидываю файлы с локального диска в удаленное?
                          Или это инструментарий для монтирования хранилищ как дисков или папок и облака прозрачно видно в файловой системе?
                            0
                            Есть веб-интерфейс, есть монтирование как диск. Чтение/запись идёт напрямую в облако. Помимо копирования существующего можно напрямую писать на виртуальный «диск» 7z-архив, к примеру.
                            Файловая система здесь своя и с простыми файлами в облаках не конфликтует.
                            Кстати веб-интерфейс вполне юзабелен с андроида (времени на андроид-порт пока не находится к сожалению).
                              0
                              То есть с уже имеющимися в облаке файле работать нельзя, что загружено через эту программу — оно хранится в своих контейнерах. Так?

                              Как обстоит дело с одновременной работой с нескольких компьютеров?
                                0
                                То есть с уже имеющимися в облаке файле работать нельзя, что загружено через эту программу — оно хранится в своих контейнерах. Так?

                                Да. Реализовать полноценную работу с "нативными" файлами не получится без возможности рандомного чтения/записи в API, и это потребовало бы значительного усложнения всей системы, к тому же для этого уже полно инструментов.


                                Как обстоит дело с одновременной работой с нескольких компьютеров?

                                Это предусмотрено, в Readme есть инструкция по синхронизации. Файловая система позволяет наличие нескольких версий одного файла, поэтому конфликты просто отсутствуют "by design".

                            +1
                            А разве не проще пользоваться encfs? Было бы круто конечно что бы кто-то сделал что-то по удобнее для всех устройств, но насколько я понял это не удобнее и вряд ли надежнее чем encfs.
                            Я вот пользуюсь encfs с Windows и Linux, вообще проблем нет. При вводе пароля монтируется виртуальный диск а при выключении он размонтируется и твоих файлов как будто и не существовало. Остаются в зашифрованном виде лишь на диске в папке облака. А вот на android нормального приложения что бы корректно работало с документами не нашел, все криво.
                              0
                              А encfs разве пишет напрямую в облако?
                                0
                                По сути encfs шифрует определенную папку и при вводе пароля создает виртуальный жесткий диск с расшифрованными файлами. И прямо в онлайне когда их изменяешь он сразу и изменяет зашифрованные файлы. А выбрать папку можно любую, хоть папку облака, хоть сразу нескольких.
                                  0

                                  В shadowcloud тоже есть возможность писать в локальную папку, но это скорее workaround для неподдерживаемых облаков.
                                  В основе здесь полностью прямое IO, без использования локального диска, в этом принципиальное отличие.
                                  Я загрузил около двух терабайт в shadowcloud, на диске же это заняло…

                                0

                                У encfs есть недостаток — он повторяет оригинальную структуру каталогов/файлов. Соответственно, кто имеет доступ к облаку, может сделать предположение о том, что у Вас хранится. Поэтому, появился такой проект — cryfs, который ориентирован на работу с облачными хранилищами: хранит файлы чанками одинакового размера без сохранения иерархии. Правда, когда я его тестил, обнаружил неприятную "особенность" — по дефолту чанки слишком маленькие, и создается безумное количество файлов, которые нереально долго синхронизируются. Аналогичную проблему решает cryptomator. С дропбоксом работает ок.


                                P.s. изначально я искаль альтернативу encfs из-за его ограничения на длину файлов (190 символов), которое не будут никак фиксить, т.к. 1 версия не развивается дальше, ведется разработка 2 версии

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое