static-web-apps-cli icon indicating copy to clipboard operation
static-web-apps-cli copied to clipboard

Wildcard routes aren't supported properly in config

Open aaronpowell opened this issue 2 years ago • 2 comments

I have a staticwebapp.config.json with a route defined as follows:

{
  "routes": [
    {
      "route": "/manage*",
      "allowedRoles": ["authenticated"]
    }
  ]
}

While this is how you should match a path per the docs, the CLI doesn't correctly generate the regex required to do the wildcard matching, it generates /^\/manage*$/ not /^\/manage.*$/ (not the missing . to indicate the any character after match). There also isn't a test case to cover this in the glob.spec.ts tests.

You can see the failure to find it appropriately looking at the output in the silly logging (it's about a dozen lines down):

[swa] --------------------------------------------------------
[swa] ------------------- processing route -------------------
[swa] --------------------------------------------------------
[swa] processing /manage/events
[swa] checking for matching route
[swa] check if request match route
[swa]  - route: /manage*
[swa]  - wildcard: true
[swa] checking wildcard route
[swa]  - glob: /manage*
[swa]  - pathBeforeWildcard: /manage
[swa] checking if glob expression is valid
[swa]  - glob: /manage*
[swa]  - glob ends with *. Return true
[swa]  - route regexp: /manage*
[swa] turning glob expression into valid RegExp
[swa]  - glob: /manage*
[swa]  - regexp: /^\/manage*$/
[swa]  - isMatch: false
[swa]  - alternateRequestPath: /manage/events/index.html
[swa] checking wildcard route
[swa]  - glob: /manage*
[swa]  - pathBeforeWildcard: /manage
[swa] checking if glob expression is valid
[swa]  - glob: /manage*
[swa]  - glob ends with *. Return true
[swa]  - route regexp: /manage*
[swa] turning glob expression into valid RegExp
[swa]  - glob: /manage*
[swa]  - regexp: /^\/manage*$/
[swa]  - isMatch: false
[swa] checking auth request
[swa]  - not an auth request
[swa] checking function request
[swa]  - not a function request
[swa] checking data-api request
[swa]  - not a data Api request
[swa] checking HTTP method: GET
[swa]  - method is valid (allow-list: GET,HEAD,OPTIONS)
[swa] checking for query params
[swa] checking rewrite auth login request
[swa] checking rewrite auth logout request
[swa] checking authorizations for route
[swa]  - no matching rule
[swa]  - access authorized
[swa] using userConfig
[swa] - userConfig:
[swa]  - routes:
[swa]   - 0:
[swa]     - route: /manage*
[swa]    - allowedRoles:
[swa]      - 0: authenticated
[swa]  - responseOverrides:
[swa]   - 401:
[swa]     - rewrite: /
[swa]     - statusCode: 200
[swa] checking storage content
[swa] remote dev server detected.
[swa]  - url: /manage/events
[swa]  - target: http://localhost:5175
[swa] customUrl: false
[swa] is4xx: false
[swa] remote dev server detected. Proxying request
[swa]  - url: /manage/events
[swa]  - code: 200
[swa] GET http://localhost:5175/manage/events (proxy)
[swa] Connected to tcp:127.0.0.1:5175 successfully
[swa] http://localhost:5175 validated successfully
[swa] Connected to tcp:localhost:5175 successfully
[swa] getting response from dev server
[swa] GET http://localhost:5176/manage/events - 200

aaronpowell avatar Jan 02 '24 05:01 aaronpowell

Any updates on this @cjk7989 ? Wildcards not working correctly in local development makes testing more complex route permissions impossible.

itpropro avatar Mar 04 '24 19:03 itpropro

@thomasgauvin I just ran into this again in a customer scenario with local integration and e2e tests, any roadmap on this?

itpropro avatar Apr 08 '24 17:04 itpropro