copyparty 1.15.5__tar.gz → 1.15.6__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.
Files changed (121) hide show
  1. {copyparty-1.15.5 → copyparty-1.15.6}/PKG-INFO +61 -23
  2. {copyparty-1.15.5 → copyparty-1.15.6}/README.md +60 -22
  3. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/__main__.py +5 -4
  4. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/__version__.py +2 -2
  5. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/authsrv.py +1 -1
  6. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/cfg.py +3 -1
  7. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/httpcli.py +50 -23
  8. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/mtag.py +1 -1
  9. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/ssdp.py +1 -1
  10. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/tcpsrv.py +1 -1
  11. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/up2k.py +52 -29
  12. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/util.py +1 -1
  13. copyparty-1.15.6/copyparty/web/browser.css.gz +0 -0
  14. copyparty-1.15.6/copyparty/web/browser.js.gz +0 -0
  15. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty.egg-info/PKG-INFO +61 -23
  16. copyparty-1.15.5/copyparty/web/browser.css.gz +0 -0
  17. copyparty-1.15.5/copyparty/web/browser.js.gz +0 -0
  18. {copyparty-1.15.5 → copyparty-1.15.6}/LICENSE +0 -0
  19. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/__init__.py +0 -0
  20. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/bos/__init__.py +0 -0
  21. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/bos/bos.py +0 -0
  22. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/bos/path.py +0 -0
  23. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/broker_mp.py +0 -0
  24. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/broker_mpw.py +0 -0
  25. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/broker_thr.py +0 -0
  26. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/broker_util.py +0 -0
  27. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/cert.py +0 -0
  28. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/dxml.py +0 -0
  29. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/fsutil.py +0 -0
  30. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/ftpd.py +0 -0
  31. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/httpconn.py +0 -0
  32. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/httpsrv.py +0 -0
  33. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/ico.py +0 -0
  34. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/mdns.py +0 -0
  35. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/metrics.py +0 -0
  36. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/multicast.py +0 -0
  37. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/pwhash.py +0 -0
  38. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/res/COPYING.txt +0 -0
  39. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/res/__init__.py +0 -0
  40. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/res/insecure.pem +0 -0
  41. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/smbd.py +0 -0
  42. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/star.py +0 -0
  43. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/__init__.py +0 -0
  44. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/dnslib/__init__.py +0 -0
  45. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/dnslib/bimap.py +0 -0
  46. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/dnslib/bit.py +0 -0
  47. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/dnslib/buffer.py +0 -0
  48. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/dnslib/dns.py +0 -0
  49. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/dnslib/label.py +0 -0
  50. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/dnslib/lex.py +0 -0
  51. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/dnslib/ranges.py +0 -0
  52. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/ifaddr/__init__.py +0 -0
  53. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/ifaddr/_posix.py +0 -0
  54. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/ifaddr/_shared.py +0 -0
  55. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/ifaddr/_win32.py +0 -0
  56. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/qrcodegen.py +0 -0
  57. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/stolen/surrogateescape.py +0 -0
  58. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/sutil.py +0 -0
  59. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/svchub.py +0 -0
  60. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/szip.py +0 -0
  61. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/tftpd.py +0 -0
  62. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/th_cli.py +0 -0
  63. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/th_srv.py +0 -0
  64. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/u2idx.py +0 -0
  65. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/a/__init__.py +0 -0
  66. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/a/partyfuse.py +0 -0
  67. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/a/u2c.py +0 -0
  68. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/a/webdav-cfg.bat +0 -0
  69. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/baguettebox.js.gz +0 -0
  70. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/browser.html +0 -0
  71. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/browser2.html +0 -0
  72. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/cf.html +0 -0
  73. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/dbg-audio.js.gz +0 -0
  74. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/dd/2.png +0 -0
  75. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/dd/3.png +0 -0
  76. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/dd/4.png +0 -0
  77. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/dd/5.png +0 -0
  78. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/dd/__init__.py +0 -0
  79. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/__init__.py +0 -0
  80. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/busy.mp3.gz +0 -0
  81. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/easymde.css.gz +0 -0
  82. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/easymde.js.gz +0 -0
  83. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/fuse.py +0 -0
  84. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/marked.js.gz +0 -0
  85. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/mini-fa.css.gz +0 -0
  86. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/mini-fa.woff +0 -0
  87. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/prism.css.gz +0 -0
  88. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/prism.js.gz +0 -0
  89. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/prismd.css.gz +0 -0
  90. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/scp.woff2 +0 -0
  91. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/sha512.ac.js.gz +0 -0
  92. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/deps/sha512.hw.js.gz +0 -0
  93. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/md.css.gz +0 -0
  94. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/md.html +0 -0
  95. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/md.js.gz +0 -0
  96. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/md2.css.gz +0 -0
  97. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/md2.js.gz +0 -0
  98. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/mde.css.gz +0 -0
  99. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/mde.html +0 -0
  100. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/mde.js.gz +0 -0
  101. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/msg.css.gz +0 -0
  102. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/msg.html +0 -0
  103. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/shares.css.gz +0 -0
  104. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/shares.html +0 -0
  105. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/shares.js.gz +0 -0
  106. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/splash.css.gz +0 -0
  107. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/splash.html +0 -0
  108. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/splash.js.gz +0 -0
  109. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/svcs.html +0 -0
  110. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/svcs.js.gz +0 -0
  111. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/ui.css.gz +0 -0
  112. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/up2k.js.gz +0 -0
  113. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/util.js.gz +0 -0
  114. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty/web/w.hash.js.gz +0 -0
  115. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty.egg-info/SOURCES.txt +0 -0
  116. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty.egg-info/dependency_links.txt +0 -0
  117. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty.egg-info/entry_points.txt +0 -0
  118. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty.egg-info/requires.txt +0 -0
  119. {copyparty-1.15.5 → copyparty-1.15.6}/copyparty.egg-info/top_level.txt +0 -0
  120. {copyparty-1.15.5 → copyparty-1.15.6}/pyproject.toml +0 -0
  121. {copyparty-1.15.5 → copyparty-1.15.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: copyparty
3
- Version: 1.15.5
3
+ Version: 1.15.6
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
@@ -137,9 +137,10 @@ turn almost any device into a file server with resumable uploads/downloads using
137
137
  * [identity providers](#identity-providers) - replace copyparty passwords with oauth and such
138
138
  * [user-changeable passwords](#user-changeable-passwords) - if permitted, users can change their own passwords
139
139
  * [using the cloud as storage](#using-the-cloud-as-storage) - connecting to an aws s3 bucket and similar
140
- * [hiding from google](#hiding-from-google) - tell search engines you dont wanna be indexed
140
+ * [hiding from google](#hiding-from-google) - tell search engines you don't wanna be indexed
141
141
  * [themes](#themes)
142
142
  * [complete examples](#complete-examples)
143
+ * [listen on port 80 and 443](#listen-on-port-80-and-443) - become a *real* webserver
143
144
  * [reverse-proxy](#reverse-proxy) - running copyparty next to other websites
144
145
  * [real-ip](#real-ip) - teaching copyparty how to see client IPs
145
146
  * [prometheus](#prometheus) - metrics/stats can be enabled
@@ -168,7 +169,7 @@ turn almost any device into a file server with resumable uploads/downloads using
168
169
  * [https](#https) - both HTTP and HTTPS are accepted
169
170
  * [recovering from crashes](#recovering-from-crashes)
170
171
  * [client crashes](#client-crashes)
171
- * [frefox wsod](#frefox-wsod) - firefox 87 can crash during uploads
172
+ * [firefox wsod](#firefox-wsod) - firefox 87 can crash during uploads
172
173
  * [HTTP API](#HTTP-API) - see [devnotes](./docs/devnotes.md#http-api)
173
174
  * [dependencies](#dependencies) - mandatory deps
174
175
  * [optional dependencies](#optional-dependencies) - install these to enable bonus features
@@ -635,7 +636,7 @@ it does static images with Pillow / pyvips / FFmpeg, and uses FFmpeg for video f
635
636
  * pyvips is 3x faster than Pillow, Pillow is 3x faster than FFmpeg
636
637
  * disable thumbnails for specific volumes with volflag `dthumb` for all, or `dvthumb` / `dathumb` / `dithumb` for video/audio/images only
637
638
 
638
- audio files are covnerted into spectrograms using FFmpeg unless you `--no-athumb` (and some FFmpeg builds may need `--th-ff-swr`)
639
+ audio files are converted into spectrograms using FFmpeg unless you `--no-athumb` (and some FFmpeg builds may need `--th-ff-swr`)
639
640
 
640
641
  images with the following names (see `--th-covers`) become the thumbnail of the folder they're in: `folder.png`, `folder.jpg`, `cover.png`, `cover.jpg`
641
642
  * the order is significant, so if both `cover.png` and `folder.jpg` exist in a folder, it will pick the first matching `--th-covers` entry (`folder.jpg`)
@@ -721,7 +722,7 @@ see [up2k](./docs/devnotes.md#up2k) for details on how it works, or watch a [dem
721
722
 
722
723
  **protip:** if you enable `favicon` in the `[⚙️] settings` tab (by typing something into the textbox), the icon in the browser tab will indicate upload progress -- also, the `[🔔]` and/or `[🔊]` switches enable visible and/or audible notifications on upload completion
723
724
 
724
- the up2k UI is the epitome of polished inutitive experiences:
725
+ the up2k UI is the epitome of polished intuitive experiences:
725
726
  * "parallel uploads" specifies how many chunks to upload at the same time
726
727
  * `[🏃]` analysis of other files should continue while one is uploading
727
728
  * `[🥔]` shows a simpler UI for faster uploads from slow devices
@@ -770,7 +771,7 @@ you can unpost even if you don't have regular move/delete access, however only f
770
771
 
771
772
  ### self-destruct
772
773
 
773
- uploads can be given a lifetime, afer which they expire / self-destruct
774
+ uploads can be given a lifetime, after which they expire / self-destruct
774
775
 
775
776
  the feature must be enabled per-volume with the `lifetime` [upload rule](#upload-rules) which sets the upper limit for how long a file gets to stay on the server
776
777
 
@@ -797,7 +798,7 @@ the control-panel shows the ETA for all incoming files , but only for files bei
797
798
 
798
799
  cut/paste, rename, and delete files/folders (if you have permission)
799
800
 
800
- file selection: click somewhere on the line (not the link itsef), then:
801
+ file selection: click somewhere on the line (not the link itself), then:
801
802
  * `space` to toggle
802
803
  * `up/down` to move
803
804
  * `shift-up/down` to move-and-select
@@ -991,6 +992,8 @@ see [./srv/expand/](./srv/expand/) for usage and examples
991
992
 
992
993
  * files named `README.md` / `readme.md` will be rendered after directory listings unless `--no-readme` (but `.epilogue.html` takes precedence)
993
994
 
995
+ * and `PREADME.md` / `preadme.md` is shown above directory listings unless `--no-readme` or `.prologue.html`
996
+
994
997
  * `README.md` and `*logue.html` can contain placeholder values which are replaced server-side before embedding into directory listings; see `--help-exp`
995
998
 
996
999
 
@@ -1042,7 +1045,11 @@ uses [multicast dns](https://en.wikipedia.org/wiki/Multicast_DNS) to give copypa
1042
1045
 
1043
1046
  all enabled services ([webdav](#webdav-server), [ftp](#ftp-server), [smb](#smb-server)) will appear in mDNS-aware file managers (KDE, gnome, macOS, ...)
1044
1047
 
1045
- the domain will be http://partybox.local if the machine's hostname is `partybox` unless `--name` specifies soemthing else
1048
+ the domain will be `partybox.local` if the machine's hostname is `partybox` unless `--name` specifies something else
1049
+
1050
+ and the web-UI will be available at http://partybox.local:3923/
1051
+
1052
+ * if you want to get rid of the `:3923` so you can use http://partybox.local/ instead then see [listen on port 80 and 443](#listen-on-port-80-and-443)
1046
1053
 
1047
1054
 
1048
1055
  ### ssdp
@@ -1068,7 +1075,7 @@ print a qr-code [(screenshot)](https://user-images.githubusercontent.com/241032/
1068
1075
  * `--qrz 1` forces 1x zoom instead of autoscaling to fit the terminal size
1069
1076
  * 1x may render incorrectly on some terminals/fonts, but 2x should always work
1070
1077
 
1071
- it uses the server hostname if [mdns](#mdns) is enbled, otherwise it'll use your external ip (default route) unless `--qri` specifies a specific ip-prefix or domain
1078
+ it uses the server hostname if [mdns](#mdns) is enabled, otherwise it'll use your external ip (default route) unless `--qri` specifies a specific ip-prefix or domain
1072
1079
 
1073
1080
 
1074
1081
  ## ftp server
@@ -1093,7 +1100,7 @@ some recommended FTP / FTPS clients; `wark` = example password:
1093
1100
 
1094
1101
  ## webdav server
1095
1102
 
1096
- with read-write support, supports winXP and later, macos, nautilus/gvfs ... a greay way to [access copyparty straight from the file explorer in your OS](#mount-as-drive)
1103
+ with read-write support, supports winXP and later, macos, nautilus/gvfs ... a great way to [access copyparty straight from the file explorer in your OS](#mount-as-drive)
1097
1104
 
1098
1105
  click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to see connection instructions for windows, linux, macos
1099
1106
 
@@ -1197,8 +1204,8 @@ authenticate with one of the following:
1197
1204
  tweaking the ui
1198
1205
 
1199
1206
  * set default sort order globally with `--sort` or per-volume with the `sort` volflag; specify one or more comma-separated columns to sort by, and prefix the column name with `-` for reverse sort
1200
- * the column names you can use are visible as tooltips when hovering over the column headers in the directory listing, for example `href ext sz ts tags/.up_at tags/Cirle tags/.tn tags/Artist tags/Title`
1201
- * to sort in music order (album, track, artist, title) with filename as fallback, you could `--sort tags/Cirle,tags/.tn,tags/Artist,tags/Title,href`
1207
+ * the column names you can use are visible as tooltips when hovering over the column headers in the directory listing, for example `href ext sz ts tags/.up_at tags/Circle tags/.tn tags/Artist tags/Title`
1208
+ * 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`
1202
1209
  * 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`
1203
1210
 
1204
1211
  see [./docs/rice](./docs/rice) for more, including how to add stuff (css/`<meta>`/...) to the html `<head>` tag, or to add your own translation
@@ -1221,7 +1228,11 @@ if you want to entirely replace the copyparty response with your own jinja2 temp
1221
1228
 
1222
1229
  enable symlink-based upload deduplication globally with `--dedup` or per-volume with volflag `dedup`
1223
1230
 
1224
- when someone tries to upload a file that already exists on the server, the upload will be politely declined and a symlink is created instead, pointing to the nearest copy on disk, thus reducinc disk space usage
1231
+ by default, when someone tries to upload a file that already exists on the server, the upload will be politely declined, and the server will copy the existing file over to where the upload would have gone
1232
+
1233
+ if you enable deduplication with `--dedup` then it'll create a symlink instead of a full copy, thus reducing disk space usage
1234
+
1235
+ * on the contrary, if your server is hooked up to s3-glacier or similar storage where reading is expensive, and you cannot use `--safe-dedup=1` because you have other software tampering with your files, so you want to entirely disable detection of duplicate data instead, then you can specify `--no-clone` globally or `noclone` as a volflag
1225
1236
 
1226
1237
  **warning:** when enabling dedup, you should also:
1227
1238
  * enable indexing with `-e2dsa` or volflag `e2dsa` (see [file indexing](#file-indexing) section below); strongly recommended
@@ -1262,7 +1273,7 @@ through arguments:
1262
1273
  * `-e2t` enables metadata indexing on upload
1263
1274
  * `-e2ts` also scans for tags in all files that don't have tags yet
1264
1275
  * `-e2tsr` also deletes all existing tags, doing a full reindex
1265
- * `-e2v` verfies file integrity at startup, comparing hashes from the db
1276
+ * `-e2v` verifies file integrity at startup, comparing hashes from the db
1266
1277
  * `-e2vu` patches the database with the new hashes from the filesystem
1267
1278
  * `-e2vp` panics and kills copyparty instead
1268
1279
 
@@ -1479,7 +1490,7 @@ replace 404 and 403 errors with something completely different (that's it for no
1479
1490
 
1480
1491
  replace copyparty passwords with oauth and such
1481
1492
 
1482
- you can disable the built-in password-based login sysem, and instead replace it with a separate piece of software (an identity provider) which will then handle authenticating / authorizing of users; this makes it possible to login with passkeys / fido2 / webauthn / yubikey / ldap / active directory / oauth / many other single-sign-on contraptions
1493
+ you can disable the built-in password-based login system, and instead replace it with a separate piece of software (an identity provider) which will then handle authenticating / authorizing of users; this makes it possible to login with passkeys / fido2 / webauthn / yubikey / ldap / active directory / oauth / many other single-sign-on contraptions
1483
1494
 
1484
1495
  a popular choice is [Authelia](https://www.authelia.com/) (config-file based), another one is [authentik](https://goauthentik.io/) (GUI-based, more complex)
1485
1496
 
@@ -1506,7 +1517,7 @@ if permitted, users can change their own passwords in the control-panel
1506
1517
 
1507
1518
  * if you run multiple copyparty instances with different users you *almost definitely* want to specify separate DBs for each instance
1508
1519
 
1509
- * if [password hashing](#password-hashing) is enbled, the passwords in the db are also hashed
1520
+ * if [password hashing](#password-hashing) is enabled, the passwords in the db are also hashed
1510
1521
 
1511
1522
  * ...which means that all user-defined passwords will be forgotten if you change password-hashing settings
1512
1523
 
@@ -1526,7 +1537,7 @@ you may improve performance by specifying larger values for `--iobuf` / `--s-rd-
1526
1537
 
1527
1538
  ## hiding from google
1528
1539
 
1529
- tell search engines you dont wanna be indexed, either using the good old [robots.txt](https://www.robotstxt.org/robotstxt.html) or through copyparty settings:
1540
+ tell search engines you don't wanna be indexed, either using the good old [robots.txt](https://www.robotstxt.org/robotstxt.html) or through copyparty settings:
1530
1541
 
1531
1542
  * `--no-robots` adds HTTP (`X-Robots-Tag`) and HTML (`<meta>`) headers with `noindex, nofollow` globally
1532
1543
  * volflag `[...]:c,norobots` does the same thing for that single volume
@@ -1601,6 +1612,33 @@ if you want to change the fonts, see [./docs/rice/](./docs/rice/)
1601
1612
  `-lo log/cpp-%Y-%m%d-%H%M%S.txt.xz`
1602
1613
 
1603
1614
 
1615
+ ## listen on port 80 and 443
1616
+
1617
+ become a *real* webserver which people can access by just going to your IP or domain without specifying a port
1618
+
1619
+ **if you're on windows,** then you just need to add the commandline argument `-p 80,443` and you're done! nice
1620
+
1621
+ **if you're on macos,** sorry, I don't know
1622
+
1623
+ **if you're on Linux,** you have the following 4 options:
1624
+
1625
+ * **option 1:** set up a [reverse-proxy](#reverse-proxy) -- this one makes a lot of sense if you're running on a proper headless server, because that way you get real HTTPS too
1626
+
1627
+ * **option 2:** NAT to port 3923 -- this is cumbersome since you'll need to do it every time you reboot, and the exact command may depend on your linux distribution:
1628
+ ```bash
1629
+ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3923
1630
+ iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3923
1631
+ ```
1632
+
1633
+ * **option 3:** disable the [security policy](https://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html) which prevents the use of 80 and 443; this is *probably* fine:
1634
+ ```
1635
+ setcap CAP_NET_BIND_SERVICE=+eip $(realpath $(which python))
1636
+ python copyparty-sfx.py -p 80,443
1637
+ ```
1638
+
1639
+ * **option 4:** run copyparty as root (please don't)
1640
+
1641
+
1604
1642
  ## reverse-proxy
1605
1643
 
1606
1644
  running copyparty next to other websites hosted on an existing webserver such as nginx, caddy, or apache
@@ -1949,7 +1987,7 @@ interact with copyparty using non-browser clients
1949
1987
 
1950
1988
  * [igloo irc](https://iglooirc.com/): Method: `post` Host: `https://you.com/up/?want=url&pw=hunter2` Multipart: `yes` File parameter: `f`
1951
1989
 
1952
- copyparty returns a truncated sha512sum of your PUT/POST as base64; you can generate the same checksum locally to verify uplaods:
1990
+ copyparty returns a truncated sha512sum of your PUT/POST as base64; you can generate the same checksum locally to verify uploads:
1953
1991
 
1954
1992
  b512(){ printf "$((sha512sum||shasum -a512)|sed -E 's/ .*//;s/(..)/\\x\1/g')"|base64|tr '+/' '-_'|head -c44;}
1955
1993
  b512 <movie.mkv
@@ -2049,7 +2087,7 @@ when uploading files,
2049
2087
  * up to 30% faster uploads if you hide the upload status list by switching away from the `[🚀]` up2k ui-tab (or closing it)
2050
2088
  * optionally you can switch to the lightweight potato ui by clicking the `[🥔]`
2051
2089
  * switching to another browser-tab also works, the favicon will update every 10 seconds in that case
2052
- * unlikely to be a problem, but can happen when uploding many small files, or your internet is too fast, or PC too slow
2090
+ * unlikely to be a problem, but can happen when uploading many small files, or your internet is too fast, or PC too slow
2053
2091
 
2054
2092
 
2055
2093
  # security
@@ -2097,7 +2135,7 @@ other misc notes:
2097
2135
 
2098
2136
  behavior that might be unexpected
2099
2137
 
2100
- * users without read-access to a folder can still see the `.prologue.html` / `.epilogue.html` / `README.md` contents, for the purpose of showing a description on how to use the uploader for example
2138
+ * users without read-access to a folder can still see the `.prologue.html` / `.epilogue.html` / `PREADME.md` / `README.md` contents, for the purpose of showing a description on how to use the uploader for example
2101
2139
  * users can submit `<script>`s which autorun (in a sandbox) for other visitors in a few ways;
2102
2140
  * uploading a `README.md` -- avoid with `--no-readme`
2103
2141
  * renaming `some.html` to `.epilogue.html` -- avoid with either `--no-logues` or `--no-dot-ren`
@@ -2175,13 +2213,13 @@ if [cfssl](https://github.com/cloudflare/cfssl/releases/latest) is installed, co
2175
2213
 
2176
2214
  ## client crashes
2177
2215
 
2178
- ### frefox wsod
2216
+ ### firefox wsod
2179
2217
 
2180
2218
  firefox 87 can crash during uploads -- the entire browser goes, including all other browser tabs, everything turns white
2181
2219
 
2182
2220
  however you can hit `F12` in the up2k tab and use the devtools to see how far you got in the uploads:
2183
2221
 
2184
- * get a complete list of all uploads, organized by statuts (ok / no-good / busy / queued):
2222
+ * get a complete list of all uploads, organized by status (ok / no-good / busy / queued):
2185
2223
  `var tabs = { ok:[], ng:[], bz:[], q:[] }; for (var a of up2k.ui.tab) tabs[a.in].push(a); tabs`
2186
2224
 
2187
2225
  * list of filenames which failed:
@@ -2298,7 +2336,7 @@ then again, if you are already into downloading shady binaries from the internet
2298
2336
 
2299
2337
  ## zipapp
2300
2338
 
2301
- another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz) has less features, is slow, requires python 3.7 or newer, worse compression, and more importantly is unable to benefit from more recent versions of jinja2 and such (which makes it less secure)... lots of drawbacks with this one really -- but it does not unpack any temporay files to disk, so it *may* just work if the regular sfx fails to start because the computer is messed up in certain funky ways, so it's worth a shot if all else fails
2339
+ another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz) has less features, is slow, requires python 3.7 or newer, worse compression, and more importantly is unable to benefit from more recent versions of jinja2 and such (which makes it less secure)... lots of drawbacks with this one really -- but it does not unpack any temporary files to disk, so it *may* just work if the regular sfx fails to start because the computer is messed up in certain funky ways, so it's worth a shot if all else fails
2302
2340
 
2303
2341
  run it by doubleclicking it, or try typing `python copyparty.pyz` in your terminal/console/commandline/telex if that fails
2304
2342
 
@@ -83,9 +83,10 @@ turn almost any device into a file server with resumable uploads/downloads using
83
83
  * [identity providers](#identity-providers) - replace copyparty passwords with oauth and such
84
84
  * [user-changeable passwords](#user-changeable-passwords) - if permitted, users can change their own passwords
85
85
  * [using the cloud as storage](#using-the-cloud-as-storage) - connecting to an aws s3 bucket and similar
86
- * [hiding from google](#hiding-from-google) - tell search engines you dont wanna be indexed
86
+ * [hiding from google](#hiding-from-google) - tell search engines you don't wanna be indexed
87
87
  * [themes](#themes)
88
88
  * [complete examples](#complete-examples)
89
+ * [listen on port 80 and 443](#listen-on-port-80-and-443) - become a *real* webserver
89
90
  * [reverse-proxy](#reverse-proxy) - running copyparty next to other websites
90
91
  * [real-ip](#real-ip) - teaching copyparty how to see client IPs
91
92
  * [prometheus](#prometheus) - metrics/stats can be enabled
@@ -114,7 +115,7 @@ turn almost any device into a file server with resumable uploads/downloads using
114
115
  * [https](#https) - both HTTP and HTTPS are accepted
115
116
  * [recovering from crashes](#recovering-from-crashes)
116
117
  * [client crashes](#client-crashes)
117
- * [frefox wsod](#frefox-wsod) - firefox 87 can crash during uploads
118
+ * [firefox wsod](#firefox-wsod) - firefox 87 can crash during uploads
118
119
  * [HTTP API](#HTTP-API) - see [devnotes](./docs/devnotes.md#http-api)
119
120
  * [dependencies](#dependencies) - mandatory deps
120
121
  * [optional dependencies](#optional-dependencies) - install these to enable bonus features
@@ -581,7 +582,7 @@ it does static images with Pillow / pyvips / FFmpeg, and uses FFmpeg for video f
581
582
  * pyvips is 3x faster than Pillow, Pillow is 3x faster than FFmpeg
582
583
  * disable thumbnails for specific volumes with volflag `dthumb` for all, or `dvthumb` / `dathumb` / `dithumb` for video/audio/images only
583
584
 
584
- audio files are covnerted into spectrograms using FFmpeg unless you `--no-athumb` (and some FFmpeg builds may need `--th-ff-swr`)
585
+ audio files are converted into spectrograms using FFmpeg unless you `--no-athumb` (and some FFmpeg builds may need `--th-ff-swr`)
585
586
 
586
587
  images with the following names (see `--th-covers`) become the thumbnail of the folder they're in: `folder.png`, `folder.jpg`, `cover.png`, `cover.jpg`
587
588
  * the order is significant, so if both `cover.png` and `folder.jpg` exist in a folder, it will pick the first matching `--th-covers` entry (`folder.jpg`)
@@ -667,7 +668,7 @@ see [up2k](./docs/devnotes.md#up2k) for details on how it works, or watch a [dem
667
668
 
668
669
  **protip:** if you enable `favicon` in the `[⚙️] settings` tab (by typing something into the textbox), the icon in the browser tab will indicate upload progress -- also, the `[🔔]` and/or `[🔊]` switches enable visible and/or audible notifications on upload completion
669
670
 
670
- the up2k UI is the epitome of polished inutitive experiences:
671
+ the up2k UI is the epitome of polished intuitive experiences:
671
672
  * "parallel uploads" specifies how many chunks to upload at the same time
672
673
  * `[🏃]` analysis of other files should continue while one is uploading
673
674
  * `[🥔]` shows a simpler UI for faster uploads from slow devices
@@ -716,7 +717,7 @@ you can unpost even if you don't have regular move/delete access, however only f
716
717
 
717
718
  ### self-destruct
718
719
 
719
- uploads can be given a lifetime, afer which they expire / self-destruct
720
+ uploads can be given a lifetime, after which they expire / self-destruct
720
721
 
721
722
  the feature must be enabled per-volume with the `lifetime` [upload rule](#upload-rules) which sets the upper limit for how long a file gets to stay on the server
722
723
 
@@ -743,7 +744,7 @@ the control-panel shows the ETA for all incoming files , but only for files bei
743
744
 
744
745
  cut/paste, rename, and delete files/folders (if you have permission)
745
746
 
746
- file selection: click somewhere on the line (not the link itsef), then:
747
+ file selection: click somewhere on the line (not the link itself), then:
747
748
  * `space` to toggle
748
749
  * `up/down` to move
749
750
  * `shift-up/down` to move-and-select
@@ -937,6 +938,8 @@ see [./srv/expand/](./srv/expand/) for usage and examples
937
938
 
938
939
  * files named `README.md` / `readme.md` will be rendered after directory listings unless `--no-readme` (but `.epilogue.html` takes precedence)
939
940
 
941
+ * and `PREADME.md` / `preadme.md` is shown above directory listings unless `--no-readme` or `.prologue.html`
942
+
940
943
  * `README.md` and `*logue.html` can contain placeholder values which are replaced server-side before embedding into directory listings; see `--help-exp`
941
944
 
942
945
 
@@ -988,7 +991,11 @@ uses [multicast dns](https://en.wikipedia.org/wiki/Multicast_DNS) to give copypa
988
991
 
989
992
  all enabled services ([webdav](#webdav-server), [ftp](#ftp-server), [smb](#smb-server)) will appear in mDNS-aware file managers (KDE, gnome, macOS, ...)
990
993
 
991
- the domain will be http://partybox.local if the machine's hostname is `partybox` unless `--name` specifies soemthing else
994
+ the domain will be `partybox.local` if the machine's hostname is `partybox` unless `--name` specifies something else
995
+
996
+ and the web-UI will be available at http://partybox.local:3923/
997
+
998
+ * if you want to get rid of the `:3923` so you can use http://partybox.local/ instead then see [listen on port 80 and 443](#listen-on-port-80-and-443)
992
999
 
993
1000
 
994
1001
  ### ssdp
@@ -1014,7 +1021,7 @@ print a qr-code [(screenshot)](https://user-images.githubusercontent.com/241032/
1014
1021
  * `--qrz 1` forces 1x zoom instead of autoscaling to fit the terminal size
1015
1022
  * 1x may render incorrectly on some terminals/fonts, but 2x should always work
1016
1023
 
1017
- it uses the server hostname if [mdns](#mdns) is enbled, otherwise it'll use your external ip (default route) unless `--qri` specifies a specific ip-prefix or domain
1024
+ it uses the server hostname if [mdns](#mdns) is enabled, otherwise it'll use your external ip (default route) unless `--qri` specifies a specific ip-prefix or domain
1018
1025
 
1019
1026
 
1020
1027
  ## ftp server
@@ -1039,7 +1046,7 @@ some recommended FTP / FTPS clients; `wark` = example password:
1039
1046
 
1040
1047
  ## webdav server
1041
1048
 
1042
- with read-write support, supports winXP and later, macos, nautilus/gvfs ... a greay way to [access copyparty straight from the file explorer in your OS](#mount-as-drive)
1049
+ with read-write support, supports winXP and later, macos, nautilus/gvfs ... a great way to [access copyparty straight from the file explorer in your OS](#mount-as-drive)
1043
1050
 
1044
1051
  click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to see connection instructions for windows, linux, macos
1045
1052
 
@@ -1143,8 +1150,8 @@ authenticate with one of the following:
1143
1150
  tweaking the ui
1144
1151
 
1145
1152
  * set default sort order globally with `--sort` or per-volume with the `sort` volflag; specify one or more comma-separated columns to sort by, and prefix the column name with `-` for reverse sort
1146
- * the column names you can use are visible as tooltips when hovering over the column headers in the directory listing, for example `href ext sz ts tags/.up_at tags/Cirle tags/.tn tags/Artist tags/Title`
1147
- * to sort in music order (album, track, artist, title) with filename as fallback, you could `--sort tags/Cirle,tags/.tn,tags/Artist,tags/Title,href`
1153
+ * the column names you can use are visible as tooltips when hovering over the column headers in the directory listing, for example `href ext sz ts tags/.up_at tags/Circle tags/.tn tags/Artist tags/Title`
1154
+ * 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`
1148
1155
  * 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`
1149
1156
 
1150
1157
  see [./docs/rice](./docs/rice) for more, including how to add stuff (css/`<meta>`/...) to the html `<head>` tag, or to add your own translation
@@ -1167,7 +1174,11 @@ if you want to entirely replace the copyparty response with your own jinja2 temp
1167
1174
 
1168
1175
  enable symlink-based upload deduplication globally with `--dedup` or per-volume with volflag `dedup`
1169
1176
 
1170
- when someone tries to upload a file that already exists on the server, the upload will be politely declined and a symlink is created instead, pointing to the nearest copy on disk, thus reducinc disk space usage
1177
+ by default, when someone tries to upload a file that already exists on the server, the upload will be politely declined, and the server will copy the existing file over to where the upload would have gone
1178
+
1179
+ if you enable deduplication with `--dedup` then it'll create a symlink instead of a full copy, thus reducing disk space usage
1180
+
1181
+ * on the contrary, if your server is hooked up to s3-glacier or similar storage where reading is expensive, and you cannot use `--safe-dedup=1` because you have other software tampering with your files, so you want to entirely disable detection of duplicate data instead, then you can specify `--no-clone` globally or `noclone` as a volflag
1171
1182
 
1172
1183
  **warning:** when enabling dedup, you should also:
1173
1184
  * enable indexing with `-e2dsa` or volflag `e2dsa` (see [file indexing](#file-indexing) section below); strongly recommended
@@ -1208,7 +1219,7 @@ through arguments:
1208
1219
  * `-e2t` enables metadata indexing on upload
1209
1220
  * `-e2ts` also scans for tags in all files that don't have tags yet
1210
1221
  * `-e2tsr` also deletes all existing tags, doing a full reindex
1211
- * `-e2v` verfies file integrity at startup, comparing hashes from the db
1222
+ * `-e2v` verifies file integrity at startup, comparing hashes from the db
1212
1223
  * `-e2vu` patches the database with the new hashes from the filesystem
1213
1224
  * `-e2vp` panics and kills copyparty instead
1214
1225
 
@@ -1425,7 +1436,7 @@ replace 404 and 403 errors with something completely different (that's it for no
1425
1436
 
1426
1437
  replace copyparty passwords with oauth and such
1427
1438
 
1428
- you can disable the built-in password-based login sysem, and instead replace it with a separate piece of software (an identity provider) which will then handle authenticating / authorizing of users; this makes it possible to login with passkeys / fido2 / webauthn / yubikey / ldap / active directory / oauth / many other single-sign-on contraptions
1439
+ you can disable the built-in password-based login system, and instead replace it with a separate piece of software (an identity provider) which will then handle authenticating / authorizing of users; this makes it possible to login with passkeys / fido2 / webauthn / yubikey / ldap / active directory / oauth / many other single-sign-on contraptions
1429
1440
 
1430
1441
  a popular choice is [Authelia](https://www.authelia.com/) (config-file based), another one is [authentik](https://goauthentik.io/) (GUI-based, more complex)
1431
1442
 
@@ -1452,7 +1463,7 @@ if permitted, users can change their own passwords in the control-panel
1452
1463
 
1453
1464
  * if you run multiple copyparty instances with different users you *almost definitely* want to specify separate DBs for each instance
1454
1465
 
1455
- * if [password hashing](#password-hashing) is enbled, the passwords in the db are also hashed
1466
+ * if [password hashing](#password-hashing) is enabled, the passwords in the db are also hashed
1456
1467
 
1457
1468
  * ...which means that all user-defined passwords will be forgotten if you change password-hashing settings
1458
1469
 
@@ -1472,7 +1483,7 @@ you may improve performance by specifying larger values for `--iobuf` / `--s-rd-
1472
1483
 
1473
1484
  ## hiding from google
1474
1485
 
1475
- tell search engines you dont wanna be indexed, either using the good old [robots.txt](https://www.robotstxt.org/robotstxt.html) or through copyparty settings:
1486
+ tell search engines you don't wanna be indexed, either using the good old [robots.txt](https://www.robotstxt.org/robotstxt.html) or through copyparty settings:
1476
1487
 
1477
1488
  * `--no-robots` adds HTTP (`X-Robots-Tag`) and HTML (`<meta>`) headers with `noindex, nofollow` globally
1478
1489
  * volflag `[...]:c,norobots` does the same thing for that single volume
@@ -1547,6 +1558,33 @@ if you want to change the fonts, see [./docs/rice/](./docs/rice/)
1547
1558
  `-lo log/cpp-%Y-%m%d-%H%M%S.txt.xz`
1548
1559
 
1549
1560
 
1561
+ ## listen on port 80 and 443
1562
+
1563
+ become a *real* webserver which people can access by just going to your IP or domain without specifying a port
1564
+
1565
+ **if you're on windows,** then you just need to add the commandline argument `-p 80,443` and you're done! nice
1566
+
1567
+ **if you're on macos,** sorry, I don't know
1568
+
1569
+ **if you're on Linux,** you have the following 4 options:
1570
+
1571
+ * **option 1:** set up a [reverse-proxy](#reverse-proxy) -- this one makes a lot of sense if you're running on a proper headless server, because that way you get real HTTPS too
1572
+
1573
+ * **option 2:** NAT to port 3923 -- this is cumbersome since you'll need to do it every time you reboot, and the exact command may depend on your linux distribution:
1574
+ ```bash
1575
+ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3923
1576
+ iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3923
1577
+ ```
1578
+
1579
+ * **option 3:** disable the [security policy](https://www.w3.org/Daemon/User/Installation/PrivilegedPorts.html) which prevents the use of 80 and 443; this is *probably* fine:
1580
+ ```
1581
+ setcap CAP_NET_BIND_SERVICE=+eip $(realpath $(which python))
1582
+ python copyparty-sfx.py -p 80,443
1583
+ ```
1584
+
1585
+ * **option 4:** run copyparty as root (please don't)
1586
+
1587
+
1550
1588
  ## reverse-proxy
1551
1589
 
1552
1590
  running copyparty next to other websites hosted on an existing webserver such as nginx, caddy, or apache
@@ -1895,7 +1933,7 @@ interact with copyparty using non-browser clients
1895
1933
 
1896
1934
  * [igloo irc](https://iglooirc.com/): Method: `post` Host: `https://you.com/up/?want=url&pw=hunter2` Multipart: `yes` File parameter: `f`
1897
1935
 
1898
- copyparty returns a truncated sha512sum of your PUT/POST as base64; you can generate the same checksum locally to verify uplaods:
1936
+ copyparty returns a truncated sha512sum of your PUT/POST as base64; you can generate the same checksum locally to verify uploads:
1899
1937
 
1900
1938
  b512(){ printf "$((sha512sum||shasum -a512)|sed -E 's/ .*//;s/(..)/\\x\1/g')"|base64|tr '+/' '-_'|head -c44;}
1901
1939
  b512 <movie.mkv
@@ -1995,7 +2033,7 @@ when uploading files,
1995
2033
  * up to 30% faster uploads if you hide the upload status list by switching away from the `[🚀]` up2k ui-tab (or closing it)
1996
2034
  * optionally you can switch to the lightweight potato ui by clicking the `[🥔]`
1997
2035
  * switching to another browser-tab also works, the favicon will update every 10 seconds in that case
1998
- * unlikely to be a problem, but can happen when uploding many small files, or your internet is too fast, or PC too slow
2036
+ * unlikely to be a problem, but can happen when uploading many small files, or your internet is too fast, or PC too slow
1999
2037
 
2000
2038
 
2001
2039
  # security
@@ -2043,7 +2081,7 @@ other misc notes:
2043
2081
 
2044
2082
  behavior that might be unexpected
2045
2083
 
2046
- * users without read-access to a folder can still see the `.prologue.html` / `.epilogue.html` / `README.md` contents, for the purpose of showing a description on how to use the uploader for example
2084
+ * users without read-access to a folder can still see the `.prologue.html` / `.epilogue.html` / `PREADME.md` / `README.md` contents, for the purpose of showing a description on how to use the uploader for example
2047
2085
  * users can submit `<script>`s which autorun (in a sandbox) for other visitors in a few ways;
2048
2086
  * uploading a `README.md` -- avoid with `--no-readme`
2049
2087
  * renaming `some.html` to `.epilogue.html` -- avoid with either `--no-logues` or `--no-dot-ren`
@@ -2121,13 +2159,13 @@ if [cfssl](https://github.com/cloudflare/cfssl/releases/latest) is installed, co
2121
2159
 
2122
2160
  ## client crashes
2123
2161
 
2124
- ### frefox wsod
2162
+ ### firefox wsod
2125
2163
 
2126
2164
  firefox 87 can crash during uploads -- the entire browser goes, including all other browser tabs, everything turns white
2127
2165
 
2128
2166
  however you can hit `F12` in the up2k tab and use the devtools to see how far you got in the uploads:
2129
2167
 
2130
- * get a complete list of all uploads, organized by statuts (ok / no-good / busy / queued):
2168
+ * get a complete list of all uploads, organized by status (ok / no-good / busy / queued):
2131
2169
  `var tabs = { ok:[], ng:[], bz:[], q:[] }; for (var a of up2k.ui.tab) tabs[a.in].push(a); tabs`
2132
2170
 
2133
2171
  * list of filenames which failed:
@@ -2244,7 +2282,7 @@ then again, if you are already into downloading shady binaries from the internet
2244
2282
 
2245
2283
  ## zipapp
2246
2284
 
2247
- another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz) has less features, is slow, requires python 3.7 or newer, worse compression, and more importantly is unable to benefit from more recent versions of jinja2 and such (which makes it less secure)... lots of drawbacks with this one really -- but it does not unpack any temporay files to disk, so it *may* just work if the regular sfx fails to start because the computer is messed up in certain funky ways, so it's worth a shot if all else fails
2285
+ another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz) has less features, is slow, requires python 3.7 or newer, worse compression, and more importantly is unable to benefit from more recent versions of jinja2 and such (which makes it less secure)... lots of drawbacks with this one really -- but it does not unpack any temporary files to disk, so it *may* just work if the regular sfx fails to start because the computer is messed up in certain funky ways, so it's worth a shot if all else fails
2248
2286
 
2249
2287
  run it by doubleclicking it, or try typing `python copyparty.pyz` in your terminal/console/commandline/telex if that fails
2250
2288
 
@@ -772,7 +772,7 @@ def get_sects():
772
772
  dedent(
773
773
  """
774
774
  specify --exp or the "exp" volflag to enable placeholder expansions
775
- in README.md / .prologue.html / .epilogue.html
775
+ in README.md / PREADME.md / .prologue.html / .epilogue.html
776
776
 
777
777
  --exp-md (volflag exp_md) holds the list of placeholders which can be
778
778
  expanded in READMEs, and --exp-lg (volflag exp_lg) likewise for logues;
@@ -888,7 +888,7 @@ def get_sects():
888
888
  dedent(
889
889
  """
890
890
  the mDNS protocol is multicast-based, which means there are thousands
891
- of fun and intersesting ways for it to break unexpectedly
891
+ of fun and interesting ways for it to break unexpectedly
892
892
 
893
893
  things to check if it does not work at all:
894
894
 
@@ -997,6 +997,7 @@ def add_upload(ap):
997
997
  ap2.add_argument("--hardlink", action="store_true", help="enable hardlink-based dedup; will fallback on symlinks when that is impossible (across filesystems) (volflag=hardlink)")
998
998
  ap2.add_argument("--hardlink-only", action="store_true", help="do not fallback to symlinks when a hardlink cannot be made (volflag=hardlinkonly)")
999
999
  ap2.add_argument("--no-dupe", action="store_true", help="reject duplicate files during upload; only matches within the same volume (volflag=nodupe)")
1000
+ ap2.add_argument("--no-clone", action="store_true", help="do not use existing data on disk to satisfy dupe uploads; reduces server HDD reads in exchange for much more network load (volflag=noclone)")
1000
1001
  ap2.add_argument("--no-snap", action="store_true", help="disable snapshots -- forget unfinished uploads on shutdown; don't create .hist/up2k.snap files -- abandoned/interrupted uploads must be cleaned up manually")
1001
1002
  ap2.add_argument("--snap-wri", metavar="SEC", type=int, default=300, help="write upload state to ./hist/up2k.snap every \033[33mSEC\033[0m seconds; allows resuming incomplete uploads after a server crash")
1002
1003
  ap2.add_argument("--snap-drop", metavar="MIN", type=float, default=1440.0, help="forget unfinished uploads after \033[33mMIN\033[0m minutes; impossible to resume them after that (360=6h, 1440=24h)")
@@ -1246,7 +1247,7 @@ def add_safety(ap):
1246
1247
  ap2.add_argument("--no-dot-mv", action="store_true", help="disallow moving dotfiles; makes it impossible to move folders containing dotfiles")
1247
1248
  ap2.add_argument("--no-dot-ren", action="store_true", help="disallow renaming dotfiles; makes it impossible to turn something into a dotfile")
1248
1249
  ap2.add_argument("--no-logues", action="store_true", help="disable rendering .prologue/.epilogue.html into directory listings")
1249
- ap2.add_argument("--no-readme", action="store_true", help="disable rendering readme.md into directory listings")
1250
+ ap2.add_argument("--no-readme", action="store_true", help="disable rendering readme/preadme.md into directory listings")
1250
1251
  ap2.add_argument("--vague-403", action="store_true", help="send 404 instead of 403 (security through ambiguity, very enterprise)")
1251
1252
  ap2.add_argument("--force-js", action="store_true", help="don't send folder listings as HTML, force clients to use the embedded json instead -- slight protection against misbehaving search engines which ignore \033[33m--no-robots\033[0m")
1252
1253
  ap2.add_argument("--no-robots", action="store_true", help="adds http and html headers asking search engines to not index anything (volflag=norobots)")
@@ -1444,7 +1445,7 @@ def add_ui(ap, retry):
1444
1445
  ap2.add_argument("--k304", metavar="NUM", type=int, default=0, help="configure the option to enable/disable k304 on the controlpanel (workaround for buggy reverse-proxies); [\033[32m0\033[0m] = hidden and default-off, [\033[32m1\033[0m] = visible and default-off, [\033[32m2\033[0m] = visible and default-on")
1445
1446
  ap2.add_argument("--md-sbf", metavar="FLAGS", type=u, default="downloads forms popups scripts top-navigation-by-user-activation", help="list of capabilities to ALLOW for README.md docs (volflag=md_sbf); see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox")
1446
1447
  ap2.add_argument("--lg-sbf", metavar="FLAGS", type=u, default="downloads forms popups scripts top-navigation-by-user-activation", help="list of capabilities to ALLOW for prologue/epilogue docs (volflag=lg_sbf)")
1447
- ap2.add_argument("--no-sb-md", action="store_true", help="don't sandbox README.md documents (volflags: no_sb_md | sb_md)")
1448
+ ap2.add_argument("--no-sb-md", action="store_true", help="don't sandbox README/PREADME.md documents (volflags: no_sb_md | sb_md)")
1448
1449
  ap2.add_argument("--no-sb-lg", action="store_true", help="don't sandbox prologue/epilogue docs (volflags: no_sb_lg | sb_lg); enables non-js support")
1449
1450
 
1450
1451
 
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
2
 
3
- VERSION = (1, 15, 5)
3
+ VERSION = (1, 15, 6)
4
4
  CODENAME = "fill the drives"
5
- BUILD_DT = (2024, 10, 5)
5
+ BUILD_DT = (2024, 10, 12)
6
6
 
7
7
  S_VERSION = ".".join(map(str, VERSION))
8
8
  S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT)
@@ -917,7 +917,7 @@ class AuthSrv(object):
917
917
 
918
918
  for un, gn in un_gn:
919
919
  # if ap/vp has a user/group placeholder, make sure to keep
920
- # track so the same user/gruop is mapped when setting perms;
920
+ # track so the same user/group is mapped when setting perms;
921
921
  # otherwise clear un/gn to indicate it's a regular volume
922
922
 
923
923
  src1 = src0.replace("${u}", un or "\n")
@@ -13,6 +13,7 @@ def vf_bmap() :
13
13
  "dav_rt": "davrt",
14
14
  "ed": "dots",
15
15
  "hardlink_only": "hardlinkonly",
16
+ "no_clone": "noclone",
16
17
  "no_dirsz": "nodirsz",
17
18
  "no_dupe": "nodupe",
18
19
  "no_forget": "noforget",
@@ -135,7 +136,8 @@ flagcats = {
135
136
  "hardlink": "enable hardlink-based file deduplication,\nwith fallback on symlinks when that is impossible",
136
137
  "hardlinkonly": "dedup with hardlink only, never symlink;\nmake a full copy if hardlink is impossible",
137
138
  "safededup": "verify on-disk data before using it for dedup",
138
- "nodupe": "rejects existing files (instead of symlinking them)",
139
+ "noclone": "take dupe data from clients, even if available on HDD",
140
+ "nodupe": "rejects existing files (instead of linking/cloning them)",
139
141
  "sparse": "force use of sparse files, mainly for s3-backed storage",
140
142
  "daw": "enable full WebDAV write support (dangerous);\nPUT-operations will now \033[1;31mOVERWRITE\033[0;35m existing files",
141
143
  "nosub": "forces all uploads into the top folder of the vfs",