В настоящее время многие компании предоставляют сервис облачного хранилища, но каждая имеет свой проприетарный клиент и их функционал, как правило, оставляет желать лучшего.
Существующие альтернативы мне не подошли в силу многих причин, поэтому я решил сделать собственный универсальный клиент — shadowcloud
Как-то так он выглядит:
Что умеет
- Прямая загрузка (без использования локального диска) в Google Drive, Яндекс Диск (WebDAV), Облако Mail.Ru, Dropbox
- Полное шифрование по умолчанию, большой выбор алгоритмов и настроек
- Защищённая паролем база данных
- Чексуммы и дедупликация
- Убирает ограничение на размер файла
- Репликация или разбиение файлов по разным хранилищам
- Стриминг медиа без ограничений
- Создаёт превью и извлекает метаданные и текст документов
- Версионирование файлов и всей структуры директорий
- Markdown заметки, подсветка кода
- Быстрое сохранение веб-страниц со встроенными ресурсами
- Кэширование файлов в памяти
- Использование в виде локального диска с помощью FUSE (требуется winfsp)
- Открытый исходный код, почти каждый аспект настраивается через shadowcloud.conf
Как использовать
Для использования необходимо:
- Сгенерировать ключ шифрования (позже его нужно импортировать на других устройствах)
- Настроить облачное хранилище
- Создать регион данных и подключить к нему хранилище (ID региона должны совпадать на всех устройствах)
После этого можно переходить в панель с файлами, выбирать регион и загружать документы.
Немного о реализации
Программа написана на Scala и практически целиком построена на фреймворке Akka (акторы, стримы, http, persistence), фронтенд написан полностью на Scala.js.
Для шифрования используется Bouncy Castle и опционально libsodium (алгоритмы по умолчанию: Blake2b/ChaCha20/ECIES/ECDSA).
Из версии light исключены Apache Tika и JavaCV из-за большого размера, они используются для извлечения метаданных из документов и создания превью для видеозаписей.
Автор: d41d8cd98f