You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by kl...@apache.org on 2023/03/20 02:19:36 UTC
[incubator-devlake] branch main updated: feat: check GitHub token permissions when test connection (#4686)
This is an automated email from the ASF dual-hosted git repository.
klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/main by this push:
new ce67c6c70 feat: check GitHub token permissions when test connection (#4686)
ce67c6c70 is described below
commit ce67c6c70f963678b8f16b9dd8a9c7ff01089efe
Author: jakezhu9 <ja...@gmail.com>
AuthorDate: Mon Mar 20 10:19:31 2023 +0800
feat: check GitHub token permissions when test connection (#4686)
---
backend/plugins/github/api/connection.go | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/backend/plugins/github/api/connection.go b/backend/plugins/github/api/connection.go
index 91dd3420f..4c7697b98 100644
--- a/backend/plugins/github/api/connection.go
+++ b/backend/plugins/github/api/connection.go
@@ -20,6 +20,7 @@ package api
import (
"context"
"net/http"
+ "strings"
"github.com/apache/incubator-devlake/core/errors"
"github.com/apache/incubator-devlake/core/plugin"
@@ -28,6 +29,8 @@ import (
"github.com/apache/incubator-devlake/server/api/shared"
)
+var RequirePermission = []string{"repo:status", "repo_deployment", "read:user", "read:org"}
+
type GithubTestConnResponse struct {
shared.ApiBody
Login string `json:"login"`
@@ -69,6 +72,16 @@ func TestConnection(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput,
return nil, errors.BadInput.Wrap(err, "invalid token")
}
+ // for github classic token, check permission
+ if strings.HasPrefix(conn.Token, "ghp_") {
+ scopes := res.Header.Get("X-OAuth-Scopes")
+ for _, permission := range RequirePermission {
+ if !strings.Contains(scopes, permission) {
+ return nil, errors.BadInput.New("insufficient token permission")
+ }
+ }
+ }
+
githubApiResponse := &GithubTestConnResponse{}
githubApiResponse.Success = true
githubApiResponse.Message = "success"