[Bug][GitHub Copilot] GitHub Copilot connector validation fails when using Enterprise Slug without Organization
- Dominant language
- Go
- Stars
- 3.1k
- Forks
- 808
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 49
Description
### Search before asking
- [x] I had searched in the [issues](https://github.com/apache/incubator-devlake/issues?q=is%3Aissue) and found no similar issues.
### What happened
### Actual Behavior
When trying to create a GitHub Copilot connector, the connection test always fails even though the Enterprise Slug is provided.
The connection test fails with a 400 error (either enterprise or organization is required) but organization slug is specified into connection wizard
### Stack Trace
```
attached stack trace -- stack trace: | github.com/apache/incubator-devlake/plugins/gh-copilot/api.validateConnection | /app/plugins/gh-copilot/api/connection.go:97 | github.com/apache/incubator-devlake/plugins/gh-copilot/api.TestConnection | /app/plugins/gh-copilot/api/test_connection.go:39 | github.com/apache/incubator-devlake/server/api.registerPluginEndpoints.handlePluginCall.func1 | /app/server/api/router.go:149 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/apache/incubator-devlake/server/api.CreateApiServer.CSRFProtect.(*Service).CSRFProtect.func3 | /app/server/api/auth/middleware.go:140 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/apache/incubator-devlake/server/api.CreateApiServer.RequireAuth.(*Service).RequireAuth.func2 | /app/server/api/auth/middleware.go:104 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/apache/incubator-devlake/server/api.OAuth2ProxyAuthentication.func1 | /app/server/api/middlewares.go:114 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/apache/incubator-devlake/server/api.CreateApiServer.OIDCAuthentication.(*Service).OIDCAuthentication.func1 | /app/server/api/auth/middleware.go:61 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/apache/incubator-devlake/server/api.RequirePushAuthentication.func1 | /app/server/api/middlewares.go:157 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/apache/incubator-devlake/server/api.RestAuthentication.func1 | /app/server/api/middlewares.go:135 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/gin-gonic/gin.CustomRecoveryWithWriter.func1 | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/recovery.go:102 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/gin-gonic/gin.LoggerWithConfig.func1 | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/logger.go:240 | github.com/gin-gonic/gin.(*Context).Next | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174 | github.com/gin-gonic/gin.(*Engine).handleHTTPRequest | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:620 | github.com/gin-gonic/gin.(*Engine).ServeHTTP | /go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:576 | net/http.serverHandler.ServeHTTP | /usr/local/go/src/net/http/server.go:3311 | net/http.(*conn).serve | /usr/local/go/src/net/http/server.go:2073 | runtime.goexit | /usr/local/go/src/runtime/asm_amd64.s:1771 Wraps: (2) either enterprise or organization is required (400) Error types: (1) *withstack.withStack (2) *errutil.leafError
```
### What do you expect to happen
The connector should successfully validate the connection when a valid Enterprise Slug is provided, even if no Organization is configured.
### How to reproduce
- Open the GitHub Copilot connector configuration page.
- Enter a valid Enterprise Slug taht contains hyphens
- Leave the Organization field empty.
- Generate and provide a Personal Access Token (classic).
- Test the connection.
### Anything else
### I also tested the following scenarios:
- Using a Personal Access Token (classic) with all available permissions.
- Filling the Organization field with the same value as the Enterprise Slug.
- Creating new tokens and retrying the connection.
All attempts result in the same error.
Error Message
Plain Texteither enterprise or organization is required (400)
### Question / Clarification
Could this issue be related to the format of the Enterprise Slug?
In our case, the Enterprise Slug contains hyphens, for example:
```
my-company
```
### Version
v1.0.3-beta14@50f664e
### Are you willing to submit PR?
- [ ] Yes I am willing to submit a PR!
### Code of Conduct
- [x] I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct)
Contributor guide
No contributing guide indexed for this repository
Research direction
Start at plugins/gh-copilot/api/connection.go:97 and follow the validation call from plugins/gh-copilot/api/test_connection.go:39. Reproduce the connector test with a hyphenated Enterprise Slug and no Organization, then verify that a valid enterprise-only configuration succeeds without the 400 error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github, go
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 72/100