copyparty 1.19.12__tar.gz → 1.19.22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {copyparty-1.19.12 → copyparty-1.19.22}/PKG-INFO +127 -16
- {copyparty-1.19.12 → copyparty-1.19.22}/README.md +126 -15
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/__init__.py +26 -2
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/__main__.py +81 -16
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/__version__.py +2 -2
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/authsrv.py +184 -52
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/bos/bos.py +6 -2
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/cert.py +18 -4
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/cfg.py +58 -2
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/fsutil.py +51 -3
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/ftpd.py +29 -21
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/httpcli.py +605 -298
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/httpsrv.py +3 -2
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/mdns.py +64 -24
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/metrics.py +2 -2
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/mtag.py +19 -5
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/multicast.py +4 -1
- copyparty-1.19.22/copyparty/qrkode.py +107 -0
- copyparty-1.19.22/copyparty/res/COPYING.txt +223 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/smbd.py +23 -18
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/qrcodegen.py +1 -64
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/svchub.py +30 -6
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/tcpsrv.py +11 -7
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/tftpd.py +23 -18
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/th_srv.py +149 -16
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/u2idx.py +16 -1
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/up2k.py +106 -46
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/util.py +140 -58
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/a/u2c.py +17 -5
- copyparty-1.19.22/copyparty/web/a/webdav-cfg.txt.gz +0 -0
- copyparty-1.19.22/copyparty/web/baguettebox.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/browser.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/browser.html +6 -4
- copyparty-1.19.22/copyparty/web/browser.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/dbg-audio.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/deps/marked.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/idp.html +1 -1
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/md.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/md.html +3 -2
- copyparty-1.19.22/copyparty/web/md.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/md2.css.gz +0 -0
- copyparty-1.19.22/copyparty/web/md2.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/mde.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/mde.html +1 -1
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/mde.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/msg.html +8 -3
- copyparty-1.19.22/copyparty/web/opds.xml +31 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/rups.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/rups.html +1 -1
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/rups.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/shares.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/shares.html +4 -3
- copyparty-1.19.22/copyparty/web/shares.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/splash.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/splash.html +30 -19
- copyparty-1.19.22/copyparty/web/splash.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/svcs.html +2 -2
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/svcs.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/chi.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/cze.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/deu.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/epo.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/fin.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/fra.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/grc.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/ita.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/kor.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/nld.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/nno.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/nor.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/pol.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/por.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/rus.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/spa.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/swe.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/tur.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/tl/ukr.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/ui.css.gz +0 -0
- copyparty-1.19.22/copyparty/web/up2k.js.gz +0 -0
- copyparty-1.19.22/copyparty/web/util.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/w.hash.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty.egg-info/PKG-INFO +127 -16
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty.egg-info/SOURCES.txt +23 -3
- {copyparty-1.19.12 → copyparty-1.19.22}/pyproject.toml +13 -1
- copyparty-1.19.12/copyparty/res/COPYING.txt +0 -152
- copyparty-1.19.12/copyparty/web/a/webdav-cfg.bat +0 -45
- copyparty-1.19.12/copyparty/web/baguettebox.js.gz +0 -0
- copyparty-1.19.12/copyparty/web/browser.css.gz +0 -0
- copyparty-1.19.12/copyparty/web/browser.js.gz +0 -0
- copyparty-1.19.12/copyparty/web/deps/marked.js.gz +0 -0
- copyparty-1.19.12/copyparty/web/md.js.gz +0 -0
- copyparty-1.19.12/copyparty/web/md2.css.gz +0 -0
- copyparty-1.19.12/copyparty/web/md2.js.gz +0 -0
- copyparty-1.19.12/copyparty/web/msg.css.gz +0 -0
- copyparty-1.19.12/copyparty/web/shares.css.gz +0 -0
- copyparty-1.19.12/copyparty/web/shares.js.gz +0 -0
- copyparty-1.19.12/copyparty/web/splash.css.gz +0 -0
- copyparty-1.19.12/copyparty/web/splash.js.gz +0 -0
- copyparty-1.19.12/copyparty/web/up2k.js.gz +0 -0
- copyparty-1.19.12/copyparty/web/util.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/LICENSE +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/bos/__init__.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/bos/path.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/broker_mp.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/broker_mpw.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/broker_thr.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/broker_util.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/dxml.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/httpconn.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/ico.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/pwhash.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/res/__init__.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/res/insecure.pem +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/ssdp.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/star.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/__init__.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/dnslib/__init__.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/dnslib/bimap.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/dnslib/bit.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/dnslib/buffer.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/dnslib/dns.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/dnslib/label.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/dnslib/lex.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/dnslib/ranges.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/ifaddr/__init__.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/ifaddr/_posix.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/ifaddr/_shared.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/ifaddr/_win32.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/stolen/surrogateescape.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/sutil.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/szip.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/th_cli.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/a/__init__.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/a/partyfuse.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/browser2.html +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/cf.html +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/__init__.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/busy.mp3.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/easymde.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/easymde.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/fuse.py +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/mini-fa.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/mini-fa.woff +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/prism.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/prism.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/prismd.css.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/scp.woff2 +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/sha512.ac.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty/web/deps/sha512.hw.js.gz +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty.egg-info/dependency_links.txt +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty.egg-info/entry_points.txt +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty.egg-info/requires.txt +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/copyparty.egg-info/top_level.txt +0 -0
- {copyparty-1.19.12 → copyparty-1.19.22}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: copyparty
|
|
3
|
-
Version: 1.19.
|
|
3
|
+
Version: 1.19.22
|
|
4
4
|
Summary: Portable file server with accelerated resumable uploads, deduplication, WebDAV, FTP, zeroconf, media indexer, video thumbnails, audio transcoding, and write-only folders
|
|
5
5
|
Author-email: ed <copyparty@ocv.me>
|
|
6
6
|
License: MIT
|
|
@@ -86,6 +86,7 @@ made in Norway 🇳🇴
|
|
|
86
86
|
|
|
87
87
|
* top
|
|
88
88
|
* [quickstart](#quickstart) - just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** -- that's it! 🎉
|
|
89
|
+
* [mirrors](#mirrors) - other places to download copyparty from
|
|
89
90
|
* [at home](#at-home) - make it accessible over the internet
|
|
90
91
|
* [on servers](#on-servers) - you may also want these, especially on servers
|
|
91
92
|
* [features](#features) - also see [comparison to similar software](./docs/versus.md)
|
|
@@ -115,6 +116,7 @@ made in Norway 🇳🇴
|
|
|
115
116
|
* [shares](#shares) - share a file or folder by creating a temporary link
|
|
116
117
|
* [batch rename](#batch-rename) - select some files and press `F2` to bring up the rename UI
|
|
117
118
|
* [rss feeds](#rss-feeds) - monitor a folder with your RSS reader
|
|
119
|
+
* [opds feeds](#opds-feeds) - browse and download files from your e-book reader
|
|
118
120
|
* [recent uploads](#recent-uploads) - list all recent uploads
|
|
119
121
|
* [media player](#media-player) - plays almost every audio format there is
|
|
120
122
|
* [playlists](#playlists) - create and play [m3u8](https://en.wikipedia.org/wiki/M3U) playlists
|
|
@@ -181,6 +183,7 @@ made in Norway 🇳🇴
|
|
|
181
183
|
* [nix package](#nix-package) - `nix profile install github:9001/copyparty`
|
|
182
184
|
* [nixos module](#nixos-module)
|
|
183
185
|
* [browser support](#browser-support) - TLDR: yes
|
|
186
|
+
* [server hall of fame](#server-hall-of-fame) - unexpected things that run copyparty
|
|
184
187
|
* [client examples](#client-examples) - interact with copyparty using non-browser clients
|
|
185
188
|
* [folder sync](#folder-sync) - sync folders to/from copyparty
|
|
186
189
|
* [mount as drive](#mount-as-drive) - a remote copyparty server as a local filesystem
|
|
@@ -202,6 +205,7 @@ made in Norway 🇳🇴
|
|
|
202
205
|
* [dependencies](#dependencies) - mandatory deps
|
|
203
206
|
* [optional dependencies](#optional-dependencies) - install these to enable bonus features
|
|
204
207
|
* [dependency chickenbits](#dependency-chickenbits) - prevent loading an optional dependency
|
|
208
|
+
* [dependency unvendoring](#dependency-unvendoring) - force use of system modules
|
|
205
209
|
* [optional gpl stuff](#optional-gpl-stuff)
|
|
206
210
|
* [sfx](#sfx) - the self-contained "binary" (recommended!)
|
|
207
211
|
* [copyparty.exe](#copypartyexe) - download [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) (win8+) or [copyparty32.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty32.exe) (win7+)
|
|
@@ -220,7 +224,7 @@ just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/
|
|
|
220
224
|
|
|
221
225
|
* or install through [pypi](https://pypi.org/project/copyparty/): `python3 -m pip install --user -U copyparty`
|
|
222
226
|
* or if you cannot install python, you can use [copyparty.exe](#copypartyexe) instead
|
|
223
|
-
* or install [on arch](#arch-package) ╱ [on NixOS](#nixos-module) ╱ [through nix](#nix-package)
|
|
227
|
+
* or install [on arch](#arch-package) / [homebrew](#homebrew-formulae) ╱ [on NixOS](#nixos-module) ╱ [through nix](#nix-package)
|
|
224
228
|
* or if you are on android, [install copyparty in termux](#install-on-android)
|
|
225
229
|
* or maybe an iPhone or iPad? [install in a-Shell on iOS](#install-on-iOS)
|
|
226
230
|
* or maybe you have a [synology nas / dsm](./docs/synology-dsm.md)
|
|
@@ -255,7 +259,19 @@ some recommended options:
|
|
|
255
259
|
* `-e2ts` enables audio metadata indexing (needs either FFprobe or Mutagen)
|
|
256
260
|
* `-v /mnt/music:/music:r:rw,foo -a foo:bar` shares `/mnt/music` as `/music`, `r`eadable by anyone, and read-write for user `foo`, password `bar`
|
|
257
261
|
* replace `:r:rw,foo` with `:r,foo` to only make the folder readable by `foo` and nobody else
|
|
258
|
-
* see [accounts and volumes](#accounts-and-volumes) (or `--help-accounts`) for the syntax and other permissions
|
|
262
|
+
* see [accounts and volumes](#accounts-and-volumes) (or [`--help-accounts`](https://copyparty.eu/cli/#accounts-help-page)) for the syntax and other permissions
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
### mirrors
|
|
266
|
+
|
|
267
|
+
other places to download copyparty from (non-github links):
|
|
268
|
+
|
|
269
|
+
* https://copyparty.eu/ (hetzner, finland, official mirror):
|
|
270
|
+
* https://copyparty.eu/py = https://copyparty.eu/copyparty-sfx.py = the sfx
|
|
271
|
+
* https://copyparty.eu/en = https://copyparty.eu/copyparty-en.py = the english-only sfx
|
|
272
|
+
* https://copyparty.eu/pyz = https://copyparty.eu/copyparty.pyz = the zipapp
|
|
273
|
+
* https://copyparty.eu/enz = https://copyparty.eu/copyparty-en.pyz = the enterprise pyz
|
|
274
|
+
* https://copyparty.eu/cli = online cli helptext
|
|
259
275
|
|
|
260
276
|
|
|
261
277
|
### at home
|
|
@@ -277,6 +293,7 @@ you may also want these, especially on servers:
|
|
|
277
293
|
|
|
278
294
|
* [contrib/systemd/copyparty.service](contrib/systemd/copyparty.service) to run copyparty as a systemd service (see guide inside)
|
|
279
295
|
* [contrib/systemd/prisonparty.service](contrib/systemd/prisonparty.service) to run it in a chroot (for extra security)
|
|
296
|
+
* [contrib/podman-systemd/](contrib/podman-systemd/) to run copyparty in a Podman container as a systemd service (see guide inside)
|
|
280
297
|
* [contrib/openrc/copyparty](contrib/openrc/copyparty) to run copyparty on Alpine / Gentoo
|
|
281
298
|
* [contrib/rc/copyparty](contrib/rc/copyparty) to run copyparty on FreeBSD
|
|
282
299
|
* [nixos module](#nixos-module) to run copyparty on NixOS hosts
|
|
@@ -371,7 +388,7 @@ small collection of user feedback
|
|
|
371
388
|
|
|
372
389
|
project goals / philosophy
|
|
373
390
|
|
|
374
|
-
* inverse
|
|
391
|
+
* inverse unix philosophy -- do all the things, and do an *okay* job
|
|
375
392
|
* quick drop-in service to get a lot of features in a pinch
|
|
376
393
|
* some of [the alternatives](./docs/versus.md) might be a better fit for you
|
|
377
394
|
* run anywhere, support everything
|
|
@@ -499,6 +516,12 @@ upgrade notes
|
|
|
499
516
|
* CopyParty?
|
|
500
517
|
* nope! the name is either copyparty (all-lowercase) or Copyparty -- it's [one word](https://en.wiktionary.org/wiki/copyparty) after all :>
|
|
501
518
|
|
|
519
|
+
* what is a volflag?
|
|
520
|
+
* per-volume configuration; many (not all) global-options can be set as volflags, and most (not all) volflags can be set as global-options; [complete list of volflags](https://copyparty.eu/cli/#flags-help-page)
|
|
521
|
+
|
|
522
|
+
* what is a volume?
|
|
523
|
+
* a mapping from a URL (`/music/`) to a folder on your server's local filesystem (`C:\Users\ed\Music`) which can then be accessed through copyparty, depending on the permissions and options you set on it -- see [accounts and volumes](#accounts-and-volumes)
|
|
524
|
+
|
|
502
525
|
* can I change the 🌲 spinning pine-tree loading animation?
|
|
503
526
|
* [yeah...](https://github.com/9001/copyparty/tree/hovudstraum/docs/rice#boring-loader-spinner) :-(
|
|
504
527
|
|
|
@@ -546,7 +569,7 @@ per-folder, per-user permissions - if your setup is getting complex, consider m
|
|
|
546
569
|
* much easier to manage, and you can modify the config at runtime with `systemctl reload copyparty` or more conveniently using the `[reload cfg]` button in the control-panel (if the user has `a`/admin in any volume)
|
|
547
570
|
* changes to the `[global]` config section requires a restart to take effect
|
|
548
571
|
|
|
549
|
-
a quick summary can be seen using `--help-accounts`
|
|
572
|
+
a quick summary can be seen using [`--help-accounts`](https://copyparty.eu/cli/#accounts-help-page)
|
|
550
573
|
|
|
551
574
|
configuring accounts/volumes with arguments:
|
|
552
575
|
* `-a usr:pwd` adds account `usr` with password `pwd`
|
|
@@ -585,6 +608,9 @@ examples:
|
|
|
585
608
|
|
|
586
609
|
if you want to grant access to all users who are logged in, the group `acct` will always contain all known users, so for example `-v /mnt/music:music:r,@acct`
|
|
587
610
|
|
|
611
|
+
* to do the opposite, granting access to everyone who is NOT logged in. `*,-@acct` does the trick, for example `-v /srv/welcome:welcome:r,*,-@acct`
|
|
612
|
+
* single users can also be subtracted from a group: `@admins,-james`
|
|
613
|
+
|
|
588
614
|
anyone trying to bruteforce a password gets banned according to `--ban-pw`; default is 24h ban for 9 failed attempts in 1 hour
|
|
589
615
|
|
|
590
616
|
and if you want to use config files instead of commandline args (good!) then here's the same examples as a configfile; save it as `foobar.conf` and use it like this: `python copyparty-sfx.py -c foobar.conf`
|
|
@@ -680,7 +706,7 @@ the main tabs in the ui
|
|
|
680
706
|
* `[🧯]` [unpost](#unpost): undo/delete accidental uploads
|
|
681
707
|
* `[🚀]` and `[🎈]` are the [uploaders](#uploading)
|
|
682
708
|
* `[📂]` mkdir: create directories
|
|
683
|
-
* `[📝]` new-
|
|
709
|
+
* `[📝]` new-file: create a new textfile
|
|
684
710
|
* `[📟]` send-msg: either to server-log or into textfiles if `--urlform save`
|
|
685
711
|
* `[🎺]` audio-player config options
|
|
686
712
|
* `[⚙️]` general client config options
|
|
@@ -793,6 +819,10 @@ to show `/icons/exe.png` and `/icons/elf.gif` as the thumbnail for all `.exe` an
|
|
|
793
819
|
* the supported image formats are [jpg, png, gif, webp, ico](https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types)
|
|
794
820
|
* be careful with svg; chrome will crash if you have too many unique svg files showing on the same page (the limit is 250 or so) -- showing the same handful of svg files thousands of times is ok however
|
|
795
821
|
|
|
822
|
+
note:
|
|
823
|
+
* heif/heifs/heic/heics images usually require the `libvips` [optional dependency](#optional-dependencies) (available in the `iv` docker image, `withFastThumbnails` in nixos)
|
|
824
|
+
* technical trivia: FFmpeg has basic support for tiled heic as of v7.0; need `-show_stream_groups` for correct resolution
|
|
825
|
+
|
|
796
826
|
config file example:
|
|
797
827
|
|
|
798
828
|
```yaml
|
|
@@ -933,6 +963,8 @@ the files will be hashed on the client-side, and each hash is sent to the server
|
|
|
933
963
|
files go into `[ok]` if they exist (and you get a link to where it is), otherwise they land in `[ng]`
|
|
934
964
|
* the main reason filesearch is combined with the uploader is cause the code was too spaghetti to separate it out somewhere else, this is no longer the case but now i've warmed up to the idea too much
|
|
935
965
|
|
|
966
|
+
if you have a "wark" (file-identifier/checksum) then you can also search for that in the [🔎] tab by putting `w = kFpDiztbZc8Z1Lzi` in the `raw` field
|
|
967
|
+
|
|
936
968
|
|
|
937
969
|
### unpost
|
|
938
970
|
|
|
@@ -1059,6 +1091,8 @@ available functions:
|
|
|
1059
1091
|
* `$lpad(text, length, pad_char)`
|
|
1060
1092
|
* `$rpad(text, length, pad_char)`
|
|
1061
1093
|
|
|
1094
|
+
two counters are available; `.n.s` is the nth file in the selection, and `.n.d` the nth file in the folder, for example rename-output `file(.n.d).(ext)` gives `file5.bin`, and `beach-$lpad((.n.s),3,0).(ext)` is `beach-017.jpg` and the initial value of each counter can be set in the textboxes underneath the preset dropdown
|
|
1095
|
+
|
|
1062
1096
|
so,
|
|
1063
1097
|
|
|
1064
1098
|
say you have a file named [`meganeko - Eclipse - 07 Sirius A.mp3`](https://www.youtube.com/watch?v=-dtb0vDPruI) (absolutely fantastic album btw) and the tags are: `Album:Eclipse`, `Artist:meganeko`, `Title:Sirius A`, `tn:7`
|
|
@@ -1094,6 +1128,8 @@ url parameters:
|
|
|
1094
1128
|
|
|
1095
1129
|
* `pw=hunter2` for password auth
|
|
1096
1130
|
* if you enabled `--usernames` then do `pw=username:password` instead
|
|
1131
|
+
* `nopw` disables embedding the password (if provided) into item-URLs in the feed
|
|
1132
|
+
* `nopw=a` disables mentioning the password anywhere at all in the feed; may break some readers
|
|
1097
1133
|
* `recursive` to also include subfolders
|
|
1098
1134
|
* `title=foo` changes the feed title (default: folder name)
|
|
1099
1135
|
* `fext=mp3,opus` only include mp3 and opus files (default: all)
|
|
@@ -1105,6 +1141,28 @@ url parameters:
|
|
|
1105
1141
|
* uppercase = reverse-sort; `M` = oldest file first
|
|
1106
1142
|
|
|
1107
1143
|
|
|
1144
|
+
## opds feeds
|
|
1145
|
+
|
|
1146
|
+
browse and download files from your e-book reader
|
|
1147
|
+
|
|
1148
|
+
enabled with the `opds` volflag or `--opds` global option
|
|
1149
|
+
|
|
1150
|
+
add `?opds` to the end of the url you would like to browse, then input that in your opds client.
|
|
1151
|
+
for example: `https://copyparty.example/books/?opds`.
|
|
1152
|
+
|
|
1153
|
+
to log in with a password, enter it into either of the username or password fields in your client.
|
|
1154
|
+
|
|
1155
|
+
- if you've enabled `--usernames`, then you need to enter both username and password .
|
|
1156
|
+
|
|
1157
|
+
note: some clients (e.g. Moon+ Reader) will not send the password when downloading cover images, which will
|
|
1158
|
+
cause your ip to be banned by copyparty. to work around this, you can grant the [`g` permission](#accounts-and-volumes)
|
|
1159
|
+
to unauthenticated requests and enable [filekeys](#filekeys) to prevent guessing filenames. for example:
|
|
1160
|
+
`-vbooks:books:r,ed:g:c,fk,opds`
|
|
1161
|
+
|
|
1162
|
+
by default, not all file types will be listed in opds feeds. to change this, add the extension to
|
|
1163
|
+
`--opds-exts` (volflag: `opds_exts`), or empty the list to list everything
|
|
1164
|
+
|
|
1165
|
+
|
|
1108
1166
|
## recent uploads
|
|
1109
1167
|
|
|
1110
1168
|
list all recent uploads by clicking "show recent uploads" in the controlpanel
|
|
@@ -1138,6 +1196,7 @@ some highlights:
|
|
|
1138
1196
|
* shows the audio waveform in the seekbar
|
|
1139
1197
|
* not perfectly gapless but can get really close (see settings + eq below); good enough to enjoy gapless albums as intended
|
|
1140
1198
|
* videos can be played as audio, without wasting bandwidth on the video
|
|
1199
|
+
* adding `?v` to the end of an audio/video/image link will make it open in the mediaplayer
|
|
1141
1200
|
|
|
1142
1201
|
click the `play` link next to an audio file, or copy the link target to [share it](https://a.ocv.me/pub/demo/music/Ubiktune%20-%20SOUNDSHOCK%202%20-%20FM%20FUNK%20TERRROR!!/#af-1fbfba61&t=18) (optionally with a timestamp to start playing from, like that example does)
|
|
1143
1202
|
|
|
@@ -1275,7 +1334,7 @@ see [./srv/expand/](./srv/expand/) for usage and examples
|
|
|
1275
1334
|
|
|
1276
1335
|
* and `PREADME.md` / `preadme.md` is shown above directory listings unless `--no-readme` or `.prologue.html`
|
|
1277
1336
|
|
|
1278
|
-
* `README.md` and `*logue.html` can contain placeholder values which are replaced server-side before embedding into directory listings; see `--help-exp`
|
|
1337
|
+
* `README.md` and `*logue.html` can contain placeholder values which are replaced server-side before embedding into directory listings; see [`--help-exp`](https://copyparty.eu/cli/#exp-help-page)
|
|
1279
1338
|
|
|
1280
1339
|
|
|
1281
1340
|
## searching
|
|
@@ -1305,10 +1364,9 @@ using arguments or config files, or a mix of both:
|
|
|
1305
1364
|
* or click the `[reload cfg]` button in the control-panel if the user has `a`/admin in any volume
|
|
1306
1365
|
* changes to the `[global]` config section requires a restart to take effect
|
|
1307
1366
|
|
|
1308
|
-
**NB:** as humongous as this readme is, there is also a lot of undocumented features. Run copyparty with `--help` to see all available global options; all of those can be used in the `[global]` section of config files, and everything listed in `--help-flags` can be used in volumes as volflags.
|
|
1367
|
+
**NB:** as humongous as this readme is, there is also a lot of undocumented features. Run copyparty with [`--help`](https://copyparty.eu/cli/) (or click that link) to see all available global options; all of those can be used in the `[global]` section of config files, and everything listed in [`--help-flags`](https://copyparty.eu/cli/#flags-help-page) can be used in volumes as volflags (per-volume configuration).
|
|
1309
1368
|
* if running in docker/podman, try this: `docker run --rm -it copyparty/ac --help`
|
|
1310
|
-
* or
|
|
1311
|
-
* or if you prefer plaintext, https://ocv.me/copyparty/helptext.txt
|
|
1369
|
+
* or if you prefer plaintext, https://copyparty.eu/helptext.txt
|
|
1312
1370
|
|
|
1313
1371
|
|
|
1314
1372
|
## zeroconf
|
|
@@ -1522,7 +1580,12 @@ tweaking the ui
|
|
|
1522
1580
|
* to sort in music order (album, track, artist, title) with filename as fallback, you could `--sort tags/Circle,tags/.tn,tags/Artist,tags/Title,href`
|
|
1523
1581
|
* to sort by upload date, first enable showing the upload date in the listing with `-e2d -mte +.up_at` and then `--sort tags/.up_at`
|
|
1524
1582
|
|
|
1525
|
-
see [./docs/rice](./docs/rice) for more, including
|
|
1583
|
+
see [./docs/rice](./docs/rice) for more, including:
|
|
1584
|
+
* how to [hide ui-elements](./docs/rice/README.md#hide-ui-elements)
|
|
1585
|
+
* [custom fonts](./docs/rice/README.md#custom-fonts)
|
|
1586
|
+
* [custom loading-spinner](./docs/rice/README.md#boring-loader-spinner)
|
|
1587
|
+
* adding stuff (css/`<meta>`/...) [to the html `<head>` tag](./docs/rice/README.md#head)
|
|
1588
|
+
* [adding your own translation](./docs/rice/README.md#translations)
|
|
1526
1589
|
|
|
1527
1590
|
|
|
1528
1591
|
## opengraph
|
|
@@ -1619,6 +1682,7 @@ the same arguments can be set as volflags, in addition to `d2d`, `d2ds`, `d2t`,
|
|
|
1619
1682
|
|
|
1620
1683
|
note:
|
|
1621
1684
|
* upload-times can be displayed in the file listing by enabling the `.up_at` metadata key, either globally with `-e2d -mte +.up_at` or per-volume with volflags `e2d,mte=+.up_at` (will have a ~17% performance impact on directory listings)
|
|
1685
|
+
* and file checksums can be shown with global-option `-e2d -mte +w` or volflag `e2d,mte=+w` (always active for users with permission `a`)
|
|
1622
1686
|
* `e2tsr` is probably always overkill, since `e2ds`/`e2dsa` would pick up any file modifications and `e2ts` would then reindex those, unless there is a new copyparty version with new parsers and the release note says otherwise
|
|
1623
1687
|
|
|
1624
1688
|
config file example (these options are recommended btw):
|
|
@@ -1789,6 +1853,8 @@ notes:
|
|
|
1789
1853
|
* `:c,magic` enables filetype detection for nameless uploads, same as `--magic`
|
|
1790
1854
|
* needs https://pypi.org/project/python-magic/ `python3 -m pip install --user -U python-magic`
|
|
1791
1855
|
* on windows grab this instead `python3 -m pip install --user -U python-magic-bin`
|
|
1856
|
+
* `cachectl` changes how webbrowser will cache responses (the `Cache-Control` response-header); default is `no-cache` which will prevent repeated downloading of the same file unless necessary (browser will ask copyparty if the file has changed)
|
|
1857
|
+
* adding `?cache` to a link will override this with "fully cache this for 69 seconds"; `?cache=321` is 321 seconds, and `?cache=i` is 7 days
|
|
1792
1858
|
|
|
1793
1859
|
|
|
1794
1860
|
## database location
|
|
@@ -1895,7 +1961,7 @@ trigger a program on uploads, renames etc ([examples](./bin/hooks/))
|
|
|
1895
1961
|
|
|
1896
1962
|
you can set hooks before and/or after an event happens, and currently you can hook uploads, moves/renames, and deletes
|
|
1897
1963
|
|
|
1898
|
-
there's a bunch of flags and stuff, see `--help-hooks`
|
|
1964
|
+
there's a bunch of flags and stuff, see [`--help-hooks`](https://copyparty.eu/cli/#hooks-help-page)
|
|
1899
1965
|
|
|
1900
1966
|
if you want to write your own hooks, see [devnotes](./docs/devnotes.md#event-hooks)
|
|
1901
1967
|
|
|
@@ -2418,6 +2484,8 @@ it comes with a [systemd service](./contrib/systemd/copyparty@.service) as well
|
|
|
2418
2484
|
|
|
2419
2485
|
after installing, start either the system service or the user service and navigate to http://127.0.0.1:3923 for further instructions (unless you already edited the config files, in which case you are good to go, probably)
|
|
2420
2486
|
|
|
2487
|
+
> to start the systemd service, either do `systemctl start --user copyparty` to start it as your own user, or `systemctl start copyparty@bob` to use unix-user `bob`
|
|
2488
|
+
|
|
2421
2489
|
|
|
2422
2490
|
## fedora package
|
|
2423
2491
|
|
|
@@ -2504,6 +2572,10 @@ copyparty on NixOS is configured via `services.copyparty` options, for example:
|
|
|
2504
2572
|
```nix
|
|
2505
2573
|
services.copyparty = {
|
|
2506
2574
|
enable = true;
|
|
2575
|
+
# the user to run the service as
|
|
2576
|
+
user = "copyparty";
|
|
2577
|
+
# the group to run the service as
|
|
2578
|
+
group = "copyparty";
|
|
2507
2579
|
# directly maps to values in the [global] section of the copyparty config.
|
|
2508
2580
|
# see `copyparty --help` for available options
|
|
2509
2581
|
settings = {
|
|
@@ -2528,6 +2600,12 @@ services.copyparty = {
|
|
|
2528
2600
|
k.passwordFile = "/run/keys/copyparty/k_password";
|
|
2529
2601
|
};
|
|
2530
2602
|
|
|
2603
|
+
# create a group
|
|
2604
|
+
groups = {
|
|
2605
|
+
# users "ed" and "k" are part of the group g1
|
|
2606
|
+
g1 = [ "ed" "k" ];
|
|
2607
|
+
};
|
|
2608
|
+
|
|
2531
2609
|
# create a volume
|
|
2532
2610
|
volumes = {
|
|
2533
2611
|
# create a volume at "/" (the webroot), which will
|
|
@@ -2620,6 +2698,15 @@ quick summary of more eccentric web-browsers trying to view a directory index:
|
|
|
2620
2698
|
<p align="center"><img src="https://github.com/user-attachments/assets/88deab3d-6cad-4017-8841-2f041472b853" /></p>
|
|
2621
2699
|
|
|
2622
2700
|
|
|
2701
|
+
# server hall of fame
|
|
2702
|
+
|
|
2703
|
+
unexpected things that run copyparty:
|
|
2704
|
+
|
|
2705
|
+
* an old [allwinner](https://a.ocv.me/pub/g/nerd-stuff/cpp/servers/aallwinner.jpg) android tv-box (ziptie-strapped to an HDD) running a firmware which flips the CPU into Big-Endian mode early during boot
|
|
2706
|
+
* copyparty is [certified BE ready](https://a.ocv.me/pub/g/nerd-stuff/cpp/servers/be-ready.png)
|
|
2707
|
+
* a [wristwatch](https://a.ocv.me/pub/g/nerd-stuff/cpp/servers/clockyparty.jpg)
|
|
2708
|
+
|
|
2709
|
+
|
|
2623
2710
|
# client examples
|
|
2624
2711
|
|
|
2625
2712
|
interact with copyparty using non-browser clients
|
|
@@ -2807,7 +2894,7 @@ some notes on hardening
|
|
|
2807
2894
|
* cors doesn't work right otherwise
|
|
2808
2895
|
* if you allow anonymous uploads or otherwise don't trust the contents of a volume, you can prevent XSS with volflag `nohtml`
|
|
2809
2896
|
* this returns html documents as plaintext, and also disables markdown rendering
|
|
2810
|
-
* when running behind a reverse-proxy, listen on a unix-socket for tighter access control (and more performance); see [reverse-proxy](#reverse-proxy) or `--help-bind`
|
|
2897
|
+
* when running behind a reverse-proxy, listen on a unix-socket for tighter access control (and more performance); see [reverse-proxy](#reverse-proxy) or [`--help-bind`](https://copyparty.eu/cli/#bind-help-page)
|
|
2811
2898
|
|
|
2812
2899
|
safety profiles:
|
|
2813
2900
|
|
|
@@ -2895,7 +2982,7 @@ dirkeys are generated based on another salt (`--dk-salt`) + filesystem-path and
|
|
|
2895
2982
|
|
|
2896
2983
|
## password hashing
|
|
2897
2984
|
|
|
2898
|
-
you can hash passwords before putting them into config files / providing them as arguments; see `--help-pwhash` for all the details
|
|
2985
|
+
you can hash passwords before putting them into config files / providing them as arguments; see [`--help-pwhash`](https://copyparty.eu/cli/#pwhash-help-page) for all the details
|
|
2899
2986
|
|
|
2900
2987
|
`--ah-alg argon2` enables it, and if you have any plaintext passwords then it'll print the hashed versions on startup so you can replace them
|
|
2901
2988
|
|
|
@@ -2921,6 +3008,11 @@ if [cfssl](https://github.com/cloudflare/cfssl/releases/latest) is installed, co
|
|
|
2921
3008
|
* this will be a self-signed certificate so you must install your `ca.pem` into all your browsers/devices
|
|
2922
3009
|
* if you want to avoid the hassle of distributing certs manually, please consider using a reverse proxy
|
|
2923
3010
|
|
|
3011
|
+
to install cfssl on windows:
|
|
3012
|
+
* [download](https://github.com/cloudflare/cfssl/releases/latest) `cfssl_windows_amd64.exe`, `cfssljson_windows_amd64.exe`, `cfssl-certinfo_windows_amd64.exe`
|
|
3013
|
+
* rename them to `cfssl.exe`, `cfssljson.exe`, `cfssl-certinfo.exe`
|
|
3014
|
+
* put them in PATH, for example inside `c:\windows\system32`
|
|
3015
|
+
|
|
2924
3016
|
|
|
2925
3017
|
# recovering from crashes
|
|
2926
3018
|
|
|
@@ -2979,7 +3071,9 @@ enable sending [zeromq messages](#zeromq) from event-hooks: `pyzmq`
|
|
|
2979
3071
|
|
|
2980
3072
|
enable [smb](#smb-server) support (**not** recommended): `impacket==0.12.0`
|
|
2981
3073
|
|
|
2982
|
-
`pyvips` gives higher quality thumbnails than `Pillow` and is 320% faster, using 270% more ram
|
|
3074
|
+
`pyvips` gives higher quality thumbnails than `Pillow` and is 320% faster, using 270% more ram
|
|
3075
|
+
* to install `pyvips` on Linux: `sudo apt install libvips42 && python3 -m pip install --user -U pyvips`
|
|
3076
|
+
* to install `pyvips` on windows: `pip install --user -U "pyvips[binary]"`
|
|
2983
3077
|
|
|
2984
3078
|
to install FFmpeg on Windows, grab [a recent build](https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z) -- you need `ffmpeg.exe` and `ffprobe.exe` from inside the `bin` folder; copy them into `C:\Windows\System32` or any other folder that's in your `%PATH%`
|
|
2985
3079
|
|
|
@@ -3017,6 +3111,20 @@ example: `PRTY_NO_PIL=1 python3 copyparty-sfx.py`
|
|
|
3017
3111
|
* python2.7 on windows: `PRTY_NO_FFMPEG` + `PRTY_NO_FFPROBE` saves startup time
|
|
3018
3112
|
|
|
3019
3113
|
|
|
3114
|
+
### dependency unvendoring
|
|
3115
|
+
|
|
3116
|
+
force use of system modules instead of the vendored versions:
|
|
3117
|
+
|
|
3118
|
+
| env-var | what it does |
|
|
3119
|
+
| -------------------- | ------------ |
|
|
3120
|
+
| `PRTY_SYS_ALL` | all of the below |
|
|
3121
|
+
| `PRTY_SYS_DNSLIB` | replace [stolen/dnslib](./copyparty/stolen/dnslib) with [upstream](https://pypi.org/project/dnslib/) |
|
|
3122
|
+
| `PRTY_SYS_IFADDR` | replace [stolen/ifaddr](./copyparty/stolen/ifaddr) with [upstream](https://pypi.org/project/ifaddr/) |
|
|
3123
|
+
| `PRTY_SYS_QRCG` | replace [stolen/qrcodegen.py](./copyparty/stolen/qrcodegen.py) with [upstream](https://github.com/nayuki/QR-Code-generator/blob/master/python/qrcodegen.py) |
|
|
3124
|
+
|
|
3125
|
+
to debug, run copyparty with `PRTY_MODSPEC=1` to see where it's getting each module from
|
|
3126
|
+
|
|
3127
|
+
|
|
3020
3128
|
## optional gpl stuff
|
|
3021
3129
|
|
|
3022
3130
|
some bundled tools have copyleft dependencies, see [./bin/#mtag](bin/#mtag)
|
|
@@ -3062,7 +3170,8 @@ another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty
|
|
|
3062
3170
|
run it by doubleclicking it, or try typing `python copyparty.pyz` in your terminal/console/commandline/telex if that fails
|
|
3063
3171
|
|
|
3064
3172
|
it is a python [zipapp](https://docs.python.org/3/library/zipapp.html) meaning it doesn't have to unpack its own python code anywhere to run, so if the filesystem is busted it has a better chance of getting somewhere
|
|
3065
|
-
|
|
3173
|
+
|
|
3174
|
+
> there is also [copyparty-en.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty-en.pyz), english-only and without smb support (enterprise-friendly)
|
|
3066
3175
|
|
|
3067
3176
|
|
|
3068
3177
|
# install on android
|
|
@@ -3079,6 +3188,8 @@ if you want thumbnails (photos+videos) and you're okay with spending another 132
|
|
|
3079
3188
|
|
|
3080
3189
|
* or if you want to use `vips` for photo-thumbs instead, `pkg install libvips && python -m pip install --user -U wheel && python -m pip install --user -U pyvips && (cd /data/data/com.termux/files/usr/lib/; ln -s libgobject-2.0.so{,.0}; ln -s libvips.so{,.42})`
|
|
3081
3190
|
|
|
3191
|
+
if you are suddenly unable to access storage (permission issues), try forcequitting termux, revoke all of its permissions in android settings, and run the command `termux-setup-storage`
|
|
3192
|
+
|
|
3082
3193
|
|
|
3083
3194
|
# install on iOS
|
|
3084
3195
|
|