Skip to content

Wildcard routes aren't supported properly in config #792

@aaronpowell

Description

@aaronpowell

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions