-
-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
caddyhttp: Added plaintext capability to file_server browse
#6093
caddyhttp: Added plaintext capability to file_server browse
#6093
Conversation
This commit is twofold: First it adds a new optional field, `return_type`, to `browser` for setting the default format of the returned index (html, json or plaintext). This is used when the `Accept` header is set to `/*`. Second, it adds a preliminary `text/plain` support to the `file_server` browser that returns a text representation of the file system, when an `Accept: text/plain` header is present, with the behavior discussed above.
file_server
browser
file_server
browser
Forgive me if you explained this already at least implicitly, but you can set your own browse template. Why not just make a plaintext template? |
I actually didn't consider using a template because it didn't sound like it was meant to be used in this way, but testing it now, I can kind of replicate what I want to achieve with no extraneous html tags. The template is still parsed and served as an html resource, however, so it's displayed inconsistently - the content is interpreted as the html body in the browser, which ignores newlines (and possibly other formatting), and the line breaks and spaces around template functions mess up the output in the terminal when These issues aside, I think it's useful to have this capability in |
I think this is pretty cool. I could imagine we'd want to add FWIW, you can use
|
I was thinking of including these in the plaintext output - basically like a plaintext version of the default html template - but can do query parameters instead too. |
Ah, indeed we do set the Content-Type to be text/html, but I wonder if you can override that with your own Anyway, the idea of plaintext output is growing on me -- I can see the utility in a terminal -- I just want to ensure it's done as simple as possible (for now) -- as this is the only request we've had for it I am not sure how niche it is. Who knows, maybe it could be awesome though. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry it took me a while to get around to this. That is pretty neat. How did you get the icons to show up?
No worries, I was busy myself and couldn't respond for some time. The icons are unicode icon glyphs and need a supported font to be available on the system to display properly (instead of the unicode replacement character). I am using Nerd Fonts. |
file_server
browser
file_server browse
@kylosus I went ahead and fixed up the lint problems (I think) and simplified the implementation a bit, hope that's ok. I noticed the config option to set a default return type? I actually removed that since I think a better way is using matchers, for example:
This serves plaintext response to curl clients, but still serves HTML for browsers. Whereas previously browsers would also be served plaintext instead of HTML. I think the line/filetype icons are pretty cool. Unfortunately most terminals won't render them :( If they could be used so that they only appear if supported (and simply disappear if not), then I'd be down for that. Thanks for the contribution! |
Oh, that's a lot nicer, thanks for simplifying the code. I remember trying to set the Accept header like that but it didn't seem to work - I might've been on an older version. Infortunately I don't think there's a way to hide the icons completely on unsupported terminals, but I think the black box unicode substitution character is an acceptable compromise. Up to you though. |
I'm not too concerned about the icons; we can start with this and maybe add some later if we want :) |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Update | Change | OpenSSF | |---|---|---|---| | [caddyserver/caddy](https://togithub.com/caddyserver/caddy) | minor | `2.7.6` -> `2.8.3` | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/caddyserver/caddy/badge)](https://securityscorecards.dev/viewer/?uri=github.com/caddyserver/caddy) | --- ### Release Notes <details> <summary>caddyserver/caddy (caddyserver/caddy)</summary> ### [`v2.8.3`](https://togithub.com/caddyserver/caddy/compare/v2.8.2...v2.8.3) [Compare Source](https://togithub.com/caddyserver/caddy/compare/v2.8.2...v2.8.3) ### [`v2.8.2`](https://togithub.com/caddyserver/caddy/releases/tag/v2.8.2) [Compare Source](https://togithub.com/caddyserver/caddy/compare/v2.8.1...v2.8.2) A few more fixes of reported bugs related to ARI, `try_files` with the root path (`/`), and Caddyfile adapter detection on the CLI. See 2.8.0 release notes for details on 2.8. #### Changelog - [`01308b4`](https://togithub.com/caddyserver/caddy/commit/01308b4b) I'm so tired of typos - [`a63767d`](https://togithub.com/caddyserver/caddy/commit/a63767d3) build(deps): bump golangci/golangci-lint-action from 5 to 6 ([#​6361](https://togithub.com/caddyserver/caddy/issues/6361)) - [`f8a2c60`](https://togithub.com/caddyserver/caddy/commit/f8a2c602) caddyhttp: properly sanitize requests for root path ([#​6360](https://togithub.com/caddyserver/caddy/issues/6360)) - [`b7280e6`](https://togithub.com/caddyserver/caddy/commit/b7280e69) caddytls: Implement certmagic.RenewalInfoGetter - [`15faeac`](https://togithub.com/caddyserver/caddy/commit/15faeacb) cmd: fix auto-detetction of .caddyfile extension ([#​6356](https://togithub.com/caddyserver/caddy/issues/6356)) **Full Changelog**: https://github.com/caddyserver/caddy/compare/v2.8.1...v2.8.2 ### [`v2.8.1`](https://togithub.com/caddyserver/caddy/releases/tag/v2.8.1) [Compare Source](https://togithub.com/caddyserver/caddy/compare/v2.8.0...v2.8.1) Quick fixes for a few users related to directory permissions and matcher parsing. #### Changelog - [`40c582c`](https://togithub.com/caddyserver/caddy/commit/40c582ce) caddyhttp: Fix merging consecutive `client_ip` or `remote_ip` matchers ([#​6350](https://togithub.com/caddyserver/caddy/issues/6350)) - [`a52917a`](https://togithub.com/caddyserver/caddy/commit/a52917a3) core: MkdirAll appDataDir in InstanceID with 0o700 ([#​6340](https://togithub.com/caddyserver/caddy/issues/6340)) ### [`v2.8.0`](https://togithub.com/caddyserver/caddy/releases/tag/v2.8.0) [Compare Source](https://togithub.com/caddyserver/caddy/compare/v2.7.6...v2.8.0) Caddy 2.8 is here! With hundreds of improvements, Caddy is more scalable and capable than ever before. Featuring ACME Renewal Information (ARI) support, HTTP/3 to proxy backends, and so much more than we can list in a sentence, we are pleased to bring you one of the biggest Caddy updates yet. Documentation on our website will be updated in the coming days. We've implemented a *ton* of improvements, fixes, and awesome new features based on your feedback. While some of them aren't particularly visible changes, they allow Caddy to scale better and be more reliable in demanding deployments. Many of the changes are quality-of-life improvements we hope you'll appreciate. Then there's improvements to [ACMEz](https://togithub.com/mholt/acmez), [CertMagic](https://togithub.com/caddyserver/certmagic), and other dependencies which make Caddy better that may not show up in this list. There was a lot of code that had been documented as *deprecated* in place for a long time, so this version introduces a few more breaking changes than usual; please review the notes below. Thank you to our sponsors and everyone in the community who contributed -- over 40 of you made your first contribution for this release. We couldn't have done it without your help. In particular, we'd like to recognize sponsors **Stripe**, **Framer**, and **ZeroSSL** for their positive influence which have greatly enhanced the project. Caddy 2.8 is already being used in our sponsors' large-scale, multi-region production deployments. Want to join those ranks? [Sponsor the Caddy project](https://caddyserver.com/sponsor) and benefit from development priority, dedicated private support, and much more. As with any server upgrades, please be sure to test and validate your configurations in a staging or test environment before deploying to production. Thank you and have a great day! **:warning: Breaking changes:** - ZeroSSL ([#​6229](https://togithub.com/caddyserver/caddy/issues/6229)) (this is *one* overall change, but requires some explanation): - Up to now, Caddy used both Let's Encrypt and ZeroSSL by default to get certificates without any configuration. In 2.8, this is changing slightly. Due to upcoming changes to ZeroSSL accounting policies, ZeroSSL now requires your email address to be able to access their free ACME endpoint. - As such, Caddy will only implicitly add the ZeroSSL issuer to your config if you provide an email address in your Caddyfile using the [`email` global option](https://caddyserver.com/docs/caddyfile/options#email). (We have already recommended this for years.) If you already do this, you don't have to make any changes and you'll still get Let's Encrypt and ZeroSSL automatically as defaults. - If you use JSON to configure certificate automation policies, you will need to ensure you use the [`acme` issuer with your `email` filled out](https://caddyserver.com/docs/json/apps/tls/automation/policies/issuers/acme/#email), and the [`ca` field](https://caddyserver.com/docs/json/apps/tls/automation/policies/issuers/acme/#ca) set to [ZeroSSL's ACME server URL](https://zerossl.com/documentation/acme/). - The [`zerossl` issuer](https://caddyserver.com/docs/modules/tls.issuance.zerossl) module is no longer ACME-capable and is now exclusively for the [ZeroSSL API](https://zerossl.com/developer/). An API key from your ZeroSSL account is required. (The [ZeroSSL ACME server](https://zerossl.com/features/acme/) can still be used with the [`acme` module](https://caddyserver.com/docs/modules/tls.issuance.acme) pointed to ZeroSSL's ACME server. You can provide your account email and/or EAB as well.) **If you were using the ZeroSSL issuer with an API key, it will now start using ZeroSSL's API,** which was probably the expected behavior anyways. The API has several advantages over the ACME endpoint, but may require payment: - Faster response times - IP certificates - Management tools in your ZeroSSL account dashboard - Technical support - To clarify, Let's Encrypt is still a default issuer even if you don't provide an email address (but we have always strongly recommended to do so). - You can still use ZeroSSL's ACME endpoint with your own External Account Binding (EAB) credentials. - See notes in [#​6229](https://togithub.com/caddyserver/caddy/issues/6229) for some examples and further explanations. - Removed support for [the `lego_deprecated` DNS provider module](https://togithub.com/caddy-dns/lego-deprecated). It has been deprecated for 4 years. Use [`caddy-dns` modules](https://togithub.com/caddy-dns) instead; there are over 50 to choose from already. They are more flexible, compile much leaner, and are easier to implement and support. If yours is not supported it can be easily implemented. [Sponsors at or above the Business tier](https://caddyserver.com/sponsor) can request to have their provider implemented for free. - On-demand TLS: The `ask` option in the JSON has been deprecated in favor of a permission module (Caddyfile unchanged) ([#​6055](https://togithub.com/caddyserver/caddy/issues/6055)), and Caddyfile support for `permission` modules is added ([`6a02999`](https://togithub.com/caddyserver/caddy/commit/6a02999)) - Admin API: `Etag` (used for concurrency control) is now a header, not a trailer. This is less efficient, but still virtually no clients properly implement trailer support. - For consistency, the `basicauth` Caddyfile directive has been renamed to `basic_auth` ([#​6092](https://togithub.com/caddyserver/caddy/issues/6092)), and `skip_log` has been renamed to `log_skip`. The old names will continue to work for now, with a deprecation warning in the logs. ([#​6066](https://togithub.com/caddyserver/caddy/issues/6066)). - The `basic_auth` handler no longer supports `scrypt` (deprecated for nearly two years) ([#​6091](https://togithub.com/caddyserver/caddy/issues/6091)) - The `forwarded` option has been deprecated for a long time and has now been removed from the `remote_ip` matcher. Use the `client_ip` matcher instead. ([#​6085](https://togithub.com/caddyserver/caddy/issues/6085)) - Reverse proxy: The `buffer_requests`, `buffer_responses`, and `max_buffer_size` settings have been removed after being deprecated for 14 months. Use `request_buffers` and `response_buffers` instead if you need buffering. - Go API: If you called `caddy.Context.AppIfConfigured()`, it now returns an error, as part of a bug fix. ([#​6292](https://togithub.com/caddyserver/caddy/issues/6292)) **Notable changes:** - acme_server: Configurable allow/deny policies ([#​5796](https://togithub.com/caddyserver/caddy/issues/5796)) - acme_server: Specify allowed challenge types ([#​5794](https://togithub.com/caddyserver/caddy/issues/5794)) - caddyfile: Plugin authors can now specify a default ordering for directives, making manual ordering by users less necessary ([#​5865](https://togithub.com/caddyserver/caddy/issues/5865)) - cmd: The `--adapter` flag is not needed for config files ending with `.caddyfile` ([#​5919](https://togithub.com/caddyserver/caddy/issues/5919)) - encode: More media types are now compressed by default ([#​6081](https://togithub.com/caddyserver/caddy/issues/6081)) - encode: Modify ETag when encoding to comply with RFC 9110 section 8.8.3 ([#​5849](https://togithub.com/caddyserver/caddy/issues/5849)) - encode: Configurable compression level for `zstd` ([#​6140](https://togithub.com/caddyserver/caddy/issues/6140)) - handle_errors: Handling can now be filtered by response status code more easily ([#​5965](https://togithub.com/caddyserver/caddy/issues/5965)) - http: New `fs` directive can declare a file system plugin to use ([#​5057](https://togithub.com/caddyserver/caddy/issues/5057)) - http: Sensitive headers in the logs are now replaced with `["REDACTED"]` instead of empty array. ([#​5669](https://togithub.com/caddyserver/caddy/issues/5669)) - http: Several improvements to size logging, websockets, flushing, 1xx statuses, and QUIC. ([#​6173](https://togithub.com/caddyserver/caddy/issues/6173), [#​6175](https://togithub.com/caddyserver/caddy/issues/6175), [#​6202](https://togithub.com/caddyserver/caddy/issues/6202), [#​6150](https://togithub.com/caddyserver/caddy/issues/6150), [#​6164](https://togithub.com/caddyserver/caddy/issues/6164), [#​6168](https://togithub.com/caddyserver/caddy/issues/6168)) - http: Can now write access logs for a hostname to more than one logger ([#​6088](https://togithub.com/caddyserver/caddy/issues/6088)) - http: The `log_append` handler can add fields to the access logs ([#​6066](https://togithub.com/caddyserver/caddy/issues/6066)) - http: Add `uuid` field to access logs when the `{http.request.uuid}` placeholder is used ([#​5859](https://togithub.com/caddyserver/caddy/issues/5859)) - http: Changed PROXY protocol libraries add TLV support ([#​5915](https://togithub.com/caddyserver/caddy/issues/5915)) - http: A new tracing mode writes each individual middleware handler to logs ([#​6313](https://togithub.com/caddyserver/caddy/issues/6313)) - http: Access logs use a different message ("unhandled") when an HTTP request is a no-op ([#​5182](https://togithub.com/caddyserver/caddy/issues/5182)) - file_server: The browse feature can now return a plaintext response (useful for terminals) ([#​6093](https://togithub.com/caddyserver/caddy/issues/6093)) - file_server: File listings can dereference symlinks if enabled ([#​5973](https://togithub.com/caddyserver/caddy/issues/5973)) - file_server: Directory listings now include total file size ([#​6003](https://togithub.com/caddyserver/caddy/issues/6003)) - file_server: Can use precomputed ETags from sidecar files ([#​6222](https://togithub.com/caddyserver/caddy/issues/6222)) - replacer: A new `{file.*}` global placeholder is available, where `*` is a path to a file on disk which contains a value (generally used for secrets) ([#​5463](https://togithub.com/caddyserver/caddy/issues/5463)) - reverse_proxy: HTTP/3 supported to backends (experimental) ([#​6312](https://togithub.com/caddyserver/caddy/issues/6312)) - reverse_proxy: Active health checks can now be configured with consecutive passes/fails to change status ([#​6154](https://togithub.com/caddyserver/caddy/issues/6154)) - reverse_proxy: A forward proxy can now be specified in config other than a single env var ([#​6114](https://togithub.com/caddyserver/caddy/issues/6114)) - reverse_proxy: Configurable trusted root CAs is now modular ([#​6065](https://togithub.com/caddyserver/caddy/issues/6065)) - reverse_proxy: SRV upstreams now support failovers/grace period with cache ([#​5832](https://togithub.com/caddyserver/caddy/issues/5832)) - reverse_proxy: TLS curves can now be configured (potential preparation for post-quantum) ([#​5851](https://togithub.com/caddyserver/caddy/issues/5851)) - root, rewrite: A `*` matcher token is no longer required in the Caddyfile ([#​5844](https://togithub.com/caddyserver/caddy/issues/5844)) - tls: Client authentication validation methods are now modular/pluggable ([#​6050](https://togithub.com/caddyserver/caddy/issues/6050)) - tls: Trusted CA providers are now modular ([#​5784](https://togithub.com/caddyserver/caddy/issues/5784)) - tls: New `local_ip` connection matcher ([#​6074](https://togithub.com/caddyserver/caddy/issues/6074)) - tls: Improvements and fixes when certificate managers are configured ([#​6229](https://togithub.com/caddyserver/caddy/issues/6229)) - tls: Refactor the On-Demand TLS `ask` endpoint into a `permission` module, making it pluggable ([#​6055](https://togithub.com/caddyserver/caddy/issues/6055)) - tls: Storage cleaning is now synced across instances that share the storage ([#​5940](https://togithub.com/caddyserver/caddy/issues/5940)) - tls: Supports ACME Renewal Information (ARI) draft spec, together with cert lifetime and OCSP/revocation status, to trigger certificate renewals - uri: Can now perform structured query rewrites with `uri query` ([#​6120](https://togithub.com/caddyserver/caddy/issues/6120), [#​6165](https://togithub.com/caddyserver/caddy/issues/6165)) #### Changelog **Full Changelog**: https://github.com/caddyserver/caddy/compare/v2.7.6...v2.8.0 - [`ac0ad4d`](https://togithub.com/caddyserver/caddy/commit/ac0ad4da) Upgrade acmeserver to github.com/go-chi/chi/v5 ([#​5913](https://togithub.com/caddyserver/caddy/issues/5913)) - [`931656b`](https://togithub.com/caddyserver/caddy/commit/931656bd) acmeserver: add policy field to define allow/deny rules ([#​5796](https://togithub.com/caddyserver/caddy/issues/5796)) - [`e1aa862`](https://togithub.com/caddyserver/caddy/commit/e1aa862e) acmeserver: support specifying the allowed challenge types ([#​5794](https://togithub.com/caddyserver/caddy/issues/5794)) - [`e6f46c8`](https://togithub.com/caddyserver/caddy/commit/e6f46c8d) acmeserver: Add `sign_with_root` for Caddyfile ([#​6345](https://togithub.com/caddyserver/caddy/issues/6345)) - [`4a0492f`](https://togithub.com/caddyserver/caddy/commit/4a0492f3) admin: Make `Etag` a header, not a trailer ([#​6208](https://togithub.com/caddyserver/caddy/issues/6208)) - [`1217449`](https://togithub.com/caddyserver/caddy/commit/12174496) admin: Use xxhash for etag ([#​6207](https://togithub.com/caddyserver/caddy/issues/6207)) - [`7e2510e`](https://togithub.com/caddyserver/caddy/commit/7e2510ef) build(deps): bump golangci/golangci-lint-action from 4 to 5 ([#​6289](https://togithub.com/caddyserver/caddy/issues/6289)) - [`4f3f6e3`](https://togithub.com/caddyserver/caddy/commit/4f3f6e35) build(deps): bump actions/setup-go from 4 to 5 ([#​6012](https://togithub.com/caddyserver/caddy/issues/6012)) - [`8a50f19`](https://togithub.com/caddyserver/caddy/commit/8a50f191) build(deps): bump actions/upload-artifact from 3 to 4 ([#​6013](https://togithub.com/caddyserver/caddy/issues/6013)) - [`1bf72db`](https://togithub.com/caddyserver/caddy/commit/1bf72db6) build(deps): bump golang.org/x/crypto from 0.16.0 to 0.17.0 ([#​5994](https://togithub.com/caddyserver/caddy/issues/5994)) - [`223f314`](https://togithub.com/caddyserver/caddy/commit/223f3143) build(deps): bump peter-evans/repository-dispatch from 2 to 3 ([#​6080](https://togithub.com/caddyserver/caddy/issues/6080)) - [`30d6364`](https://togithub.com/caddyserver/caddy/commit/30d63648) caddyauth: Drop support for `scrypt` ([#​6091](https://togithub.com/caddyserver/caddy/issues/6091)) - [`f9e1115`](https://togithub.com/caddyserver/caddy/commit/f9e11158) caddyauth: Rename `basicauth` to `basic_auth` ([#​6092](https://togithub.com/caddyserver/caddy/issues/6092)) - [`f4840cf`](https://togithub.com/caddyserver/caddy/commit/f4840cfe) caddyconfig: Use empty struct instead of bool in map (close [#​6224](https://togithub.com/caddyserver/caddy/issues/6224)) ([#​6227](https://togithub.com/caddyserver/caddy/issues/6227)) - [`f6d2c29`](https://togithub.com/caddyserver/caddy/commit/f6d2c293) caddyfile: Reject global request matchers earlier ([#​6339](https://togithub.com/caddyserver/caddy/issues/6339)) - [`c0273f1`](https://togithub.com/caddyserver/caddy/commit/c0273f1f) caddyfile: Add heredoc support to `fmt` command ([#​6056](https://togithub.com/caddyserver/caddy/issues/6056)) - [`d9aded0`](https://togithub.com/caddyserver/caddy/commit/d9aded01) caddyfile: Allow heredoc blank lines ([#​6051](https://togithub.com/caddyserver/caddy/issues/6051)) - [`8bbf8ec`](https://togithub.com/caddyserver/caddy/commit/8bbf8ec6) caddyfile: Assert having a space after heredoc marker to simply check ([#​6117](https://togithub.com/caddyserver/caddy/issues/6117)) - [`c369df5`](https://togithub.com/caddyserver/caddy/commit/c369df5c) caddyfile: Correctly close the heredoc when the closing marker appears immediately ([#​6062](https://togithub.com/caddyserver/caddy/issues/6062)) - [`1f60328`](https://togithub.com/caddyserver/caddy/commit/1f60328e) caddyfile: Fix variadic placeholder false positive when token contains `:` ([#​5883](https://togithub.com/caddyserver/caddy/issues/5883)) - [`750d0b8`](https://togithub.com/caddyserver/caddy/commit/750d0b83) caddyfile: Normalize & flatten all unmarshalers ([#​6037](https://togithub.com/caddyserver/caddy/issues/6037)) - [`9cd472c`](https://togithub.com/caddyserver/caddy/commit/9cd472c0) caddyfile: Populate regexp matcher names by default ([#​6145](https://togithub.com/caddyserver/caddy/issues/6145)) - [`b893c8c`](https://togithub.com/caddyserver/caddy/commit/b893c8c5) caddyfile: Reject directives in the place of site addresses ([#​6104](https://togithub.com/caddyserver/caddy/issues/6104)) - [`e7a534d`](https://togithub.com/caddyserver/caddy/commit/e7a534d0) caddyfile: Reject long heredoc markers ([#​6098](https://togithub.com/caddyserver/caddy/issues/6098)) - [`7c48b5f`](https://togithub.com/caddyserver/caddy/commit/7c48b5fd) caddyfile: Switch to slices.Equal for better performance ([#​6061](https://togithub.com/caddyserver/caddy/issues/6061)) - [`63d597c`](https://togithub.com/caddyserver/caddy/commit/63d597c0) caddyhttp: Accept XFF header values with ports, when parsing client IP ([#​6183](https://togithub.com/caddyserver/caddy/issues/6183)) - [`3d7d60f`](https://togithub.com/caddyserver/caddy/commit/3d7d60f7) caddyhttp: Add `uuid` to access logs when used ([#​5859](https://togithub.com/caddyserver/caddy/issues/5859)) - [`45132c5`](https://togithub.com/caddyserver/caddy/commit/45132c5b) caddyhttp: Add plaintext response to `file_server browse` ([#​6093](https://togithub.com/caddyserver/caddy/issues/6093)) - [`6d97d8d`](https://togithub.com/caddyserver/caddy/commit/6d97d8d8) caddyhttp: Address some Go 1.20 features ([#​6252](https://togithub.com/caddyserver/caddy/issues/6252)) - [`4c10a05`](https://togithub.com/caddyserver/caddy/commit/4c10a054) caddyhttp: Adjust `scheme` placeholder docs ([#​5910](https://togithub.com/caddyserver/caddy/issues/5910)) - [`97a56d8`](https://togithub.com/caddyserver/caddy/commit/97a56d86) caddyhttp: Allow `header` replacement with empty string ([#​6163](https://togithub.com/caddyserver/caddy/issues/6163)) - [`83ef61d`](https://togithub.com/caddyserver/caddy/commit/83ef61de) caddyhttp: Apply auto HTTPS redir to all interfaces (fix [#​6226](https://togithub.com/caddyserver/caddy/issues/6226)) - [`2fc620d`](https://togithub.com/caddyserver/caddy/commit/2fc620d3) caddyhttp: Fix linter warning about deprecation - [`f5344f8`](https://togithub.com/caddyserver/caddy/commit/f5344f8c) caddyhttp: Fix panic when request missing ClientIPVarKey ([#​6040](https://togithub.com/caddyserver/caddy/issues/6040)) - [`2c48dda`](https://togithub.com/caddyserver/caddy/commit/2c48dda1) caddyhttp: Only attempt to enable full duplex for HTTP/1.x ([#​6102](https://togithub.com/caddyserver/caddy/issues/6102)) - [`1277888`](https://togithub.com/caddyserver/caddy/commit/12778880) caddyhttp: Register post-shutdown callbacks ([#​5948](https://togithub.com/caddyserver/caddy/issues/5948)) - [`7b48ce0`](https://togithub.com/caddyserver/caddy/commit/7b48ce0e) caddyhttp: Replace sensitive headers with REDACTED (close [#​5669](https://togithub.com/caddyserver/caddy/issues/5669)) - [`cc0c0cf`](https://togithub.com/caddyserver/caddy/commit/cc0c0cf0) caddyhttp: Security enhancements for client IP parsing ([#​5805](https://togithub.com/caddyserver/caddy/issues/5805)) - [`70953e8`](https://togithub.com/caddyserver/caddy/commit/70953e87) caddyhttp: Support multiple logger names per host ([#​6088](https://togithub.com/caddyserver/caddy/issues/6088)) - [`bde4621`](https://togithub.com/caddyserver/caddy/commit/bde46211) caddyhttp: Test cases for `%2F` and `%252F` ([#​6084](https://togithub.com/caddyserver/caddy/issues/6084)) - [`c8559c4`](https://togithub.com/caddyserver/caddy/commit/c8559c44) caddyhttp: Use sync.Pool to reduce lengthReader allocations ([#​5848](https://togithub.com/caddyserver/caddy/issues/5848)) - [`ddb1d2c`](https://togithub.com/caddyserver/caddy/commit/ddb1d2c2) caddyhttp: add http.request.local{,.host,.port} placeholder ([#​6182](https://togithub.com/caddyserver/caddy/issues/6182)) - [`924010c`](https://togithub.com/caddyserver/caddy/commit/924010cd) caddyhttp: close quic connections when server closes ([#​6202](https://togithub.com/caddyserver/caddy/issues/6202)) - [`e0daa39`](https://togithub.com/caddyserver/caddy/commit/e0daa39c) caddyhttp: record num. bytes read when response writer is hijacked ([#​6173](https://togithub.com/caddyserver/caddy/issues/6173)) - [`654a3bb`](https://togithub.com/caddyserver/caddy/commit/654a3bb0) caddyhttp: remove duplicate strings.Count in path matcher (fixes [#​6233](https://togithub.com/caddyserver/caddy/issues/6233)) ([#​6234](https://togithub.com/caddyserver/caddy/issues/6234)) - [`b568a10`](https://togithub.com/caddyserver/caddy/commit/b568a10d) caddyhttp: support unix sockets in `caddy respond` command ([#​6010](https://togithub.com/caddyserver/caddy/issues/6010)) - [`c93e304`](https://togithub.com/caddyserver/caddy/commit/c93e3045) caddyhttp: suppress flushing if the response is being buffered ([#​6150](https://togithub.com/caddyserver/caddy/issues/6150)) - [`52822a4`](https://togithub.com/caddyserver/caddy/commit/52822a41) caddyhttp: upgrade to cel v0.20.0 ([#​6161](https://togithub.com/caddyserver/caddy/issues/6161)) - [`224316e`](https://togithub.com/caddyserver/caddy/commit/224316ea) caddyhttp: Move log WARN to INFO, reduce confusion ([#​6185](https://togithub.com/caddyserver/caddy/issues/6185)) - [`6dce493`](https://togithub.com/caddyserver/caddy/commit/6dce4934) caddyhttp: Alter log message when request is unhandled (close [#​5182](https://togithub.com/caddyserver/caddy/issues/5182)) - [`4af38e5`](https://togithub.com/caddyserver/caddy/commit/4af38e5a) caddyhttp: Log 4xx as INFO; 5xx as ERROR (close [#​6106](https://togithub.com/caddyserver/caddy/issues/6106)) - [`fb63e2e`](https://togithub.com/caddyserver/caddy/commit/fb63e2e4) caddyhttp: New experimental handler for intercepting responses ([#​6232](https://togithub.com/caddyserver/caddy/issues/6232)) - [`9ba9991`](https://togithub.com/caddyserver/caddy/commit/9ba99914) caddyhttp: Trace individual middleware handlers ([#​6313](https://togithub.com/caddyserver/caddy/issues/6313)) - [`c97292b`](https://togithub.com/caddyserver/caddy/commit/c97292b2) caddypki: Allow use of root CA without a key. Fixes [#​6290](https://togithub.com/caddyserver/caddy/issues/6290) ([#​6298](https://togithub.com/caddyserver/caddy/issues/6298)) - [`4512be4`](https://togithub.com/caddyserver/caddy/commit/4512be49) caddytest: Rename adapt tests to `*.caddyfiletest` extension ([#​6119](https://togithub.com/caddyserver/caddy/issues/6119)) - [`4c90f14`](https://togithub.com/caddyserver/caddy/commit/4c90f142) caddytest: normalize the JSON config ([#​6316](https://togithub.com/caddyserver/caddy/issues/6316)) - [`8d7ac18`](https://togithub.com/caddyserver/caddy/commit/8d7ac184) caddytls: Ability to drop connections (close [#​6294](https://togithub.com/caddyserver/caddy/issues/6294)) - [`6a02999`](https://togithub.com/caddyserver/caddy/commit/6a029990) caddytls: Add Caddyfile support for on-demand permission module (close [#​6260](https://togithub.com/caddyserver/caddy/issues/6260)) - [`b24ae63`](https://togithub.com/caddyserver/caddy/commit/b24ae63e) caddytls: Context to DecisionFunc ([#​5923](https://togithub.com/caddyserver/caddy/issues/5923)) - [`d129ae6`](https://togithub.com/caddyserver/caddy/commit/d129ae6a) caddytls: Evict internal certs from cache based on issuer ([#​6266](https://togithub.com/caddyserver/caddy/issues/6266)) - [`57c5b92`](https://togithub.com/caddyserver/caddy/commit/57c5b921) caddytls: Make on-demand 'ask' permission modular ([#​6055](https://togithub.com/caddyserver/caddy/issues/6055)) - [`76c4cf5`](https://togithub.com/caddyserver/caddy/commit/76c4cf5a) caddytls: Option to configure certificate lifetime ([#​6253](https://togithub.com/caddyserver/caddy/issues/6253)) - [`3609a4a`](https://togithub.com/caddyserver/caddy/commit/3609a4af) caddytls: Remove shim code supporting deprecated lego-dns ([#​6231](https://togithub.com/caddyserver/caddy/issues/6231)) - [`dc9dd2e`](https://togithub.com/caddyserver/caddy/commit/dc9dd2e4) caddytls: Still provision permission module if ask is specified - [`4a09cf0`](https://togithub.com/caddyserver/caddy/commit/4a09cf0d) caddytls: Sync distributed storage cleaning ([#​5940](https://togithub.com/caddyserver/caddy/issues/5940)) - [`81413ca`](https://togithub.com/caddyserver/caddy/commit/81413cae) caddytls: Upgrade ACMEz to v2; support ZeroSSL API; various fixes ([#​6229](https://togithub.com/caddyserver/caddy/issues/6229)) - [`3ae07a7`](https://togithub.com/caddyserver/caddy/commit/3ae07a73) caddytls: clientauth: leaf verifier: make trusted leaf certs source pluggable ([#​6050](https://togithub.com/caddyserver/caddy/issues/6050)) - [`03f703a`](https://togithub.com/caddyserver/caddy/commit/03f703a0) caddytls: verifier: caddyfile: re-add Caddyfile support ([#​6127](https://togithub.com/caddyserver/caddy/issues/6127)) - [`db3e19b`](https://togithub.com/caddyserver/caddy/commit/db3e19b7) caddytls: fix permission requirement with AutomationPolicy ([#​6328](https://togithub.com/caddyserver/caddy/issues/6328)) - [`1fc151f`](https://togithub.com/caddyserver/caddy/commit/1fc151fa) caddytls: remove ClientHelloSNICtxKey ([#​6326](https://togithub.com/caddyserver/caddy/issues/6326)) - [`e66040a`](https://togithub.com/caddyserver/caddy/commit/e66040a6) caddytls: set server name in context ([#​6324](https://togithub.com/caddyserver/caddy/issues/6324)) - [`b359ca5`](https://togithub.com/caddyserver/caddy/commit/b359ca56) ci/cd: use the build tag `nobadger` to exclude badgerdb ([#​6031](https://togithub.com/caddyserver/caddy/issues/6031)) - [`24b0ecc`](https://togithub.com/caddyserver/caddy/commit/24b0ecc3) cmd: Add newline character to version string in CLI output ([#​5895](https://togithub.com/caddyserver/caddy/issues/5895)) - [`e473ae6`](https://togithub.com/caddyserver/caddy/commit/e473ae68) cmd: Adjust config load logs/errors ([#​6032](https://togithub.com/caddyserver/caddy/issues/6032)) - [`185ed6f`](https://togithub.com/caddyserver/caddy/commit/185ed6fe) cmd: Assume Caddyfile based on filename prefix and suffix ([#​5919](https://togithub.com/caddyserver/caddy/issues/5919)) - [`e1f4b83`](https://togithub.com/caddyserver/caddy/commit/e1f4b83f) cmd: Fix panic related to config filename (fix [#​5919](https://togithub.com/caddyserver/caddy/issues/5919)) - [`8f87c5d`](https://togithub.com/caddyserver/caddy/commit/8f87c5d9) cmd: Only validate config is proper JSON if config slice has data ([#​6250](https://togithub.com/caddyserver/caddy/issues/6250)) - [`56c6b3f`](https://togithub.com/caddyserver/caddy/commit/56c6b3f6) cmd: Preserve LastModified date when exporting storage ([#​5968](https://togithub.com/caddyserver/caddy/issues/5968)) - [`de4959f`](https://togithub.com/caddyserver/caddy/commit/de4959fe) cmd: fix the output of the `Usage` section ([#​6138](https://togithub.com/caddyserver/caddy/issues/6138)) - [`54823f5`](https://togithub.com/caddyserver/caddy/commit/54823f52) cmd: reverseproxy: log: use caddy logger ([#​6042](https://togithub.com/caddyserver/caddy/issues/6042)) - [`d70608b`](https://togithub.com/caddyserver/caddy/commit/d70608b6) cmd: upgrade: resolve symlink of the executable ([#​5891](https://togithub.com/caddyserver/caddy/issues/5891)) - [`d54dcf1`](https://togithub.com/caddyserver/caddy/commit/d54dcf15) cmd: use automaxprocs for better perf in containers ([#​5711](https://togithub.com/caddyserver/caddy/issues/5711)) - [`e1b9a9d`](https://togithub.com/caddyserver/caddy/commit/e1b9a9d7) core: Add `ctx.Slogger()` which returns an `slog` logger ([#​5945](https://togithub.com/caddyserver/caddy/issues/5945)) - [`cbbd1df`](https://togithub.com/caddyserver/caddy/commit/cbbd1df9) core: Always make AppDataDir for InstanceID ([#​5976](https://togithub.com/caddyserver/caddy/issues/5976)) - [`174c19a`](https://togithub.com/caddyserver/caddy/commit/174c19a9) core: Apply SO_REUSEPORT to UDP sockets ([#​5725](https://togithub.com/caddyserver/caddy/issues/5725)) - [`46c5db9`](https://togithub.com/caddyserver/caddy/commit/46c5db92) core: OnExit hooks ([#​6128](https://togithub.com/caddyserver/caddy/issues/6128)) - [`a747930`](https://togithub.com/caddyserver/caddy/commit/a7479302) core: Support NO_COLOR env var to disable log coloring ([#​6078](https://togithub.com/caddyserver/caddy/issues/6078)) - [`7c82e26`](https://togithub.com/caddyserver/caddy/commit/7c82e265) core: quic listener will manage the underlying socket by itself ([#​5749](https://togithub.com/caddyserver/caddy/issues/5749)) - [`a6a45ff`](https://togithub.com/caddyserver/caddy/commit/a6a45ff6) core: AppIfConfigured returns error; consider not-yet-provisioned modules ([#​6292](https://togithub.com/caddyserver/caddy/issues/6292)) - [`2ce5c65`](https://togithub.com/caddyserver/caddy/commit/2ce5c652) core: Fix bug in AppIfConfigured (fix [#​6336](https://togithub.com/caddyserver/caddy/issues/6336)) - [`03e0a01`](https://togithub.com/caddyserver/caddy/commit/03e0a010) encode: Configurable compression level for zstd ([#​6140](https://togithub.com/caddyserver/caddy/issues/6140)) - [`3067074`](https://togithub.com/caddyserver/caddy/commit/3067074d) encode: Improve Etag handling (fix [#​5849](https://togithub.com/caddyserver/caddy/issues/5849)) - [`9ab0943`](https://togithub.com/caddyserver/caddy/commit/9ab09433) encode: Slight fix for the previous commit - [`e698ec5`](https://togithub.com/caddyserver/caddy/commit/e698ec51) encode: write status immediately when status code is informational ([#​6164](https://togithub.com/caddyserver/caddy/issues/6164)) - [`ba58114`](https://togithub.com/caddyserver/caddy/commit/ba581146) events: Add debug log - [`7e52db8`](https://togithub.com/caddyserver/caddy/commit/7e52db82) fileserver: Add .m4v for browse template icon - [`8f9ffc5`](https://togithub.com/caddyserver/caddy/commit/8f9ffc58) fileserver: Add total file size to directory listing ([#​6003](https://togithub.com/caddyserver/caddy/issues/6003)) - [`feb07a7`](https://togithub.com/caddyserver/caddy/commit/feb07a7b) fileserver: Browse can show symlink target if enabled ([#​5973](https://togithub.com/caddyserver/caddy/issues/5973)) - [`b16aba5`](https://togithub.com/caddyserver/caddy/commit/b16aba5c) fileserver: Enable compression for command by default ([#​5855](https://togithub.com/caddyserver/caddy/issues/5855)) - [`5d8b45c`](https://togithub.com/caddyserver/caddy/commit/5d8b45c9) fileserver: Escape # and ? in img src (fix [#​6237](https://togithub.com/caddyserver/caddy/issues/6237)) - [`f3e849e`](https://togithub.com/caddyserver/caddy/commit/f3e849e4) fileserver: Implement caddyfile.Unmarshaler interface ([#​5850](https://togithub.com/caddyserver/caddy/issues/5850)) - [`d00824f`](https://togithub.com/caddyserver/caddy/commit/d00824f4) fileserver: Improve Vary handling ([#​5849](https://togithub.com/caddyserver/caddy/issues/5849)) - [`362f33d`](https://togithub.com/caddyserver/caddy/commit/362f33da) fileserver: New --precompressed flag ([#​5880](https://togithub.com/caddyserver/caddy/issues/5880)) - [`5a4374b`](https://togithub.com/caddyserver/caddy/commit/5a4374be) fileserver: Preserve query during canonicalization redirect ([#​6109](https://togithub.com/caddyserver/caddy/issues/6109)) - [`cabb5d7`](https://togithub.com/caddyserver/caddy/commit/cabb5d71) fileserver: Set "Vary: Accept-Encoding" header (see [#​5849](https://togithub.com/caddyserver/caddy/issues/5849)) - [`567d96c`](https://togithub.com/caddyserver/caddy/commit/567d96c6) fileserver: read etags from precomputed files ([#​6222](https://togithub.com/caddyserver/caddy/issues/6222)) - [`c839a98`](https://togithub.com/caddyserver/caddy/commit/c839a98f) filesystem: Globally declared filesystems, `fs` directive ([#​5833](https://togithub.com/caddyserver/caddy/issues/5833)) - [`60abd72`](https://togithub.com/caddyserver/caddy/commit/60abd72c) fix: add back text/\* - [`b8f729b`](https://togithub.com/caddyserver/caddy/commit/b8f729b8) fix: add more media types to the compressed by default list - [`a4a64a6`](https://togithub.com/caddyserver/caddy/commit/a4a64a6f) gitignore: Add rule for caddyfile.go ([#​6225](https://togithub.com/caddyserver/caddy/issues/6225)) - [`9fc55a9`](https://togithub.com/caddyserver/caddy/commit/9fc55a97) go.mod: CVE-2023-45142 Update opentelemetry ([#​5908](https://togithub.com/caddyserver/caddy/issues/5908)) - [`fe2a02b`](https://togithub.com/caddyserver/caddy/commit/fe2a02bf) go.mod: Upgrade quic-go to v0.39.1 - [`b49ec05`](https://togithub.com/caddyserver/caddy/commit/b49ec051) go.mod: Updated quic-go to v0.40.1 ([#​5983](https://togithub.com/caddyserver/caddy/issues/5983)) - [`ee35855`](https://togithub.com/caddyserver/caddy/commit/ee358550) go.mod: update quic-go version to v0.40.0 ([#​5922](https://togithub.com/caddyserver/caddy/issues/5922)) - [`a46ff50`](https://togithub.com/caddyserver/caddy/commit/a46ff50a) go.mod: Upgrade to quic-go v0.43.0 - [`b522710`](https://togithub.com/caddyserver/caddy/commit/b5227106) go.mod: Upgrade to quic-go v0.43.1 - [`dd203ad`](https://togithub.com/caddyserver/caddy/commit/dd203ad4) go.mod: CertMagic v0.21.0 - [`d79c0f0`](https://togithub.com/caddyserver/caddy/commit/d79c0f0d) go.mod: Upgrade dependencies - [`abdf1ae`](https://togithub.com/caddyserver/caddy/commit/abdf1ae1) go.mod: go 1.22.3 - [`258d906`](https://togithub.com/caddyserver/caddy/commit/258d9061) httpcaddyfile: Add `RegisterDirectiveOrder` function for plugin authors ([#​5865](https://togithub.com/caddyserver/caddy/issues/5865)) - [`4181c79`](https://togithub.com/caddyserver/caddy/commit/4181c79a) httpcaddyfile: Add optional status code argument to `handle_errors` directive ([#​5965](https://togithub.com/caddyserver/caddy/issues/5965)) - [`2a78c9c`](https://togithub.com/caddyserver/caddy/commit/2a78c9c5) httpcaddyfile: Allow nameless regexp placeholder shorthand ([#​6113](https://togithub.com/caddyserver/caddy/issues/6113)) - [`7984e6f`](https://togithub.com/caddyserver/caddy/commit/7984e6f6) httpcaddyfile: Fix TLS automation policy merging with get_certificate ([#​5896](https://togithub.com/caddyserver/caddy/issues/5896)) - [`f976c84`](https://togithub.com/caddyserver/caddy/commit/f976c84d) httpcaddyfile: Fix cert file decoding to load multiple PEM in one file ([#​5997](https://togithub.com/caddyserver/caddy/issues/5997)) - [`c2d889f`](https://togithub.com/caddyserver/caddy/commit/c2d889f8) httpcaddyfile: Fix redir <to> html ([#​6001](https://togithub.com/caddyserver/caddy/issues/6001)) - [`c27425e`](https://togithub.com/caddyserver/caddy/commit/c27425ef) httpcaddyfile: Keep deprecated `skip_log` in directive order ([#​6153](https://togithub.com/caddyserver/caddy/issues/6153)) - [`ac1f20b`](https://togithub.com/caddyserver/caddy/commit/ac1f20b9) httpcaddyfile: Remove port from logger names ([#​5881](https://togithub.com/caddyserver/caddy/issues/5881)) - [`5e2f1b5`](https://togithub.com/caddyserver/caddy/commit/5e2f1b5c) httpcaddyfile: Rewrite `root` and `rewrite` parsing to allow omitting matcher ([#​5844](https://togithub.com/caddyserver/caddy/issues/5844)) - [`3efda6f`](https://togithub.com/caddyserver/caddy/commit/3efda6fb) httpcaddyfile: Skip automate loader if disable_certs is specified (fix [#​6148](https://togithub.com/caddyserver/caddy/issues/6148)) - [`da7d8cb`](https://togithub.com/caddyserver/caddy/commit/da7d8cb2) httpcaddyfile: Sort skip_hosts for deterministic JSON ([#​5990](https://togithub.com/caddyserver/caddy/issues/5990)) - [`cb86319`](https://togithub.com/caddyserver/caddy/commit/cb86319b) httpcaddyfile: Support client auth verifiers ([#​6022](https://togithub.com/caddyserver/caddy/issues/6022)) - [`feeb6af`](https://togithub.com/caddyserver/caddy/commit/feeb6af4) httpcaddyfile: Fix expression matcher shortcut in snippets ([#​6288](https://togithub.com/caddyserver/caddy/issues/6288)) - [`583c585`](https://togithub.com/caddyserver/caddy/commit/583c585c) httpcaddyfile: Set challenge ports when http_port or https_port are used - [`96f638e`](https://togithub.com/caddyserver/caddy/commit/96f638ea) httpredirectlistener: Only set read limit for when request is HTTP ([#​5917](https://togithub.com/caddyserver/caddy/issues/5917)) - [`3248e4c`](https://togithub.com/caddyserver/caddy/commit/3248e4c8) logging: Add `zap.Option` support ([#​5944](https://togithub.com/caddyserver/caddy/issues/5944)) - [`b9c40e7`](https://togithub.com/caddyserver/caddy/commit/b9c40e71) logging: Automatic `wrap` default for `filter` encoder ([#​5980](https://togithub.com/caddyserver/caddy/issues/5980)) - [`726a9a8`](https://togithub.com/caddyserver/caddy/commit/726a9a8f) logging: Fix default access logger ([#​6251](https://togithub.com/caddyserver/caddy/issues/6251)) - [`01d5568`](https://togithub.com/caddyserver/caddy/commit/01d5568b) logging: Implement `append` encoder, allow flatter filters config ([#​6069](https://togithub.com/caddyserver/caddy/issues/6069)) - [`0d44e3e`](https://togithub.com/caddyserver/caddy/commit/0d44e3ec) logging: Implement `log_append` handler ([#​6066](https://togithub.com/caddyserver/caddy/issues/6066)) - [`91ec754`](https://togithub.com/caddyserver/caddy/commit/91ec7544) logging: Inline Caddyfile syntax for `ip_mask` filter ([#​6094](https://togithub.com/caddyserver/caddy/issues/6094)) - [`0c01547`](https://togithub.com/caddyserver/caddy/commit/0c015470) logging: support `ms` duration format and add docs ([#​6187](https://togithub.com/caddyserver/caddy/issues/6187)) - [`4356635`](https://togithub.com/caddyserver/caddy/commit/4356635d) logging: Add support for additional logger filters other than hostname ([#​6082](https://togithub.com/caddyserver/caddy/issues/6082)) - [`8c2a72a`](https://togithub.com/caddyserver/caddy/commit/8c2a72ad) caddyhttp: Drop `forwarded` option from `remote_ip` matcher ([#​6085](https://togithub.com/caddyserver/caddy/issues/6085)) - [`ed7e3c9`](https://togithub.com/caddyserver/caddy/commit/ed7e3c90) caddyhttp: `query` matcher now ANDs multiple keys ([#​6054](https://togithub.com/caddyserver/caddy/issues/6054)) - [`387545a`](https://togithub.com/caddyserver/caddy/commit/387545a8) metrics: Record request metrics on HTTP errors ([#​5979](https://togithub.com/caddyserver/caddy/issues/5979)) - [`e0bf179`](https://togithub.com/caddyserver/caddy/commit/e0bf179c) modules: fix some typo in conments ([#​6206](https://togithub.com/caddyserver/caddy/issues/6206)) - [`dc12bd9`](https://togithub.com/caddyserver/caddy/commit/dc12bd97) proxyprotocol: use github.com/pires/go-proxyproto ([#​5915](https://togithub.com/caddyserver/caddy/issues/5915)) - [`dba556f`](https://togithub.com/caddyserver/caddy/commit/dba556fe) refactor: move automaxprocs init in caddycmd.Main() - [`80acf1b`](https://togithub.com/caddyserver/caddy/commit/80acf1bf) replacer: Fix escaped closing braces ([#​5995](https://togithub.com/caddyserver/caddy/issues/5995)) - [`7979739`](https://togithub.com/caddyserver/caddy/commit/79797394) replacer: Implement `file.*` global replacements ([#​5463](https://togithub.com/caddyserver/caddy/issues/5463)) - [`e7336cc`](https://togithub.com/caddyserver/caddy/commit/e7336cc3) replacer: use RWMutex to protect static provider ([#​6184](https://togithub.com/caddyserver/caddy/issues/6184)) - [`868af6a`](https://togithub.com/caddyserver/caddy/commit/868af6a0) reverseproxy: Add grace_period for SRV upstreams to Caddyfile ([#​6264](https://togithub.com/caddyserver/caddy/issues/6264)) - [`613d544`](https://togithub.com/caddyserver/caddy/commit/613d544a) reverseproxy: Accept EOF when buffering - [`f658fd0`](https://togithub.com/caddyserver/caddy/commit/f658fd05) reverseproxy: Add `tls_curves` option to HTTP transport ([#​5851](https://togithub.com/caddyserver/caddy/issues/5851)) - [`a9768d2`](https://togithub.com/caddyserver/caddy/commit/a9768d2f) reverseproxy: Configurable forward proxy URL ([#​6114](https://togithub.com/caddyserver/caddy/issues/6114)) - [`0b381eb`](https://togithub.com/caddyserver/caddy/commit/0b381eb7) reverseproxy: Implement modular CA provider for TLS transport ([#​6065](https://togithub.com/caddyserver/caddy/issues/6065)) - [`d9ff7b1`](https://togithub.com/caddyserver/caddy/commit/d9ff7b18) reverseproxy: Only change Content-Length when full request is buffered ([#​5830](https://togithub.com/caddyserver/caddy/issues/5830)) - [`9f97df2`](https://togithub.com/caddyserver/caddy/commit/9f97df22) reverseproxy: Remove long-deprecated buffering properties - [`d93e027`](https://togithub.com/caddyserver/caddy/commit/d93e027e) reverseproxy: Reuse buffered request body even if partially drained - [`72ce78d`](https://togithub.com/caddyserver/caddy/commit/72ce78d9) reverseproxy: SRV dynamic upstream failover ([#​5832](https://togithub.com/caddyserver/caddy/issues/5832)) - [`74949fb`](https://togithub.com/caddyserver/caddy/commit/74949fb0) reverseproxy: Use xxhash instead of fnv32 for LB ([#​6203](https://togithub.com/caddyserver/caddy/issues/6203)) - [`b40cacf`](https://togithub.com/caddyserver/caddy/commit/b40cacf5) reverseproxy: Wait for both ends of websocket to close ([#​6175](https://togithub.com/caddyserver/caddy/issues/6175)) - [`e65b97f`](https://togithub.com/caddyserver/caddy/commit/e65b97f5) reverseproxy: configurable active health_passes and health_fails ([#​6154](https://togithub.com/caddyserver/caddy/issues/6154)) - [`da6a569`](https://togithub.com/caddyserver/caddy/commit/da6a569e) reverseproxy: cookie should be Secure and SameSite=None when TLS ([#​6115](https://togithub.com/caddyserver/caddy/issues/6115)) - [`1b9042b`](https://togithub.com/caddyserver/caddy/commit/1b9042bc) reverseproxy: handle buffered data during hijack ([#​6274](https://togithub.com/caddyserver/caddy/issues/6274)) - [`53f7035`](https://togithub.com/caddyserver/caddy/commit/53f70352) reverseproxy: use context.WithoutCancel ([#​6116](https://togithub.com/caddyserver/caddy/issues/6116)) - [`d05d715`](https://togithub.com/caddyserver/caddy/commit/d05d715a) reverseproxy: HTTP transport: fix PROXY protocol initialization ([#​6301](https://togithub.com/caddyserver/caddy/issues/6301)) - [`b2b29dc`](https://togithub.com/caddyserver/caddy/commit/b2b29dcd) reverseproxy: Implement health_follow_redirects ([#​6302](https://togithub.com/caddyserver/caddy/issues/6302)) - [`e60148e`](https://togithub.com/caddyserver/caddy/commit/e60148ec) reverseproxy: Pointer to struct when loading modules; remove LazyCertPool ([#​6307](https://togithub.com/caddyserver/caddy/issues/6307)) - [`5f6758d`](https://togithub.com/caddyserver/caddy/commit/5f6758da) reverseproxy: Support HTTP/3 transport to backend ([#​6312](https://togithub.com/caddyserver/caddy/issues/6312)) - [`69290d2`](https://togithub.com/caddyserver/caddy/commit/69290d23) rewrite: Implement `uri query` operations ([#​6120](https://togithub.com/caddyserver/caddy/issues/6120)) - [`29f57fa`](https://togithub.com/caddyserver/caddy/commit/29f57faa) rewrite: `uri query` replace operation ([#​6165](https://togithub.com/caddyserver/caddy/issues/6165)) - [`c6673ad`](https://togithub.com/caddyserver/caddy/commit/c6673ad4) staticresp: Use the evaluated response body for sniffing JSON content-type ([#​6249](https://togithub.com/caddyserver/caddy/issues/6249)) - [`0900844`](https://togithub.com/caddyserver/caddy/commit/0900844c) templates: Clarify `include` args docs, add `.ClientIP` ([#​5898](https://togithub.com/caddyserver/caddy/issues/5898)) - [`4e8245d`](https://togithub.com/caddyserver/caddy/commit/4e8245df) templates: Delete headers on `httpError` to reset to clean slate ([#​5905](https://togithub.com/caddyserver/caddy/issues/5905)) - [`18f3429`](https://togithub.com/caddyserver/caddy/commit/18f34290) templates: Offically make templates extensible ([#​5939](https://togithub.com/caddyserver/caddy/issues/5939)) - [`f98f449`](https://togithub.com/caddyserver/caddy/commit/f98f449f) templates: Add `pathEscape` template function and use it in file browser ([#​6278](https://togithub.com/caddyserver/caddy/issues/6278)) - [`4173e2c`](https://togithub.com/caddyserver/caddy/commit/4173e2c7) tls: accept placeholders in string values of certificate loaders ([#​5963](https://togithub.com/caddyserver/caddy/issues/5963)) - [`ed41c92`](https://togithub.com/caddyserver/caddy/commit/ed41c924) tls: add reuse_private_keys ([#​6025](https://togithub.com/caddyserver/caddy/issues/6025)) - [`e965b11`](https://togithub.com/caddyserver/caddy/commit/e965b111) tls: modularize trusted CA providers ([#​5784](https://togithub.com/caddyserver/caddy/issues/5784)) - [`0b5720f`](https://togithub.com/caddyserver/caddy/commit/0b5720fa) tracing: add trace_id var (`http.vars.trace_id` placeholder) ([#​6308](https://togithub.com/caddyserver/caddy/issues/6308)) - [`5ed8689`](https://togithub.com/caddyserver/caddy/commit/5ed86896) vars: Allow overriding `http.auth.user.id` in replacer as a special case ([#​6108](https://togithub.com/caddyserver/caddy/issues/6108)) - [`d132584`](https://togithub.com/caddyserver/caddy/commit/d1325842) vars: Make nil values act as empty string instead of `"<nil>"` ([#​6174](https://togithub.com/caddyserver/caddy/issues/6174)) #### New Contributors - [@​perhapsmaple](https://togithub.com/perhapsmaple) made their first contribution in [https://github.com/caddyserver/caddy/pull/5848](https://togithub.com/caddyserver/caddy/pull/5848) - [@​ddl-ebrown](https://togithub.com/ddl-ebrown) made their first contribution in [https://github.com/caddyserver/caddy/pull/5908](https://togithub.com/caddyserver/caddy/pull/5908) - [@​dlorenc](https://togithub.com/dlorenc) made their first contribution in [https://github.com/caddyserver/caddy/pull/5949](https://togithub.com/caddyserver/caddy/pull/5949) - [@​ankon](https://togithub.com/ankon) made their first contribution in [https://github.com/caddyserver/caddy/pull/5923](https://togithub.com/caddyserver/caddy/pull/5923) - [@​bmarwell](https://togithub.com/bmarwell) made their first contribution in [https://github.com/caddyserver/caddy/pull/5971](https://togithub.com/caddyserver/caddy/pull/5971) - [@​armadi1809](https://togithub.com/armadi1809) made their first contribution in [https://github.com/caddyserver/caddy/pull/5976](https://togithub.com/caddyserver/caddy/pull/5976) - [@​jum](https://togithub.com/jum) made their first contribution in [https://github.com/caddyserver/caddy/pull/5968](https://togithub.com/caddyserver/caddy/pull/5968) - [@​ddemoss222](https://togithub.com/ddemoss222) made their first contribution in [https://github.com/caddyserver/caddy/pull/5880](https://togithub.com/caddyserver/caddy/pull/5880) - [@​tgeoghegan](https://togithub.com/tgeoghegan) made their first contribution in [https://github.com/caddyserver/caddy/pull/5979](https://togithub.com/caddyserver/caddy/pull/5979) - [@​steffenbusch](https://togithub.com/steffenbusch) made their first contribution in [https://github.com/caddyserver/caddy/pull/6003](https://togithub.com/caddyserver/caddy/pull/6003) - [@​networkException](https://togithub.com/networkException) made their first contribution in [https://github.com/caddyserver/caddy/pull/6010](https://togithub.com/caddyserver/caddy/pull/6010) - [@​insom](https://togithub.com/insom) made their first contribution in [https://github.com/caddyserver/caddy/pull/6021](https://togithub.com/caddyserver/caddy/pull/6021) - [@​rithvikvibhu](https://togithub.com/rithvikvibhu) made their first contribution in [https://github.com/caddyserver/caddy/pull/6025](https://togithub.com/caddyserver/caddy/pull/6025) - [@​zachgalvin](https://togithub.com/zachgalvin) made their first contribution in [https://github.com/caddyserver/caddy/pull/6022](https://togithub.com/caddyserver/caddy/pull/6022) - [@​subnut](https://togithub.com/subnut) made their first contribution in [https://github.com/caddyserver/caddy/pull/6001](https://togithub.com/caddyserver/caddy/pull/6001) - [@​elee1766](https://togithub.com/elee1766) made their first contribution in [https://github.com/caddyserver/caddy/pull/5833](https://togithub.com/caddyserver/caddy/pull/5833) - [@​nebez](https://togithub.com/nebez) made their first contribution in [https://github.com/caddyserver/caddy/pull/5805](https://togithub.com/caddyserver/caddy/pull/5805) - [@​bbaa-bbaa](https://togithub.com/bbaa-bbaa) made their first contribution in [https://github.com/caddyserver/caddy/pull/6056](https://togithub.com/caddyserver/caddy/pull/6056) - [@​AnomalRoil](https://togithub.com/AnomalRoil) made their first contribution in [https://github.com/caddyserver/caddy/pull/5961](https://togithub.com/caddyserver/caddy/pull/5961) - [@​jcchavezs](https://togithub.com/jcchavezs) made their first contribution in [https://github.com/caddyserver/caddy/pull/6103](https://togithub.com/caddyserver/caddy/pull/6103) - [@​ottenhoff](https://togithub.com/ottenhoff) made their first contribution in [https://github.com/caddyserver/caddy/pull/6115](https://togithub.com/caddyserver/caddy/pull/6115) - [@​thirdkeyword](https://togithub.com/thirdkeyword) made their first contribution in [https://github.com/caddyserver/caddy/pull/6151](https://togithub.com/caddyserver/caddy/pull/6151) - [@​jbrown-stripe](https://togithub.com/jbrown-stripe) made their first contribution in [https://github.com/caddyserver/caddy/pull/6161](https://togithub.com/caddyserver/caddy/pull/6161) - [@​ImpostorKeanu](https://togithub.com/ImpostorKeanu) made their first contribution in [https://github.com/caddyserver/caddy/pull/6114](https://togithub.com/caddyserver/caddy/pull/6114) - [@​sellskin](https://togithub.com/sellskin) made their first contribution in [https://github.com/caddyserver/caddy/pull/6193](https://togithub.com/caddyserver/caddy/pull/6193) - [@​jadidbourbaki](https://togithub.com/jadidbourbaki) made their first contribution in [https://github.com/caddyserver/caddy/pull/6203](https://togithub.com/caddyserver/caddy/pull/6203) - [@​reallylowest](https://togithub.com/reallylowest) made their first contribution in [https://github.com/caddyserver/caddy/pull/6206](https://togithub.com/caddyserver/caddy/pull/6206) - [@​kylosus](https://togithub.com/kylosus) made their first contribution in [https://github.com/caddyserver/caddy/pull/6093](https://togithub.com/caddyserver/caddy/pull/6093) - [@​hassanila](https://togithub.com/hassanila) made their first contribution in [https://github.com/caddyserver/caddy/pull/6223](https://togithub.com/caddyserver/caddy/pull/6223) - [@​epelc](https://togithub.com/epelc) made their first contribution in [https://github.com/caddyserver/caddy/pull/6225](https://togithub.com/caddyserver/caddy/pull/6225) - [@​danish-mehmood](https://togithub.com/danish-mehmood) made their first contribution in [https://github.com/caddyserver/caddy/pull/6227](https://togithub.com/caddyserver/caddy/pull/6227) - [@​omalk98](https://togithub.com/omalk98) made their first contribution in [https://github.com/caddyserver/caddy/pull/5919](https://togithub.com/caddyserver/caddy/pull/5919) - [@​dev-polymer](https://togithub.com/dev-polymer) made their first contribution in [https://github.com/caddyserver/caddy/pull/6140](https://togithub.com/caddyserver/caddy/pull/6140) - [@​coderwander](https://togithub.com/coderwander) made their first contribution in [https://github.com/caddyserver/caddy/pull/6243](https://togithub.com/caddyserver/caddy/pull/6243) - [@​clauverjat](https://togithub.com/clauverjat) made their first contribution in [https://github.com/caddyserver/caddy/pull/6253](https://togithub.com/caddyserver/caddy/pull/6253) - [@​apollo13](https://togithub.com/apollo13) made their first contribution in [https://github.com/caddyserver/caddy/pull/6298](https://togithub.com/caddyserver/caddy/pull/6298) - [@​aliasgar55](https://togithub.com/aliasgar55) made their first contribution in [https://github.com/caddyserver/caddy/pull/6302](https://togithub.com/caddyserver/caddy/pull/6302) - [@​szepeviktor](https://togithub.com/szepeviktor) made their first contribution in [https://github.com/caddyserver/caddy/pull/6311](https://togithub.com/caddyserver/caddy/pull/6311) - [@​DenebTM](https://togithub.com/DenebTM) made their first contribution in [https://github.com/caddyserver/caddy/pull/6278](https://togithub.com/caddyserver/caddy/pull/6278) - [@​Ranveer777](https://togithub.com/Ranveer777) made their first contribution in [https://github.com/caddyserver/caddy/pull/6345](https://togithub.com/caddyserver/caddy/pull/6345) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/chezmoi-sh/atlas). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Sorry about the draft and edits, I accidentally published the PR too early.
So this is kind of a niche usecase of mine, so I understand if the collaborators find it too specific to merge. I can maybe write a module instead if other users are interested in the feature.
I have been using caddy for hosting a few things, and one of them is a static file server with convenience scripts that I use in fresh headless machines. I usually just type out the whole URL with the specific files and do
curl whatever.sh | sh
, but I have found it a little tedious, especially because I forget what I have available sometimes or mix names up, and fetching the big html in the index is not an option.file_server
has an undocomented JSON output feature that makes things easier, but it's still a few extra steps to type out anAccept
header and parse the JSON.This PR is twofold: First it adds a new optional field,
return_type
, tobrowser
for setting the default format of the returned index (html, json or plaintext). This is used when theAccept
header is set to/*
.Second, it adds a preliminary
text/plain
support to thefile_server
browser that returns a text representation of the file system, when anAccept: text/plain
header is present, with the behavior discussed above. This makes it possible get a textual view of the available files quickly in a terminal environment.Example
Caddyfile
config:I made
return_type
a configurable option to set the default as it allows setting up matchers to serve the index depending on other parts of the request, for instance checking ifcurl
headers are present vs a request from a web browser.The commit in this PR is a working proof of concept that just returns a newline delimited list of files. I will write a more useful and aesthetically pleaasing version if the collaborators like the feature.