copyparty 1.18.9__tar.gz → 1.19.0__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 (133) hide show
  1. {copyparty-1.18.9/copyparty.egg-info → copyparty-1.19.0}/PKG-INFO +50 -9
  2. copyparty-1.18.9/PKG-INFO → copyparty-1.19.0/README.md +42 -66
  3. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/__init__.py +0 -4
  4. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/__main__.py +85 -69
  5. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/__version__.py +3 -3
  6. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/authsrv.py +31 -2
  7. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/cfg.py +2 -0
  8. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/ftpd.py +7 -2
  9. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/httpcli.py +87 -31
  10. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/httpsrv.py +2 -1
  11. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/mtag.py +5 -1
  12. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/multicast.py +1 -5
  13. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/pwhash.py +4 -0
  14. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/svchub.py +2 -11
  15. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/tcpsrv.py +16 -6
  16. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/tftpd.py +1 -1
  17. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/th_cli.py +2 -2
  18. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/th_srv.py +68 -2
  19. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/up2k.py +21 -18
  20. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/util.py +11 -0
  21. copyparty-1.19.0/copyparty/web/browser.css.gz +0 -0
  22. copyparty-1.19.0/copyparty/web/browser.js.gz +0 -0
  23. copyparty-1.19.0/copyparty/web/md2.js.gz +0 -0
  24. copyparty-1.19.0/copyparty/web/mde.js.gz +0 -0
  25. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/rups.html +1 -8
  26. copyparty-1.19.0/copyparty/web/rups.js.gz +0 -0
  27. copyparty-1.19.0/copyparty/web/shares.js.gz +0 -0
  28. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/splash.html +6 -1
  29. copyparty-1.19.0/copyparty/web/splash.js.gz +0 -0
  30. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/svcs.html +1 -0
  31. copyparty-1.19.0/copyparty/web/svcs.js.gz +0 -0
  32. copyparty-1.19.0/copyparty/web/up2k.js.gz +0 -0
  33. copyparty-1.19.0/copyparty/web/util.js.gz +0 -0
  34. copyparty-1.18.9/README.md → copyparty-1.19.0/copyparty.egg-info/PKG-INFO +107 -8
  35. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty.egg-info/SOURCES.txt +0 -5
  36. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty.egg-info/requires.txt +8 -0
  37. {copyparty-1.18.9 → copyparty-1.19.0}/pyproject.toml +8 -1
  38. copyparty-1.18.9/copyparty/web/browser.css.gz +0 -0
  39. copyparty-1.18.9/copyparty/web/browser.js.gz +0 -0
  40. copyparty-1.18.9/copyparty/web/dd/2.png +0 -0
  41. copyparty-1.18.9/copyparty/web/dd/3.png +0 -0
  42. copyparty-1.18.9/copyparty/web/dd/4.png +0 -0
  43. copyparty-1.18.9/copyparty/web/dd/5.png +0 -0
  44. copyparty-1.18.9/copyparty/web/deps/__init__.py +0 -0
  45. copyparty-1.18.9/copyparty/web/md2.js.gz +0 -0
  46. copyparty-1.18.9/copyparty/web/mde.js.gz +0 -0
  47. copyparty-1.18.9/copyparty/web/rups.js.gz +0 -0
  48. copyparty-1.18.9/copyparty/web/shares.js.gz +0 -0
  49. copyparty-1.18.9/copyparty/web/splash.js.gz +0 -0
  50. copyparty-1.18.9/copyparty/web/svcs.js.gz +0 -0
  51. copyparty-1.18.9/copyparty/web/up2k.js.gz +0 -0
  52. copyparty-1.18.9/copyparty/web/util.js.gz +0 -0
  53. {copyparty-1.18.9 → copyparty-1.19.0}/LICENSE +0 -0
  54. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/bos/__init__.py +0 -0
  55. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/bos/bos.py +0 -0
  56. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/bos/path.py +0 -0
  57. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/broker_mp.py +0 -0
  58. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/broker_mpw.py +0 -0
  59. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/broker_thr.py +0 -0
  60. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/broker_util.py +0 -0
  61. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/cert.py +0 -0
  62. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/dxml.py +0 -0
  63. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/fsutil.py +0 -0
  64. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/httpconn.py +0 -0
  65. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/ico.py +0 -0
  66. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/mdns.py +0 -0
  67. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/metrics.py +0 -0
  68. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/res/COPYING.txt +0 -0
  69. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/res/__init__.py +0 -0
  70. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/res/insecure.pem +0 -0
  71. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/smbd.py +0 -0
  72. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/ssdp.py +0 -0
  73. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/star.py +0 -0
  74. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/__init__.py +0 -0
  75. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/dnslib/__init__.py +0 -0
  76. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/dnslib/bimap.py +0 -0
  77. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/dnslib/bit.py +0 -0
  78. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/dnslib/buffer.py +0 -0
  79. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/dnslib/dns.py +0 -0
  80. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/dnslib/label.py +0 -0
  81. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/dnslib/lex.py +0 -0
  82. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/dnslib/ranges.py +0 -0
  83. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/ifaddr/__init__.py +0 -0
  84. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/ifaddr/_posix.py +0 -0
  85. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/ifaddr/_shared.py +0 -0
  86. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/ifaddr/_win32.py +0 -0
  87. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/qrcodegen.py +0 -0
  88. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/stolen/surrogateescape.py +0 -0
  89. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/sutil.py +0 -0
  90. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/szip.py +0 -0
  91. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/u2idx.py +0 -0
  92. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/a/__init__.py +0 -0
  93. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/a/partyfuse.py +0 -0
  94. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/a/u2c.py +0 -0
  95. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/a/webdav-cfg.bat +0 -0
  96. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/baguettebox.js.gz +0 -0
  97. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/browser.html +0 -0
  98. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/browser2.html +0 -0
  99. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/cf.html +0 -0
  100. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/dbg-audio.js.gz +0 -0
  101. {copyparty-1.18.9/copyparty/web/dd → copyparty-1.19.0/copyparty/web/deps}/__init__.py +0 -0
  102. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/busy.mp3.gz +0 -0
  103. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/easymde.css.gz +0 -0
  104. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/easymde.js.gz +0 -0
  105. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/fuse.py +0 -0
  106. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/marked.js.gz +0 -0
  107. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/mini-fa.css.gz +0 -0
  108. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/mini-fa.woff +0 -0
  109. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/prism.css.gz +0 -0
  110. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/prism.js.gz +0 -0
  111. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/prismd.css.gz +0 -0
  112. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/scp.woff2 +0 -0
  113. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/sha512.ac.js.gz +0 -0
  114. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/deps/sha512.hw.js.gz +0 -0
  115. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/idp.html +0 -0
  116. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/md.css.gz +0 -0
  117. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/md.html +0 -0
  118. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/md.js.gz +0 -0
  119. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/md2.css.gz +0 -0
  120. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/mde.css.gz +0 -0
  121. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/mde.html +0 -0
  122. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/msg.css.gz +0 -0
  123. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/msg.html +0 -0
  124. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/rups.css.gz +0 -0
  125. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/shares.css.gz +0 -0
  126. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/shares.html +0 -0
  127. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/splash.css.gz +0 -0
  128. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/ui.css.gz +0 -0
  129. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty/web/w.hash.js.gz +0 -0
  130. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty.egg-info/dependency_links.txt +0 -0
  131. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty.egg-info/entry_points.txt +0 -0
  132. {copyparty-1.18.9 → copyparty-1.19.0}/copyparty.egg-info/top_level.txt +0 -0
  133. {copyparty-1.18.9 → copyparty-1.19.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: copyparty
3
- Version: 1.18.9
3
+ Version: 1.19.0
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
@@ -37,6 +37,13 @@ Requires-Python: >=3.3
37
37
  Description-Content-Type: text/markdown
38
38
  License-File: LICENSE
39
39
  Requires-Dist: Jinja2
40
+ Provides-Extra: all
41
+ Requires-Dist: argon2-cffi; extra == "all"
42
+ Requires-Dist: partftpy>=0.4.0; extra == "all"
43
+ Requires-Dist: Pillow; extra == "all"
44
+ Requires-Dist: pyftpdlib; extra == "all"
45
+ Requires-Dist: pyopenssl; extra == "all"
46
+ Requires-Dist: pyzmq; extra == "all"
40
47
  Provides-Extra: thumbnails
41
48
  Requires-Dist: Pillow; extra == "thumbnails"
42
49
  Provides-Extra: thumbnails2
@@ -205,6 +212,8 @@ made in Norway 🇳🇴
205
212
 
206
213
  just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** -- that's it! 🎉
207
214
 
215
+ > ℹ️ the sfx is a [self-extractor](https://github.com/9001/copyparty/issues/270) which unpacks an embedded `tar.gz` into `$TEMP` -- if this looks too scary, you can use the [zipapp](#zipapp) which has slightly worse performance
216
+
208
217
  * or install through [pypi](https://pypi.org/project/copyparty/): `python3 -m pip install --user -U copyparty`
209
218
  * or if you cannot install python, you can use [copyparty.exe](#copypartyexe) instead
210
219
  * or install [on arch](#arch-package) ╱ [on NixOS](#nixos-module) ╱ [through nix](#nix-package)
@@ -493,6 +502,7 @@ upgrade notes
493
502
 
494
503
  * can I link someone to a password-protected volume/file by including the password in the URL?
495
504
  * yes, by adding `?pw=hunter2` to the end; replace `?` with `&` if there are parameters in the URL already, meaning it contains a `?` near the end
505
+ * if you have enabled `--usernames` then do `?pw=username:password` instead
496
506
 
497
507
  * how do I stop `.hist` folders from appearing everywhere on my HDD?
498
508
  * by default, a `.hist` folder is created inside each volume for the filesystem index, thumbnails, audio transcodes, and markdown document history. Use the `--hist` global-option or the `hist` volflag to move it somewhere else; see [database location](#database-location)
@@ -571,12 +581,17 @@ anyone trying to bruteforce a password gets banned according to `--ban-pw`; defa
571
581
 
572
582
  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`
573
583
 
584
+ * you can also `PRTY_CONFIG=foobar.conf python copyparty-sfx.py` (convenient in docker etc)
585
+
574
586
  ```yaml
575
587
  [accounts]
576
588
  u1: p1 # create account "u1" with password "p1"
577
589
  u2: p2 # (note that comments must have
578
590
  u3: p3 # two spaces before the # sign)
579
591
 
592
+ [groups]
593
+ g1: u1, u2 # create a group
594
+
580
595
  [/] # this URL will be mapped to...
581
596
  /srv # ...this folder on the server filesystem
582
597
  accs:
@@ -586,6 +601,7 @@ and if you want to use config files instead of commandline args (good!) then her
586
601
  /mnt/music # which is mapped to this folder
587
602
  accs:
588
603
  r: u1, u2 # only these accounts can read,
604
+ r: @g1 # (exactly the same, just with a group instead)
589
605
  rw: u3 # and only u3 can read-write
590
606
 
591
607
  [/inc]
@@ -1066,6 +1082,7 @@ a feed example: https://cd.ocv.me/a/d2/d22/?rss&fext=mp3
1066
1082
  url parameters:
1067
1083
 
1068
1084
  * `pw=hunter2` for password auth
1085
+ * if you enabled `--usernames` then do `pw=username:password` instead
1069
1086
  * `recursive` to also include subfolders
1070
1087
  * `title=foo` changes the feed title (default: folder name)
1071
1088
  * `fext=mp3,opus` only include mp3 and opus files (default: all)
@@ -1142,6 +1159,9 @@ open the `[🎺]` media-player-settings tab to configure it,
1142
1159
  * `[awo]` is `opus` in a `weba` file, good for iPhones (iOS 17.5 and newer) but Apple is still fixing some state-confusion bugs as of iOS 18.2.1
1143
1160
  * `[caf]` is `opus` in a `caf` file, good for iPhones (iOS 11 through 17), technically unsupported by Apple but works for the most part
1144
1161
  * `[mp3]` -- the myth, the legend, the undying master of mediocre sound quality that definitely works everywhere
1162
+ * `[flac]` -- lossless but compressed, for LAN and/or fiber playback on electrostatic headphones
1163
+ * `[wav]` -- lossless and uncompressed, for LAN and/or fiber playback on electrostatic headphones connected to very old equipment
1164
+ * `flac` and `wav` must be enabled with `--allow-flac` / `--allow-wav` to allow spending the disk space
1145
1165
  * "tint" reduces the contrast of the playback bar
1146
1166
 
1147
1167
 
@@ -1276,7 +1296,7 @@ using arguments or config files, or a mix of both:
1276
1296
 
1277
1297
  **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.
1278
1298
  * if running in docker/podman, try this: `docker run --rm -it copyparty/ac --help`
1279
- * or see this (probably outdated): https://ocv.me/copyparty/helptext.html
1299
+ * or see this: https://ocv.me/copyparty/helptext.html
1280
1300
  * or if you prefer plaintext, https://ocv.me/copyparty/helptext.txt
1281
1301
 
1282
1302
 
@@ -1348,6 +1368,7 @@ an FTP server can be started using `--ftp 3921`, and/or `--ftps` for explicit T
1348
1368
  * if you enable both `ftp` and `ftps`, the port-range will be divided in half
1349
1369
  * some older software (filezilla on debian-stable) cannot passive-mode with TLS
1350
1370
  * login with any username + your password, or put your password in the username field
1371
+ * unless you enabled `--usernames`
1351
1372
 
1352
1373
  some recommended FTP / FTPS clients; `wark` = example password:
1353
1374
  * https://winscp.net/eng/download.php
@@ -1365,6 +1386,7 @@ click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to se
1365
1386
 
1366
1387
  general usage:
1367
1388
  * login with any username + your password, or put your password in the username field (password field can be empty/whatever)
1389
+ * unless you enabled `--usernames`
1368
1390
 
1369
1391
  on macos, connect from finder:
1370
1392
  * [Go] -> [Connect to Server...] -> http://192.168.123.1:3923/
@@ -1380,6 +1402,7 @@ using the GUI (winXP or later):
1380
1402
  * rightclick [my computer] -> [map network drive] -> Folder: `http://192.168.123.1:3923/`
1381
1403
  * on winXP only, click the `Sign up for online storage` hyperlink instead and put the URL there
1382
1404
  * providing your password as the username is recommended; the password field can be anything or empty
1405
+ * unless you enabled `--usernames`
1383
1406
 
1384
1407
  the webdav client that's built into windows has the following list of bugs; you can avoid all of these by connecting with rclone instead:
1385
1408
  * win7+ doesn't actually send the password to the server when reauthenticating after a reboot unless you first try to login with an incorrect password and then switch to the correct password
@@ -1437,6 +1460,7 @@ some **BIG WARNINGS** specific to SMB/CIFS, in decreasing importance:
1437
1460
  * the smb backend is not fully integrated with vfs, meaning there could be security issues (path traversal). Please use `--smb-port` (see below) and [prisonparty](./bin/prisonparty.sh) or [bubbleparty](./bin/bubbleparty.sh)
1438
1461
  * account passwords work per-volume as expected, and so does account permissions (read/write/move/delete), but `--smbw` must be given to allow write-access from smb
1439
1462
  * [shadowing](#shadowing) probably works as expected but no guarantees
1463
+ * not compatible with pw-hashing or `--usernames`
1440
1464
 
1441
1465
  and some minor issues,
1442
1466
  * clients only see the first ~400 files in big folders;
@@ -1483,6 +1507,8 @@ note that this disables hotlinking because the opengraph spec demands it; to sne
1483
1507
 
1484
1508
  you can also hotlink files regardless by appending `?raw` to the url
1485
1509
 
1510
+ > WARNING: if you plan to use WebDAV, then `--og-ua` / `og_ua` must be configured
1511
+
1486
1512
  if you want to entirely replace the copyparty response with your own jinja2 template, give the template filepath to `--og-tpl` or volflag `og_tpl` (all members of `HttpCli` are available through the `this` object)
1487
1513
 
1488
1514
 
@@ -1939,6 +1965,8 @@ you can disable the built-in password-based login system, and instead replace it
1939
1965
 
1940
1966
  * the regular config-defined users will be used as a fallback for requests which don't include a valid (trusted) IdP username header
1941
1967
 
1968
+ * if your IdP-server is slow, consider `--idp-cookie` and let requests with the cookie `cppws` bypass the IdP; experimental sessions-based feature added for a party
1969
+
1942
1970
  some popular identity providers are [Authelia](https://www.authelia.com/) (config-file based) and [authentik](https://goauthentik.io/) (GUI-based, more complex)
1943
1971
 
1944
1972
  there is a [docker-compose example](./docs/examples/docker/idp-authelia-traefik) which is hopefully a good starting point (alternatively see [./docs/idp.md](./docs/idp.md) if you're the DIY type)
@@ -2101,7 +2129,11 @@ you can either:
2101
2129
  * or do location-based proxying, using `--rp-loc=/stuff` to tell copyparty where it is mounted -- has a slight performance cost and higher chance of bugs
2102
2130
  * if copyparty says `incorrect --rp-loc or webserver config; expected vpath starting with [...]` it's likely because the webserver is stripping away the proxy location from the request URLs -- see the `ProxyPass` in the apache example below
2103
2131
 
2104
- when running behind a reverse-proxy (this includes services like cloudflare), it is important to configure real-ip correctly, as many features rely on knowing the client's IP. Look out for red and yellow log messages which explain how to do this. But basically, set `--xff-hdr` to the name of the http header to read the IP from (usually `x-forwarded-for`, but cloudflare uses `cf-connecting-ip`), and then `--xff-src` to the IP of the reverse-proxy so copyparty will trust the xff-hdr. Note that `--rp-loc` in particular will not work at all unless you do this
2132
+ when running behind a reverse-proxy (this includes services like cloudflare), it is important to configure real-ip correctly, as many features rely on knowing the client's IP. The best/safest approach is to configure your reverse-proxy so it gives copyparty a header which only contains the client's true/real IP-address, and then setting `--xff-hdr theHeaderName --rproxy 1` but alternatively, if you want/need to let copyparty handle this, look out for red and yellow log messages which explain how to do that. Basically, the log will say this:
2133
+
2134
+ > set `--xff-hdr` to the name of the http-header to read the IP from (usually `x-forwarded-for`, but cloudflare uses `cf-connecting-ip`), and then `--xff-src` to the IP of the reverse-proxy so copyparty will trust the xff-hdr. You will also need to configure `--rproxy` to `1` if the header only contains one IP (the correct one) or to a *negative value* if it contains multiple; `-1` being the rightmost and most trusted IP (the nearest proxy, so usually not the correct one), `-2` being the second-closest hop, and so on
2135
+
2136
+ Note that `--rp-loc` in particular will not work at all unless you configure the above correctly
2105
2137
 
2106
2138
  some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatically obtain a valid https/tls certificate for you, and some support HTTP/2 and QUIC which *could* be a nice speed boost, depending on a lot of factors
2107
2139
  * **warning:** nginx-QUIC (HTTP/3) is still experimental and can make uploads much slower, so HTTP/1.1 is recommended for now
@@ -2320,11 +2352,9 @@ if your distro/OS is not mentioned below, there might be some hints in the [«on
2320
2352
 
2321
2353
  `pacman -S copyparty` (in [arch linux extra](https://archlinux.org/packages/extra/any/copyparty/))
2322
2354
 
2323
- it comes with a [systemd service](./contrib/package/arch/copyparty.service) and expects to find one or more [config files](./docs/example.conf) in `/etc/copyparty.d/`
2324
-
2325
- after installing it, you may want to `cp /usr/lib/systemd/system/copyparty.service /etc/systemd/system/` and then `vim /etc/systemd/system/copyparty.service` to change what user/group it is running as (you only need to do this once)
2355
+ it comes with a [systemd service](./contrib/systemd/copyparty@.service) as well as a [user service](./contrib/systemd/copyparty-user.service), and expects to find a [config file](./contrib/systemd/copyparty.example.conf) in `/etc/copyparty/copyparty.conf` or `~/.config/copyparty/copyparty.conf`
2326
2356
 
2327
- NOTE: there used to be an aur package; this evaporated when copyparty was adopted by the official archlinux repos. If you're still using the aur package, please move
2357
+ 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)
2328
2358
 
2329
2359
 
2330
2360
  ## fedora package
@@ -2487,6 +2517,7 @@ quick summary of more eccentric web-browsers trying to view a directory index:
2487
2517
  | **SerenityOS** (7e98457) | hits a page fault, works with `?b=u`, file upload not-impl |
2488
2518
  | **sony psp** 5.50 | can browse, upload/mkdir/msg (thx dwarf) [screenshot](https://github.com/user-attachments/assets/9d21f020-1110-4652-abeb-6fc09c533d4f) |
2489
2519
  | **nintendo 3ds** | can browse, upload, view thumbnails (thx bnjmn) |
2520
+ | **Nintendo Wii (Opera 9.0 "Internet Channel")** | can browse, can't upload or download (no local storage), can view images - works best with `?b=u`, default view broken |
2490
2521
 
2491
2522
  <p align="center"><img src="https://github.com/user-attachments/assets/88deab3d-6cad-4017-8841-2f041472b853" /></p>
2492
2523
 
@@ -2546,6 +2577,8 @@ you can provide passwords using header `PW: hunter2`, cookie `cppwd=hunter2`, ur
2546
2577
 
2547
2578
  > for basic-authentication, all of the following are accepted: `password` / `whatever:password` / `password:whatever` (the username is ignored)
2548
2579
 
2580
+ * unless you've enabled `--usernames`, then it's `PW: usr:pwd`, cookie `cppwd=usr:pwd`, url-param `?pw=usr:pwd`
2581
+
2549
2582
  NOTE: curl will not send the original filename if you use `-T` combined with url-params! Also, make sure to always leave a trailing slash in URLs unless you want to override the filename
2550
2583
 
2551
2584
 
@@ -2657,7 +2690,7 @@ there is a [discord server](https://discord.gg/25J8CdTT6G) with an `@everyone`
2657
2690
 
2658
2691
  some notes on hardening
2659
2692
 
2660
- * set `--rproxy 0` if your copyparty is directly facing the internet (not through a reverse-proxy)
2693
+ * set `--rproxy 0` *if and only if* your copyparty is directly facing the internet (not through a reverse-proxy)
2661
2694
  * cors doesn't work right otherwise
2662
2695
  * if you allow anonymous uploads or otherwise don't trust the contents of a volume, you can prevent XSS with volflag `nohtml`
2663
2696
  * this returns html documents as plaintext, and also disables markdown rendering
@@ -2757,6 +2790,12 @@ optionally also specify `--ah-cli` to enter an interactive mode where it will ha
2757
2790
 
2758
2791
  the default configs take about 0.4 sec and 256 MiB RAM to process a new password on a decent laptop
2759
2792
 
2793
+ when generating hashes using `--ah-cli` for docker or systemd services, make sure it is using the same `--ah-salt` by:
2794
+ * inspecting the generated salt using `--show-ah-salt` in copyparty service configuration
2795
+ * setting the same `--ah-salt` in both environments
2796
+
2797
+ > ⚠️ if you have enabled `--usernames` then provide the password as `username:password` when hashing it, for example `ed:hunter2`
2798
+
2760
2799
 
2761
2800
  ## https
2762
2801
 
@@ -2874,6 +2913,8 @@ these are standalone programs and will never be imported / evaluated by copypart
2874
2913
 
2875
2914
  the self-contained "binary" (recommended!) [copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py) will unpack itself and run copyparty, assuming you have python installed of course
2876
2915
 
2916
+ if you only need english, [copyparty-en.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-en.py) is the same thing but smaller
2917
+
2877
2918
  you can reduce the sfx size by repacking it; see [./docs/devnotes.md#sfx-repack](./docs/devnotes.md#sfx-repack)
2878
2919
 
2879
2920
 
@@ -2901,7 +2942,7 @@ then again, if you are already into downloading shady binaries from the internet
2901
2942
 
2902
2943
  ## zipapp
2903
2944
 
2904
- 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
2945
+ 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, unlike the sfx, it is a completely normal zipfile which 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
2905
2946
 
2906
2947
  run it by doubleclicking it, or try typing `python copyparty.pyz` in your terminal/console/commandline/telex if that fails
2907
2948
 
@@ -1,61 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: copyparty
3
- Version: 1.18.9
4
- Summary: Portable file server with accelerated resumable uploads, deduplication, WebDAV, FTP, zeroconf, media indexer, video thumbnails, audio transcoding, and write-only folders
5
- Author-email: ed <copyparty@ocv.me>
6
- License: MIT
7
- Project-URL: Source Code, https://github.com/9001/copyparty
8
- Project-URL: Bug Tracker, https://github.com/9001/copyparty/issues
9
- Project-URL: Demo Server, https://a.ocv.me/pub/demo/
10
- Classifier: Development Status :: 5 - Production/Stable
11
- Classifier: License :: OSI Approved :: MIT License
12
- Classifier: Programming Language :: Python
13
- Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.3
15
- Classifier: Programming Language :: Python :: 3.4
16
- Classifier: Programming Language :: Python :: 3.5
17
- Classifier: Programming Language :: Python :: 3.6
18
- Classifier: Programming Language :: Python :: 3.7
19
- Classifier: Programming Language :: Python :: 3.8
20
- Classifier: Programming Language :: Python :: 3.9
21
- Classifier: Programming Language :: Python :: 3.10
22
- Classifier: Programming Language :: Python :: 3.11
23
- Classifier: Programming Language :: Python :: 3.12
24
- Classifier: Programming Language :: Python :: 3.13
25
- Classifier: Programming Language :: Python :: Implementation :: CPython
26
- Classifier: Programming Language :: Python :: Implementation :: Jython
27
- Classifier: Programming Language :: Python :: Implementation :: PyPy
28
- Classifier: Operating System :: OS Independent
29
- Classifier: Environment :: Console
30
- Classifier: Environment :: No Input/Output (Daemon)
31
- Classifier: Intended Audience :: End Users/Desktop
32
- Classifier: Intended Audience :: System Administrators
33
- Classifier: Topic :: Communications :: File Sharing
34
- Classifier: Topic :: Internet :: File Transfer Protocol (FTP)
35
- Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
36
- Requires-Python: >=3.3
37
- Description-Content-Type: text/markdown
38
- License-File: LICENSE
39
- Requires-Dist: Jinja2
40
- Provides-Extra: thumbnails
41
- Requires-Dist: Pillow; extra == "thumbnails"
42
- Provides-Extra: thumbnails2
43
- Requires-Dist: pyvips; extra == "thumbnails2"
44
- Provides-Extra: audiotags
45
- Requires-Dist: mutagen; extra == "audiotags"
46
- Provides-Extra: ftpd
47
- Requires-Dist: pyftpdlib; extra == "ftpd"
48
- Provides-Extra: ftps
49
- Requires-Dist: pyftpdlib; extra == "ftps"
50
- Requires-Dist: pyopenssl; extra == "ftps"
51
- Provides-Extra: tftpd
52
- Requires-Dist: partftpy>=0.4.0; extra == "tftpd"
53
- Provides-Extra: pwhash
54
- Requires-Dist: argon2-cffi; extra == "pwhash"
55
- Provides-Extra: zeromq
56
- Requires-Dist: pyzmq; extra == "zeromq"
57
- Dynamic: license-file
58
-
59
1
  <img src="https://github.com/9001/copyparty/raw/hovudstraum/docs/logo.svg" width="250" align="right"/>
60
2
 
61
3
  ### 💾🎉 copyparty
@@ -205,6 +147,8 @@ made in Norway 🇳🇴
205
147
 
206
148
  just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** -- that's it! 🎉
207
149
 
150
+ > ℹ️ the sfx is a [self-extractor](https://github.com/9001/copyparty/issues/270) which unpacks an embedded `tar.gz` into `$TEMP` -- if this looks too scary, you can use the [zipapp](#zipapp) which has slightly worse performance
151
+
208
152
  * or install through [pypi](https://pypi.org/project/copyparty/): `python3 -m pip install --user -U copyparty`
209
153
  * or if you cannot install python, you can use [copyparty.exe](#copypartyexe) instead
210
154
  * or install [on arch](#arch-package) ╱ [on NixOS](#nixos-module) ╱ [through nix](#nix-package)
@@ -493,6 +437,7 @@ upgrade notes
493
437
 
494
438
  * can I link someone to a password-protected volume/file by including the password in the URL?
495
439
  * yes, by adding `?pw=hunter2` to the end; replace `?` with `&` if there are parameters in the URL already, meaning it contains a `?` near the end
440
+ * if you have enabled `--usernames` then do `?pw=username:password` instead
496
441
 
497
442
  * how do I stop `.hist` folders from appearing everywhere on my HDD?
498
443
  * by default, a `.hist` folder is created inside each volume for the filesystem index, thumbnails, audio transcodes, and markdown document history. Use the `--hist` global-option or the `hist` volflag to move it somewhere else; see [database location](#database-location)
@@ -571,12 +516,17 @@ anyone trying to bruteforce a password gets banned according to `--ban-pw`; defa
571
516
 
572
517
  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`
573
518
 
519
+ * you can also `PRTY_CONFIG=foobar.conf python copyparty-sfx.py` (convenient in docker etc)
520
+
574
521
  ```yaml
575
522
  [accounts]
576
523
  u1: p1 # create account "u1" with password "p1"
577
524
  u2: p2 # (note that comments must have
578
525
  u3: p3 # two spaces before the # sign)
579
526
 
527
+ [groups]
528
+ g1: u1, u2 # create a group
529
+
580
530
  [/] # this URL will be mapped to...
581
531
  /srv # ...this folder on the server filesystem
582
532
  accs:
@@ -586,6 +536,7 @@ and if you want to use config files instead of commandline args (good!) then her
586
536
  /mnt/music # which is mapped to this folder
587
537
  accs:
588
538
  r: u1, u2 # only these accounts can read,
539
+ r: @g1 # (exactly the same, just with a group instead)
589
540
  rw: u3 # and only u3 can read-write
590
541
 
591
542
  [/inc]
@@ -1066,6 +1017,7 @@ a feed example: https://cd.ocv.me/a/d2/d22/?rss&fext=mp3
1066
1017
  url parameters:
1067
1018
 
1068
1019
  * `pw=hunter2` for password auth
1020
+ * if you enabled `--usernames` then do `pw=username:password` instead
1069
1021
  * `recursive` to also include subfolders
1070
1022
  * `title=foo` changes the feed title (default: folder name)
1071
1023
  * `fext=mp3,opus` only include mp3 and opus files (default: all)
@@ -1142,6 +1094,9 @@ open the `[🎺]` media-player-settings tab to configure it,
1142
1094
  * `[awo]` is `opus` in a `weba` file, good for iPhones (iOS 17.5 and newer) but Apple is still fixing some state-confusion bugs as of iOS 18.2.1
1143
1095
  * `[caf]` is `opus` in a `caf` file, good for iPhones (iOS 11 through 17), technically unsupported by Apple but works for the most part
1144
1096
  * `[mp3]` -- the myth, the legend, the undying master of mediocre sound quality that definitely works everywhere
1097
+ * `[flac]` -- lossless but compressed, for LAN and/or fiber playback on electrostatic headphones
1098
+ * `[wav]` -- lossless and uncompressed, for LAN and/or fiber playback on electrostatic headphones connected to very old equipment
1099
+ * `flac` and `wav` must be enabled with `--allow-flac` / `--allow-wav` to allow spending the disk space
1145
1100
  * "tint" reduces the contrast of the playback bar
1146
1101
 
1147
1102
 
@@ -1276,7 +1231,7 @@ using arguments or config files, or a mix of both:
1276
1231
 
1277
1232
  **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.
1278
1233
  * if running in docker/podman, try this: `docker run --rm -it copyparty/ac --help`
1279
- * or see this (probably outdated): https://ocv.me/copyparty/helptext.html
1234
+ * or see this: https://ocv.me/copyparty/helptext.html
1280
1235
  * or if you prefer plaintext, https://ocv.me/copyparty/helptext.txt
1281
1236
 
1282
1237
 
@@ -1348,6 +1303,7 @@ an FTP server can be started using `--ftp 3921`, and/or `--ftps` for explicit T
1348
1303
  * if you enable both `ftp` and `ftps`, the port-range will be divided in half
1349
1304
  * some older software (filezilla on debian-stable) cannot passive-mode with TLS
1350
1305
  * login with any username + your password, or put your password in the username field
1306
+ * unless you enabled `--usernames`
1351
1307
 
1352
1308
  some recommended FTP / FTPS clients; `wark` = example password:
1353
1309
  * https://winscp.net/eng/download.php
@@ -1365,6 +1321,7 @@ click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to se
1365
1321
 
1366
1322
  general usage:
1367
1323
  * login with any username + your password, or put your password in the username field (password field can be empty/whatever)
1324
+ * unless you enabled `--usernames`
1368
1325
 
1369
1326
  on macos, connect from finder:
1370
1327
  * [Go] -> [Connect to Server...] -> http://192.168.123.1:3923/
@@ -1380,6 +1337,7 @@ using the GUI (winXP or later):
1380
1337
  * rightclick [my computer] -> [map network drive] -> Folder: `http://192.168.123.1:3923/`
1381
1338
  * on winXP only, click the `Sign up for online storage` hyperlink instead and put the URL there
1382
1339
  * providing your password as the username is recommended; the password field can be anything or empty
1340
+ * unless you enabled `--usernames`
1383
1341
 
1384
1342
  the webdav client that's built into windows has the following list of bugs; you can avoid all of these by connecting with rclone instead:
1385
1343
  * win7+ doesn't actually send the password to the server when reauthenticating after a reboot unless you first try to login with an incorrect password and then switch to the correct password
@@ -1437,6 +1395,7 @@ some **BIG WARNINGS** specific to SMB/CIFS, in decreasing importance:
1437
1395
  * the smb backend is not fully integrated with vfs, meaning there could be security issues (path traversal). Please use `--smb-port` (see below) and [prisonparty](./bin/prisonparty.sh) or [bubbleparty](./bin/bubbleparty.sh)
1438
1396
  * account passwords work per-volume as expected, and so does account permissions (read/write/move/delete), but `--smbw` must be given to allow write-access from smb
1439
1397
  * [shadowing](#shadowing) probably works as expected but no guarantees
1398
+ * not compatible with pw-hashing or `--usernames`
1440
1399
 
1441
1400
  and some minor issues,
1442
1401
  * clients only see the first ~400 files in big folders;
@@ -1483,6 +1442,8 @@ note that this disables hotlinking because the opengraph spec demands it; to sne
1483
1442
 
1484
1443
  you can also hotlink files regardless by appending `?raw` to the url
1485
1444
 
1445
+ > WARNING: if you plan to use WebDAV, then `--og-ua` / `og_ua` must be configured
1446
+
1486
1447
  if you want to entirely replace the copyparty response with your own jinja2 template, give the template filepath to `--og-tpl` or volflag `og_tpl` (all members of `HttpCli` are available through the `this` object)
1487
1448
 
1488
1449
 
@@ -1939,6 +1900,8 @@ you can disable the built-in password-based login system, and instead replace it
1939
1900
 
1940
1901
  * the regular config-defined users will be used as a fallback for requests which don't include a valid (trusted) IdP username header
1941
1902
 
1903
+ * if your IdP-server is slow, consider `--idp-cookie` and let requests with the cookie `cppws` bypass the IdP; experimental sessions-based feature added for a party
1904
+
1942
1905
  some popular identity providers are [Authelia](https://www.authelia.com/) (config-file based) and [authentik](https://goauthentik.io/) (GUI-based, more complex)
1943
1906
 
1944
1907
  there is a [docker-compose example](./docs/examples/docker/idp-authelia-traefik) which is hopefully a good starting point (alternatively see [./docs/idp.md](./docs/idp.md) if you're the DIY type)
@@ -2101,7 +2064,11 @@ you can either:
2101
2064
  * or do location-based proxying, using `--rp-loc=/stuff` to tell copyparty where it is mounted -- has a slight performance cost and higher chance of bugs
2102
2065
  * if copyparty says `incorrect --rp-loc or webserver config; expected vpath starting with [...]` it's likely because the webserver is stripping away the proxy location from the request URLs -- see the `ProxyPass` in the apache example below
2103
2066
 
2104
- when running behind a reverse-proxy (this includes services like cloudflare), it is important to configure real-ip correctly, as many features rely on knowing the client's IP. Look out for red and yellow log messages which explain how to do this. But basically, set `--xff-hdr` to the name of the http header to read the IP from (usually `x-forwarded-for`, but cloudflare uses `cf-connecting-ip`), and then `--xff-src` to the IP of the reverse-proxy so copyparty will trust the xff-hdr. Note that `--rp-loc` in particular will not work at all unless you do this
2067
+ when running behind a reverse-proxy (this includes services like cloudflare), it is important to configure real-ip correctly, as many features rely on knowing the client's IP. The best/safest approach is to configure your reverse-proxy so it gives copyparty a header which only contains the client's true/real IP-address, and then setting `--xff-hdr theHeaderName --rproxy 1` but alternatively, if you want/need to let copyparty handle this, look out for red and yellow log messages which explain how to do that. Basically, the log will say this:
2068
+
2069
+ > set `--xff-hdr` to the name of the http-header to read the IP from (usually `x-forwarded-for`, but cloudflare uses `cf-connecting-ip`), and then `--xff-src` to the IP of the reverse-proxy so copyparty will trust the xff-hdr. You will also need to configure `--rproxy` to `1` if the header only contains one IP (the correct one) or to a *negative value* if it contains multiple; `-1` being the rightmost and most trusted IP (the nearest proxy, so usually not the correct one), `-2` being the second-closest hop, and so on
2070
+
2071
+ Note that `--rp-loc` in particular will not work at all unless you configure the above correctly
2105
2072
 
2106
2073
  some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatically obtain a valid https/tls certificate for you, and some support HTTP/2 and QUIC which *could* be a nice speed boost, depending on a lot of factors
2107
2074
  * **warning:** nginx-QUIC (HTTP/3) is still experimental and can make uploads much slower, so HTTP/1.1 is recommended for now
@@ -2320,11 +2287,9 @@ if your distro/OS is not mentioned below, there might be some hints in the [«on
2320
2287
 
2321
2288
  `pacman -S copyparty` (in [arch linux extra](https://archlinux.org/packages/extra/any/copyparty/))
2322
2289
 
2323
- it comes with a [systemd service](./contrib/package/arch/copyparty.service) and expects to find one or more [config files](./docs/example.conf) in `/etc/copyparty.d/`
2324
-
2325
- after installing it, you may want to `cp /usr/lib/systemd/system/copyparty.service /etc/systemd/system/` and then `vim /etc/systemd/system/copyparty.service` to change what user/group it is running as (you only need to do this once)
2290
+ it comes with a [systemd service](./contrib/systemd/copyparty@.service) as well as a [user service](./contrib/systemd/copyparty-user.service), and expects to find a [config file](./contrib/systemd/copyparty.example.conf) in `/etc/copyparty/copyparty.conf` or `~/.config/copyparty/copyparty.conf`
2326
2291
 
2327
- NOTE: there used to be an aur package; this evaporated when copyparty was adopted by the official archlinux repos. If you're still using the aur package, please move
2292
+ 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)
2328
2293
 
2329
2294
 
2330
2295
  ## fedora package
@@ -2487,6 +2452,7 @@ quick summary of more eccentric web-browsers trying to view a directory index:
2487
2452
  | **SerenityOS** (7e98457) | hits a page fault, works with `?b=u`, file upload not-impl |
2488
2453
  | **sony psp** 5.50 | can browse, upload/mkdir/msg (thx dwarf) [screenshot](https://github.com/user-attachments/assets/9d21f020-1110-4652-abeb-6fc09c533d4f) |
2489
2454
  | **nintendo 3ds** | can browse, upload, view thumbnails (thx bnjmn) |
2455
+ | **Nintendo Wii (Opera 9.0 "Internet Channel")** | can browse, can't upload or download (no local storage), can view images - works best with `?b=u`, default view broken |
2490
2456
 
2491
2457
  <p align="center"><img src="https://github.com/user-attachments/assets/88deab3d-6cad-4017-8841-2f041472b853" /></p>
2492
2458
 
@@ -2546,6 +2512,8 @@ you can provide passwords using header `PW: hunter2`, cookie `cppwd=hunter2`, ur
2546
2512
 
2547
2513
  > for basic-authentication, all of the following are accepted: `password` / `whatever:password` / `password:whatever` (the username is ignored)
2548
2514
 
2515
+ * unless you've enabled `--usernames`, then it's `PW: usr:pwd`, cookie `cppwd=usr:pwd`, url-param `?pw=usr:pwd`
2516
+
2549
2517
  NOTE: curl will not send the original filename if you use `-T` combined with url-params! Also, make sure to always leave a trailing slash in URLs unless you want to override the filename
2550
2518
 
2551
2519
 
@@ -2657,7 +2625,7 @@ there is a [discord server](https://discord.gg/25J8CdTT6G) with an `@everyone`
2657
2625
 
2658
2626
  some notes on hardening
2659
2627
 
2660
- * set `--rproxy 0` if your copyparty is directly facing the internet (not through a reverse-proxy)
2628
+ * set `--rproxy 0` *if and only if* your copyparty is directly facing the internet (not through a reverse-proxy)
2661
2629
  * cors doesn't work right otherwise
2662
2630
  * if you allow anonymous uploads or otherwise don't trust the contents of a volume, you can prevent XSS with volflag `nohtml`
2663
2631
  * this returns html documents as plaintext, and also disables markdown rendering
@@ -2757,6 +2725,12 @@ optionally also specify `--ah-cli` to enter an interactive mode where it will ha
2757
2725
 
2758
2726
  the default configs take about 0.4 sec and 256 MiB RAM to process a new password on a decent laptop
2759
2727
 
2728
+ when generating hashes using `--ah-cli` for docker or systemd services, make sure it is using the same `--ah-salt` by:
2729
+ * inspecting the generated salt using `--show-ah-salt` in copyparty service configuration
2730
+ * setting the same `--ah-salt` in both environments
2731
+
2732
+ > ⚠️ if you have enabled `--usernames` then provide the password as `username:password` when hashing it, for example `ed:hunter2`
2733
+
2760
2734
 
2761
2735
  ## https
2762
2736
 
@@ -2874,6 +2848,8 @@ these are standalone programs and will never be imported / evaluated by copypart
2874
2848
 
2875
2849
  the self-contained "binary" (recommended!) [copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py) will unpack itself and run copyparty, assuming you have python installed of course
2876
2850
 
2851
+ if you only need english, [copyparty-en.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-en.py) is the same thing but smaller
2852
+
2877
2853
  you can reduce the sfx size by repacking it; see [./docs/devnotes.md#sfx-repack](./docs/devnotes.md#sfx-repack)
2878
2854
 
2879
2855
 
@@ -2901,7 +2877,7 @@ then again, if you are already into downloading shady binaries from the internet
2901
2877
 
2902
2878
  ## zipapp
2903
2879
 
2904
- 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
2880
+ 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, unlike the sfx, it is a completely normal zipfile which 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
2905
2881
 
2906
2882
  run it by doubleclicking it, or try typing `python copyparty.pyz` in your terminal/console/commandline/telex if that fails
2907
2883
 
@@ -60,10 +60,6 @@ web/browser.js
60
60
  web/browser2.html
61
61
  web/cf.html
62
62
  web/copyparty.gif
63
- web/dd/2.png
64
- web/dd/3.png
65
- web/dd/4.png
66
- web/dd/5.png
67
63
  web/deps/busy.mp3
68
64
  web/deps/easymde.css
69
65
  web/deps/easymde.js