lindenlab / caddy-s3-proxy

s3 proxy plugin for caddy
Apache License 2.0
72 stars 22 forks source link

default_listing BrowseTemplate causing 500 response #55

Open BrianFanning opened 2 years ago

BrianFanning commented 2 years ago

This was mentioned in issue #50, but the issue was closed by the reporter. I'm having the same issue. If you are using the default BrowseTemplate, a 500 error is returned to the user. Error logs in Caddy:

{
    "level": "error",
    "ts": 1643739892.6739354,
    "logger": "http.log.error",
    "msg": "template: default_listing:5:26: executing \"default_listing\" at <.PageObj>: can't evaluate field PageObj in type caddys3proxy.PageObj",
    "request": {
        "remote_addr": "10.113.133.2:46012",
        "proto": "HTTP/1.1",
        "method": "GET",
        "host": "s3proxy.redacted",
        "uri": "/?max=20",
        "headers": {
            "X-Request-Id": ["913cd8227b352f76365baa7c2c255f"],
            "X-Real-Ip": ["10.167.1.129"],
            "X-Forwarded-Host": ["s3proxy.redacted"],
            "User-Agent": ["curl/7.80.0"],
            "Content-Type": ["text/html"],
            "X-Forwarded-For": ["10.17.1.19"],
            "X-Forwarded-Port": ["80"],
            "X-Forwarded-Proto": ["http"],
            "X-Scheme": ["http"],
            "Accept": ["*/*"]
        }
    },
    "duration": 1.04688346,
    "status": 500,
    "err_id": "eqh8tru7r",
    "err_trace": "caddy-s3-proxy.convertToCaddyError (errors.go:118)"
}
porkcharsui commented 2 years ago

@BrianFanning I reproduced the exact error you reported while attempting to use the browse feature to list an AWS S3 bucket. I noticed your PR #53, however when I built your branch for my s3caddy plugin and retried the request I was still unable to see the browse feature working.

And still see: http.log.error template: default_listing:5:26: executing "default_listing" at <.PageObj>: can't evaluate field PageObj in type caddys3proxy.PageObj

Were you able to get this working on your builds?

etsxxx commented 2 years ago

Thank you for the great implementation.

I think this is a bug in the default template. The following part seems to be wrong. https://github.com/lindenlab/caddy-s3-proxy/blob/0c6e6cdacab0d8bb2796a8cca5e65ab00b680483/browse.go#L146

The correct is: .PageObj -> .Items

I built @BrianFanning 's branch. And I wrote following template file and load it, browse feature works.

<!DOCTYPE html>
<html>
        <body>
                <ul>
                {{- range .Items }}
                <li>
                {{- if .IsDir}}
                <a href="{{html .Url}}">{{html .Name}}</a>
                {{- else}}
                <a href="{{html .Url}}">{{html .Name}}</a> Size: {{html .Size}} Last Modified: {{html .LastModified}}
                {{- end}}
                </li>
                {{- end }}
                </ul>
        <p>number of items: {{ .Count }}</p>
        {{- if .MoreLink }}
        <a href="{{ html .MoreLink }}">more...</a>
        {{- end }}
        </body>
</html>