copyparty 1.18.10__tar.gz → 1.19.1__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 (128) hide show
  1. {copyparty-1.18.10 → copyparty-1.19.1}/PKG-INFO +22 -8
  2. {copyparty-1.18.10 → copyparty-1.19.1}/README.md +21 -7
  3. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/__main__.py +82 -68
  4. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/__version__.py +3 -3
  5. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/authsrv.py +23 -0
  6. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/cfg.py +2 -0
  7. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/ftpd.py +7 -2
  8. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/httpcli.py +76 -23
  9. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/mdns.py +2 -1
  10. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/multicast.py +1 -5
  11. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/pwhash.py +4 -0
  12. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/svchub.py +2 -11
  13. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/tcpsrv.py +14 -3
  14. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/tftpd.py +1 -1
  15. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/up2k.py +3 -2
  16. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/util.py +11 -0
  17. copyparty-1.19.1/copyparty/web/browser.css.gz +0 -0
  18. copyparty-1.19.1/copyparty/web/browser.js.gz +0 -0
  19. copyparty-1.19.1/copyparty/web/md2.js.gz +0 -0
  20. copyparty-1.19.1/copyparty/web/mde.js.gz +0 -0
  21. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/rups.html +1 -8
  22. copyparty-1.19.1/copyparty/web/rups.js.gz +0 -0
  23. copyparty-1.19.1/copyparty/web/shares.js.gz +0 -0
  24. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/splash.html +6 -1
  25. copyparty-1.19.1/copyparty/web/splash.js.gz +0 -0
  26. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/svcs.html +1 -0
  27. copyparty-1.19.1/copyparty/web/svcs.js.gz +0 -0
  28. copyparty-1.19.1/copyparty/web/up2k.js.gz +0 -0
  29. copyparty-1.19.1/copyparty/web/util.js.gz +0 -0
  30. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty.egg-info/PKG-INFO +22 -8
  31. copyparty-1.18.10/copyparty/web/browser.css.gz +0 -0
  32. copyparty-1.18.10/copyparty/web/browser.js.gz +0 -0
  33. copyparty-1.18.10/copyparty/web/md2.js.gz +0 -0
  34. copyparty-1.18.10/copyparty/web/mde.js.gz +0 -0
  35. copyparty-1.18.10/copyparty/web/rups.js.gz +0 -0
  36. copyparty-1.18.10/copyparty/web/shares.js.gz +0 -0
  37. copyparty-1.18.10/copyparty/web/splash.js.gz +0 -0
  38. copyparty-1.18.10/copyparty/web/svcs.js.gz +0 -0
  39. copyparty-1.18.10/copyparty/web/up2k.js.gz +0 -0
  40. copyparty-1.18.10/copyparty/web/util.js.gz +0 -0
  41. {copyparty-1.18.10 → copyparty-1.19.1}/LICENSE +0 -0
  42. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/__init__.py +0 -0
  43. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/bos/__init__.py +0 -0
  44. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/bos/bos.py +0 -0
  45. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/bos/path.py +0 -0
  46. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/broker_mp.py +0 -0
  47. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/broker_mpw.py +0 -0
  48. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/broker_thr.py +0 -0
  49. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/broker_util.py +0 -0
  50. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/cert.py +0 -0
  51. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/dxml.py +0 -0
  52. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/fsutil.py +0 -0
  53. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/httpconn.py +0 -0
  54. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/httpsrv.py +0 -0
  55. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/ico.py +0 -0
  56. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/metrics.py +0 -0
  57. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/mtag.py +0 -0
  58. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/res/COPYING.txt +0 -0
  59. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/res/__init__.py +0 -0
  60. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/res/insecure.pem +0 -0
  61. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/smbd.py +0 -0
  62. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/ssdp.py +0 -0
  63. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/star.py +0 -0
  64. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/__init__.py +0 -0
  65. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/dnslib/__init__.py +0 -0
  66. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/dnslib/bimap.py +0 -0
  67. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/dnslib/bit.py +0 -0
  68. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/dnslib/buffer.py +0 -0
  69. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/dnslib/dns.py +0 -0
  70. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/dnslib/label.py +0 -0
  71. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/dnslib/lex.py +0 -0
  72. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/dnslib/ranges.py +0 -0
  73. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/ifaddr/__init__.py +0 -0
  74. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/ifaddr/_posix.py +0 -0
  75. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/ifaddr/_shared.py +0 -0
  76. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/ifaddr/_win32.py +0 -0
  77. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/qrcodegen.py +0 -0
  78. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/stolen/surrogateescape.py +0 -0
  79. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/sutil.py +0 -0
  80. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/szip.py +0 -0
  81. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/th_cli.py +0 -0
  82. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/th_srv.py +0 -0
  83. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/u2idx.py +0 -0
  84. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/a/__init__.py +0 -0
  85. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/a/partyfuse.py +0 -0
  86. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/a/u2c.py +0 -0
  87. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/a/webdav-cfg.bat +0 -0
  88. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/baguettebox.js.gz +0 -0
  89. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/browser.html +0 -0
  90. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/browser2.html +0 -0
  91. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/cf.html +0 -0
  92. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/dbg-audio.js.gz +0 -0
  93. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/__init__.py +0 -0
  94. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/busy.mp3.gz +0 -0
  95. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/easymde.css.gz +0 -0
  96. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/easymde.js.gz +0 -0
  97. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/fuse.py +0 -0
  98. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/marked.js.gz +0 -0
  99. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/mini-fa.css.gz +0 -0
  100. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/mini-fa.woff +0 -0
  101. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/prism.css.gz +0 -0
  102. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/prism.js.gz +0 -0
  103. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/prismd.css.gz +0 -0
  104. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/scp.woff2 +0 -0
  105. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/sha512.ac.js.gz +0 -0
  106. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/deps/sha512.hw.js.gz +0 -0
  107. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/idp.html +0 -0
  108. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/md.css.gz +0 -0
  109. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/md.html +0 -0
  110. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/md.js.gz +0 -0
  111. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/md2.css.gz +0 -0
  112. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/mde.css.gz +0 -0
  113. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/mde.html +0 -0
  114. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/msg.css.gz +0 -0
  115. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/msg.html +0 -0
  116. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/rups.css.gz +0 -0
  117. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/shares.css.gz +0 -0
  118. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/shares.html +0 -0
  119. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/splash.css.gz +0 -0
  120. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/ui.css.gz +0 -0
  121. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty/web/w.hash.js.gz +0 -0
  122. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty.egg-info/SOURCES.txt +0 -0
  123. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty.egg-info/dependency_links.txt +0 -0
  124. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty.egg-info/entry_points.txt +0 -0
  125. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty.egg-info/requires.txt +0 -0
  126. {copyparty-1.18.10 → copyparty-1.19.1}/copyparty.egg-info/top_level.txt +0 -0
  127. {copyparty-1.18.10 → copyparty-1.19.1}/pyproject.toml +0 -0
  128. {copyparty-1.18.10 → copyparty-1.19.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: copyparty
3
- Version: 1.18.10
3
+ Version: 1.19.1
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
@@ -502,6 +502,7 @@ upgrade notes
502
502
 
503
503
  * can I link someone to a password-protected volume/file by including the password in the URL?
504
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
505
506
 
506
507
  * how do I stop `.hist` folders from appearing everywhere on my HDD?
507
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)
@@ -1081,6 +1082,7 @@ a feed example: https://cd.ocv.me/a/d2/d22/?rss&fext=mp3
1081
1082
  url parameters:
1082
1083
 
1083
1084
  * `pw=hunter2` for password auth
1085
+ * if you enabled `--usernames` then do `pw=username:password` instead
1084
1086
  * `recursive` to also include subfolders
1085
1087
  * `title=foo` changes the feed title (default: folder name)
1086
1088
  * `fext=mp3,opus` only include mp3 and opus files (default: all)
@@ -1294,7 +1296,7 @@ using arguments or config files, or a mix of both:
1294
1296
 
1295
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.
1296
1298
  * if running in docker/podman, try this: `docker run --rm -it copyparty/ac --help`
1297
- * or see this (probably outdated): https://ocv.me/copyparty/helptext.html
1299
+ * or see this: https://ocv.me/copyparty/helptext.html
1298
1300
  * or if you prefer plaintext, https://ocv.me/copyparty/helptext.txt
1299
1301
 
1300
1302
 
@@ -1366,6 +1368,7 @@ an FTP server can be started using `--ftp 3921`, and/or `--ftps` for explicit T
1366
1368
  * if you enable both `ftp` and `ftps`, the port-range will be divided in half
1367
1369
  * some older software (filezilla on debian-stable) cannot passive-mode with TLS
1368
1370
  * login with any username + your password, or put your password in the username field
1371
+ * unless you enabled `--usernames`
1369
1372
 
1370
1373
  some recommended FTP / FTPS clients; `wark` = example password:
1371
1374
  * https://winscp.net/eng/download.php
@@ -1383,6 +1386,7 @@ click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to se
1383
1386
 
1384
1387
  general usage:
1385
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`
1386
1390
 
1387
1391
  on macos, connect from finder:
1388
1392
  * [Go] -> [Connect to Server...] -> http://192.168.123.1:3923/
@@ -1398,6 +1402,7 @@ using the GUI (winXP or later):
1398
1402
  * rightclick [my computer] -> [map network drive] -> Folder: `http://192.168.123.1:3923/`
1399
1403
  * on winXP only, click the `Sign up for online storage` hyperlink instead and put the URL there
1400
1404
  * providing your password as the username is recommended; the password field can be anything or empty
1405
+ * unless you enabled `--usernames`
1401
1406
 
1402
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:
1403
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
@@ -1455,6 +1460,7 @@ some **BIG WARNINGS** specific to SMB/CIFS, in decreasing importance:
1455
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)
1456
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
1457
1462
  * [shadowing](#shadowing) probably works as expected but no guarantees
1463
+ * not compatible with pw-hashing or `--usernames`
1458
1464
 
1459
1465
  and some minor issues,
1460
1466
  * clients only see the first ~400 files in big folders;
@@ -2123,7 +2129,11 @@ you can either:
2123
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
2124
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
2125
2131
 
2126
- 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
2127
2137
 
2128
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
2129
2139
  * **warning:** nginx-QUIC (HTTP/3) is still experimental and can make uploads much slower, so HTTP/1.1 is recommended for now
@@ -2342,11 +2352,9 @@ if your distro/OS is not mentioned below, there might be some hints in the [«on
2342
2352
 
2343
2353
  `pacman -S copyparty` (in [arch linux extra](https://archlinux.org/packages/extra/any/copyparty/))
2344
2354
 
2345
- 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/`
2346
-
2347
- 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`
2348
2356
 
2349
- 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)
2350
2358
 
2351
2359
 
2352
2360
  ## fedora package
@@ -2569,6 +2577,8 @@ you can provide passwords using header `PW: hunter2`, cookie `cppwd=hunter2`, ur
2569
2577
 
2570
2578
  > for basic-authentication, all of the following are accepted: `password` / `whatever:password` / `password:whatever` (the username is ignored)
2571
2579
 
2580
+ * unless you've enabled `--usernames`, then it's `PW: usr:pwd`, cookie `cppwd=usr:pwd`, url-param `?pw=usr:pwd`
2581
+
2572
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
2573
2583
 
2574
2584
 
@@ -2680,7 +2690,7 @@ there is a [discord server](https://discord.gg/25J8CdTT6G) with an `@everyone`
2680
2690
 
2681
2691
  some notes on hardening
2682
2692
 
2683
- * 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)
2684
2694
  * cors doesn't work right otherwise
2685
2695
  * if you allow anonymous uploads or otherwise don't trust the contents of a volume, you can prevent XSS with volflag `nohtml`
2686
2696
  * this returns html documents as plaintext, and also disables markdown rendering
@@ -2784,6 +2794,8 @@ when generating hashes using `--ah-cli` for docker or systemd services, make sur
2784
2794
  * inspecting the generated salt using `--show-ah-salt` in copyparty service configuration
2785
2795
  * setting the same `--ah-salt` in both environments
2786
2796
 
2797
+ > ⚠️ if you have enabled `--usernames` then provide the password as `username:password` when hashing it, for example `ed:hunter2`
2798
+
2787
2799
 
2788
2800
  ## https
2789
2801
 
@@ -2901,6 +2913,8 @@ these are standalone programs and will never be imported / evaluated by copypart
2901
2913
 
2902
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
2903
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
+
2904
2918
  you can reduce the sfx size by repacking it; see [./docs/devnotes.md#sfx-repack](./docs/devnotes.md#sfx-repack)
2905
2919
 
2906
2920
 
@@ -437,6 +437,7 @@ upgrade notes
437
437
 
438
438
  * can I link someone to a password-protected volume/file by including the password in the URL?
439
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
440
441
 
441
442
  * how do I stop `.hist` folders from appearing everywhere on my HDD?
442
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)
@@ -1016,6 +1017,7 @@ a feed example: https://cd.ocv.me/a/d2/d22/?rss&fext=mp3
1016
1017
  url parameters:
1017
1018
 
1018
1019
  * `pw=hunter2` for password auth
1020
+ * if you enabled `--usernames` then do `pw=username:password` instead
1019
1021
  * `recursive` to also include subfolders
1020
1022
  * `title=foo` changes the feed title (default: folder name)
1021
1023
  * `fext=mp3,opus` only include mp3 and opus files (default: all)
@@ -1229,7 +1231,7 @@ using arguments or config files, or a mix of both:
1229
1231
 
1230
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.
1231
1233
  * if running in docker/podman, try this: `docker run --rm -it copyparty/ac --help`
1232
- * or see this (probably outdated): https://ocv.me/copyparty/helptext.html
1234
+ * or see this: https://ocv.me/copyparty/helptext.html
1233
1235
  * or if you prefer plaintext, https://ocv.me/copyparty/helptext.txt
1234
1236
 
1235
1237
 
@@ -1301,6 +1303,7 @@ an FTP server can be started using `--ftp 3921`, and/or `--ftps` for explicit T
1301
1303
  * if you enable both `ftp` and `ftps`, the port-range will be divided in half
1302
1304
  * some older software (filezilla on debian-stable) cannot passive-mode with TLS
1303
1305
  * login with any username + your password, or put your password in the username field
1306
+ * unless you enabled `--usernames`
1304
1307
 
1305
1308
  some recommended FTP / FTPS clients; `wark` = example password:
1306
1309
  * https://winscp.net/eng/download.php
@@ -1318,6 +1321,7 @@ click the [connect](http://127.0.0.1:3923/?hc) button in the control-panel to se
1318
1321
 
1319
1322
  general usage:
1320
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`
1321
1325
 
1322
1326
  on macos, connect from finder:
1323
1327
  * [Go] -> [Connect to Server...] -> http://192.168.123.1:3923/
@@ -1333,6 +1337,7 @@ using the GUI (winXP or later):
1333
1337
  * rightclick [my computer] -> [map network drive] -> Folder: `http://192.168.123.1:3923/`
1334
1338
  * on winXP only, click the `Sign up for online storage` hyperlink instead and put the URL there
1335
1339
  * providing your password as the username is recommended; the password field can be anything or empty
1340
+ * unless you enabled `--usernames`
1336
1341
 
1337
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:
1338
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
@@ -1390,6 +1395,7 @@ some **BIG WARNINGS** specific to SMB/CIFS, in decreasing importance:
1390
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)
1391
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
1392
1397
  * [shadowing](#shadowing) probably works as expected but no guarantees
1398
+ * not compatible with pw-hashing or `--usernames`
1393
1399
 
1394
1400
  and some minor issues,
1395
1401
  * clients only see the first ~400 files in big folders;
@@ -2058,7 +2064,11 @@ you can either:
2058
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
2059
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
2060
2066
 
2061
- 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
2062
2072
 
2063
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
2064
2074
  * **warning:** nginx-QUIC (HTTP/3) is still experimental and can make uploads much slower, so HTTP/1.1 is recommended for now
@@ -2277,11 +2287,9 @@ if your distro/OS is not mentioned below, there might be some hints in the [«on
2277
2287
 
2278
2288
  `pacman -S copyparty` (in [arch linux extra](https://archlinux.org/packages/extra/any/copyparty/))
2279
2289
 
2280
- 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/`
2281
-
2282
- 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`
2283
2291
 
2284
- 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)
2285
2293
 
2286
2294
 
2287
2295
  ## fedora package
@@ -2504,6 +2512,8 @@ you can provide passwords using header `PW: hunter2`, cookie `cppwd=hunter2`, ur
2504
2512
 
2505
2513
  > for basic-authentication, all of the following are accepted: `password` / `whatever:password` / `password:whatever` (the username is ignored)
2506
2514
 
2515
+ * unless you've enabled `--usernames`, then it's `PW: usr:pwd`, cookie `cppwd=usr:pwd`, url-param `?pw=usr:pwd`
2516
+
2507
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
2508
2518
 
2509
2519
 
@@ -2615,7 +2625,7 @@ there is a [discord server](https://discord.gg/25J8CdTT6G) with an `@everyone`
2615
2625
 
2616
2626
  some notes on hardening
2617
2627
 
2618
- * 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)
2619
2629
  * cors doesn't work right otherwise
2620
2630
  * if you allow anonymous uploads or otherwise don't trust the contents of a volume, you can prevent XSS with volflag `nohtml`
2621
2631
  * this returns html documents as plaintext, and also disables markdown rendering
@@ -2719,6 +2729,8 @@ when generating hashes using `--ah-cli` for docker or systemd services, make sur
2719
2729
  * inspecting the generated salt using `--show-ah-salt` in copyparty service configuration
2720
2730
  * setting the same `--ah-salt` in both environments
2721
2731
 
2732
+ > ⚠️ if you have enabled `--usernames` then provide the password as `username:password` when hashing it, for example `ed:hunter2`
2733
+
2722
2734
 
2723
2735
  ## https
2724
2736
 
@@ -2836,6 +2848,8 @@ these are standalone programs and will never be imported / evaluated by copypart
2836
2848
 
2837
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
2838
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
+
2839
2853
  you can reduce the sfx size by repacking it; see [./docs/devnotes.md#sfx-repack](./docs/devnotes.md#sfx-repack)
2840
2854
 
2841
2855