Azure / Azure/static-web-apps-cli

Wildcard routes aren't supported properly in config

Open
#792 4 comments 1 reaction 0 assignees View on GitHub
Dominant language
TypeScript
Stars
668
Forks
156
PR merge metrics
No merged PRs in 30d

Description

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

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

While this is how you should match a path [per the docs](https://learn.microsoft.com/azure/static-web-apps/configuration#wildcards), 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
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.