Thanks to visit codestin.com
Credit goes to github.com

Skip to content

CLI-утилита и библиотека Go для зашифрованной передачи файлов через инстансы FFSend

License

imbecility/ffsendgo

Repository files navigation

ffsendgo

Командная утилита для загрузки и скачивания файлов через сервисы, совместимые с Firefox Send.

Возможности

  • Загрузка файлов и директорий (директории автоматически архивируются в .tar.gz).
  • Скачивание и расшифровка файлов по URL, с поддержкой указания директории сохранения и перезаписи.
  • End-to-end потоковое шифрование и дешифрование данных с использованием протокола Encrypted Content-Encoding (ECE), совместимое с протоколом Firefox Send.
  • Автоматический подбор подходящего инстанса для загрузки на основе лимитов размера, срока хранения и количества скачиваний.

Скачать

Готовые aвтобилды под amd64 и arm64 для Linux, Windows, MacOS:

страница последнего релиза для загрузки

Установка и сборка

Требования

Сборка из исходного кода

клонирование этого репо, переход в его папку и настройка зависимостей проекта:

git clone --depth 1 https://github.com/imbecility/ffsendgo
cd ffsendgo
go mod tidy

Linux & macOS

CGO_ENABLED=0 go build -ldflags="-s -w -extldflags '-static' -X 'main.buildTime=$(go run ./cli/tools/buildtime.go)'" -trimpath -o ./build/ffsendgo ./cli

Windows

set CGO_ENABLED=0; go build -ldflags="-s -w -extldflags '-static' -X 'main.buildTime=$(go run ./cli/tools/buildtime.go)'" -trimpath -o ./build/ffsendgo.exe ./cli

Исполняемый файл будет в папке build.

Использование

Утилита автоматически определяет действие в зависимости от типа переданного аргумента: путь к файлу/директории для загрузки или URL для скачивания.

----------------------------------------------------------------------------
использование:
ffsendgo.exe [-host <url>] [-all] <путь | [-overwrite] [-output] URL>

программа автоматически определяет действие:
  - если передан путь к файлу или папке, начнется их выгрузка.
  - если передан URL на файл FFSend, начнется скачивание в текущую рабочую
директорию.

----------------------------------------------------------------------------

флаги:
  -all [bool: (по умолчанию 'false')]
        выгрузка на все подходящие инстансы которые найдет программа

  -host [string: (по умолчанию '')]
        свой конкретный URL инстанса FFSend для выгрузки

  -output [string: (по умолчанию '')]
        папка для сохранения файла

  -overwrite [bool: (по умолчанию 'false')]
        перезаписать файл если он уже существует
  
  -version [bool: (по умолчанию 'false')]
        версия программы

Загрузка файла или директории

Для загрузки необходимо указать путь к файлу или директории.

# Общий шаблон
./ffsendgo [flags] <путь_к_файлу_или_директории>

Флаги для загрузки:

  • -host <url>: Использовать конкретный URL инстанса FFSend для загрузки.
  • -all: Загрузить файл на все подходящие инстансы, найденные программой.

Примеры

Загрузка файла archive.zip с автоматическим выбором лучшего инстанса:

./ffsendgo ./archive.zip

Загрузка директории project_docs на указанный инстанс:

./ffsendgo --host https://send.mni.li ./project_docs

Скачивание файла

Для скачивания необходимо указать полный URL файла.

# Общий шаблон
./ffsendgo [flags] <URL>

Флаги для скачивания:

  • -overwrite: Перезаписать локальный файл, если он уже существует.
  • -output <папка>: Указать директорию для сохранения файла.

Примеры

Скачивание файла по URL в текущую директорию:

./ffsendgo "https://send.example.com/download/abcdef123456/#secretkey..."

Скачивание файла в директорию /tmp/downloads с принудительной перезаписью:

./ffsendgo --overwrite --output /tmp/downloads "https://send.example.com/download/abcdef123456/#secretkey..."

Использование как библиотеки:

package main

import (
	"log"

	"github.com/imbecility/ffsendgo"
)


func main() {

	// ...

	// выгрузка файла/папки
	fileOrFolderPath := "/path/to/something"
	customProviderUrl := "" // можно указать свой инстанс, или не указывать ничего для авто-подбора (nil или "")
	multiUpload := false    // для выгрузки на все доступные инстансы
	if err := ffsendgo.Uploader(fileOrFolderPath, &customProviderUrl, &multiUpload); err != nil {
		log.Fatal(err.Error())
	}

	// скачивание файла
	downloadUrl := "https://ffsend-instance.host/download/12a345bc67890123/#ab12CDEF34GHKl56mnOpQRsTuVW"
	overwriteExistsFile := true // перезаписывать файлы на диске если уже есть с тем же именем
	destinationFolder := "/folder/path/or/nil" // nil или строка с путем, будет создана папка если не существует
	if err := ffsendgo.DownloadFile(downloadUrl, &overwriteExistsFile, &destinationFolder); err != nil {
		log.Fatal(err.Error())
	}

	// ...
}