From d57829de3d780ef959f36a23f3624a0026cf8f66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=AA=20Ho=C3=A0ng=20Ph=C6=B0=C6=A1ng?= Date: Tue, 7 Apr 2026 16:48:21 +0900 Subject: [PATCH] Remove usage of deprecated /user/permissions/repositories (#6401) --- server/forge/bitbucket/bitbucket.go | 2 +- server/forge/bitbucket/fixtures/handler.go | 39 ++++++++++++---------- server/forge/bitbucket/internal/client.go | 5 ++- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/server/forge/bitbucket/bitbucket.go b/server/forge/bitbucket/bitbucket.go index 3105ddb96..3cdb735b9 100644 --- a/server/forge/bitbucket/bitbucket.go +++ b/server/forge/bitbucket/bitbucket.go @@ -191,7 +191,7 @@ func (c *config) Repo(ctx context.Context, u *model.User, remoteID model.ForgeRe if err != nil { return nil, errors.Join(err, forge_types.ErrRepoNotFound) } - perm, err := client.GetPermission(repo.FullName) + perm, err := client.GetPermission(owner, repo.FullName) if err != nil { return nil, err } diff --git a/server/forge/bitbucket/fixtures/handler.go b/server/forge/bitbucket/fixtures/handler.go index 52b39721d..9eaab84b9 100644 --- a/server/forge/bitbucket/fixtures/handler.go +++ b/server/forge/bitbucket/fixtures/handler.go @@ -38,7 +38,6 @@ func Handler() http.Handler { e.GET("/2.0/repositories/:owner", getUserRepos) e.GET("/2.0/user/", getUser) e.GET("/2.0/user/emails", getEmails) - e.GET("/2.0/user/permissions/repositories", getPermission) e.GET("/2.0/user/workspaces/:workspace/permissions/repositories", getPermissions) e.GET("/2.0/repositories/:owner/:name/commits/:commit", getBranchHead) e.GET("/2.0/repositories/:owner/:name/pullrequests", getPullRequests) @@ -200,29 +199,35 @@ func getUserRepos(c *gin.Context) { } } -func getPermission(c *gin.Context) { +func getPermissions(c *gin.Context) { + workspace := c.Param("workspace") + q := c.Query("q") + if c.Query("page") == "" || c.Query("page") == "1" { - switch c.Query("q") { - case "repository.full_name=\"test_name/repo_name\"": - c.String(http.StatusOK, permissionPayLoad) - return - case "repository.full_name=\"martinherren1984/publictestrepo\"": - c.String(http.StatusOK, permissionHookPayLoad) - return + switch workspace { + case "test_name": + // Handle query for specific repo (new GetPermission format) + if q == "repository.full_name=\"test_name/repo_name\"" { + c.String(http.StatusOK, permissionPayLoad) + return + } + // Handle listing all permissions (ListPermissionsAll) + if q == "" { + c.String(http.StatusOK, permissionsPayLoad) + return + } + case "martinherren1984": + // Handle hook test cases + if q == "repository.full_name=\"martinherren1984/publictestrepo\"" { + c.String(http.StatusOK, permissionHookPayLoad) + return + } } } c.String(http.StatusOK, "{\"values\":[]}") } -func getPermissions(c *gin.Context) { - if (c.Query("page") == "" || c.Query("page") == "1") && c.Param("workspace") == "test_name" { - c.String(http.StatusOK, permissionsPayLoad) - } else { - c.String(http.StatusOK, "{\"values\":[]}") - } -} - const tokenPayload = ` { "access_token":"2YotnFZFEjr1zCsicMWpAA", diff --git a/server/forge/bitbucket/internal/client.go b/server/forge/bitbucket/internal/client.go index dd1ffba26..1c36efb11 100644 --- a/server/forge/bitbucket/internal/client.go +++ b/server/forge/bitbucket/internal/client.go @@ -32,7 +32,6 @@ import ( const ( pathUser = "%s/2.0/user/" pathEmails = "%s/2.0/user/emails" - pathPermission = "%s/2.0/user/permissions/repositories?q=repository.full_name=%q" pathPermissions = "%s/2.0/user/workspaces/%s/permissions/repositories?%s" pathWorkspaces = "%s/2.0/user/workspaces/?%s" pathWorkspace = "%s/2.0/workspaces/%s" @@ -156,9 +155,9 @@ func (c *Client) CreateStatus(owner, name, revision string, status *PipelineStat return err } -func (c *Client) GetPermission(fullName string) (*RepoPerm, error) { +func (c *Client) GetPermission(owner, fullName string) (*RepoPerm, error) { out := new(RepoPermResp) - uri := fmt.Sprintf(pathPermission, c.base, fullName) + uri := fmt.Sprintf(pathPermissions, c.base, owner, fmt.Sprintf("q=%s", url.QueryEscape(fmt.Sprintf("repository.full_name=%q", fullName)))) _, err := c.do(uri, http.MethodGet, nil, out) if err != nil { return nil, err