chalice icon indicating copy to clipboard operation
chalice copied to clipboard

Why doesn't {proxy+} work as catchall ?

Open mangled-data opened this issue 2 years ago • 2 comments


app = Chalice(app_name='chalice-proxy-example')

@app.route('/')
def index():
    return {"message": "Welcome to the root endpoint!"}

@app.route('/resource/{proxy+}', methods=['GET', 'POST'])
def resource_proxy(proxy):
    # proxy contains the path information. 
    # For instance, if you access /resource/a/b/c, proxy will be "a/b/c"
    return {
        "message": "You've accessed the proxy endpoint.",
        "path": proxy
    }


I have tried all combinations and I can't figure out why a generic catch all work. I probably miss something super basic, but at a point where I may have to move to something else. This is such a super great framework, if I could get a reverse proxy type setup working! Can anyone help please ?

$ curl http://127.0.0.1:8000/
{"message":"Welcome to the root endpoint!"}

$ curl http://127.0.0.1:8000/1
{"message": "Missing Authentication Token"}

On chalice, I see 127.0.0.1 - - [09/Sep/2023 15:02:09] "GET /1 HTTP/1.1" 403 -

mangled-data avatar Sep 09 '23 22:09 mangled-data

It happens because here

https://github.com/aws/chalice/blob/79838b02dc330cfe549823899d2662ded0538015/chalice/app.py#L1832-L1839

resource_path is ..../{proxy*} and not .../{proxy+} which fails to get the key from dict...

pkit avatar Sep 15 '23 14:09 pkit