diff --git a/README.md b/README.md index c5e03b10..0ef120ac 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ try the **[read-only demo server](https://a.ocv.me/pub/demo/)** 👀 running fro * [optional dependencies](#optional-dependencies) - install these to enable bonus features * [optional gpl stuff](#optional-gpl-stuff) * [sfx](#sfx) - the self-contained "binary" - * [copyparty.exe](#copypartyexe) - download [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) or [copyparty64.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty64.exe) + * [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+) * [install on android](#install-on-android) * [reporting bugs](#reporting-bugs) - ideas for context to include in bug reports * [devnotes](#devnotes) - for build instructions etc, see [./docs/devnotes.md](./docs/devnotes.md) @@ -1376,15 +1376,19 @@ you can reduce the sfx size by repacking it; see [./docs/devnotes.md#sfx-repack] ## copyparty.exe -download [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) or [copyparty64.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty64.exe) +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+) ![copyparty-exe-fs8](https://user-images.githubusercontent.com/241032/194707422-cb7f66c9-41a2-4cb9-8dbc-2ab866cd4338.png) -can be convenient on old machines where installing python is problematic, however is **not recommended** and should be considered a last resort -- if possible, please use **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** instead +can be convenient on machines where installing python is problematic, however is **not recommended** -- if possible, please use **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** instead -* [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) is compatible with 32bit windows7, which means it uses an ancient copy of python (3.7.9) which cannot be upgraded and will definitely become a security hazard at some point +* [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) runs on win8 or newer, was compiled on win10, does thumbnails + media tags, and is *currently* safe to use, but any future python/expat/pillow CVEs can only be remedied by downloading a newer version of the exe -* [copyparty64.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty64.exe) is identical except 64bit so it [works in WinPE](https://user-images.githubusercontent.com/241032/205454984-e6b550df-3c49-486d-9267-1614078dd0dd.png) + * on win8 it needs [vc redist 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48145), on win10 it just works + +* dangerous: [copyparty32.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty32.exe) is compatible with windows7, which means it uses an ancient copy of python (3.7.9) which cannot be upgraded and should never be exposed to the internet (LAN is fine) + +* dangerous and deprecated: [copyparty64.exe](https://github.com/9001/copyparty/releases/download/v1.6.5/copyparty64.exe) lets you [run copyparty in WinPE](https://user-images.githubusercontent.com/241032/205454984-e6b550df-3c49-486d-9267-1614078dd0dd.png) and is otherwise completely useless meanwhile [copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py) instead relies on your system python which gives better performance and will stay safe as long as you keep your python install up-to-date diff --git a/bin/hooks/README.md b/bin/hooks/README.md index 594660f6..637d9c71 100644 --- a/bin/hooks/README.md +++ b/bin/hooks/README.md @@ -2,15 +2,24 @@ standalone programs which are executed by copyparty when an event happens (uploa these programs either take zero arguments, or a filepath (the affected file), or a json message with filepath + additional info +run copyparty with `--help-hooks` for usage details / hook type explanations (xbu/xau/xiu/xbr/xar/xbd/xad) + > **note:** in addition to event hooks (the stuff described here), copyparty has another api to run your programs/scripts while providing way more information such as audio tags / video codecs / etc and optionally daisychaining data between scripts in a processing pipeline; if that's what you want then see [mtp plugins](../mtag/) instead # after upload * [notify.py](notify.py) shows a desktop notification ([example](https://user-images.githubusercontent.com/241032/215335767-9c91ed24-d36e-4b6b-9766-fb95d12d163f.png)) + * [notify2.py](notify2.py) uses the json API to show more context * [discord-announce.py](discord-announce.py) announces new uploads on discord using webhooks ([example](https://user-images.githubusercontent.com/241032/215304439-1c1cb3c8-ec6f-4c17-9f27-81f969b1811a.png)) * [reject-mimetype.py](reject-mimetype.py) rejects uploads unless the mimetype is acceptable +# upload batches +these are `--xiu` hooks; unlike `xbu` and `xau` (which get executed on every single file), `xiu` hooks are given a list of recent uploads on STDIN after the server has gone idle for N seconds, reducing server load + providing more context +* [xiu.py](xiu.py) is a "minimal" example showing a list of filenames + total filesize +* [xiu-sha.py](xiu-sha.py) produces a sha512 checksum list in the volume root + + # before upload * [reject-extension.py](reject-extension.py) rejects uploads if they match a list of file extensions diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 499d61f9..d0ef036e 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -452,7 +452,7 @@ var Ls = { "ur_aun": "All {0} uploads failed, sorry", "ur_1sn": "File was NOT found on server", "ur_asn": "The {0} files were NOT found on server", - "ur_um": "Finished;\n{0} uplads OK,\n{1} uploads failed, sorry", + "ur_um": "Finished;\n{0} uploads OK,\n{1} uploads failed, sorry", "ur_sm": "Finished;\n{0} files found on server,\n{1} files NOT found on server", "lang_set": "refresh to make the change take effect?", diff --git a/docs/cursed-usecases/README.md b/docs/cursed-usecases/README.md index c8ec17cd..a249eb1f 100644 --- a/docs/cursed-usecases/README.md +++ b/docs/cursed-usecases/README.md @@ -17,6 +17,6 @@ problem: `svchost.exe` is using 100% of a cpu core, and upon further inspection "solution": create a virtual filesystem which is intentionally slow and trick windows into reading it from there instead * create a file called `AppxManifest.xml` and put something dumb in it -* serve the file from a copyparty instance with `--rsp-slp=9` so every request will hang for 9 sec +* serve the file from a copyparty instance with `--rsp-slp=1` so every request will hang for 1 sec * `net use m: http://127.0.0.1:3993/` (mount copyparty using the windows-native webdav client) * `mklink /d c:\windows\systemapps\microsoftwindows.client.cbs_cw5n1h2txyewy\AppxManifest.xml m:\AppxManifest.xml` diff --git a/docs/devnotes.md b/docs/devnotes.md index 798596a2..5582216b 100644 --- a/docs/devnotes.md +++ b/docs/devnotes.md @@ -25,13 +25,15 @@ some improvement ideas -* the JS is a mess -- a preact rewrite would be nice +* the JS is a mess -- a ~~preact~~ rewrite would be nice * preferably without build dependencies like webpack/babel/node.js, maybe a python thing to assemble js files into main.js * good excuse to look at using virtual lists (browsers start to struggle when folders contain over 5000 files) + * maybe preact / vdom isn't the best choice, could just wait for the Next Big Thing * the UX is a mess -- a proper design would be nice * very organic (much like the python/js), everything was an afterthought * true for both the layout and the visual flair * something like the tron board-room ui (or most other hollywood ones, like ironman) would be :100: + * would preferably keep the information density, just more organized yet [not too boring](https://blog.rachelbinx.com/2023/02/unbearable-sameness/) * some of the python files are way too big * `up2k.py` ended up doing all the file indexing / db management * `httpcli.py` should be separated into modules in general diff --git a/docs/versus.md b/docs/versus.md index 98e846e5..cffc9f9f 100644 --- a/docs/versus.md +++ b/docs/versus.md @@ -7,6 +7,20 @@ there is probably some unintentional bias so please submit corrections currently up to date with [awesome-selfhosted](https://github.com/awesome-selfhosted/awesome-selfhosted) but that probably won't last +## symbol legends + +### ...in feature matrices: +* `█` = absolutely +* `╱` = partially +* `•` = maybe? +* ` ` = nope + +### ...in reviews: +* ✅ = advantages over copyparty +* 🔵 = similarities +* ⚠️ = disadvantages (something copyparty does "better") + + ## toc * top @@ -37,6 +51,8 @@ currently up to date with [awesome-selfhosted](https://github.com/awesome-selfho * [gimme-that](#gimme-that) * [ass](#ass) * [linx](#linx) + * [h5ai](#h5ai) + * [autoindex](#autoindex) * [briefly considered](#briefly-considered) @@ -63,8 +79,8 @@ the table headers in the matrixes below are the different softwares, with a quic the softwares, * `a` = [copyparty](https://github.com/9001/copyparty) -* `b` = [hfs2](https://github.com/rejetto/hfs2) -* `c` = [hfs3](https://www.rejetto.com/hfs/) +* `b` = [hfs2](https://rejetto.com/hfs/) +* `c` = [hfs3](https://github.com/rejetto/hfs) * `d` = [nextcloud](https://github.com/nextcloud/server) * `e` = [seafile](https://github.com/haiwen/seafile) * `f` = [rclone](https://github.com/rclone/rclone), specifically `rclone serve webdav .` @@ -363,7 +379,8 @@ symbol legend, # reviews * ✅ are advantages over copyparty -* ⚠️ are disadvantages +* 🔵 are similarities +* ⚠️ are disadvantages (something copyparty does "better") ## [copyparty](https://github.com/9001/copyparty) * resumable uploads which are verified server-side @@ -371,7 +388,7 @@ symbol legend, * both of the above are surprisingly uncommon features * very cross-platform (python, no dependencies) -## [hfs2](https://github.com/rejetto/hfs2) +## [hfs2](https://rejetto.com/hfs/) * the OG, the legend * ⚠️ uploads not resumable / accelerated / integrity-checked * ⚠️ on cloudflare: max upload size 100 MiB @@ -380,7 +397,7 @@ symbol legend, * vfs with gui config, per-volume permissions * starting to show its age, hence the rewrite: -## [hfs3](https://www.rejetto.com/hfs/) +## [hfs3](https://github.com/rejetto/hfs) * nodejs; cross-platform * vfs with gui config, per-volume permissions * still early development, let's revisit later @@ -434,12 +451,12 @@ symbol legend, * ⚠️ on cloudflare: max upload size 100 MiB * ⚠️ doesn't support crazy filenames * ✅ per-url access control (copyparty is per-volume) -* basic but really snappy ui -* upload, rename, delete, ... see feature matrix +* 🔵 basic but really snappy ui +* 🔵 upload, rename, delete, ... see feature matrix ## [chibisafe](https://github.com/chibisafe/chibisafe) * nodejs; recommends docker -* *it has upload segmenting!* +* 🔵 *it has upload segmenting!* * ⚠️ but uploads are still not resumable / accelerated / integrity-checked * ⚠️ not portable * ⚠️ isolated on-disk file hierarchy, incompatible with other software @@ -456,7 +473,7 @@ symbol legend, ## [kodbox](https://github.com/kalcaddle/kodbox) * this thing is insane * php; [docker](https://hub.docker.com/r/kodcloud/kodbox) -* *upload segmenting, acceleration, and integrity checking!* +* 🔵 *upload segmenting, acceleration, and integrity checking!* * ⚠️ but uploads are not resumable(?) * ⚠️ not portable * ⚠️ isolated on-disk file hierarchy, incompatible with other software @@ -483,17 +500,17 @@ symbol legend, * ⚠️ but no directory tree for navigation * ✅ user signup * ✅ command runner / remote shell -* supposed to have write-only folders but couldn't get it to work +* 🔵 supposed to have write-only folders but couldn't get it to work ## [filegator](https://github.com/filegator/filegator) * go; cross-platform (windows, linux, mac) +* 🔵 *it has upload segmenting and acceleration* + * ⚠️ but uploads are still not integrity-checked * ⚠️ http only; no webdav / ftp / zeroconf * ⚠️ does not support symlinks * ⚠️ expensive download-as-zip feature * ⚠️ doesn't support crazy filenames * ⚠️ limited file search -* *it has upload segmenting and acceleration* - * ⚠️ but uploads are still not integrity-checked ## [updog](https://github.com/sc0tfree/updog) * python; cross-platform @@ -510,8 +527,8 @@ symbol legend, * ⚠️ on cloudflare: max upload size 100 MiB * ✅ cool clipboard widget * copyparty: the markdown editor is an ok substitute -* read-only and upload-only modes (same as copyparty's write-only) -* https, webdav +* 🔵 read-only and upload-only modes (same as copyparty's write-only) +* 🔵 https, webdav, but no ftp ## [gimme-that](https://github.com/nejdetckenobi/gimme-that) * python, but with c dependencies @@ -520,7 +537,7 @@ symbol legend, * ⚠️ on cloudflare: max upload size 100 MiB * ⚠️ weird folder structure for uploads * ✅ clamav antivirus check on upload! neat -* optional max-filesize, os-notification on uploads +* 🔵 optional max-filesize, os-notification on uploads * copyparty: os-notification available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/notify.py) ## [ass](https://github.com/tycrek/ass) @@ -544,7 +561,7 @@ symbol legend, * originally [andreimarcu/linx-server](https://github.com/andreimarcu/linx-server) but development has ended * ⚠️ uploads not resumable / accelerated / integrity-checked * ⚠️ on cloudflare: max upload size 100 MiB -* some of its unique features have been added to copyparty as former linx users have migrated +* 🔵 some of its unique features have been added to copyparty as former linx users have migrated * file expiration timers, filename randomization * ✅ password-protected files * copyparty: password-protected folders + filekeys to skip the folder password seem to cover most usecases @@ -554,8 +571,19 @@ symbol legend, * copyparty: available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/wget.py) * ✅ can use S3 as storage backend; copyparty relies on rclone-mount for that +## [h5ai](https://larsjung.de/h5ai/) +* ⚠️ read only; no upload/move/delete +* ⚠️ search hits the filesystem directly; not indexed/cached +* ✅ slick ui +* ✅ in-browser qr generator to share URLs +* 🔵 directory tree, image viewer, thumbnails, download-as-tar + +## [autoindex](https://github.com/nielsAD/autoindex) +* ⚠️ read only; no upload/move/delete +* ✅ directory cache for faster browsing of cloud storage + * copyparty: local index/cache for recursive search (names/attrs/tags), but not for browsing + # briefly considered * [pydio](https://github.com/pydio/cells): python/agpl3, looks great, fantastic ux -- but needs mariadb, systemwide install * [gossa](https://github.com/pldubouilh/gossa): go/mit, minimalistic, basic file upload, text editor, mkdir and rename (no delete/move) -* [h5ai](https://larsjung.de/h5ai/): php/mit, slick ui, image viewer, directory tree, no upload feature