From b245c9f451e95390fc6290eb01b1708b4fcf4c03 Mon Sep 17 00:00:00 2001
From: royalcat
Date: Sun, 8 Oct 2023 19:46:03 +0300
Subject: [PATCH] royalcat refactoring
---
.github/workflows/docker.yaml | 18 +-
.github/workflows/mkdocs.yml | 73 +---
.gitignore | 5 +-
.vscode/launch.json | 16 +
.vscode/settings.json | 5 +
Dockerfile | 14 +-
Makefile | 6 +-
README.md | 65 ++--
assets/js/common.js | 306 ++++++++-------
assets/js/config.js | 311 ++++++++--------
assets/js/dashboard.js | 58 +--
assets/js/logs.js | 145 ++++----
assets/js/routes.js | 332 +++++++++--------
assets/js/servers.js | 101 ++---
assets/templates/routes.html | 89 +++--
cmd/{distribyted => tstor}/main.go | 148 ++++----
config/config.go | 83 -----
config/config_test.go | 53 ---
config/handler.go | 70 ----
config/model.go | 106 ------
go.mod | 138 +++----
go.sum | 349 ++++++++----------
http_fs.go | 2 +-
mkdocs/docs/CNAME | 2 +-
mkdocs/docs/getting-started.md | 70 ++--
mkdocs/docs/index.md | 20 +-
mkdocs/mkdocs.yml | 23 +-
src/config/default.go | 82 ++++
src/config/load.go | 48 +++
src/config/model.go | 75 ++++
{fs => src/fs}/archive.go | 2 +-
{fs => src/fs}/archive_test.go | 2 +-
{fs => src/fs}/container.go | 0
{fs => src/fs}/container_test.go | 0
{fs => src/fs}/dir.go | 0
{fs => src/fs}/fs.go | 2 +-
{fs => src/fs}/fs_test.go | 0
{fs => src/fs}/memory.go | 0
{fs => src/fs}/memory_test.go | 0
{fs => src/fs}/storage.go | 0
{fs => src/fs}/storage_test.go | 0
{fs => src/fs}/torrent.go | 2 +-
{fs => src/fs}/torrent_test.go | 0
{http => src/http}/api.go | 19 +-
{http => src/http}/http.go | 20 +-
{http => src/http}/model.go | 0
{http => src/http}/web.go | 2 +-
{iio => src/iio}/disk.go | 5 +-
{iio => src/iio}/disk_test.go | 0
{iio => src/iio}/reader.go | 0
{iio => src/iio}/wrapper.go | 0
{iio => src/iio}/wrapper_test.go | 4 +-
{log => src/log}/badger.go | 0
{log => src/log}/log.go | 4 +-
{log => src/log}/torrent.go | 0
{fuse => src/mounts/fuse}/handler.go | 3 +-
{fuse => src/mounts/fuse}/mount.go | 9 +-
{fuse => src/mounts/fuse}/mount_test.go | 2 +-
.../http.go => src/mounts/httpfs/httpfs.go | 6 +-
{webdav => src/mounts/webdav}/fs.go | 4 +-
{webdav => src/mounts/webdav}/fs_test.go | 2 +-
{webdav => src/mounts/webdav}/handler.go | 2 +-
{webdav => src/mounts/webdav}/http.go | 2 +-
{torrent => src/torrent}/client.go | 6 +-
{torrent => src/torrent}/id.go | 0
{torrent => src/torrent}/loader/config.go | 6 +-
{torrent => src/torrent}/loader/db.go | 2 +-
{torrent => src/torrent}/loader/db_test.go | 0
{torrent => src/torrent}/loader/folder.go | 6 +-
{torrent => src/torrent}/loader/loader.go | 0
{torrent => src/torrent}/server.go | 2 +-
{torrent => src/torrent}/service.go | 4 +-
{torrent => src/torrent}/stats.go | 0
{torrent => src/torrent}/store.go | 4 +-
templates/config_template.yaml | 88 ++---
templates/header.html | 15 +-
templates/index.html | 4 +-
templates/logs.html | 2 +-
templates/navbar.html | 4 +-
templates/routes.html | 4 +-
templates/servers.html | 4 +-
81 files changed, 1476 insertions(+), 1580 deletions(-)
create mode 100644 .vscode/launch.json
create mode 100644 .vscode/settings.json
rename cmd/{distribyted => tstor}/main.go (56%)
delete mode 100644 config/config.go
delete mode 100644 config/config_test.go
delete mode 100644 config/handler.go
delete mode 100644 config/model.go
create mode 100644 src/config/default.go
create mode 100644 src/config/load.go
create mode 100644 src/config/model.go
rename {fs => src/fs}/archive.go (98%)
rename {fs => src/fs}/archive_test.go (96%)
rename {fs => src/fs}/container.go (100%)
rename {fs => src/fs}/container_test.go (100%)
rename {fs => src/fs}/dir.go (100%)
rename {fs => src/fs}/fs.go (96%)
rename {fs => src/fs}/fs_test.go (100%)
rename {fs => src/fs}/memory.go (100%)
rename {fs => src/fs}/memory_test.go (100%)
rename {fs => src/fs}/storage.go (100%)
rename {fs => src/fs}/storage_test.go (100%)
rename {fs => src/fs}/torrent.go (98%)
rename {fs => src/fs}/torrent_test.go (100%)
rename {http => src/http}/api.go (88%)
rename {http => src/http}/http.go (72%)
rename {http => src/http}/model.go (100%)
rename {http => src/http}/web.go (92%)
rename {iio => src/iio}/disk.go (89%)
rename {iio => src/iio}/disk_test.go (100%)
rename {iio => src/iio}/reader.go (100%)
rename {iio => src/iio}/wrapper.go (100%)
rename {iio => src/iio}/wrapper_test.go (86%)
rename {log => src/log}/badger.go (100%)
rename {log => src/log}/log.go (92%)
rename {log => src/log}/torrent.go (100%)
rename {fuse => src/mounts/fuse}/handler.go (97%)
rename {fuse => src/mounts/fuse}/mount.go (96%)
rename {fuse => src/mounts/fuse}/mount_test.go (96%)
rename torrent/http.go => src/mounts/httpfs/httpfs.go (94%)
rename {webdav => src/mounts/webdav}/fs.go (97%)
rename {webdav => src/mounts/webdav}/fs_test.go (97%)
rename {webdav => src/mounts/webdav}/handler.go (91%)
rename {webdav => src/mounts/webdav}/http.go (94%)
rename {torrent => src/torrent}/client.go (85%)
rename {torrent => src/torrent}/id.go (100%)
rename {torrent => src/torrent}/loader/config.go (85%)
rename {torrent => src/torrent}/loader/db.go (97%)
rename {torrent => src/torrent}/loader/db_test.go (100%)
rename {torrent => src/torrent}/loader/folder.go (87%)
rename {torrent => src/torrent}/loader/loader.go (100%)
rename {torrent => src/torrent}/server.go (99%)
rename {torrent => src/torrent}/service.go (97%)
rename {torrent => src/torrent}/stats.go (100%)
rename {torrent => src/torrent}/store.go (95%)
diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml
index 4f65356..f1d968d 100644
--- a/.github/workflows/docker.yaml
+++ b/.github/workflows/docker.yaml
@@ -2,10 +2,10 @@ name: docker
on:
push:
- branches:
+ branches:
- master
tags:
- - 'v*'
+ - "v*"
jobs:
main:
@@ -18,7 +18,7 @@ jobs:
id: meta
uses: crazy-max/ghaction-docker-meta@v5.0.0
with:
- images: distribyted/distribyted
+ images: tstor/tstor
tags: |
type=ref,event=branch
type=ref,event=pr
@@ -27,16 +27,16 @@ jobs:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.0.0
-
+
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
+
- name: Login to DockerHub
- uses: docker/login-action@v3.0.0
+ uses: docker/login-action@v3.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
+
- name: Build and push
id: docker_build
uses: docker/build-push-action@v5.0.0
@@ -46,10 +46,10 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64
-
+
- name: Update repo description
uses: peter-evans/dockerhub-description@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- repository: distribyted/distribyted
\ No newline at end of file
+ repository: tstor/tstor
diff --git a/.github/workflows/mkdocs.yml b/.github/workflows/mkdocs.yml
index 6514a31..437e0c5 100644
--- a/.github/workflows/mkdocs.yml
+++ b/.github/workflows/mkdocs.yml
@@ -2,75 +2,26 @@ name: mkdocs
on:
push:
- branches:
+ branches:
- master
tags:
- - 'v*'
+ - "v*"
jobs:
mkdocs:
runs-on: ubuntu-latest
steps:
- - name: Checkout code
- uses: actions/checkout@v4
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v4
with:
- # git-revision-date-localized-plugin and mkdocs-rss-plugin need full git history depth
- fetch-depth: 0
+ python-version: 3.x
+ - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
- - name: Set up Python
- uses: actions/setup-python@v4
+ - uses: actions/cache@v3
with:
- python-version: "3.x"
-
- - uses: actions/cache@v3.3.2
- id: cache
- with:
- path: ~/.cache/pip
- key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
+ key: mkdocs-material-${{ env.cache_id }}
+ path: .cache
restore-keys: |
- ${{ runner.os }}-pip-
- - name: Install dependencies
- working-directory: ./mkdocs
- run: |
- python -m pip install --upgrade pip setuptools wheel
- python -m pip install -r requirements.txt
- - name: Build docs
- working-directory: ./mkdocs
- run: |
- mkdocs build
-# - name: Validate generated HTML files
-# working-directory: ./mkdocs
-# run: |
-# docker run -v $(pwd):/test --rm wjdp/htmltest --conf .htmltest.yml
- # On push to master or release branch, deploy docs
- - name: Set up git author
- run: |
- remote_repo="https://${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
- git config --global user.name "${GITHUB_ACTOR}"
- git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
- git remote rm origin
- git remote add origin "${remote_repo}"
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Deploy docs (Master)
- if: github.ref == 'refs/heads/master'
- working-directory: ./mkdocs
- run: |
- echo "${CUSTOM_DOMAIN}" > "${GITHUB_WORKSPACE}/mkdocs/docs/CNAME"
- echo -e "User-agent: *\nDisallow: /v*.*/\nSitemap: https://${CUSTOM_DOMAIN}/sitemap.xml" > "${GITHUB_WORKSPACE}/mkdocs/docs/robots.txt"
- git fetch origin gh-pages --verbose
- mike deploy master dev --config-file "${GITHUB_WORKSPACE}/mkdocs/mkdocs.yml" --push --rebase
- env:
- CUSTOM_DOMAIN: distribyted.com
- GOOGLE_ANALYTICS_KEY: ${{ secrets.GOOGLE_ANALYTICS_KEY }}
-
- - name: Deploy docs (Versions)
- env:
- GOOGLE_ANALYTICS_KEY: ${{ secrets.GOOGLE_ANALYTICS_KEY }}
-
- if: startsWith(github.ref, 'refs/tags/v')
- run: |
- git fetch origin gh-pages --verbose
- mike deploy ${GITHUB_REF##*/} latest --config-file "${GITHUB_WORKSPACE}/mkdocs/mkdocs.yml" --push --rebase --update-aliases
-
+ mkdocs-material-
+ - run: pip install mkdocs-material
+ - run: mkdocs gh-deploy --force
diff --git a/.gitignore b/.gitignore
index cb4cbb9..d5f5981 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-distribyted-data
+tstor-data
httpfs_vfsdata.go
bin/
-coverage.out
\ No newline at end of file
+coverage.out
+bin
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..b9d624c
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,16 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Launch Package",
+ "type": "go",
+ "request": "launch",
+ "mode": "auto",
+ "program": "${workspaceFolder}/cmd/tstor/main.go",
+ "cwd": "${workspaceFolder}/bin",
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..e40c94c
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "yaml.schemas": {
+ "https://json.schemastore.org/github-workflow.json": "file:///home/royalcat/projects/distribyted/.github/workflows/mkdocs.yml"
+ }
+}
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index d9347d6..ae9df9a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,7 +4,7 @@
FROM golang:1.20-alpine as builder
-ENV BIN_REPO=github.com/distribyted/distribyted
+ENV BIN_REPO=git.kmsign.ru/royalcat/tstor
ENV BIN_PATH=$GOPATH/src/$BIN_REPO
COPY . $BIN_PATH
@@ -12,7 +12,7 @@ WORKDIR $BIN_PATH
RUN apk add fuse-dev git gcc libc-dev g++ make
-RUN BIN_OUTPUT=/bin/distribyted make build
+RUN BIN_OUTPUT=/bin/tstor make build
#===============
# Stage 2: Run
@@ -22,12 +22,12 @@ FROM alpine:3
RUN apk add gcc libc-dev fuse-dev
-COPY --from=builder /bin/distribyted /bin/distribyted
-RUN chmod +x /bin/distribyted
+COPY --from=builder /bin/tstor /bin/tstor
+RUN chmod +x /bin/tstor
-RUN mkdir /distribyted-data
+RUN mkdir /tstor-data
RUN echo "user_allow_other" >> /etc/fuse.conf
-ENV DISTRIBYTED_FUSE_ALLOW_OTHER=true
+ENV tstor_FUSE_ALLOW_OTHER=true
-ENTRYPOINT ["./bin/distribyted"]
+ENTRYPOINT ["./bin/tstor"]
diff --git a/Makefile b/Makefile
index 384f700..beef8f0 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
VERSION := $(shell git describe --tags)
BUILD := $(shell git rev-parse --short HEAD)
-BIN_OUTPUT ?= bin/distribyted-$(VERSION)-`go env GOOS`-`go env GOARCH``go env GOEXE`
+BIN_OUTPUT ?= bin/tstor-$(VERSION)-`go env GOOS`-`go env GOARCH``go env GOEXE`
PROJECTNAME := $(shell basename "$(PWD)")
# Use linker flags to provide version/build settings
@@ -13,7 +13,7 @@ MAKEFLAGS += --silent
## run: run from code.
run:
- go run cmd/distribyted/main.go examples/conf_example.yaml
+ go run cmd/tstor/main.go examples/conf_example.yaml
## build: build binary.
build: go-generate go-build
@@ -28,7 +28,7 @@ test:
go-build:
@echo " > Building binary on $(BIN_OUTPUT)..."
- go build -o $(BIN_OUTPUT) -tags "release" -ldflags='$(LDFLAGS)' cmd/distribyted/main.go
+ go build -o $(BIN_OUTPUT) -tags "release" -ldflags='$(LDFLAGS)' cmd/tstor/main.go
go-generate:
@echo " > Generating code files..."
diff --git a/README.md b/README.md
index 3f721f6..795d95a 100644
--- a/README.md
+++ b/README.md
@@ -6,35 +6,36 @@
[![GPL3 License][license-shield]][license-url]
[![Coveralls][coveralls-shield]][coveralls-url]
[![Docker Image][docker-pulls-shield]][docker-pulls-url]
+
-
-
+
+
-
distribyted
+ tstor
Torrent client with on-demand file downloading as a filesystem.
- Report a Bug
+ Report a Bug
ยท
- Request Feature
+ Request Feature
## About The Project
-![Distribyted Screen Shot][product-screenshot]
+![tstor Screen Shot][product-screenshot]
-Distribyted is an alternative torrent client.
-It can expose torrent files as a standard FUSE, webDAV or HTTP endpoint and download them on demand, allowing random reads using a fixed amount of disk space.
+tstor is an alternative torrent client.
+It can expose torrent files as a standard FUSE, webDAV or HTTP endpoint and download them on demand, allowing random reads using a fixed amount of disk space.
-Distribyted tries to make easier integrations with other applications using torrent files, presenting them as a standard filesystem.
+tstor tries to make easier integrations with other applications using torrent files, presenting them as a standard filesystem.
-**Note that distribyted is in beta version, it is a proof of concept with a lot of bugs.**
+**Note that tstor is in beta version, it is a proof of concept with a lot of bugs.**
## Use Cases
@@ -52,7 +53,8 @@ Check [here][main-url] for further documentation.
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
Some areas need more care than others:
-- Windows and macOS tests and compatibility. I don't have any easy way to test distribyted on these operating systems.
+
+- Windows and macOS tests and compatibility. I don't have any easy way to test tstor on these operating systems.
- Web interface. Web development is not my _forte_.
- Tutorials. Share with the community your use case!
@@ -62,7 +64,6 @@ Some areas need more care than others:
- [Nwaples rardecode library, experimental branch][rardecode-repo-url]. The only go library that is able to seek over rar files and avoid to use `io.Discard`.
- [Bodgit 7zip library][sevenzip-repo-url]. Amazing library to decode 7zip files.
-
## License
Distributed under the GPL3 license. See `LICENSE` for more information.
@@ -70,23 +71,23 @@ Distributed under the GPL3 license. See `LICENSE` for more information.
[sevenzip-repo-url]: https://github.com/bodgit/sevenzip
[rardecode-repo-url]: https://github.com/nwaples/rardecode/tree/experimental
[torrent-repo-url]: https://github.com/anacrolix/torrent
-[main-url]: https://distribyted.com
-[releases-shield]: https://img.shields.io/github/v/release/distribyted/distribyted.svg?style=flat-square
-[releases-url]: https://github.com/distribyted/distribyted/releases
-[docker-pulls-shield]:https://img.shields.io/docker/pulls/distribyted/distribyted.svg?style=flat-square
-[docker-pulls-url]:https://hub.docker.com/r/distribyted/distribyted
-[contributors-shield]: https://img.shields.io/github/contributors/distribyted/distribyted.svg?style=flat-square
-[contributors-url]: https://github.com/distribyted/distribyted/graphs/contributors
-[forks-shield]: https://img.shields.io/github/forks/distribyted/distribyted.svg?style=flat-square
-[forks-url]: https://github.com/distribyted/distribyted/network/members
-[stars-shield]: https://img.shields.io/github/stars/distribyted/distribyted.svg?style=flat-square
-[stars-url]: https://github.com/distribyted/distribyted/stargazers
-[issues-shield]: https://img.shields.io/github/issues/distribyted/distribyted.svg?style=flat-square
-[issues-url]: https://github.com/distribyted/distribyted/issues
-[releases-url]: https://github.com/distribyted/distribyted/releases
-[license-shield]: https://img.shields.io/github/license/distribyted/distribyted.svg?style=flat-square
-[license-url]: https://github.com/distribyted/distribyted/blob/master/LICENSE
-[product-screenshot]: mkdocs/docs/images/distribyted.gif
-[example-config]: https://github.com/distribyted/distribyted/blob/master/examples/conf_example.yaml
-[coveralls-shield]: https://img.shields.io/coveralls/github/distribyted/distribyted?style=flat-square
-[coveralls-url]: https://coveralls.io/github/distribyted/distribyted
+[main-url]: https://tstor.com
+[releases-shield]: https://img.shields.io/github/v/release/tstor/tstor.svg?style=flat-square
+[releases-url]: https://git.kmsign.ru/royalcat/tstor/releases
+[docker-pulls-shield]: https://img.shields.io/docker/pulls/tstor/tstor.svg?style=flat-square
+[docker-pulls-url]: https://hub.docker.com/r/tstor/tstor
+[contributors-shield]: https://img.shields.io/github/contributors/tstor/tstor.svg?style=flat-square
+[contributors-url]: https://git.kmsign.ru/royalcat/tstor/graphs/contributors
+[forks-shield]: https://img.shields.io/github/forks/tstor/tstor.svg?style=flat-square
+[forks-url]: https://git.kmsign.ru/royalcat/tstor/network/members
+[stars-shield]: https://img.shields.io/github/stars/tstor/tstor.svg?style=flat-square
+[stars-url]: https://git.kmsign.ru/royalcat/tstor/stargazers
+[issues-shield]: https://img.shields.io/github/issues/tstor/tstor.svg?style=flat-square
+[issues-url]: https://git.kmsign.ru/royalcat/tstor/issues
+[releases-url]: https://git.kmsign.ru/royalcat/tstor/releases
+[license-shield]: https://img.shields.io/github/license/tstor/tstor.svg?style=flat-square
+[license-url]: https://git.kmsign.ru/royalcat/tstor/blob/master/LICENSE
+[product-screenshot]: mkdocs/docs/images/tstor.gif
+[example-config]: https://git.kmsign.ru/royalcat/tstor/blob/master/examples/conf_example.yaml
+[coveralls-shield]: https://img.shields.io/coveralls/github/tstor/tstor?style=flat-square
+[coveralls-url]: https://coveralls.io/github/tstor/tstor
diff --git a/assets/js/common.js b/assets/js/common.js
index f82425f..1796e2f 100644
--- a/assets/js/common.js
+++ b/assets/js/common.js
@@ -1,176 +1,162 @@
-Handlebars.registerHelper('ibytes', function (bytesSec, timePassed) {
- return Humanize.ibytes(bytesSec / timePassed, 1024);
+Handlebars.registerHelper("ibytes", function (bytesSec, timePassed) {
+ return Humanize.ibytes(bytesSec / timePassed, 1024);
});
-Handlebars.registerHelper('bytes', function (bytes) {
- return Humanize.bytes(bytes, 1024);
+Handlebars.registerHelper("bytes", function (bytes) {
+ return Humanize.bytes(bytes, 1024);
});
+var tstor = tstor || {};
-var Distribyted = Distribyted || {};
+tstor.message = {
+ _toastr: function () {
+ toastr.options = {
+ closeButton: true,
+ debug: false,
+ newestOnTop: false,
+ progressBar: true,
+ positionClass: "toast-top-right",
+ preventDuplicates: false,
+ onclick: null,
+ showDuration: "300",
+ hideDuration: "1000",
+ timeOut: "5000",
+ extendedTimeOut: "1000",
+ showEasing: "swing",
+ hideEasing: "linear",
+ showMethod: "fadeIn",
+ hideMethod: "fadeOut",
+ };
-Distribyted.message = {
+ return toastr;
+ },
- _toastr: function () {
- toastr.options = {
- closeButton: true,
- debug: false,
- newestOnTop: false,
- progressBar: true,
- positionClass: "toast-top-right",
- preventDuplicates: false,
- onclick: null,
- showDuration: "300",
- hideDuration: "1000",
- timeOut: "5000",
- extendedTimeOut: "1000",
- showEasing: "swing",
- hideEasing: "linear",
- showMethod: "fadeIn",
- hideMethod: "fadeOut"
- };
+ error: function (message) {
+ this._toastr().error(message);
+ },
- return toastr;
- },
-
-
- error: function (message) {
- this._toastr().error(message);
- },
-
- info: function (message) {
- this._toastr().info(message);
- }
-}
+ info: function (message) {
+ this._toastr().info(message);
+ },
+};
$(document).ready(function () {
- "use strict";
+ "use strict";
- /*======== 1. SCROLLBAR SIDEBAR ========*/
- var sidebarScrollbar = $(".sidebar-scrollbar");
- if (sidebarScrollbar.length != 0) {
- sidebarScrollbar.slimScroll({
- opacity: 0,
- height: "100%",
- color: "#808080",
- size: "5px",
- touchScrollStep: 50
- })
- .mouseover(function () {
- $(this)
- .next(".slimScrollBar")
- .css("opacity", 0.5);
- });
+ /*======== 1. SCROLLBAR SIDEBAR ========*/
+ var sidebarScrollbar = $(".sidebar-scrollbar");
+ if (sidebarScrollbar.length != 0) {
+ sidebarScrollbar
+ .slimScroll({
+ opacity: 0,
+ height: "100%",
+ color: "#808080",
+ size: "5px",
+ touchScrollStep: 50,
+ })
+ .mouseover(function () {
+ $(this).next(".slimScrollBar").css("opacity", 0.5);
+ });
+ }
+
+ /*======== 2. MOBILE OVERLAY ========*/
+ if ($(window).width() < 768) {
+ $(".sidebar-toggle").on("click", function () {
+ $("body").css("overflow", "hidden");
+ $("body").prepend('
-
-
-
-
-
-
-
- Name |
- /
- |
- Peers/Seeders |
- Status |
- Actions |
-
-
-
- {{#torrentStats}}
-
- {{name}} |
- {{ibytes downloadedBytes timePassed}} / {{ibytes
- uploadedBytes timePassed}} |
- {{{torrent_info peers seeders pieceSize}}} |
-
- {{{torrent_status pieceChunks totalPieces}}}
- |
- |
-
- {{/torrentStats}}
-
-
-
-
+
+
+
+
+
+
+
+ Name |
+
+ /
+
+ |
+
+ Peers/Seeders
+ |
+ Status |
+ Actions |
+
+
+
+ {{#torrentStats}}
+
+ {{name}} |
+
+ {{ibytes downloadedBytes timePassed}} / {{ibytes uploadedBytes
+ timePassed}}
+ |
+
+ {{{torrent_info peers seeders pieceSize}}}
+ |
+
+ {{{torrent_status pieceChunks totalPieces}}}
+ |
+
+
+ |
+
+ {{/torrentStats}}
+
+
+
+
-{{/.}}
\ No newline at end of file
+{{/.}}
diff --git a/cmd/distribyted/main.go b/cmd/tstor/main.go
similarity index 56%
rename from cmd/distribyted/main.go
rename to cmd/tstor/main.go
index 87de4d4..c68daae 100644
--- a/cmd/distribyted/main.go
+++ b/cmd/tstor/main.go
@@ -10,19 +10,19 @@ import (
"syscall"
"time"
- "github.com/anacrolix/missinggo/v2/filecache"
+ "git.kmsign.ru/royalcat/tstor/src/config"
"github.com/anacrolix/torrent/storage"
- "github.com/distribyted/distribyted/config"
- "github.com/distribyted/distribyted/fs"
"github.com/rs/zerolog/log"
"github.com/urfave/cli/v2"
- "github.com/distribyted/distribyted/fuse"
- "github.com/distribyted/distribyted/http"
- dlog "github.com/distribyted/distribyted/log"
- "github.com/distribyted/distribyted/torrent"
- "github.com/distribyted/distribyted/torrent/loader"
- "github.com/distribyted/distribyted/webdav"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
+ "git.kmsign.ru/royalcat/tstor/src/http"
+ dlog "git.kmsign.ru/royalcat/tstor/src/log"
+ "git.kmsign.ru/royalcat/tstor/src/mounts/fuse"
+ "git.kmsign.ru/royalcat/tstor/src/mounts/httpfs"
+ "git.kmsign.ru/royalcat/tstor/src/mounts/webdav"
+ "git.kmsign.ru/royalcat/tstor/src/torrent"
+ "git.kmsign.ru/royalcat/tstor/src/torrent/loader"
)
const (
@@ -34,32 +34,13 @@ const (
func main() {
app := &cli.App{
- Name: "distribyted",
+ Name: "tstor",
Usage: "Torrent client with on-demand file downloading as a filesystem.",
Flags: []cli.Flag{
&cli.StringFlag{
- Name: configFlag,
- Value: "./distribyted-data/config/config.yaml",
- EnvVars: []string{"DISTRIBYTED_CONFIG"},
- Usage: "YAML file containing distribyted configuration.",
- },
- &cli.IntFlag{
- Name: portFlag,
- Value: 4444,
- EnvVars: []string{"DISTRIBYTED_HTTP_PORT"},
- Usage: "HTTP port for web interface.",
- },
- &cli.IntFlag{
- Name: webDAVPortFlag,
- Value: 36911,
- EnvVars: []string{"DISTRIBYTED_WEBDAV_PORT"},
- Usage: "Port used for WebDAV interface.",
- },
- &cli.BoolFlag{
- Name: fuseAllowOther,
- Value: false,
- EnvVars: []string{"DISTRIBYTED_FUSE_ALLOW_OTHER"},
- Usage: "Allow other users to access all fuse mountpoints. You need to add user_allow_other flag to /etc/fuse.conf file.",
+ Name: configFlag,
+ Value: "./config.yaml",
+ Usage: "YAML file containing tstor configuration.",
},
},
@@ -84,81 +65,93 @@ func main() {
}
}
-func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
- ch := config.NewHandler(configPath)
+func setupStorage(tcfg config.TorrentClient) (storage.ClientImplCloser, storage.PieceCompletion, error) {
+ pcp := filepath.Join(tcfg.MetadataFolder, "piece-completion")
+ if err := os.MkdirAll(pcp, 0744); err != nil {
+ return nil, nil, fmt.Errorf("error creating piece completion folder: %w", err)
+ }
+ pc, err := storage.NewBoltPieceCompletion(pcp)
+ if err != nil {
+ return nil, nil, fmt.Errorf("error creating servers piece completion: %w", err)
+ }
- conf, err := ch.Get()
+ // TODO implement cache dir and storage capacity
+ // cacheDir := filepath.Join(tcfg.MetadataFolder, "cache")
+ // if err := os.MkdirAll(cacheDir, 0744); err != nil {
+ // return nil, nil, fmt.Errorf("error creating piece completion folder: %w", err)
+ // }
+ // fc, err := filecache.NewCache(cacheDir)
+ // if err != nil {
+ // return nil, nil, fmt.Errorf("error creating cache: %w", err)
+ // }
+ // log.Info().Msg(fmt.Sprintf("setting cache size to %d MB", tcfg.GlobalCacheSize))
+ // fc.SetCapacity(tcfg.GlobalCacheSize * 1024 * 1024)
+
+ filesDir := filepath.Join(tcfg.MetadataFolder, "files")
+ if err := os.MkdirAll(pcp, 0744); err != nil {
+ return nil, nil, fmt.Errorf("error creating piece completion folder: %w", err)
+ }
+
+ st := storage.NewFileWithCompletion(filesDir, pc)
+
+ return st, pc, nil
+}
+
+func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
+ conf, err := config.Load(configPath)
if err != nil {
return fmt.Errorf("error loading configuration: %w", err)
}
- dlog.Load(conf.Log)
+ dlog.Load(&conf.Log)
- if err := os.MkdirAll(conf.Torrent.MetadataFolder, 0744); err != nil {
+ if err := os.MkdirAll(conf.TorrentClient.MetadataFolder, 0744); err != nil {
return fmt.Errorf("error creating metadata folder: %w", err)
}
- cf := filepath.Join(conf.Torrent.MetadataFolder, "cache")
- fc, err := filecache.NewCache(cf)
- if err != nil {
- return fmt.Errorf("error creating cache: %w", err)
- }
-
- st := storage.NewResourcePieces(fc.AsResourceProvider())
-
- // cache is not working with windows
- if runtime.GOOS == "windows" {
- st = storage.NewFile(cf)
- }
-
- fis, err := torrent.NewFileItemStore(filepath.Join(conf.Torrent.MetadataFolder, "items"), 2*time.Hour)
+ fis, err := torrent.NewFileItemStore(filepath.Join(conf.TorrentClient.MetadataFolder, "items"), 2*time.Hour)
if err != nil {
return fmt.Errorf("error starting item store: %w", err)
}
- id, err := torrent.GetOrCreatePeerID(filepath.Join(conf.Torrent.MetadataFolder, "ID"))
+ id, err := torrent.GetOrCreatePeerID(filepath.Join(conf.TorrentClient.MetadataFolder, "ID"))
if err != nil {
return fmt.Errorf("error creating node ID: %w", err)
}
- c, err := torrent.NewClient(st, fis, conf.Torrent, id)
+ st, pc, err := setupStorage(conf.TorrentClient)
+ if err != nil {
+ return err
+ }
+
+ c, err := torrent.NewClient(st, fis, &conf.TorrentClient, id)
if err != nil {
return fmt.Errorf("error starting torrent client: %w", err)
}
- pcp := filepath.Join(conf.Torrent.MetadataFolder, "piece-completion")
- if err := os.MkdirAll(pcp, 0744); err != nil {
- return fmt.Errorf("error creating piece completion folder: %w", err)
- }
-
- pc, err := storage.NewBoltPieceCompletion(pcp)
- if err != nil {
- return fmt.Errorf("error creating servers piece completion: %w", err)
- }
-
var servers []*torrent.Server
- for _, s := range conf.Servers {
- server := torrent.NewServer(c, pc, s)
+ for _, s := range conf.TorrentClient.Servers {
+ server := torrent.NewServer(c, pc, &s)
servers = append(servers, server)
if err := server.Start(); err != nil {
return fmt.Errorf("error starting server: %w", err)
}
}
- cl := loader.NewConfig(conf.Routes)
- fl := loader.NewFolder(conf.Routes)
+ cl := loader.NewConfig(conf.TorrentClient.Routes)
+ fl := loader.NewFolder(conf.TorrentClient.Routes)
ss := torrent.NewStats()
- dbl, err := loader.NewDB(filepath.Join(conf.Torrent.MetadataFolder, "magnetdb"))
+ dbl, err := loader.NewDB(filepath.Join(conf.TorrentClient.MetadataFolder, "magnetdb"))
if err != nil {
return fmt.Errorf("error starting magnet database: %w", err)
}
- ts := torrent.NewService([]loader.Loader{cl, fl}, dbl, ss, c, conf.Torrent.AddTimeout, conf.Torrent.ReadTimeout)
+ ts := torrent.NewService([]loader.Loader{cl, fl}, dbl, ss, c, conf.TorrentClient.AddTimeout, conf.TorrentClient.ReadTimeout)
var mh *fuse.Handler
- if conf.Fuse != nil {
- mh = fuse.NewHandler(fuseAllowOther || conf.Fuse.AllowOther, conf.Fuse.Path)
+ if conf.Mounts.Fuse.Enabled {
+ mh = fuse.NewHandler(conf.Mounts.Fuse.AllowOther, conf.Mounts.Fuse.Path)
}
sigChan := make(chan os.Signal)
@@ -188,9 +181,6 @@ func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
os.Exit(1)
}()
- log.Info().Msg(fmt.Sprintf("setting cache size to %d MB", conf.Torrent.GlobalCacheSize))
- fc.SetCapacity(conf.Torrent.GlobalCacheSize * 1024 * 1024)
-
fss, err := ts.Load()
if err != nil {
return fmt.Errorf("error when loading torrents: %w", err)
@@ -207,10 +197,10 @@ func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
}()
go func() {
- if conf.WebDAV != nil {
+ if conf.Mounts.WebDAV.Enabled {
port = webDAVPort
if port == 0 {
- port = conf.WebDAV.Port
+ port = conf.Mounts.WebDAV.Port
}
cfs, err := fs.NewContainerFs(fss)
@@ -219,7 +209,7 @@ func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
return
}
- if err := webdav.NewWebDAVServer(cfs, port, conf.WebDAV.User, conf.WebDAV.Pass); err != nil {
+ if err := webdav.NewWebDAVServer(cfs, port, conf.Mounts.WebDAV.User, conf.Mounts.WebDAV.Pass); err != nil {
log.Error().Err(err).Msg("error starting webDAV")
}
}
@@ -232,10 +222,10 @@ func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
return fmt.Errorf("error when loading torrents: %w", err)
}
- httpfs := torrent.NewHTTPFS(cfs)
+ httpfs := httpfs.NewHTTPFS(cfs)
logFilename := filepath.Join(conf.Log.Path, dlog.FileName)
- err = http.New(fc, ss, ts, ch, servers, httpfs, logFilename, conf.HTTPGlobal)
+ err = http.New(nil, ss, ts, conf, servers, httpfs, logFilename, conf)
log.Error().Err(err).Msg("error initializing HTTP server")
return err
}
diff --git a/config/config.go b/config/config.go
deleted file mode 100644
index 5bac411..0000000
--- a/config/config.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package config
-
-const (
- m1 = "magnet:?xt=urn:btih:c9e15763f722f23e98a29decdfae341b98d53056&dn=Cosmos+Laundromat&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fcosmos-laundromat.torrent"
- m2 = "magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c&dn=Big+Buck+Bunny&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fbig-buck-bunny.torrent"
- m3 = "magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fsintel.torrent"
- m4 = "magnet:?xt=urn:btih:209c8226b299b308beaf2b9cd3fb49212dbd13ec&dn=Tears+of+Steel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Ftears-of-steel.torrent"
- m5 = "magnet:?xt=urn:btih:a88fda5954e89178c372716a6a78b8180ed4dad3&dn=The+WIRED+CD+-+Rip.+Sample.+Mash.+Share&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fwired-cd.torrent"
-)
-
-const (
- metadataFolder = "./distribyted-data/metadata"
- mountFolder = "./distribyted-data/mount"
- logsFolder = "./distribyted-data/logs"
- serverFolder = "./distribyted-data/served-folders/server"
-)
-
-func DefaultConfig() *Root {
- return &Root{
- HTTPGlobal: &HTTPGlobal{
- Port: 4444,
- IP: "0.0.0.0",
- HTTPFS: true,
- },
- WebDAV: &WebDAVGlobal{
- Port: 36911,
- User: "admin",
- Pass: "admin",
- },
- Torrent: &TorrentGlobal{
- GlobalCacheSize: 2048,
- MetadataFolder: metadataFolder,
- AddTimeout: 60,
- ReadTimeout: 120,
- },
- Fuse: &FuseGlobal{
- AllowOther: false,
- Path: mountFolder,
- },
- Log: &Log{
- Path: logsFolder,
- MaxBackups: 2,
- MaxSize: 50,
- },
- Routes: []*Route{
- {
- Name: "multimedia",
- Torrents: []*Torrent{
- {
- MagnetURI: m1,
- },
- {
- MagnetURI: m2,
- },
- {
- MagnetURI: m3,
- },
- {
- MagnetURI: m4,
- },
- {
- MagnetURI: m5,
- },
- },
- },
- },
-
- Servers: []*Server{
- {
- Name: "server",
- Path: serverFolder,
- Trackers: []string{
- "wss://tracker.btorrent.xyz",
- "wss://tracker.openwebtorrent.com",
- "http://p4p.arenabg.com:1337/announce",
- "udp://tracker.opentrackr.org:1337/announce",
- "udp://open.tracker.cl:1337/announce",
- "http://openbittorrent.com:80/announce",
- },
- },
- },
- }
-}
diff --git a/config/config_test.go b/config/config_test.go
deleted file mode 100644
index 7e906cc..0000000
--- a/config/config_test.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package config
-
-import (
- "io/ioutil"
- "os"
- "testing"
-
- "github.com/goccy/go-yaml"
- "github.com/stretchr/testify/require"
-)
-
-func TestTemplateConfig(t *testing.T) {
- t.Parallel()
-
- require := require.New(t)
- f, err := os.Open("../templates/config_template.yaml")
- require.NoError(err)
-
- b, err := ioutil.ReadAll(f)
- require.NoError(err)
-
- conf := &Root{}
- err = yaml.Unmarshal(b, conf)
- require.NoError(err)
-
- require.Equal(DefaultConfig(), conf)
-}
-
-func TestDefaults(t *testing.T) {
- t.Parallel()
-
- require := require.New(t)
-
- r := &Root{}
- dr := AddDefaults(r)
- require.NotNil(dr)
-
- // FUSE can be deactivated
- require.Nil(dr.Fuse)
- require.NotNil(dr.HTTPGlobal)
- require.NotNil(dr.Log)
- require.NotNil(dr.Torrent)
-
- // Add defaults when fuse is set
- r = &Root{
- Fuse: &FuseGlobal{},
- }
-
- dr = AddDefaults(r)
- require.NotNil(dr.Fuse)
- require.Equal(mountFolder, dr.Fuse.Path)
-
-}
diff --git a/config/handler.go b/config/handler.go
deleted file mode 100644
index d47f46c..0000000
--- a/config/handler.go
+++ /dev/null
@@ -1,70 +0,0 @@
-package config
-
-import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
-
- "github.com/distribyted/distribyted"
- "gopkg.in/yaml.v3"
-)
-
-type EventFunc func(event string)
-type ReloadFunc func(*Root, EventFunc) error
-
-type Handler struct {
- p string
-}
-
-func NewHandler(path string) *Handler {
- return &Handler{p: path}
-}
-
-func (c *Handler) createFromTemplateFile() ([]byte, error) {
- t, err := distribyted.Templates.Open("templates/config_template.yaml")
- if err != nil {
- return nil, err
- }
- defer t.Close()
-
- tb, err := ioutil.ReadAll(t)
- if err != nil {
- return nil, err
- }
-
- if err := os.MkdirAll(filepath.Dir(c.p), 0744); err != nil {
- return nil, fmt.Errorf("error creating path for configuration file: %s, %w", c.p, err)
- }
- return tb, ioutil.WriteFile(c.p, tb, 0644)
-}
-
-func (c *Handler) GetRaw() ([]byte, error) {
- f, err := ioutil.ReadFile(c.p)
- if os.IsNotExist(err) {
- fmt.Println("configuration file does not exist, creating from template file:", c.p)
- return c.createFromTemplateFile()
- }
-
- if err != nil {
- return nil, fmt.Errorf("error reading configuration file: %w", err)
- }
-
- return f, nil
-}
-
-func (c *Handler) Get() (*Root, error) {
- b, err := c.GetRaw()
- if err != nil {
- return nil, err
- }
-
- conf := &Root{}
- if err := yaml.Unmarshal(b, conf); err != nil {
- return nil, fmt.Errorf("error parsing configuration file: %w", err)
- }
-
- conf = AddDefaults(conf)
-
- return conf, nil
-}
diff --git a/config/model.go b/config/model.go
deleted file mode 100644
index c227cd5..0000000
--- a/config/model.go
+++ /dev/null
@@ -1,106 +0,0 @@
-package config
-
-// Root is the main yaml config object
-type Root struct {
- HTTPGlobal *HTTPGlobal `yaml:"http"`
- WebDAV *WebDAVGlobal `yaml:"webdav"`
- Torrent *TorrentGlobal `yaml:"torrent"`
- Fuse *FuseGlobal `yaml:"fuse"`
- Log *Log `yaml:"log"`
-
- Routes []*Route `yaml:"routes"`
- Servers []*Server `yaml:"servers"`
-}
-
-type Log struct {
- Debug bool `yaml:"debug"`
- MaxBackups int `yaml:"max_backups"`
- MaxSize int `yaml:"max_size"`
- MaxAge int `yaml:"max_age"`
- Path string `yaml:"path"`
-}
-
-type TorrentGlobal struct {
- ReadTimeout int `yaml:"read_timeout,omitempty"`
- AddTimeout int `yaml:"add_timeout,omitempty"`
- GlobalCacheSize int64 `yaml:"global_cache_size,omitempty"`
- MetadataFolder string `yaml:"metadata_folder,omitempty"`
- DisableIPv6 bool `yaml:"disable_ipv6,omitempty"`
-}
-
-type WebDAVGlobal struct {
- Port int `yaml:"port"`
- User string `yaml:"user"`
- Pass string `yaml:"pass"`
-}
-
-type HTTPGlobal struct {
- Port int `yaml:"port"`
- IP string `yaml:"ip"`
- HTTPFS bool `yaml:"httpfs"`
-}
-
-type FuseGlobal struct {
- AllowOther bool `yaml:"allow_other,omitempty"`
- Path string `yaml:"path"`
-}
-
-type Route struct {
- Name string `yaml:"name"`
- Torrents []*Torrent `yaml:"torrents"`
- TorrentFolder string `yaml:"torrent_folder"`
-}
-
-type Server struct {
- Name string `yaml:"name"`
- Path string `yaml:"path"`
- Trackers []string `yaml:"trackers"`
- TrackerURL string `yaml:"tracker_url"`
-}
-
-type Torrent struct {
- MagnetURI string `yaml:"magnet_uri,omitempty"`
- TorrentPath string `yaml:"torrent_path,omitempty"`
-}
-
-func AddDefaults(r *Root) *Root {
- if r.Torrent == nil {
- r.Torrent = &TorrentGlobal{}
- }
-
- if r.Torrent.AddTimeout == 0 {
- r.Torrent.AddTimeout = 60
- }
-
- if r.Torrent.ReadTimeout == 0 {
- r.Torrent.ReadTimeout = 120
- }
-
- if r.Torrent.GlobalCacheSize == 0 {
- r.Torrent.GlobalCacheSize = 2048 // 2GB
- }
-
- if r.Torrent.MetadataFolder == "" {
- r.Torrent.MetadataFolder = metadataFolder
- }
-
- if r.Fuse != nil {
- if r.Fuse.Path == "" {
- r.Fuse.Path = mountFolder
- }
- }
-
- if r.HTTPGlobal == nil {
- r.HTTPGlobal = &HTTPGlobal{}
- }
-
- if r.HTTPGlobal.IP == "" {
- r.HTTPGlobal.IP = "0.0.0.0"
- }
-
- if r.Log == nil {
- r.Log = &Log{}
- }
-
- return r
-}
diff --git a/go.mod b/go.mod
index ba446e3..5254a2f 100644
--- a/go.mod
+++ b/go.mod
@@ -1,45 +1,35 @@
-module github.com/distribyted/distribyted
+module git.kmsign.ru/royalcat/tstor
-go 1.20
+go 1.21
require (
- github.com/RoaringBitmap/roaring v1.5.0 // indirect
github.com/anacrolix/dht/v2 v2.20.0
- github.com/anacrolix/log v0.14.2
+ github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4
github.com/anacrolix/missinggo/v2 v2.7.2
- github.com/anacrolix/multiless v0.3.1-0.20221221005021-2d12701f83f7 // indirect
- github.com/anacrolix/torrent v1.52.6-0.20230905090324-873da77cca69
+ github.com/anacrolix/torrent v1.52.6-0.20230929044811-45c91b322ad1
github.com/billziss-gh/cgofuse v1.5.0
github.com/bodgit/sevenzip v1.4.3
- github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/dgraph-io/badger/v3 v3.2103.5
+ github.com/dgraph-io/badger/v4 v4.2.0
github.com/fsnotify/fsnotify v1.6.0
github.com/gin-gonic/gin v1.9.1
- github.com/go-playground/validator/v10 v10.14.0 // indirect
- github.com/goccy/go-yaml v1.11.2
- github.com/golang/protobuf v1.5.2 // indirect
- github.com/google/btree v1.1.2 // indirect
- github.com/leodido/go-urn v1.2.4 // indirect
+ github.com/knadh/koanf/parsers/yaml v0.1.0
+ github.com/knadh/koanf/providers/env v0.1.0
+ github.com/knadh/koanf/providers/file v0.1.0
+ github.com/knadh/koanf/providers/structs v0.1.0
+ github.com/knadh/koanf/v2 v2.0.1
github.com/mattn/go-colorable v0.1.13
github.com/nwaples/rardecode/v2 v2.0.0-beta.2
- github.com/pion/dtls/v2 v2.2.7 // indirect
- github.com/pion/mdns v0.0.8 // indirect
- github.com/pion/rtp v1.8.1 // indirect
- github.com/pion/sctp v1.8.8 // indirect
github.com/rs/zerolog v1.31.0
- github.com/russross/blackfriday/v2 v2.1.0 // indirect
- github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749
+ github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c
github.com/stretchr/testify v1.8.4
github.com/urfave/cli/v2 v2.25.7
- golang.org/x/crypto v0.13.0 // indirect
- golang.org/x/net v0.15.0
- golang.org/x/sys v0.12.0 // indirect
- golang.org/x/time v0.3.0 // indirect
+ golang.org/x/net v0.16.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
- gopkg.in/yaml.v3 v3.0.1
)
require (
+ github.com/RoaringBitmap/roaring v1.2.3 // indirect
github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0 // indirect
github.com/alecthomas/atomic v0.1.0-alpha2 // indirect
github.com/anacrolix/chansync v0.3.0 // indirect
@@ -49,92 +39,110 @@ require (
github.com/anacrolix/missinggo v1.3.0 // indirect
github.com/anacrolix/missinggo/perf v1.0.0 // indirect
github.com/anacrolix/mmsg v1.0.0 // indirect
- github.com/anacrolix/stm v0.5.0 // indirect
- github.com/anacrolix/sync v0.4.0 // indirect
+ github.com/anacrolix/multiless v0.3.1-0.20221221005021-2d12701f83f7 // indirect
+ github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496 // indirect
+ github.com/anacrolix/sync v0.4.1-0.20230926072150-b8cd7cfb92d0 // indirect
github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 // indirect
- github.com/anacrolix/utp v0.2.0 // indirect
+ github.com/anacrolix/utp v0.1.0 // indirect
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/bahlo/generic-list-go v0.2.0 // indirect
- github.com/benbjohnson/immutable v0.4.3 // indirect
- github.com/bits-and-blooms/bitset v1.8.0 // indirect
+ github.com/benbjohnson/immutable v0.4.1-0.20221220213129-8932b999621d // indirect
+ github.com/bits-and-blooms/bitset v1.2.2 // indirect
github.com/bodgit/plumbing v1.3.0 // indirect
github.com/bodgit/windows v1.0.1 // indirect
github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 // indirect
github.com/bytedance/sonic v1.9.1 // indirect
github.com/cespare/xxhash v1.1.0 // indirect
- github.com/cespare/xxhash/v2 v2.1.2 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
+ github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgraph-io/ristretto v0.1.1 // indirect
- github.com/dustin/go-humanize v1.0.1 // indirect
+ github.com/dustin/go-humanize v1.0.0 // indirect
github.com/edsrzf/mmap-go v1.1.0 // indirect
- github.com/fatih/color v1.13.0 // indirect
+ github.com/fatih/structs v1.1.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
- github.com/go-llsqlite/adapter v0.0.0-20230905083127-a7568332b3ac // indirect
- github.com/go-llsqlite/crawshaw v0.0.0-20230904103556-219a9360a2c0 // indirect
- github.com/go-logr/logr v1.2.4 // indirect
+ github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 // indirect
+ github.com/go-llsqlite/crawshaw v0.4.0 // indirect
+ github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
+ github.com/go-playground/validator/v10 v10.14.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/glog v1.0.0 // indirect
- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/snappy v0.0.4 // indirect
- github.com/google/flatbuffers v2.0.0+incompatible // indirect
- github.com/google/uuid v1.3.1 // indirect
+ github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
+ github.com/golang/protobuf v1.5.2 // indirect
+ github.com/golang/snappy v0.0.3 // indirect
+ github.com/google/btree v1.1.2 // indirect
+ github.com/google/flatbuffers v1.12.1 // indirect
+ github.com/google/uuid v1.3.0 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
- github.com/hashicorp/errwrap v1.1.0 // indirect
+ github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
- github.com/huandu/xstrings v1.4.0 // indirect
+ github.com/huandu/xstrings v1.3.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.16.6 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
+ github.com/knadh/koanf/maps v0.1.1 // indirect
+ github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
+ github.com/mitchellh/copystructure v1.2.0 // indirect
+ github.com/mitchellh/mapstructure v1.5.0 // indirect
+ github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mschoch/smat v0.2.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/pierrec/lz4/v4 v4.1.18 // indirect
- github.com/pion/datachannel v1.5.5 // indirect
- github.com/pion/ice/v3 v3.0.0 // indirect
- github.com/pion/interceptor v0.1.18 // indirect
+ github.com/pion/datachannel v1.5.2 // indirect
+ github.com/pion/dtls/v2 v2.2.4 // indirect
+ github.com/pion/ice/v2 v2.2.6 // indirect
+ github.com/pion/interceptor v0.1.11 // indirect
github.com/pion/logging v0.2.2 // indirect
+ github.com/pion/mdns v0.0.5 // indirect
github.com/pion/randutil v0.1.0 // indirect
- github.com/pion/rtcp v1.2.10 // indirect
- github.com/pion/sdp/v3 v3.0.6 // indirect
- github.com/pion/srtp/v3 v3.0.0 // indirect
- github.com/pion/stun v0.6.1 // indirect
- github.com/pion/transport/v2 v2.2.3 // indirect
- github.com/pion/transport/v3 v3.0.1 // indirect
- github.com/pion/turn/v3 v3.0.0 // indirect
- github.com/pion/webrtc/v3 v3.2.18 // indirect
+ github.com/pion/rtcp v1.2.9 // indirect
+ github.com/pion/rtp v1.7.13 // indirect
+ github.com/pion/sctp v1.8.2 // indirect
+ github.com/pion/sdp/v3 v3.0.5 // indirect
+ github.com/pion/srtp/v2 v2.0.9 // indirect
+ github.com/pion/stun v0.3.5 // indirect
+ github.com/pion/transport v0.13.1 // indirect
+ github.com/pion/transport/v2 v2.0.0 // indirect
+ github.com/pion/turn/v2 v2.0.8 // indirect
+ github.com/pion/udp v0.1.4 // indirect
+ github.com/pion/webrtc/v3 v3.1.42 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
- github.com/rs/dnscache v0.0.0-20230804202142-fc85eb664529 // indirect
+ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
+ github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect
+ github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect
github.com/tidwall/btree v1.6.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
github.com/ulikunitz/xz v0.5.11 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
- go.etcd.io/bbolt v1.3.7 // indirect
- go.opencensus.io v0.23.0 // indirect
- go.opentelemetry.io/otel v1.17.0 // indirect
- go.opentelemetry.io/otel/metric v1.17.0 // indirect
- go.opentelemetry.io/otel/trace v1.17.0 // indirect
- go4.org v0.0.0-20201209231011-d4a079459e60 // indirect
+ go.etcd.io/bbolt v1.3.6 // indirect
+ go.opencensus.io v0.22.5 // indirect
+ go.opentelemetry.io/otel v1.8.0 // indirect
+ go.opentelemetry.io/otel/trace v1.8.0 // indirect
+ go4.org v0.0.0-20200411211856-f5505b9728dd // indirect
golang.org/x/arch v0.3.0 // indirect
- golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
+ golang.org/x/crypto v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect
golang.org/x/sync v0.3.0 // indirect
+ golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
- golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect
+ golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect
google.golang.org/protobuf v1.30.0 // indirect
- modernc.org/libc v1.21.5 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+ modernc.org/libc v1.22.3 // indirect
modernc.org/mathutil v1.5.0 // indirect
- modernc.org/memory v1.4.0 // indirect
- modernc.org/sqlite v1.20.0 // indirect
- zombiezen.com/go/sqlite v0.12.0 // indirect
+ modernc.org/memory v1.5.0 // indirect
+ modernc.org/sqlite v1.21.1 // indirect
+ zombiezen.com/go/sqlite v0.13.1 // indirect
)
diff --git a/go.sum b/go.sum
index bab8f6c..9bf761f 100644
--- a/go.sum
+++ b/go.sum
@@ -14,11 +14,11 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
-crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797 h1:yDf7ARQc637HoxDho7xjqdvO5ZA2Yb+xzv/fOnnvZzw=
crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797/go.mod h1:sXBiorCo8c46JlQV3oXPKINnZ8mcqnye1EkVkqsectk=
crawshaw.io/sqlite v0.3.2/go.mod h1:igAO5JulrQ1DbdZdtVq48mnZUBAPOeFzer7VhDWNtW4=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU=
+filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
@@ -26,16 +26,18 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/RoaringBitmap/roaring v0.4.17/go.mod h1:D3qVegWTmfCaX4Bl5CrBE9hfrSrrXIr8KVNvRsDi1NI=
github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo=
-github.com/RoaringBitmap/roaring v1.5.0 h1:V0VCSiHjroItEYCM3guC8T83ehi5QMt3oM9EefTTOms=
-github.com/RoaringBitmap/roaring v1.5.0/go.mod h1:plvDsJQpxOC5bw8LRteu/MLWHsHez/3y6cubLI4/1yE=
+github.com/RoaringBitmap/roaring v1.2.3 h1:yqreLINqIrX22ErkKI0vY47/ivtJr6n+kMhVOVmhWBY=
+github.com/RoaringBitmap/roaring v1.2.3/go.mod h1:plvDsJQpxOC5bw8LRteu/MLWHsHez/3y6cubLI4/1yE=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0 h1:byYvvbfSo3+9efR4IeReh77gVs4PnNDR3AMOE9NJ7a0=
github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0/go.mod h1:q37NoqncT41qKc048STsifIt69LfUJ8SrWWcz/yam5k=
github.com/alecthomas/assert/v2 v2.0.0-alpha3 h1:pcHeMvQ3OMstAWgaeaXIAL8uzB9xMm2zlxt+/4ml8lk=
+github.com/alecthomas/assert/v2 v2.0.0-alpha3/go.mod h1:+zD0lmDXTeQj7TgDgCt0ePWxb0hMC1G+PGTsTCv1B9o=
github.com/alecthomas/atomic v0.1.0-alpha2 h1:dqwXmax66gXvHhsOS4pGPZKqYOlTkapELkLb3MNdlH8=
github.com/alecthomas/atomic v0.1.0-alpha2/go.mod h1:zD6QGEyw49HIq19caJDc2NMXAy8rNi9ROrxtMXATfyI=
github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142 h1:8Uy0oSf5co/NZXje7U1z8Mpep++QJOldL2hs/sBQf48=
+github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -57,8 +59,8 @@ github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgw
github.com/anacrolix/log v0.6.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU=
github.com/anacrolix/log v0.10.1-0.20220123034749-3920702c17f8/go.mod h1:GmnE2c0nvz8pOIPUSC9Rawgefy1sDXqposC2wgtBZE4=
github.com/anacrolix/log v0.13.1/go.mod h1:D4+CvN8SnruK6zIFS/xPoRJmtvtnxs+CSfDQ+BFxZ68=
-github.com/anacrolix/log v0.14.2 h1:i9v/Lw/CceCKthcLW+UiajkSW8M/razXCwVYlZtAKsk=
-github.com/anacrolix/log v0.14.2/go.mod h1:1OmJESOtxQGNMlUO5rcv96Vpp9mfMqXXbe2RdinFLdY=
+github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4 h1:01OE3pdiBGIZGyQb6cIAu+QfaNhBR9k5MVmLsl+DVbE=
+github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4/go.mod h1:1OmJESOtxQGNMlUO5rcv96Vpp9mfMqXXbe2RdinFLdY=
github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62 h1:P04VG6Td13FHMgS5ZBcJX23NPC/fiC4cp9bXwYujdYM=
github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62/go.mod h1:66cFKPCO7Sl4vbFnAaSq7e4OXtdMhRSBagJGWgmpJbM=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
@@ -80,21 +82,21 @@ github.com/anacrolix/mmsg v1.0.0/go.mod h1:x8kRaJY/dCrY9Al0PEcj1mb/uFHwP6GCJ9fLl
github.com/anacrolix/multiless v0.3.1-0.20221221005021-2d12701f83f7 h1:lOtCD+LzoD1g7bowhYJNR++uV+FyY5bTZXKwnPex9S8=
github.com/anacrolix/multiless v0.3.1-0.20221221005021-2d12701f83f7/go.mod h1:zJv1JF9AqdZiHwxqPgjuOZDGWER6nyE48WBCi/OOrMM=
github.com/anacrolix/stm v0.2.0/go.mod h1:zoVQRvSiGjGoTmbM0vSLIiaKjWtNPeTvXUSdJQA4hsg=
-github.com/anacrolix/stm v0.5.0 h1:9df1KBpttF0TzLgDq51Z+TEabZKMythqgx89f1FQJt8=
-github.com/anacrolix/stm v0.5.0/go.mod h1:MOwrSy+jCm8Y7HYfMAwPj7qWVu7XoVvjOiYwJmpeB/M=
+github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496 h1:aMiRi2kOOd+nG64suAmFMVnNK2E6GsnLif7ia9tI3cA=
+github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496/go.mod h1:DBm8/1OXm4A4RZ6Xa9u/eOsjeAXCaoRYvd2JzlskXeM=
github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778/go.mod h1:s735Etp3joe/voe2sdaXLcqDdJSay1O0OPnM0ystjqk=
github.com/anacrolix/sync v0.3.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g=
-github.com/anacrolix/sync v0.4.0 h1:T+MdO/u87ir/ijWsTFsPYw5jVm0SMm4kVpg8t4KF38o=
-github.com/anacrolix/sync v0.4.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g=
+github.com/anacrolix/sync v0.4.1-0.20230926072150-b8cd7cfb92d0 h1:M2HtYrYz6CVwo88TfVrGNlc+mSe59KXCBe3gFuEsEto=
+github.com/anacrolix/sync v0.4.1-0.20230926072150-b8cd7cfb92d0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v1.0.0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v1.1.0/go.mod h1:Scxs9CV10NQatSmbyjqmqmeQNwGzlNe0CMUMIxqHIG8=
-github.com/anacrolix/torrent v1.52.6-0.20230905090324-873da77cca69 h1:cE8GzF+t9wsYcSTaxcGAC5hY3zmip0eRICa/ZEHbSUE=
-github.com/anacrolix/torrent v1.52.6-0.20230905090324-873da77cca69/go.mod h1:JkfVCMluhwf+7HkjzoqO/vX8b7bnAmzKb2+jH0GD4Ec=
+github.com/anacrolix/torrent v1.52.6-0.20230929044811-45c91b322ad1 h1:KzIKTajeqBXWeLjHv2KHjlwigyR19TkdvU5uLGPGQAI=
+github.com/anacrolix/torrent v1.52.6-0.20230929044811-45c91b322ad1/go.mod h1:q4utKicrzW80odcXiy3J8sObJELsGGFI1FxhFt/2qA0=
github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 h1:QAVZ3pN/J4/UziniAhJR2OZ9Ox5kOY2053tBbbqUPYA=
github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96/go.mod h1:Wa6n8cYIdaG35x15aH3Zy6d03f7P728QfdcDeD/IEOs=
-github.com/anacrolix/utp v0.2.0 h1:65Cdmr6q9WSw2KsM+rtJFu7rqDzLl2bdysf4KlNPcFI=
-github.com/anacrolix/utp v0.2.0/go.mod h1:HGk4GYQw1O/3T1+yhqT/F6EcBd+AAwlo9dYErNy7mj8=
+github.com/anacrolix/utp v0.1.0 h1:FOpQOmIwYsnENnz7tAGohA+r6iXpRjrq8ssKSre2Cp4=
+github.com/anacrolix/utp v0.1.0/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk=
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
@@ -102,16 +104,16 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
github.com/benbjohnson/immutable v0.2.0/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI=
-github.com/benbjohnson/immutable v0.4.3 h1:GYHcksoJ9K6HyAUpGxwZURrbTkXA0Dh4otXGqbhdrjA=
-github.com/benbjohnson/immutable v0.4.3/go.mod h1:qJIKKSmdqz1tVzNtst1DZzvaqOU1onk1rc03IeM3Owk=
+github.com/benbjohnson/immutable v0.4.1-0.20221220213129-8932b999621d h1:2qVb9bsAMtmAfnxXltm+6eBzrrS7SZ52c3SedsulaMI=
+github.com/benbjohnson/immutable v0.4.1-0.20221220213129-8932b999621d/go.mod h1:iAr8OjJGLnLmVUr9MZ/rz4PWUy6Ouc2JLYuMArmvAJM=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/billziss-gh/cgofuse v1.5.0 h1:kH516I/s+Ab4diL/Y/ayFeUjjA8ey+JK12xDfBf4HEs=
github.com/billziss-gh/cgofuse v1.5.0/go.mod h1:LJjoaUojlVjgo5GQoEJTcJNqZJeRU0nCR84CyxKt2YM=
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
-github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c=
-github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
+github.com/bits-and-blooms/bitset v1.2.2 h1:J5gbX05GpMdBjCvQ9MteIg2KKDExr7DrgK+Yc15FvIk=
+github.com/bits-and-blooms/bitset v1.2.2/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
github.com/bodgit/plumbing v1.3.0 h1:pf9Itz1JOQgn7vEOE7v7nlEfBykYqvUYioC61TwWCFU=
github.com/bodgit/plumbing v1.3.0/go.mod h1:JOTb4XiRu5xfnmdnDJo6GmSbSbtSyufrsyZFByMtKEs=
github.com/bodgit/sevenzip v1.4.3 h1:46Rb9vCYdpceC1U+GIR0bS3hP2/Xv8coKFDeLJySV/A=
@@ -129,19 +131,15 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
@@ -155,28 +153,28 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgraph-io/badger/v3 v3.2103.5 h1:ylPa6qzbjYRQMU6jokoj4wzcaweHylt//CH0AKt0akg=
github.com/dgraph-io/badger/v3 v3.2103.5/go.mod h1:4MPiseMeDQ3FNCYwRbbcBOGJLf5jsE0PPFzRiKjtcdw=
+github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs=
+github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak=
github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
-github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ=
github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
-github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
+github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
+github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/frankban/quicktest v1.9.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
-github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
@@ -197,18 +195,19 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-llsqlite/adapter v0.0.0-20230905083127-a7568332b3ac h1:JYM7DEMD5W+pVLmyFGY0h/TCQmiZ41hDC7DhPyJQFg8=
-github.com/go-llsqlite/adapter v0.0.0-20230905083127-a7568332b3ac/go.mod h1:kyfY1RB62UhX0Cyh902kGhiHVz9+I+i0G6tLAH4DHuw=
-github.com/go-llsqlite/crawshaw v0.0.0-20230904103556-219a9360a2c0 h1:gBgO8x7vT06pP8D3v/IQ38mBnITO8lUDQyTq9nilUaI=
-github.com/go-llsqlite/crawshaw v0.0.0-20230904103556-219a9360a2c0/go.mod h1:Hw0HOqxPMRCkOI87dESIgpdJrRR43OwYN0tbEFyG4OQ=
+github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 h1:OyQmpAN302wAopDgwVjgs2HkFawP9ahIEqkUYz7V7CA=
+github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916/go.mod h1:DADrR88ONKPPeSGjFp5iEN55Arx3fi2qXZeKCYDpbmU=
+github.com/go-llsqlite/crawshaw v0.4.0 h1:L02s2jZBBJj80xm1VkkdyB/JlQ/Fi0kLbNHfXA8yrec=
+github.com/go-llsqlite/crawshaw v0.4.0/go.mod h1:/YJdV7uBQaYDE0fwe4z3wwJIZBJxdYzd38ICggWqtaE=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
-github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
+github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
+github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
@@ -219,8 +218,6 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-github.com/goccy/go-yaml v1.11.2 h1:joq77SxuyIs9zzxEjgyLBugMQ9NEgTWxXfz2wVqwAaQ=
-github.com/goccy/go-yaml v1.11.2/go.mod h1:wKnAMd44+9JAAnGQpWVEgBzGt3YuTaQ4uXoHvE4m7WU=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
@@ -231,9 +228,8 @@ github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
@@ -247,31 +243,25 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
-github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
+github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw=
github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
-github.com/google/flatbuffers v2.0.0+incompatible h1:dicJ2oXwypfwUGnB2/TYWYEKiuk9eYQlQO/AnOHl5mI=
-github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
@@ -281,12 +271,9 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
-github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -297,25 +284,23 @@ github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
-github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
+github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw=
github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
-github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
-github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -326,7 +311,6 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
@@ -335,12 +319,25 @@ github.com/klauspost/compress v1.16.6/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQs
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
+github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs=
+github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
+github.com/knadh/koanf/parsers/yaml v0.1.0 h1:ZZ8/iGfRLvKSaMEECEBPM1HQslrZADk8fP1XFUxVI5w=
+github.com/knadh/koanf/parsers/yaml v0.1.0/go.mod h1:cvbUDC7AL23pImuQP0oRw/hPuccrNBS2bps8asS0CwY=
+github.com/knadh/koanf/providers/env v0.1.0 h1:LqKteXqfOWyx5Ab9VfGHmjY9BvRXi+clwyZozgVRiKg=
+github.com/knadh/koanf/providers/env v0.1.0/go.mod h1:RE8K9GbACJkeEnkl8L/Qcj8p4ZyPXZIQ191HJi44ZaQ=
+github.com/knadh/koanf/providers/file v0.1.0 h1:fs6U7nrV58d3CFAFh8VTde8TM262ObYf3ODrc//Lp+c=
+github.com/knadh/koanf/providers/file v0.1.0/go.mod h1:rjJ/nHQl64iYCtAW2QQnF0eSmDEX/YZ/eNFj5yR6BvA=
+github.com/knadh/koanf/providers/structs v0.1.0 h1:wJRteCNn1qvLtE5h8KQBvLJovidSdntfdyIbbCzEyE0=
+github.com/knadh/koanf/providers/structs v0.1.0/go.mod h1:sw2YZ3txUcqA3Z27gPlmmBzWn1h8Nt9O6EP/91MkcWE=
+github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g=
+github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -348,18 +345,20 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
+github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -392,46 +391,49 @@ github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ=
github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
-github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8=
-github.com/pion/datachannel v1.5.5/go.mod h1:iMz+lECmfdCMqFRhXhcA/219B0SQlbpoR2V118yimL0=
-github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8=
-github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s=
-github.com/pion/ice/v3 v3.0.0 h1:7bnFWQNIJqabCp111sMIbo4dOjRMLzpf4qhWEadf9IY=
-github.com/pion/ice/v3 v3.0.0/go.mod h1:PTKU5KYRIlBTvrj1fh1PiY3z4YsMiC/AECGJqMwFSxI=
-github.com/pion/interceptor v0.1.18 h1:Hk26334NUQeUcJNR27YHYKT+sWNhhegQ9KFz5Nn6yMQ=
-github.com/pion/interceptor v0.1.18/go.mod h1:tpvvF4cPM6NGxFA1DUMbhabzQBxdWMATDGEUYOR9x6I=
+github.com/pion/datachannel v1.5.2 h1:piB93s8LGmbECrpO84DnkIVWasRMk3IimbcXkTQLE6E=
+github.com/pion/datachannel v1.5.2/go.mod h1:FTGQWaHrdCwIJ1rw6xBIfZVkslikjShim5yr05XFuCQ=
+github.com/pion/dtls/v2 v2.1.3/go.mod h1:o6+WvyLDAlXF7YiPB/RlskRoeK+/JtuaZa5emwQcWus=
+github.com/pion/dtls/v2 v2.1.5/go.mod h1:BqCE7xPZbPSubGasRoDFJeTsyJtdD1FanJYL0JGheqY=
+github.com/pion/dtls/v2 v2.2.4 h1:YSfYwDQgrxMYXLBc/m7PFY5BVtWlNm/DN4qoU2CbcWg=
+github.com/pion/dtls/v2 v2.2.4/go.mod h1:WGKfxqhrddne4Kg3p11FUMJrynkOY4lb25zHNO49wuw=
+github.com/pion/ice/v2 v2.2.6 h1:R/vaLlI1J2gCx141L5PEwtuGAGcyS6e7E0hDeJFq5Ig=
+github.com/pion/ice/v2 v2.2.6/go.mod h1:SWuHiOGP17lGromHTFadUe1EuPgFh/oCU6FCMZHooVE=
+github.com/pion/interceptor v0.1.11 h1:00U6OlqxA3FFB50HSg25J/8cWi7P6FbSzw4eFn24Bvs=
+github.com/pion/interceptor v0.1.11/go.mod h1:tbtKjZY14awXd7Bq0mmWvgtHB5MDaRN7HV3OZ/uy7s8=
github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY=
github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
-github.com/pion/mdns v0.0.8 h1:HhicWIg7OX5PVilyBO6plhMetInbzkVJAhbdJiAeVaI=
-github.com/pion/mdns v0.0.8/go.mod h1:hYE72WX8WDveIhg7fmXgMKivD3Puklk0Ymzog0lSyaI=
+github.com/pion/mdns v0.0.5 h1:Q2oj/JB3NqfzY9xGZ1fPzZzK7sDSD8rZPOvcIQ10BCw=
+github.com/pion/mdns v0.0.5/go.mod h1:UgssrvdD3mxpi8tMxAXbsppL3vJ4Jipw1mTCW+al01g=
github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
-github.com/pion/rtcp v1.2.10 h1:nkr3uj+8Sp97zyItdN60tE/S6vk4al5CPRR6Gejsdjc=
-github.com/pion/rtcp v1.2.10/go.mod h1:ztfEwXZNLGyF1oQDttz/ZKIBaeeg/oWbRYqzBM9TL1I=
-github.com/pion/rtp v1.8.1 h1:26OxTc6lKg/qLSGir5agLyj0QKaOv8OP5wps2SFnVNQ=
-github.com/pion/rtp v1.8.1/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU=
-github.com/pion/sctp v1.8.5/go.mod h1:SUFFfDpViyKejTAdwD1d/HQsCu+V/40cCs2nZIvC3s0=
-github.com/pion/sctp v1.8.8 h1:5EdnnKI4gpyR1a1TwbiS/wxEgcUWBHsc7ILAjARJB+U=
-github.com/pion/sctp v1.8.8/go.mod h1:igF9nZBrjh5AtmKc7U30jXltsFHicFCXSmWA2GWRaWs=
-github.com/pion/sdp/v3 v3.0.6 h1:WuDLhtuFUUVpTfus9ILC4HRyHsW6TdugjEX/QY9OiUw=
-github.com/pion/sdp/v3 v3.0.6/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw=
-github.com/pion/srtp/v3 v3.0.0 h1:dH5nZUTxN+JDu4otle8Dfh5E/MHR6m8/aib7eD22QDc=
-github.com/pion/srtp/v3 v3.0.0/go.mod h1:WxJGk0scShe0UdUidDgR0kDHywX7JN83JOYPkYiLdpM=
-github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4=
-github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8=
-github.com/pion/transport v0.14.1 h1:XSM6olwW+o8J4SCmOBb/BpwZypkHeyM0PGFCxNQBr40=
-github.com/pion/transport v0.14.1/go.mod h1:4tGmbk00NeYA3rUa9+n+dzCCoKkcy3YlYb99Jn2fNnI=
-github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g=
-github.com/pion/transport/v2 v2.2.2/go.mod h1:OJg3ojoBJopjEeECq2yJdXH9YVrUJ1uQ++NjXLOUorc=
-github.com/pion/transport/v2 v2.2.3 h1:XcOE3/x41HOSKbl1BfyY1TF1dERx7lVvlMCbXU7kfvA=
-github.com/pion/transport/v2 v2.2.3/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0=
-github.com/pion/transport/v3 v3.0.0/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0=
-github.com/pion/transport/v3 v3.0.1 h1:gDTlPJwROfSfz6QfSi0ZmeCSkFcnWWiiR9ES0ouANiM=
-github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0=
-github.com/pion/turn/v3 v3.0.0 h1:zafXa25ZWmiUYRi4JlnAsUhCDoFfF7YMYWnosvK5vBk=
-github.com/pion/turn/v3 v3.0.0/go.mod h1:z4ih3T0zTERgNSEJRa2QHBNcbB3SOtTYsr5LH0pil6Q=
-github.com/pion/webrtc/v3 v3.2.18 h1:uJJmFy8hU5dWQhdXRhBYdxuiyBfEYSuQ2fDCK2NJO9Y=
-github.com/pion/webrtc/v3 v3.2.18/go.mod h1:SnzidjAnRkFxX2u/DcVR7UZjvkKK65VCuyCtPYDDzkE=
+github.com/pion/rtcp v1.2.9 h1:1ujStwg++IOLIEoOiIQ2s+qBuJ1VN81KW+9pMPsif+U=
+github.com/pion/rtcp v1.2.9/go.mod h1:qVPhiCzAm4D/rxb6XzKeyZiQK69yJpbUDJSF7TgrqNo=
+github.com/pion/rtp v1.7.13 h1:qcHwlmtiI50t1XivvoawdCGTP4Uiypzfrsap+bijcoA=
+github.com/pion/rtp v1.7.13/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko=
+github.com/pion/sctp v1.8.0/go.mod h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s=
+github.com/pion/sctp v1.8.2 h1:yBBCIrUMJ4yFICL3RIvR4eh/H2BTTvlligmSTy+3kiA=
+github.com/pion/sctp v1.8.2/go.mod h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s=
+github.com/pion/sdp/v3 v3.0.5 h1:ouvI7IgGl+V4CrqskVtr3AaTrPvPisEOxwgpdktctkU=
+github.com/pion/sdp/v3 v3.0.5/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw=
+github.com/pion/srtp/v2 v2.0.9 h1:JJq3jClmDFBPX/F5roEb0U19jSU7eUhyDqR/NZ34EKQ=
+github.com/pion/srtp/v2 v2.0.9/go.mod h1:5TtM9yw6lsH0ppNCehB/EjEUli7VkUgKSPJqWVqbhQ4=
+github.com/pion/stun v0.3.5 h1:uLUCBCkQby4S1cf6CGuR9QrVOKcvUwFeemaC865QHDg=
+github.com/pion/stun v0.3.5/go.mod h1:gDMim+47EeEtfWogA37n6qXZS88L5V6LqFcf+DZA2UA=
+github.com/pion/transport v0.12.2/go.mod h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q=
+github.com/pion/transport v0.12.3/go.mod h1:OViWW9SP2peE/HbwBvARicmAVnesphkNkCVZIWJ6q9A=
+github.com/pion/transport v0.13.0/go.mod h1:yxm9uXpK9bpBBWkITk13cLo1y5/ur5VQpG22ny6EP7g=
+github.com/pion/transport v0.13.1 h1:/UH5yLeQtwm2VZIPjxwnNFxjS4DFhyLfS4GlfuKUzfA=
+github.com/pion/transport v0.13.1/go.mod h1:EBxbqzyv+ZrmDb82XswEE0BjfQFtuw1Nu6sjnjWCsGg=
+github.com/pion/transport/v2 v2.0.0 h1:bsMYyqHCbkvHwj+eNCFBuxtlKndKfyGI2vaQmM3fIE4=
+github.com/pion/transport/v2 v2.0.0/go.mod h1:HS2MEBJTwD+1ZI2eSXSvHJx/HnzQqRy2/LXxt6eVMHc=
+github.com/pion/turn/v2 v2.0.8 h1:KEstL92OUN3k5k8qxsXHpr7WWfrdp7iJZHx99ud8muw=
+github.com/pion/turn/v2 v2.0.8/go.mod h1:+y7xl719J8bAEVpSXBXvTxStjJv3hbz9YFflvkpcGPw=
+github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M=
+github.com/pion/udp v0.1.4 h1:OowsTmu1Od3sD6i3fQUJxJn2fEvJO6L1TidgadtbTI8=
+github.com/pion/udp v0.1.4/go.mod h1:G8LDo56HsFwC24LIcnT4YIDU5qcB6NepqqjP0keL2us=
+github.com/pion/webrtc/v3 v3.1.42 h1:wJEQFIXVanptnQcHOLTuIo4AtGB2+mG2x4OhIhnITOA=
+github.com/pion/webrtc/v3 v3.1.42/go.mod h1:ffD9DulDrPxyWvDPUIPAOSAWx9GUlOExiJPf7cCcMLA=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -457,14 +459,16 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
-github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
+github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
+github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
-github.com/rs/dnscache v0.0.0-20230804202142-fc85eb664529 h1:18kd+8ZUlt/ARXhljq+14TwAoKa61q6dX8jtwOf6DH8=
-github.com/rs/dnscache v0.0.0-20230804202142-fc85eb664529/go.mod h1:qe5TWALJ8/a1Lqznoc5BDHpYX/8HU60Hm2AwRmqzxqA=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
+github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 h1:Lt9DzQALzHoDwMBGJ6v8ObDPR0dzr2a6sXTB1Fq7IHs=
+github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417/go.mod h1:qe5TWALJ8/a1Lqznoc5BDHpYX/8HU60Hm2AwRmqzxqA=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
@@ -475,8 +479,8 @@ github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw=
-github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk=
-github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
+github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c h1:aqg5Vm5dwtvL+YgDpBcK1ITf3o96N/K7/wsRXQnUTEs=
+github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c/go.mod h1:owqhoLW1qZoYLZzLnBw+QkPP9WZnjlSWihhxAJC1+/M=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
@@ -532,25 +536,22 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsr
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
-go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
+go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
+go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
-go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
-go.opentelemetry.io/otel v1.17.0 h1:MW+phZ6WZ5/uk2nd93ANk/6yJ+dVrvNWUjGhnnFU5jM=
-go.opentelemetry.io/otel v1.17.0/go.mod h1:I2vmBGtFaODIVMBSTPVDlJSzBDNf93k60E6Ft0nyjo0=
-go.opentelemetry.io/otel/metric v1.17.0 h1:iG6LGVz5Gh+IuO0jmgvpTB6YVrCGngi8QGm+pMd8Pdc=
-go.opentelemetry.io/otel/metric v1.17.0/go.mod h1:h4skoxdZI17AxwITdmdZjjYJQH5nzijUUjm+wtPph5o=
-go.opentelemetry.io/otel/trace v1.17.0 h1:/SWhSRHmDPOImIAetP1QAeMnZYiQXrTy4fMMYOdSKWQ=
-go.opentelemetry.io/otel/trace v1.17.0/go.mod h1:I/4vKTgFclIsXRVucpH25X0mpFSczM7aHeaz0ZBLWjY=
-go4.org v0.0.0-20201209231011-d4a079459e60 h1:iqAGo78tVOJXELHQFRjR6TMwItrvXH4hrGJ32I/NFF8=
-go4.org v0.0.0-20201209231011-d4a079459e60/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg=
+go.opentelemetry.io/otel v1.8.0 h1:zcvBFizPbpa1q7FehvFiHbQwGzmPILebO0tyqIR5Djg=
+go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM=
+go.opentelemetry.io/otel/trace v1.8.0 h1:cSy0DF9eGI5WIfNwZ1q2iUyGj00tGzP24dE1lOlHrfY=
+go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4=
+go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU=
+go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
@@ -562,12 +563,12 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
-golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
-golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
-golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
-golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
-golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
+golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -576,8 +577,8 @@ golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
-golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
+golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME=
+golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -597,7 +598,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -619,20 +619,22 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201201195509-5d6afe98e0b7/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220401154927-543a649e0bdd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
-golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
-golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
-golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
-golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/net v0.16.0 h1:7eBu7KsSvFDtSXUIDbh3aqlK4DPsZ1rByC8PFfBThos=
+golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -646,7 +648,6 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -670,20 +671,20 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220608164250-635b8c9b7f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -691,24 +692,17 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
-golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
-golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -717,17 +711,14 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
-golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U=
+golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -754,18 +745,15 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 h1:Vve/L0v7CXXuxUmaMGIEK/dEeq7uiqb5qBgQrZzIE7E=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0=
-golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
@@ -793,26 +781,20 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
@@ -842,40 +824,17 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
-lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
-modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20=
-modernc.org/cc/v3 v3.38.1/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20=
-modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
-modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI=
-modernc.org/ccgo/v3 v3.0.0-20220910160915-348f15de615a/go.mod h1:8p47QxPkdugex9J4n9P2tLZ9bK01yngIVp00g4nomW0=
-modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g=
-modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY=
-modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
-modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
-modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA=
-modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0=
-modernc.org/libc v1.19.0/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0=
-modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0=
-modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI=
-modernc.org/libc v1.21.5 h1:xBkU9fnHV+hvZuPSRszN0AXDG4M7nwPLwTWwkYcvLCI=
-modernc.org/libc v1.21.5/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI=
+modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY=
+modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw=
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
-modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
-modernc.org/memory v1.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk=
-modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
-modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
-modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
-modernc.org/sqlite v1.20.0 h1:80zmD3BGkm8BZ5fUi/4lwJQHiO3GXgIUvZRXpoIfROY=
-modernc.org/sqlite v1.20.0/go.mod h1:EsYz8rfOvLCiYTy5ZFsOYzoCcRMu98YYkwAcCw5YIYw=
-modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
-modernc.org/tcl v1.15.0/go.mod h1:xRoGotBZ6dU+Zo2tca+2EqVEeMmOUBzHnhIwq4YrVnE=
-modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
-modernc.org/z v1.7.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ=
+modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds=
+modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
+modernc.org/sqlite v1.21.1 h1:GyDFqNnESLOhwwDRaHGdp2jKLDzpyT/rNLglX3ZkMSU=
+modernc.org/sqlite v1.21.1/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-zombiezen.com/go/sqlite v0.12.0 h1:0IDiV/XR6fWS2iFcOuVpGg3O2rJV0uVYEW30ANTKjeE=
-zombiezen.com/go/sqlite v0.12.0/go.mod h1:RKdRR9xoQDSnB47yy7G4PtrjGZJtupb/SyEbJZLaRes=
+zombiezen.com/go/sqlite v0.13.1 h1:qDzxyWWmMtSSEH5qxamqBFmqA2BLSSbtODi3ojaE02o=
+zombiezen.com/go/sqlite v0.13.1/go.mod h1:Ht/5Rg3Ae2hoyh1I7gbWtWAl89CNocfqeb/aAMTkJr4=
diff --git a/http_fs.go b/http_fs.go
index 0b9bc21..4a437fe 100644
--- a/http_fs.go
+++ b/http_fs.go
@@ -1,4 +1,4 @@
-package distribyted
+package tstor
import (
"embed"
diff --git a/mkdocs/docs/CNAME b/mkdocs/docs/CNAME
index f607959..d3417db 100644
--- a/mkdocs/docs/CNAME
+++ b/mkdocs/docs/CNAME
@@ -1 +1 @@
-distribyted.com
\ No newline at end of file
+tstor.com
\ No newline at end of file
diff --git a/mkdocs/docs/getting-started.md b/mkdocs/docs/getting-started.md
index f9459d0..a722ad4 100644
--- a/mkdocs/docs/getting-started.md
+++ b/mkdocs/docs/getting-started.md
@@ -4,21 +4,21 @@
Get the latest release from [releases][releases-url] page or download the source code and execute `make build`.
-Run the program: `./distribyted-[VERSION]-[OS]-[ARCH]`
+Run the program: `./tstor-[VERSION]-[OS]-[ARCH]`
-Defaults are good enough for starters, but you can change them. Here is the output of `./distribyted -help`:
+Defaults are good enough for starters, but you can change them. Here is the output of `./tstor -help`:
```text
NAME:
- distribyted - Torrent client with on-demand file downloading as a filesystem.
+ tstor - Torrent client with on-demand file downloading as a filesystem.
USAGE:
- distribyted [global options] [arguments...]
+ tstor [global options] [arguments...]
GLOBAL OPTIONS:
- --config value YAML file containing distribyted configuration. (default: "./distribyted-data/config.yaml") [$DISTRIBYTED_CONFIG]
- --http-port value HTTP port for web interface (default: 4444) [$DISTRIBYTED_HTTP_PORT]
- --fuse-allow-other Allow other users to acces to all fuse mountpoints. You need to add user_allow_other flag to /etc/fuse.conf file. (default: false) [$DISTRIBYTED_FUSE_ALLOW_OTHER]
+ --config value YAML file containing tstor configuration. (default: "./tstor-data/config.yaml") [$tstor_CONFIG]
+ --http-port value HTTP port for web interface (default: 4444) [$tstor_HTTP_PORT]
+ --fuse-allow-other Allow other users to acces to all fuse mountpoints. You need to add user_allow_other flag to /etc/fuse.conf file. (default: false) [$tstor_FUSE_ALLOW_OTHER]
--help, -h show help (default: false)
```
@@ -36,32 +36,32 @@ docker run \
--cap-add SYS_ADMIN \
--device /dev/fuse \
--security-opt apparmor:unconfined \
- -v /tmp/mount:/distribyted-data/mount:shared \
- -v /tmp/metadata:/distribyted-data/metadata \
- -v /tmp/config:/distribyted-data/config \
- distribyted/distribyted:latest
+ -v /tmp/mount:/tstor-data/mount:shared \
+ -v /tmp/metadata:/tstor-data/metadata \
+ -v /tmp/config:/tstor-data/config \
+ tstor/tstor:latest
```
Docker compose example:
```yaml
-distribyted:
- container_name: distribyted
- image: distribyted/distribyted:latest
- restart: always
- ports:
- - "4444:4444/tcp"
- - "36911:36911/tcp"
- volumes:
- - /home/user/mount:/distribyted-data/mount:shared
- - /home/user/metadata:/distribyted-data/metadata
- - /home/user/config:/distribyted-data/config
- security_opt:
- - apparmor:unconfined
- devices:
- - /dev/fuse
- cap_add:
- - SYS_ADMIN
+tstor:
+ container_name: tstor
+ image: tstor/tstor:latest
+ restart: always
+ ports:
+ - "4444:4444/tcp"
+ - "36911:36911/tcp"
+ volumes:
+ - /home/user/mount:/tstor-data/mount:shared
+ - /home/user/metadata:/tstor-data/metadata
+ - /home/user/config:/tstor-data/config
+ security_opt:
+ - apparmor:unconfined
+ devices:
+ - /dev/fuse
+ cap_add:
+ - SYS_ADMIN
```
## Usage
@@ -71,25 +71,25 @@ It contains information about the mounted routes and torrent files like download
### Configuration File
-You can see the default configuration file with some explanation comments [here](https://github.com/distribyted/distribyted/blob/master/templates/config_template.yaml).
+You can see the default configuration file with some explanation comments [here](https://git.kmsign.ru/royalcat/tstor/blob/master/templates/config_template.yaml).
### Routes
Here there is a list of all available routes with their torrents and some info. You can add and remove torrents from here too.
-![routes screen](images/distribyted-routes-border-large.png)
+![routes screen](images/tstor-routes-border-large.png)
### Servers
-Servers is a way to generate magnet files from folders.
-All servers configured using the config yaml file will be here.
-When some data is changed on these folders, a new magnet URI will be generated.
+Servers is a way to generate magnet files from folders.
+All servers configured using the config yaml file will be here.
+When some data is changed on these folders, a new magnet URI will be generated.
You can share that magnet URI with anyone to share these files.
-![server screen](images/distribyted-server-border.png)
+![server screen](images/tstor-server-border.png)
### Logs
You can check logs in real time from the web interface:
-![logs screen](images/distribyted-logs-border.png)
\ No newline at end of file
+![logs screen](images/tstor-logs-border.png)
diff --git a/mkdocs/docs/index.md b/mkdocs/docs/index.md
index 27c08b6..dfd3698 100644
--- a/mkdocs/docs/index.md
+++ b/mkdocs/docs/index.md
@@ -1,34 +1,36 @@
+tstor is an alternative torrent client.
+It can expose torrent files as a standard FUSE mount or webDAV endpoint and download them on demand, allowing random reads using a fixed amount of disk space.
-Distribyted is an alternative torrent client.
-It can expose torrent files as a standard FUSE mount or webDAV endpoint and download them on demand, allowing random reads using a fixed amount of disk space.
-
-![Distribyted Screen Shot][product-screenshot]
-
-[product-screenshot]: images/distribyted.gif
+![tstor Screen Shot][product-screenshot]
+[product-screenshot]: images/tstor.gif
## Features
### User Interfaces
-Distribyted supports several ways to expose the files to the user or external applications:
+tstor supports several ways to expose the files to the user or external applications:
#### Supported
- FUSE: Other applications can access to torrent files directly as a filesystem.
-- WebDAV: Applications that supports WebDAV can access torrent files using this protocol. It is recommended when distribyted is running in a remote machine or using docker.
+- WebDAV: Applications that supports WebDAV can access torrent files using this protocol. It is recommended when tstor is running in a remote machine or using docker.
- HTTP: A simple HTTP interface for all the available routes. You can acces it from `http://[HOST]:[PORT]/fs`
### _Expandable_ File Formats
-Distribyted can show some kind of files directly as folders, making it possible for applications read only the parts that they need. Here is a list of supported, to be supported and not supported formats.
+
+tstor can show some kind of files directly as folders, making it possible for applications read only the parts that they need. Here is a list of supported, to be supported and not supported formats.
#### Supported
+
- zip: Able to uncompress just one file. The file is decompressed to a temporal file sequentially to make possible seek over it. The decompression stops if no one is reading it.
- rar: Thanks to [rardecode](https://github.com/nwaples/rardecode/tree/experimental) experimental branch library, it is possible to seek through rar files.
- 7zip: Thanks to [sevenzip](https://github.com/bodgit/sevenzip) library, it is possible to read `7z` files in a similar way that is done using the `zip` implementation.
#### To Be Supported
+
- xz: Only worth it when the file is created using blocks. Possible library [here](https://github.com/ulikunitz/xz) and [here](https://github.com/frrad/bxzf).
#### Not Supported
+
- gzip: As far as I know, it doesn't support random access.
diff --git a/mkdocs/mkdocs.yml b/mkdocs/mkdocs.yml
index 2bf80e3..835557b 100644
--- a/mkdocs/mkdocs.yml
+++ b/mkdocs/mkdocs.yml
@@ -1,16 +1,16 @@
-site_name: Distribyted
-site_url: https://distribyted.com/
-repo_url: https://github.com/distribyted/distribyted
-repo_name: distribyted/distribyted
+site_name: tstor
+site_url: https://tstor.com/
+repo_url: https://git.kmsign.ru/royalcat/tstor
+repo_name: tstor/tstor
nav:
- - Home: index.md
- - Getting Started: getting-started.md
- - Tutorials: tutorials.md
- - API Reference: api-reference.md
+ - Home: index.md
+ - Getting Started: getting-started.md
+ - Tutorials: tutorials.md
+ - API Reference: api-reference.md
theme:
- logo: images/distribyted_icon.png
+ logo: images/tstor_icon.png
icon:
repo: fontawesome/brands/github
name: material
@@ -37,12 +37,9 @@ extra:
version:
default: latest
provider: mike
- analytics:
- provider: google
- property: !ENV GOOGLE_ANALYTICS_KEY
markdown_extensions:
- toc:
permalink: true
- pymdownx.highlight
- - pymdownx.superfences
\ No newline at end of file
+ - pymdownx.superfences
diff --git a/src/config/default.go b/src/config/default.go
new file mode 100644
index 0000000..7367e84
--- /dev/null
+++ b/src/config/default.go
@@ -0,0 +1,82 @@
+package config
+
+const (
+ metadataFolder = "./tstor-data/metadata"
+ mountFolder = "./tstor-data/mount"
+ logsFolder = "./tstor-data/logs"
+ serverFolder = "./tstor-data/served-folders/server"
+)
+
+var defaultConfig = Config{
+ WebUi: WebUi{
+ Port: 4444,
+ IP: "0.0.0.0",
+ },
+ Mounts: Mounts{
+ HttpFs: HttpFs{
+ Enabled: true,
+ Port: 4445,
+ },
+ WebDAV: WebDAV{
+ Enabled: true,
+ Port: 36911,
+ User: "admin",
+ Pass: "admin",
+ },
+ Fuse: Fuse{
+ Enabled: false,
+ AllowOther: false,
+ Path: mountFolder,
+ },
+ },
+
+ TorrentClient: TorrentClient{
+ GlobalCacheSize: 2048,
+ MetadataFolder: metadataFolder,
+ AddTimeout: 60,
+ ReadTimeout: 120,
+ },
+
+ Log: Log{
+ Path: logsFolder,
+ MaxBackups: 2,
+ MaxSize: 50,
+ },
+}
+
+var defaultRoutes = []Route{
+ {
+ Name: "multimedia",
+ Torrents: []Torrent{
+ {
+ MagnetURI: "magnet:?xt=urn:btih:c9e15763f722f23e98a29decdfae341b98d53056&dn=Cosmos+Laundromat&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fcosmos-laundromat.torrent",
+ },
+ {
+ MagnetURI: "magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c&dn=Big+Buck+Bunny&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fbig-buck-bunny.torrent",
+ },
+ {
+ MagnetURI: "magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fsintel.torrent",
+ },
+ {
+ MagnetURI: "magnet:?xt=urn:btih:209c8226b299b308beaf2b9cd3fb49212dbd13ec&dn=Tears+of+Steel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Ftears-of-steel.torrent",
+ },
+ {
+ MagnetURI: "magnet:?xt=urn:btih:a88fda5954e89178c372716a6a78b8180ed4dad3&dn=The+WIRED+CD+-+Rip.+Sample.+Mash.+Share&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fwired-cd.torrent",
+ },
+ },
+ },
+}
+var defaultServers = []Server{
+ {
+ Name: "server",
+ Path: serverFolder,
+ Trackers: []string{
+ "wss://tracker.btorrent.xyz",
+ "wss://tracker.openwebtorrent.com",
+ "http://p4p.arenabg.com:1337/announce",
+ "udp://tracker.opentrackr.org:1337/announce",
+ "udp://open.tracker.cl:1337/announce",
+ "http://openbittorrent.com:80/announce",
+ },
+ },
+}
diff --git a/src/config/load.go b/src/config/load.go
new file mode 100644
index 0000000..363c678
--- /dev/null
+++ b/src/config/load.go
@@ -0,0 +1,48 @@
+package config
+
+import (
+ "os"
+ "strings"
+
+ "github.com/knadh/koanf/parsers/yaml"
+ "github.com/knadh/koanf/providers/env"
+ "github.com/knadh/koanf/providers/file"
+ "github.com/knadh/koanf/providers/structs"
+ "github.com/knadh/koanf/v2"
+)
+
+var k = koanf.New(".")
+
+func Load(path string) (*Config, error) {
+
+ err := k.Load(structs.Provider(defaultConfig, "koanf"), nil)
+ if err != nil {
+ return nil, err
+ }
+
+ if path != "" {
+ _ = k.Load(file.Provider(path), yaml.Parser()) // its ok if file doesnt exist
+ }
+
+ err = k.Load(env.Provider("tstor_", ".", func(s string) string {
+ return strings.Replace(strings.ToLower(
+ strings.TrimPrefix(s, "tstor_")), "_", ".", -1)
+ }), nil)
+ if err != nil {
+ return nil, err
+ }
+
+ data, err := k.Marshal(yaml.Parser())
+ if err != nil {
+ return nil, err
+ }
+ err = os.WriteFile(path, data, os.ModePerm)
+ if err != nil {
+ return nil, err
+ }
+
+ conf := Config{}
+ k.Unmarshal("", &conf)
+
+ return &conf, nil
+}
diff --git a/src/config/model.go b/src/config/model.go
new file mode 100644
index 0000000..65e9e57
--- /dev/null
+++ b/src/config/model.go
@@ -0,0 +1,75 @@
+package config
+
+// Config is the main config object
+type Config struct {
+ WebUi WebUi `koanf:"webUi"`
+ TorrentClient TorrentClient `koanf:"torrent"`
+ Mounts Mounts `koanf:"mounts"`
+ Log Log `koanf:"log"`
+}
+
+type WebUi struct {
+ Port int `koanf:"port"`
+ IP string `koanf:"ip"`
+}
+
+type Log struct {
+ Debug bool `koanf:"debug"`
+ MaxBackups int `koanf:"max_backups"`
+ MaxSize int `koanf:"max_size"`
+ MaxAge int `koanf:"max_age"`
+ Path string `koanf:"path"`
+}
+
+type TorrentClient struct {
+ ReadTimeout int `koanf:"read_timeout,omitempty"`
+ AddTimeout int `koanf:"add_timeout,omitempty"`
+ GlobalCacheSize int64 `koanf:"global_cache_size,omitempty"`
+ MetadataFolder string `koanf:"metadata_folder,omitempty"`
+ DisableIPv6 bool `koanf:"disable_ipv6,omitempty"`
+
+ Routes []Route `koanf:"routes"`
+ Servers []Server `koanf:"servers"`
+}
+
+type Route struct {
+ Name string `koanf:"name"`
+ Torrents []Torrent `koanf:"torrents"`
+ TorrentFolder string `koanf:"torrent_folder"`
+}
+
+type Server struct {
+ Name string `koanf:"name"`
+ Path string `koanf:"path"`
+ Trackers []string `koanf:"trackers"`
+ TrackerURL string `koanf:"tracker_url"`
+}
+
+type Torrent struct {
+ MagnetURI string `koanf:"magnet_uri,omitempty"`
+ TorrentPath string `koanf:"torrent_path,omitempty"`
+}
+
+type Mounts struct {
+ WebDAV WebDAV `koanf:"webdav"`
+ HttpFs HttpFs `koanf:"httpfs"`
+ Fuse Fuse `koanf:"fuse"`
+}
+
+type HttpFs struct {
+ Enabled bool `koanf:"enabled"`
+ Port int `koanf:"port"`
+}
+
+type WebDAV struct {
+ Enabled bool `koanf:"enabled"`
+ Port int `koanf:"port"`
+ User string `koanf:"user"`
+ Pass string `koanf:"pass"`
+}
+
+type Fuse struct {
+ Enabled bool `koanf:"enabled"`
+ AllowOther bool `koanf:"allow_other,omitempty"`
+ Path string `koanf:"path"`
+}
diff --git a/fs/archive.go b/src/fs/archive.go
similarity index 98%
rename from fs/archive.go
rename to src/fs/archive.go
index 043385e..30898c3 100644
--- a/fs/archive.go
+++ b/src/fs/archive.go
@@ -7,8 +7,8 @@ import (
"path/filepath"
"sync"
+ "git.kmsign.ru/royalcat/tstor/src/iio"
"github.com/bodgit/sevenzip"
- "github.com/distribyted/distribyted/iio"
"github.com/nwaples/rardecode/v2"
)
diff --git a/fs/archive_test.go b/src/fs/archive_test.go
similarity index 96%
rename from fs/archive_test.go
rename to src/fs/archive_test.go
index b5a1ca5..2ad7b84 100644
--- a/fs/archive_test.go
+++ b/src/fs/archive_test.go
@@ -6,7 +6,7 @@ import (
"io"
"testing"
- "github.com/distribyted/distribyted/iio"
+ "git.kmsign.ru/royalcat/tstor/src/iio"
"github.com/stretchr/testify/require"
)
diff --git a/fs/container.go b/src/fs/container.go
similarity index 100%
rename from fs/container.go
rename to src/fs/container.go
diff --git a/fs/container_test.go b/src/fs/container_test.go
similarity index 100%
rename from fs/container_test.go
rename to src/fs/container_test.go
diff --git a/fs/dir.go b/src/fs/dir.go
similarity index 100%
rename from fs/dir.go
rename to src/fs/dir.go
diff --git a/fs/fs.go b/src/fs/fs.go
similarity index 96%
rename from fs/fs.go
rename to src/fs/fs.go
index 1c1514a..9043111 100644
--- a/fs/fs.go
+++ b/src/fs/fs.go
@@ -4,7 +4,7 @@ import (
"os"
"time"
- "github.com/distribyted/distribyted/iio"
+ "git.kmsign.ru/royalcat/tstor/src/iio"
)
type File interface {
diff --git a/fs/fs_test.go b/src/fs/fs_test.go
similarity index 100%
rename from fs/fs_test.go
rename to src/fs/fs_test.go
diff --git a/fs/memory.go b/src/fs/memory.go
similarity index 100%
rename from fs/memory.go
rename to src/fs/memory.go
diff --git a/fs/memory_test.go b/src/fs/memory_test.go
similarity index 100%
rename from fs/memory_test.go
rename to src/fs/memory_test.go
diff --git a/fs/storage.go b/src/fs/storage.go
similarity index 100%
rename from fs/storage.go
rename to src/fs/storage.go
diff --git a/fs/storage_test.go b/src/fs/storage_test.go
similarity index 100%
rename from fs/storage_test.go
rename to src/fs/storage_test.go
diff --git a/fs/torrent.go b/src/fs/torrent.go
similarity index 98%
rename from fs/torrent.go
rename to src/fs/torrent.go
index 33ebd7e..8605d84 100644
--- a/fs/torrent.go
+++ b/src/fs/torrent.go
@@ -6,9 +6,9 @@ import (
"sync"
"time"
+ "git.kmsign.ru/royalcat/tstor/src/iio"
"github.com/anacrolix/missinggo/v2"
"github.com/anacrolix/torrent"
- "github.com/distribyted/distribyted/iio"
)
var _ Filesystem = &Torrent{}
diff --git a/fs/torrent_test.go b/src/fs/torrent_test.go
similarity index 100%
rename from fs/torrent_test.go
rename to src/fs/torrent_test.go
diff --git a/http/api.go b/src/http/api.go
similarity index 88%
rename from http/api.go
rename to src/http/api.go
index eeab5f3..6422ad4 100644
--- a/http/api.go
+++ b/src/http/api.go
@@ -8,20 +8,25 @@ import (
"os"
"sort"
+ "git.kmsign.ru/royalcat/tstor/src/torrent"
"github.com/anacrolix/missinggo/v2/filecache"
- "github.com/distribyted/distribyted/torrent"
"github.com/gin-gonic/gin"
)
var apiStatusHandler = func(fc *filecache.Cache, ss *torrent.Stats) gin.HandlerFunc {
return func(ctx *gin.Context) {
+ stat := gin.H{
+ "torrentStats": ss.GlobalStats(),
+ }
+
+ if fc != nil {
+ stat["cacheItems"] = fc.Info().NumItems
+ stat["cacheFilled"] = fc.Info().Filled / 1024 / 1024
+ stat["cacheCapacity"] = fc.Info().Capacity / 1024 / 1024
+ }
+
// TODO move to a struct
- ctx.JSON(http.StatusOK, gin.H{
- "cacheItems": fc.Info().NumItems,
- "cacheFilled": fc.Info().Filled / 1024 / 1024,
- "cacheCapacity": fc.Info().Capacity / 1024 / 1024,
- "torrentStats": ss.GlobalStats(),
- })
+ ctx.JSON(http.StatusOK, stat)
}
}
diff --git a/http/http.go b/src/http/http.go
similarity index 72%
rename from http/http.go
rename to src/http/http.go
index 1a777ad..c91bfd4 100644
--- a/http/http.go
+++ b/src/http/http.go
@@ -4,16 +4,16 @@ import (
"fmt"
"net/http"
+ "git.kmsign.ru/royalcat/tstor"
+ "git.kmsign.ru/royalcat/tstor/src/config"
+ "git.kmsign.ru/royalcat/tstor/src/torrent"
"github.com/anacrolix/missinggo/v2/filecache"
- "github.com/distribyted/distribyted"
- "github.com/distribyted/distribyted/config"
- "github.com/distribyted/distribyted/torrent"
"github.com/gin-gonic/gin"
"github.com/rs/zerolog/log"
"github.com/shurcooL/httpfs/html/vfstemplate"
)
-func New(fc *filecache.Cache, ss *torrent.Stats, s *torrent.Service, ch *config.Handler, tss []*torrent.Server, fs http.FileSystem, logPath string, cfg *config.HTTPGlobal) error {
+func New(fc *filecache.Cache, ss *torrent.Stats, s *torrent.Service, ch *config.Config, tss []*torrent.Server, fs http.FileSystem, logPath string, cfg *config.Config) error {
gin.SetMode(gin.ReleaseMode)
r := gin.New()
r.Use(gin.Recovery())
@@ -21,18 +21,18 @@ func New(fc *filecache.Cache, ss *torrent.Stats, s *torrent.Service, ch *config.
r.Use(Logger())
r.GET("/assets/*filepath", func(c *gin.Context) {
- c.FileFromFS(c.Request.URL.Path, http.FS(distribyted.Assets))
+ c.FileFromFS(c.Request.URL.Path, http.FS(tstor.Assets))
})
- if cfg.HTTPFS {
- log.Info().Str("host", fmt.Sprintf("%s:%d/fs", cfg.IP, cfg.Port)).Msg("starting HTTPFS")
+ if cfg.Mounts.HttpFs.Enabled {
+ log.Info().Str("host", fmt.Sprintf("0.0.0.0:%d/fs", cfg.Mounts.HttpFs.Port)).Msg("starting HTTPFS")
r.GET("/fs/*filepath", func(c *gin.Context) {
path := c.Param("filepath")
c.FileFromFS(path, fs)
})
}
- t, err := vfstemplate.ParseGlob(http.FS(distribyted.Templates), nil, "/templates/*")
+ t, err := vfstemplate.ParseGlob(http.FS(tstor.Templates), nil, "/templates/*")
if err != nil {
return fmt.Errorf("error parsing html: %w", err)
}
@@ -56,9 +56,9 @@ func New(fc *filecache.Cache, ss *torrent.Stats, s *torrent.Service, ch *config.
}
- log.Info().Str("host", fmt.Sprintf("%s:%d", cfg.IP, cfg.Port)).Msg("starting webserver")
+ log.Info().Str("host", fmt.Sprintf("%s:%d", cfg.WebUi.IP, cfg.WebUi.Port)).Msg("starting webserver")
- if err := r.Run(fmt.Sprintf("%s:%d", cfg.IP, cfg.Port)); err != nil {
+ if err := r.Run(fmt.Sprintf("%s:%d", cfg.WebUi.IP, cfg.WebUi.Port)); err != nil {
return fmt.Errorf("error initializing server: %w", err)
}
diff --git a/http/model.go b/src/http/model.go
similarity index 100%
rename from http/model.go
rename to src/http/model.go
diff --git a/http/web.go b/src/http/web.go
similarity index 92%
rename from http/web.go
rename to src/http/web.go
index 4ba42fb..9140c5f 100644
--- a/http/web.go
+++ b/src/http/web.go
@@ -3,7 +3,7 @@ package http
import (
"net/http"
- "github.com/distribyted/distribyted/torrent"
+ "git.kmsign.ru/royalcat/tstor/src/torrent"
"github.com/gin-gonic/gin"
)
diff --git a/iio/disk.go b/src/iio/disk.go
similarity index 89%
rename from iio/disk.go
rename to src/iio/disk.go
index 164c0e3..516b884 100644
--- a/iio/disk.go
+++ b/src/iio/disk.go
@@ -2,7 +2,6 @@ package iio
import (
"io"
- "io/ioutil"
"os"
"sync"
)
@@ -21,7 +20,7 @@ type DiskTeeReader struct {
}
func NewDiskTeeReader(r io.Reader) (Reader, error) {
- fr, err := ioutil.TempFile("", "dtb_tmp")
+ fr, err := os.CreateTemp("", "dtb_tmp")
if err != nil {
return nil, err
}
@@ -35,7 +34,7 @@ func (dtr *DiskTeeReader) ReadAt(p []byte, off int64) (int, error) {
tb := off + int64(len(p))
if tb > dtr.fo {
- w, err := io.CopyN(ioutil.Discard, dtr.tr, tb-dtr.fo)
+ w, err := io.CopyN(io.Discard, dtr.tr, tb-dtr.fo)
dtr.to += w
if err != nil && err != io.EOF {
return 0, err
diff --git a/iio/disk_test.go b/src/iio/disk_test.go
similarity index 100%
rename from iio/disk_test.go
rename to src/iio/disk_test.go
diff --git a/iio/reader.go b/src/iio/reader.go
similarity index 100%
rename from iio/reader.go
rename to src/iio/reader.go
diff --git a/iio/wrapper.go b/src/iio/wrapper.go
similarity index 100%
rename from iio/wrapper.go
rename to src/iio/wrapper.go
diff --git a/iio/wrapper_test.go b/src/iio/wrapper_test.go
similarity index 86%
rename from iio/wrapper_test.go
rename to src/iio/wrapper_test.go
index 8c28e79..7197d1f 100644
--- a/iio/wrapper_test.go
+++ b/src/iio/wrapper_test.go
@@ -4,8 +4,8 @@ import (
"io"
"testing"
- "github.com/distribyted/distribyted/fs"
- "github.com/distribyted/distribyted/iio"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
+ "git.kmsign.ru/royalcat/tstor/src/iio"
"github.com/stretchr/testify/require"
)
diff --git a/log/badger.go b/src/log/badger.go
similarity index 100%
rename from log/badger.go
rename to src/log/badger.go
diff --git a/log/log.go b/src/log/log.go
similarity index 92%
rename from log/log.go
rename to src/log/log.go
index 22356e9..d7539ac 100644
--- a/log/log.go
+++ b/src/log/log.go
@@ -5,14 +5,14 @@ import (
"os"
"path/filepath"
- "github.com/distribyted/distribyted/config"
+ "git.kmsign.ru/royalcat/tstor/src/config"
"github.com/mattn/go-colorable"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"gopkg.in/natefinch/lumberjack.v2"
)
-const FileName = "distribyted.log"
+const FileName = "tstor.log"
func Load(config *config.Log) {
var writers []io.Writer
diff --git a/log/torrent.go b/src/log/torrent.go
similarity index 100%
rename from log/torrent.go
rename to src/log/torrent.go
diff --git a/fuse/handler.go b/src/mounts/fuse/handler.go
similarity index 97%
rename from fuse/handler.go
rename to src/mounts/fuse/handler.go
index 1a77001..8b3c129 100644
--- a/fuse/handler.go
+++ b/src/mounts/fuse/handler.go
@@ -5,8 +5,9 @@ import (
"path/filepath"
"runtime"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
"github.com/billziss-gh/cgofuse/fuse"
- "github.com/distribyted/distribyted/fs"
+
"github.com/rs/zerolog/log"
)
diff --git a/fuse/mount.go b/src/mounts/fuse/mount.go
similarity index 96%
rename from fuse/mount.go
rename to src/mounts/fuse/mount.go
index 8a1f38c..3de1568 100644
--- a/fuse/mount.go
+++ b/src/mounts/fuse/mount.go
@@ -7,8 +7,9 @@ import (
"os"
"sync"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
"github.com/billziss-gh/cgofuse/fuse"
- "github.com/distribyted/distribyted/fs"
+
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
@@ -43,6 +44,12 @@ func (fs *FS) Open(path string, flags int) (errc int, fh uint64) {
return 0, fh
}
+// Unlink removes a file.
+// The FileSystemBase implementation returns -ENOSYS.
+func (fs *FS) Unlink(path string) int {
+ return -fuse.ENOSYS
+}
+
func (fs *FS) Opendir(path string) (errc int, fh uint64) {
return fs.Open(path, 0)
}
diff --git a/fuse/mount_test.go b/src/mounts/fuse/mount_test.go
similarity index 96%
rename from fuse/mount_test.go
rename to src/mounts/fuse/mount_test.go
index 40485bb..0851926 100644
--- a/fuse/mount_test.go
+++ b/src/mounts/fuse/mount_test.go
@@ -7,7 +7,7 @@ import (
"testing"
"time"
- "github.com/distribyted/distribyted/fs"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
"github.com/stretchr/testify/require"
)
diff --git a/torrent/http.go b/src/mounts/httpfs/httpfs.go
similarity index 94%
rename from torrent/http.go
rename to src/mounts/httpfs/httpfs.go
index c801ec7..233572f 100644
--- a/torrent/http.go
+++ b/src/mounts/httpfs/httpfs.go
@@ -1,4 +1,4 @@
-package torrent
+package httpfs
import (
"io"
@@ -7,8 +7,8 @@ import (
"os"
"sync"
- dfs "github.com/distribyted/distribyted/fs"
- "github.com/distribyted/distribyted/iio"
+ dfs "git.kmsign.ru/royalcat/tstor/src/fs"
+ "git.kmsign.ru/royalcat/tstor/src/iio"
)
var _ http.FileSystem = &HTTPFS{}
diff --git a/webdav/fs.go b/src/mounts/webdav/fs.go
similarity index 97%
rename from webdav/fs.go
rename to src/mounts/webdav/fs.go
index 125ca65..c82838c 100644
--- a/webdav/fs.go
+++ b/src/mounts/webdav/fs.go
@@ -8,8 +8,8 @@ import (
"sync"
"time"
- "github.com/distribyted/distribyted/fs"
- "github.com/distribyted/distribyted/iio"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
+ "git.kmsign.ru/royalcat/tstor/src/iio"
"golang.org/x/net/webdav"
)
diff --git a/webdav/fs_test.go b/src/mounts/webdav/fs_test.go
similarity index 97%
rename from webdav/fs_test.go
rename to src/mounts/webdav/fs_test.go
index d5e413e..f25f380 100644
--- a/webdav/fs_test.go
+++ b/src/mounts/webdav/fs_test.go
@@ -6,7 +6,7 @@ import (
"os"
"testing"
- "github.com/distribyted/distribyted/fs"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
"github.com/stretchr/testify/require"
"golang.org/x/net/webdav"
)
diff --git a/webdav/handler.go b/src/mounts/webdav/handler.go
similarity index 91%
rename from webdav/handler.go
rename to src/mounts/webdav/handler.go
index 47cb151..f7cb756 100644
--- a/webdav/handler.go
+++ b/src/mounts/webdav/handler.go
@@ -3,7 +3,7 @@ package webdav
import (
"net/http"
- "github.com/distribyted/distribyted/fs"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
"github.com/rs/zerolog/log"
"golang.org/x/net/webdav"
)
diff --git a/webdav/http.go b/src/mounts/webdav/http.go
similarity index 94%
rename from webdav/http.go
rename to src/mounts/webdav/http.go
index 921db84..266c259 100644
--- a/webdav/http.go
+++ b/src/mounts/webdav/http.go
@@ -4,7 +4,7 @@ import (
"fmt"
"net/http"
- "github.com/distribyted/distribyted/fs"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
"github.com/rs/zerolog/log"
)
diff --git a/torrent/client.go b/src/torrent/client.go
similarity index 85%
rename from torrent/client.go
rename to src/torrent/client.go
index 7cb77c5..f0936d7 100644
--- a/torrent/client.go
+++ b/src/torrent/client.go
@@ -10,11 +10,11 @@ import (
"github.com/anacrolix/torrent/storage"
"github.com/rs/zerolog/log"
- "github.com/distribyted/distribyted/config"
- dlog "github.com/distribyted/distribyted/log"
+ "git.kmsign.ru/royalcat/tstor/src/config"
+ dlog "git.kmsign.ru/royalcat/tstor/src/log"
)
-func NewClient(st storage.ClientImpl, fis bep44.Store, cfg *config.TorrentGlobal, id [20]byte) (*torrent.Client, error) {
+func NewClient(st storage.ClientImpl, fis bep44.Store, cfg *config.TorrentClient, id [20]byte) (*torrent.Client, error) {
// TODO download and upload limits
torrentCfg := torrent.NewDefaultClientConfig()
torrentCfg.Seed = true
diff --git a/torrent/id.go b/src/torrent/id.go
similarity index 100%
rename from torrent/id.go
rename to src/torrent/id.go
diff --git a/torrent/loader/config.go b/src/torrent/loader/config.go
similarity index 85%
rename from torrent/loader/config.go
rename to src/torrent/loader/config.go
index ea9f202..e541975 100644
--- a/torrent/loader/config.go
+++ b/src/torrent/loader/config.go
@@ -1,14 +1,14 @@
package loader
-import "github.com/distribyted/distribyted/config"
+import "git.kmsign.ru/royalcat/tstor/src/config"
var _ Loader = &Config{}
type Config struct {
- c []*config.Route
+ c []config.Route
}
-func NewConfig(r []*config.Route) *Config {
+func NewConfig(r []config.Route) *Config {
return &Config{
c: r,
}
diff --git a/torrent/loader/db.go b/src/torrent/loader/db.go
similarity index 97%
rename from torrent/loader/db.go
rename to src/torrent/loader/db.go
index a2235df..f4a419f 100644
--- a/torrent/loader/db.go
+++ b/src/torrent/loader/db.go
@@ -3,9 +3,9 @@ package loader
import (
"path"
+ dlog "git.kmsign.ru/royalcat/tstor/src/log"
"github.com/anacrolix/torrent/metainfo"
"github.com/dgraph-io/badger/v3"
- dlog "github.com/distribyted/distribyted/log"
"github.com/rs/zerolog/log"
)
diff --git a/torrent/loader/db_test.go b/src/torrent/loader/db_test.go
similarity index 100%
rename from torrent/loader/db_test.go
rename to src/torrent/loader/db_test.go
diff --git a/torrent/loader/folder.go b/src/torrent/loader/folder.go
similarity index 87%
rename from torrent/loader/folder.go
rename to src/torrent/loader/folder.go
index f79e5d5..bd5efc0 100644
--- a/torrent/loader/folder.go
+++ b/src/torrent/loader/folder.go
@@ -5,16 +5,16 @@ import (
"path"
"path/filepath"
- "github.com/distribyted/distribyted/config"
+ "git.kmsign.ru/royalcat/tstor/src/config"
)
var _ Loader = &Folder{}
type Folder struct {
- c []*config.Route
+ c []config.Route
}
-func NewFolder(r []*config.Route) *Folder {
+func NewFolder(r []config.Route) *Folder {
return &Folder{
c: r,
}
diff --git a/torrent/loader/loader.go b/src/torrent/loader/loader.go
similarity index 100%
rename from torrent/loader/loader.go
rename to src/torrent/loader/loader.go
diff --git a/torrent/server.go b/src/torrent/server.go
similarity index 99%
rename from torrent/server.go
rename to src/torrent/server.go
index f16a441..c6a380d 100644
--- a/torrent/server.go
+++ b/src/torrent/server.go
@@ -8,11 +8,11 @@ import (
"sync/atomic"
"time"
+ "git.kmsign.ru/royalcat/tstor/src/config"
"github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/bencode"
"github.com/anacrolix/torrent/metainfo"
"github.com/anacrolix/torrent/storage"
- "github.com/distribyted/distribyted/config"
"github.com/fsnotify/fsnotify"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
diff --git a/torrent/service.go b/src/torrent/service.go
similarity index 97%
rename from torrent/service.go
rename to src/torrent/service.go
index 8aa79be..b147b16 100644
--- a/torrent/service.go
+++ b/src/torrent/service.go
@@ -7,10 +7,10 @@ import (
"sync"
"time"
+ "git.kmsign.ru/royalcat/tstor/src/fs"
+ "git.kmsign.ru/royalcat/tstor/src/torrent/loader"
"github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/metainfo"
- "github.com/distribyted/distribyted/fs"
- "github.com/distribyted/distribyted/torrent/loader"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
diff --git a/torrent/stats.go b/src/torrent/stats.go
similarity index 100%
rename from torrent/stats.go
rename to src/torrent/stats.go
diff --git a/torrent/store.go b/src/torrent/store.go
similarity index 95%
rename from torrent/store.go
rename to src/torrent/store.go
index 9f8058b..f762671 100644
--- a/torrent/store.go
+++ b/src/torrent/store.go
@@ -5,9 +5,9 @@ import (
"encoding/gob"
"time"
+ dlog "git.kmsign.ru/royalcat/tstor/src/log"
"github.com/anacrolix/dht/v2/bep44"
- "github.com/dgraph-io/badger/v3"
- dlog "github.com/distribyted/distribyted/log"
+ "github.com/dgraph-io/badger/v4"
"github.com/rs/zerolog/log"
)
diff --git a/templates/config_template.yaml b/templates/config_template.yaml
index abd4d5e..2b9803e 100644
--- a/templates/config_template.yaml
+++ b/templates/config_template.yaml
@@ -4,7 +4,7 @@
# HTTP specific configuration.
http:
port: 4444
-
+
ip: "0.0.0.0"
# Serve all routes content over http on IP:PORT/fs
@@ -18,13 +18,13 @@ webdav:
# Specific configuration for torrent backend.
torrent:
- # Size in MB for the cache. This is the maximum space used by distribyted to store
+ # Size in MB for the cache. This is the maximum space used by tstor to store
# torrent data. Less used torrent data will be discarded if this value is reached.
# global_cache_size: -1 #No limit
global_cache_size: 2048
- # Folder where distribyted metadata will be stored.
- metadata_folder: ./distribyted-data/metadata
+ # Folder where tstor metadata will be stored.
+ metadata_folder: ./tstor-data/metadata
# Disable IPv6.
#disable_ipv6: true
@@ -32,36 +32,36 @@ torrent:
# Timeout in seconds when adding a magnet or a torrent.
add_timeout: 60
- # Timeout in seconds when reading any torrent content. Usefult when reading
+ # Timeout in seconds when reading any torrent content. Usefult when reading
# archived content from .rar, .zip or .7z.
read_timeout: 120
-fuse:
- # Folder where fuse will mount torrent filesystem
- # For windows users:
- # - You can set here also a disk letter like X: or Z:.
- # - The folder MUST NOT exists.
- path: ./distribyted-data/mount
- # Add this flag if you want to allow other users to access this fuse mountpoint.
- # You need to add user_allow_other flag to /etc/fuse.conf file.
- # allow_other: true
+# fuse:
+# # Folder where fuse will mount torrent filesystem
+# # For windows users:
+# # - You can set here also a disk letter like X: or Z:.
+# # - The folder MUST NOT exists.
+# path: ./tstor-data/mount
+# # Add this flag if you want to allow other users to access this fuse mountpoint.
+# # You need to add user_allow_other flag to /etc/fuse.conf file.
+# # allow_other: true
log:
- path: ./distribyted-data/logs
+ path: ./tstor-data/logs
# MaxBackups is the maximum number of old log files to retain. The default
- # is to retain all old log files (though MaxAge may still cause them to get
- # deleted.)
+ # is to retain all old log files (though MaxAge may still cause them to get
+ # deleted.)
max_backups: 2
# MaxAge is the maximum number of days to retain old log files based on the
- # timestamp encoded in their filename. Note that a day is defined as 24
- # hours and may not exactly correspond to calendar days due to daylight
- # savings, leap seconds, etc. The default is not to remove old log files
- # based on age.
+ # timestamp encoded in their filename. Note that a day is defined as 24
+ # hours and may not exactly correspond to calendar days due to daylight
+ # savings, leap seconds, etc. The default is not to remove old log files
+ # based on age.
# max_age: 30
# MaxSize is the maximum size in megabytes of the log file before it gets
- # rotated. It defaults to 100 megabytes.
+ # rotated. It defaults to 100 megabytes.
max_size: 50
# debug: true
@@ -72,35 +72,35 @@ routes:
# Adding a folder will load all torrents on it:
# torrent_folder: "/path/to/torrent/folder"
torrents:
- # You can also add torrents from a specific path
- # - torrent_path: /path/to/torrent/file.torrent
- - magnet_uri: "magnet:?xt=urn:btih:c9e15763f722f23e98a29decdfae341b98d53056&dn=Cosmos+Laundromat&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fcosmos-laundromat.torrent"
- - magnet_uri: "magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c&dn=Big+Buck+Bunny&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fbig-buck-bunny.torrent"
- - magnet_uri: "magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fsintel.torrent"
- - magnet_uri: "magnet:?xt=urn:btih:209c8226b299b308beaf2b9cd3fb49212dbd13ec&dn=Tears+of+Steel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Ftears-of-steel.torrent"
- - magnet_uri: "magnet:?xt=urn:btih:a88fda5954e89178c372716a6a78b8180ed4dad3&dn=The+WIRED+CD+-+Rip.+Sample.+Mash.+Share&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fwired-cd.torrent"
+ # You can also add torrents from a specific path
+ # - torrent_path: /path/to/torrent/file.torrent
+ - magnet_uri: "magnet:?xt=urn:btih:c9e15763f722f23e98a29decdfae341b98d53056&dn=Cosmos+Laundromat&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fcosmos-laundromat.torrent"
+ - magnet_uri: "magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c&dn=Big+Buck+Bunny&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fbig-buck-bunny.torrent"
+ - magnet_uri: "magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fsintel.torrent"
+ - magnet_uri: "magnet:?xt=urn:btih:209c8226b299b308beaf2b9cd3fb49212dbd13ec&dn=Tears+of+Steel&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Ftears-of-steel.torrent"
+ - magnet_uri: "magnet:?xt=urn:btih:a88fda5954e89178c372716a6a78b8180ed4dad3&dn=The+WIRED+CD+-+Rip.+Sample.+Mash.+Share&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fwired-cd.torrent"
# Example mountpoint containing some datasets, some of them compressed in zip format
- # - name: datasets
- # torrents:
- # - magnet_uri: "magnet:?xt=urn:btih:9dea07ba660a722ae1008c4c8afdd303b6f6e53b&tr=http%3A%2F%2Facademictorrents.com%2Fannounce.php&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969"
- # - magnet_uri: "magnet:?xt=urn:btih:d8b3a315172c8d804528762f37fa67db14577cdb&tr=http%3A%2F%2Facademictorrents.com%2Fannounce.php&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969"
- # - magnet_uri: "magnet:?xt=urn:btih:1e0a00b9c606cf87c03e676f75929463c7756fb5&tr=http%3A%2F%2Facademictorrents.com%2Fannounce.php&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969"
+# - name: datasets
+# torrents:
+# - magnet_uri: "magnet:?xt=urn:btih:9dea07ba660a722ae1008c4c8afdd303b6f6e53b&tr=http%3A%2F%2Facademictorrents.com%2Fannounce.php&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969"
+# - magnet_uri: "magnet:?xt=urn:btih:d8b3a315172c8d804528762f37fa67db14577cdb&tr=http%3A%2F%2Facademictorrents.com%2Fannounce.php&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969"
+# - magnet_uri: "magnet:?xt=urn:btih:1e0a00b9c606cf87c03e676f75929463c7756fb5&tr=http%3A%2F%2Facademictorrents.com%2Fannounce.php&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969"
# List of folders where the content will be transformed to a magnet link. You can share any content sending that magnet link to others.
servers:
- name: server
- path: ./distribyted-data/served-folders/server
+ path: ./tstor-data/served-folders/server
# Get trackers from web text file. The file will be loaded every time a magnet uri is generated,
# so all trackers will be up to date.
- # tracker_url: "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt"
+ tracker_url: "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt"
- # Trackers to be used to announce the served content. If tracker_url is set and it fails,
+ # Trackers to be used to announce the served content. If tracker_url is set and it fails,
# this list will be used instead.
- trackers:
- - "wss://tracker.btorrent.xyz"
- - "wss://tracker.openwebtorrent.com"
- - "http://p4p.arenabg.com:1337/announce"
- - "udp://tracker.opentrackr.org:1337/announce"
- - "udp://open.tracker.cl:1337/announce"
- - "http://openbittorrent.com:80/announce"
+ # trackers:
+ # - "wss://tracker.btorrent.xyz"
+ # - "wss://tracker.openwebtorrent.com"
+ # - "http://p4p.arenabg.com:1337/announce"
+ # - "udp://tracker.opentrackr.org:1337/announce"
+ # - "udp://open.tracker.cl:1337/announce"
+ # - "http://openbittorrent.com:80/announce"
diff --git a/templates/header.html b/templates/header.html
index d86bb85..e3ec2d8 100644
--- a/templates/header.html
+++ b/templates/header.html
@@ -1,14 +1,19 @@
-
Distribyted - {{.}}
+
tstor - {{.}}
-
-
+
+
-
\ No newline at end of file
+
diff --git a/templates/index.html b/templates/index.html
index 309a31f..c3ae850 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -96,9 +96,9 @@