From 70c0a524a46983c5ecd77850edd8eba459af50a4 Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Sun, 12 Dec 2021 12:44:28 +0100 Subject: [PATCH 1/8] Add API to manage repo tranfers Get/accept/reject transfers via API. New endpoints: * `POST api/v1/repos/{owner}/{repo}/transfer/accept` accept transfer * `POST api/v1/repos/{owner}/{repo}/transfer/reject` reject transfer Updated endpoints: * `GET api/v1/repos/{owner}/{repo}` added `RepoTransfer` object that contains information about a transfer (`null` if not transfer is available) --- integrations/api_repo_test.go | 71 +++++++++++++++++ modules/convert/repository.go | 30 +++++++ modules/indexer/code/indexer_test.go | 3 +- modules/indexer/issues/indexer_test.go | 3 +- modules/indexer/stats/indexer_test.go | 3 +- modules/structs/repo.go | 8 ++ routers/api/v1/api.go | 2 + routers/api/v1/repo/transfer.go | 105 +++++++++++++++++++++++++ services/asymkey/ssh_key_test.go | 1 + services/mailer/mailer_test.go | 1 + services/webhook/main_test.go | 3 +- templates/swagger/v1_json.tmpl | 101 ++++++++++++++++++++++++ 12 files changed, 327 insertions(+), 4 deletions(-) diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go index 1e443362f6102..a321214c2388a 100644 --- a/integrations/api_repo_test.go +++ b/integrations/api_repo_test.go @@ -498,6 +498,77 @@ func TestAPIRepoTransfer(t *testing.T) { _ = models.DeleteRepository(user, repo.OwnerID, repo.ID) } +func transfer(t *testing.T) *repo_model.Repository { + //create repo to move + user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) + session := loginUser(t, user.Name) + token := getTokenForLoggedInUser(t, session) + repoName := "moveME" + apiRepo := new(api.Repository) + req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/user/repos?token=%s", token), &api.CreateRepoOption{ + Name: repoName, + Description: "repo move around", + Private: false, + Readme: "Default", + AutoInit: true, + }) + + resp := session.MakeRequest(t, req, http.StatusCreated) + DecodeJSON(t, resp, apiRepo) + + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: apiRepo.ID}).(*repo_model.Repository) + req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer?token=%s", repo.OwnerName, repo.Name, token), &api.TransferRepoOption{ + NewOwner: "user4", + }) + session.MakeRequest(t, req, http.StatusCreated) + + return repo +} + +func TestAPIAcceptTransfer(t *testing.T) { + defer prepareTestEnv(t)() + + repo := transfer(t) + + // try to accept with not authorized user + session := loginUser(t, "user2") + token := getTokenForLoggedInUser(t, session) + req := NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/reject?token=%s", repo.OwnerName, repo.Name, token)) + session.MakeRequest(t, req, http.StatusForbidden) + + // accept transfer + session = loginUser(t, "user4") + token = getTokenForLoggedInUser(t, session) + + req = NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/accept?token=%s", repo.OwnerName, repo.Name, token)) + resp := session.MakeRequest(t, req, http.StatusAccepted) + apiRepo := new(api.Repository) + DecodeJSON(t, resp, apiRepo) + assert.Equal(t, "user4", apiRepo.Owner.UserName) +} + +func TestAPIRejectTransfer(t *testing.T) { + defer prepareTestEnv(t)() + + repo := transfer(t) + + // try to reject with not authorized user + session := loginUser(t, "user2") + token := getTokenForLoggedInUser(t, session) + req := NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/reject?token=%s", repo.OwnerName, repo.Name, token)) + session.MakeRequest(t, req, http.StatusForbidden) + + // reject transfer + session = loginUser(t, "user4") + token = getTokenForLoggedInUser(t, session) + + req = NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/reject?token=%s", repo.OwnerName, repo.Name, token)) + resp := session.MakeRequest(t, req, http.StatusOK) + apiRepo := new(api.Repository) + DecodeJSON(t, resp, apiRepo) + assert.Equal(t, "user2", apiRepo.Owner.UserName) +} + func TestAPIGenerateRepo(t *testing.T) { defer prepareTestEnv(t)() diff --git a/modules/convert/repository.go b/modules/convert/repository.go index 9859ea2674162..ec9e42742792a 100644 --- a/modules/convert/repository.go +++ b/modules/convert/repository.go @@ -10,6 +10,7 @@ import ( "code.gitea.io/gitea/models/perm" repo_model "code.gitea.io/gitea/models/repo" unit_model "code.gitea.io/gitea/models/unit" + "code.gitea.io/gitea/modules/log" api "code.gitea.io/gitea/modules/structs" ) @@ -106,6 +107,20 @@ func innerToRepo(repo *repo_model.Repository, mode perm.AccessMode, isParent boo } } + var transfer *api.RepoTransfer + if repo.Status == repo_model.RepositoryPendingTransfer { + t, err := models.GetPendingRepositoryTransfer(repo) + if err != nil { + log.Debug("GetPendingRepositoryTransfer", err) + } else { + if err := t.LoadAttributes(); err != nil { + log.Debug("LoadRecipient", err) + } else { + transfer = ToRepoTransfer(t) + } + } + } + return &api.Repository{ ID: repo.ID, Owner: ToUserWithAccessMode(repo.Owner, mode), @@ -151,5 +166,20 @@ func innerToRepo(repo *repo_model.Repository, mode perm.AccessMode, isParent boo AvatarURL: repo.AvatarLink(), Internal: !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePrivate, MirrorInterval: mirrorInterval, + RepoTransfer: transfer, + } +} + +// ToRepoTransfer convert a models.RepoTransfer to a structs.RepeTransfer +func ToRepoTransfer(t *models.RepoTransfer) *api.RepoTransfer { + var teams []*api.Team + for _, v := range t.Teams { + teams = append(teams, ToTeam(v)) + } + + return &api.RepoTransfer{ + Doer: ToUser(t.Doer, nil), + Recipient: ToUser(t.Recipient, nil), + Teams: teams, } } diff --git a/modules/indexer/code/indexer_test.go b/modules/indexer/code/indexer_test.go index 98494afceb24c..42f21ed0df2da 100644 --- a/modules/indexer/code/indexer_test.go +++ b/modules/indexer/code/indexer_test.go @@ -8,9 +8,10 @@ import ( "path/filepath" "testing" - _ "code.gitea.io/gitea/models" "code.gitea.io/gitea/models/unittest" + _ "code.gitea.io/gitea/models" + "github.com/stretchr/testify/assert" ) diff --git a/modules/indexer/issues/indexer_test.go b/modules/indexer/issues/indexer_test.go index 0855165556dab..866e3cc7c920a 100644 --- a/modules/indexer/issues/indexer_test.go +++ b/modules/indexer/issues/indexer_test.go @@ -11,11 +11,12 @@ import ( "testing" "time" - _ "code.gitea.io/gitea/models" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + _ "code.gitea.io/gitea/models" + "github.com/stretchr/testify/assert" "gopkg.in/ini.v1" ) diff --git a/modules/indexer/stats/indexer_test.go b/modules/indexer/stats/indexer_test.go index b32100b458298..50c6cc38e9bbe 100644 --- a/modules/indexer/stats/indexer_test.go +++ b/modules/indexer/stats/indexer_test.go @@ -9,11 +9,12 @@ import ( "testing" "time" - _ "code.gitea.io/gitea/models" repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/setting" + _ "code.gitea.io/gitea/models" + "github.com/stretchr/testify/assert" "gopkg.in/ini.v1" ) diff --git a/modules/structs/repo.go b/modules/structs/repo.go index b1a3781d0585e..38d80db704701 100644 --- a/modules/structs/repo.go +++ b/modules/structs/repo.go @@ -93,6 +93,7 @@ type Repository struct { AvatarURL string `json:"avatar_url"` Internal bool `json:"internal"` MirrorInterval string `json:"mirror_interval"` + RepoTransfer *RepoTransfer `json:"repo_transfer"` } // CreateRepoOption options when creating repository @@ -336,3 +337,10 @@ var ( CodebaseService, } ) + +// RepoTransfer represents a pending repo transfer +type RepoTransfer struct { + Doer *User `json:"doer"` + Recipient *User `json:"recipient"` + Teams []*Team `json:"teams"` +} diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 1d7d4251dbbf5..4e190740392b6 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -736,6 +736,8 @@ func Routes(sessioner func(http.Handler) http.Handler) *web.Route { Patch(reqToken(), reqAdmin(), bind(api.EditRepoOption{}), repo.Edit) m.Post("/generate", reqToken(), reqRepoReader(unit.TypeCode), bind(api.GenerateRepoOption{}), repo.Generate) m.Post("/transfer", reqOwner(), bind(api.TransferRepoOption{}), repo.Transfer) + m.Post("/transfer/accept", reqToken(), repo.AcceptTransfer) + m.Post("/transfer/reject", reqToken(), repo.RejectTransfer) m.Combo("/notifications"). Get(reqToken(), notify.ListRepoNotifications). Put(reqToken(), notify.ReadRepoNotifications) diff --git a/routers/api/v1/repo/transfer.go b/routers/api/v1/repo/transfer.go index e2a83c70ecd25..486a7888855b6 100644 --- a/routers/api/v1/repo/transfer.go +++ b/routers/api/v1/repo/transfer.go @@ -122,3 +122,108 @@ func Transfer(ctx *context.APIContext) { log.Trace("Repository transferred: %s -> %s", ctx.Repo.Repository.FullName(), newOwner.Name) ctx.JSON(http.StatusAccepted, convert.ToRepo(ctx.Repo.Repository, perm.AccessModeAdmin)) } + +// AcceptTransfer accept a repo transfer +func AcceptTransfer(ctx *context.APIContext) { + // swagger:operation POST /repos/{owner}/{repo}/transfer/accept repository acceptRepoTransfer + // --- + // summary: Accept a repo transfer + // produces: + // - application/json + // parameters: + // - name: owner + // in: path + // description: owner of the repo to transfer + // type: string + // required: true + // - name: repo + // in: path + // description: name of the repo to transfer + // type: string + // required: true + // responses: + // "202": + // "$ref": "#/responses/Repository" + // "403": + // "$ref": "#/responses/forbidden" + // "404": + // "$ref": "#/responses/notFound" + + err := acceptOrRejectRepoTransfer(ctx, true) + if ctx.Written() { + return + } + if err != nil { + ctx.Error(http.StatusInternalServerError, "acceptOrRejectRepoTransfer", err) + return + } + + ctx.JSON(http.StatusAccepted, convert.ToRepo(ctx.Repo.Repository, ctx.Repo.AccessMode)) + +} + +// RejectTransfer reject a repo transfer +func RejectTransfer(ctx *context.APIContext) { + // swagger:operation POST /repos/{owner}/{repo}/transfer/reject repository rejectRepoTransfer + // --- + // summary: Reject a repo transfer + // produces: + // - application/json + // parameters: + // - name: owner + // in: path + // description: owner of the repo to transfer + // type: string + // required: true + // - name: repo + // in: path + // description: name of the repo to transfer + // type: string + // required: true + // responses: + // "200": + // "$ref": "#/responses/Repository" + // "403": + // "$ref": "#/responses/forbidden" + // "404": + // "$ref": "#/responses/notFound" + + err := acceptOrRejectRepoTransfer(ctx, false) + if ctx.Written() { + return + } + if err != nil { + ctx.Error(http.StatusInternalServerError, "acceptOrRejectRepoTransfer", err) + return + } + + ctx.JSON(http.StatusOK, convert.ToRepo(ctx.Repo.Repository, ctx.Repo.AccessMode)) +} + +func acceptOrRejectRepoTransfer(ctx *context.APIContext, accept bool) error { + repoTransfer, err := models.GetPendingRepositoryTransfer(ctx.Repo.Repository) + if err != nil { + return err + } + + if err := repoTransfer.LoadAttributes(); err != nil { + return err + } + + if !repoTransfer.CanUserAcceptTransfer(ctx.User) { + ctx.Error(http.StatusForbidden, "CanUserAcceptTransfer", nil) + return fmt.Errorf("user does not have permissions to do this") + } + + if accept { + if err := repo_service.TransferOwnership(repoTransfer.Doer, repoTransfer.Recipient, ctx.Repo.Repository, repoTransfer.Teams); err != nil { + return err + } + } else { + if err := models.CancelRepositoryTransfer(ctx.Repo.Repository); err != nil { + return err + } + } + + return nil +} diff --git a/services/asymkey/ssh_key_test.go b/services/asymkey/ssh_key_test.go index 0ce235f7f65cf..9de6a4c11bbdf 100644 --- a/services/asymkey/ssh_key_test.go +++ b/services/asymkey/ssh_key_test.go @@ -11,6 +11,7 @@ import ( "code.gitea.io/gitea/models/login" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "github.com/stretchr/testify/assert" ) diff --git a/services/mailer/mailer_test.go b/services/mailer/mailer_test.go index 1739a68a64414..56f2eb52b0bcd 100644 --- a/services/mailer/mailer_test.go +++ b/services/mailer/mailer_test.go @@ -9,6 +9,7 @@ import ( "time" "code.gitea.io/gitea/modules/setting" + "github.com/stretchr/testify/assert" ) diff --git a/services/webhook/main_test.go b/services/webhook/main_test.go index e64acf3b61122..a87b74e89d743 100644 --- a/services/webhook/main_test.go +++ b/services/webhook/main_test.go @@ -8,8 +8,9 @@ import ( "path/filepath" "testing" - _ "code.gitea.io/gitea/models" "code.gitea.io/gitea/models/unittest" + + _ "code.gitea.io/gitea/models" ) func TestMain(m *testing.M) { diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 6bbc0934811b6..25c09b3d6f51f 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -9889,6 +9889,84 @@ } } }, + "/repos/{owner}/{repo}/transfer/accept": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Accept a repo transfer", + "operationId": "acceptRepoTransfer", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to transfer", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to transfer", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "202": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, + "/repos/{owner}/{repo}/transfer/reject": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Reject a repo transfer", + "operationId": "rejectRepoTransfer", + "parameters": [ + { + "type": "string", + "description": "owner of the repo to transfer", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo to transfer", + "name": "repo", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/Repository" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + } + } + } + }, "/repos/{owner}/{repo}/wiki/new": { "post": { "consumes": [ @@ -16876,6 +16954,26 @@ }, "x-go-package": "code.gitea.io/gitea/modules/structs" }, + "RepoTransfer": { + "description": "RepoTransfer represents a pending repo transfer", + "type": "object", + "properties": { + "doer": { + "$ref": "#/definitions/User" + }, + "recipient": { + "$ref": "#/definitions/User" + }, + "teams": { + "type": "array", + "items": { + "$ref": "#/definitions/Team" + }, + "x-go-name": "Teams" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, "Repository": { "description": "Repository represents a repository", "type": "object", @@ -17028,6 +17126,9 @@ "format": "int64", "x-go-name": "Releases" }, + "repo_transfer": { + "$ref": "#/definitions/RepoTransfer" + }, "size": { "type": "integer", "format": "int64", From 06075daf7c787e147f741ae5ec51490c764de03a Mon Sep 17 00:00:00 2001 From: qwerty287 <80460567+qwerty287@users.noreply.github.com> Date: Sat, 18 Dec 2021 16:39:09 +0100 Subject: [PATCH 2/8] Update routers/api/v1/repo/transfer.go Co-authored-by: 6543 <6543@obermui.de> --- routers/api/v1/repo/transfer.go | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/routers/api/v1/repo/transfer.go b/routers/api/v1/repo/transfer.go index 37864f437f23a..78a77a4e57628 100644 --- a/routers/api/v1/repo/transfer.go +++ b/routers/api/v1/repo/transfer.go @@ -216,14 +216,8 @@ func acceptOrRejectRepoTransfer(ctx *context.APIContext, accept bool) error { } if accept { - if err := repo_service.TransferOwnership(repoTransfer.Doer, repoTransfer.Recipient, ctx.Repo.Repository, repoTransfer.Teams); err != nil { - return err - } - } else { - if err := models.CancelRepositoryTransfer(ctx.Repo.Repository); err != nil { - return err - } + return repo_service.TransferOwnership(repoTransfer.Doer, repoTransfer.Recipient, ctx.Repo.Repository, repoTransfer.Teams) } - return nil + return models.CancelRepositoryTransfer(ctx.Repo.Repository) } From f8d787134d13f7fa3eb7f4dbffbda994107140c1 Mon Sep 17 00:00:00 2001 From: qwerty287 <80460567+qwerty287@users.noreply.github.com> Date: Sat, 18 Dec 2021 16:40:06 +0100 Subject: [PATCH 3/8] Update modules/convert/repository.go Co-authored-by: 6543 <6543@obermui.de> --- modules/convert/repository.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/convert/repository.go b/modules/convert/repository.go index ec9e42742792a..59315583d5acd 100644 --- a/modules/convert/repository.go +++ b/modules/convert/repository.go @@ -110,7 +110,7 @@ func innerToRepo(repo *repo_model.Repository, mode perm.AccessMode, isParent boo var transfer *api.RepoTransfer if repo.Status == repo_model.RepositoryPendingTransfer { t, err := models.GetPendingRepositoryTransfer(repo) - if err != nil { + if err != nil && !models.IsErrNoPendingTransfer(err) { log.Debug("GetPendingRepositoryTransfer", err) } else { if err := t.LoadAttributes(); err != nil { From 7643f47daa5030772093de8491531a078144ad9c Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sat, 18 Dec 2021 18:45:17 +0100 Subject: [PATCH 4/8] add handle 404 --- modules/convert/repository.go | 2 +- routers/api/v1/repo/transfer.go | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/convert/repository.go b/modules/convert/repository.go index 59315583d5acd..100be99106823 100644 --- a/modules/convert/repository.go +++ b/modules/convert/repository.go @@ -114,7 +114,7 @@ func innerToRepo(repo *repo_model.Repository, mode perm.AccessMode, isParent boo log.Debug("GetPendingRepositoryTransfer", err) } else { if err := t.LoadAttributes(); err != nil { - log.Debug("LoadRecipient", err) + log.Debug("LoadAttributes of RepoTransfer", err) } else { transfer = ToRepoTransfer(t) } diff --git a/routers/api/v1/repo/transfer.go b/routers/api/v1/repo/transfer.go index 78a77a4e57628..aa9ba43c73d36 100644 --- a/routers/api/v1/repo/transfer.go +++ b/routers/api/v1/repo/transfer.go @@ -159,7 +159,6 @@ func AcceptTransfer(ctx *context.APIContext) { } ctx.JSON(http.StatusAccepted, convert.ToRepo(ctx.Repo.Repository, ctx.Repo.AccessMode)) - } // RejectTransfer reject a repo transfer @@ -203,6 +202,10 @@ func RejectTransfer(ctx *context.APIContext) { func acceptOrRejectRepoTransfer(ctx *context.APIContext, accept bool) error { repoTransfer, err := models.GetPendingRepositoryTransfer(ctx.Repo.Repository) if err != nil { + if models.IsErrNoPendingTransfer(err) { + ctx.NotFound() + return nil + } return err } From f695dc65c8faa8419236016be293f11379a0e51d Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Sun, 19 Dec 2021 10:33:35 +0100 Subject: [PATCH 5/8] Add integration test case --- integrations/api_repo_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go index a321214c2388a..e5d5027576504 100644 --- a/integrations/api_repo_test.go +++ b/integrations/api_repo_test.go @@ -536,6 +536,10 @@ func TestAPIAcceptTransfer(t *testing.T) { req := NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/reject?token=%s", repo.OwnerName, repo.Name, token)) session.MakeRequest(t, req, http.StatusForbidden) + // try to accept repo that's not marked as transferred + req = NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/accept?token=%s", "user2","repo1" , token)) + session.MakeRequest(t, req, http.StatusNotFound) + // accept transfer session = loginUser(t, "user4") token = getTokenForLoggedInUser(t, session) @@ -558,6 +562,10 @@ func TestAPIRejectTransfer(t *testing.T) { req := NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/reject?token=%s", repo.OwnerName, repo.Name, token)) session.MakeRequest(t, req, http.StatusForbidden) + // try to reject repo that's not marked as transferred + req = NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/reject?token=%s", "user2","repo1" , token)) + session.MakeRequest(t, req, http.StatusNotFound) + // reject transfer session = loginUser(t, "user4") token = getTokenForLoggedInUser(t, session) From 13975283f3eec8695cd7a4d0ad2c13aaaccc9e4f Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Mon, 20 Dec 2021 07:44:06 +0100 Subject: [PATCH 6/8] fmt --- integrations/api_repo_test.go | 4 ++-- models/asymkey/ssh_key_verify.go | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go index e5d5027576504..c909e96f06c53 100644 --- a/integrations/api_repo_test.go +++ b/integrations/api_repo_test.go @@ -537,7 +537,7 @@ func TestAPIAcceptTransfer(t *testing.T) { session.MakeRequest(t, req, http.StatusForbidden) // try to accept repo that's not marked as transferred - req = NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/accept?token=%s", "user2","repo1" , token)) + req = NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/accept?token=%s", "user2", "repo1", token)) session.MakeRequest(t, req, http.StatusNotFound) // accept transfer @@ -563,7 +563,7 @@ func TestAPIRejectTransfer(t *testing.T) { session.MakeRequest(t, req, http.StatusForbidden) // try to reject repo that's not marked as transferred - req = NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/reject?token=%s", "user2","repo1" , token)) + req = NewRequest(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/transfer/reject?token=%s", "user2", "repo1", token)) session.MakeRequest(t, req, http.StatusNotFound) // reject transfer diff --git a/models/asymkey/ssh_key_verify.go b/models/asymkey/ssh_key_verify.go index 52ffe9d80fe35..710cb3af00cdb 100644 --- a/models/asymkey/ssh_key_verify.go +++ b/models/asymkey/ssh_key_verify.go @@ -9,6 +9,7 @@ import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/log" + "github.com/42wim/sshsig" ) From 70841452d48b0b3eebc6aca8647e7e7e8baa74a2 Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Wed, 22 Dec 2021 12:51:14 +0100 Subject: [PATCH 7/8] Use warn log level --- modules/convert/repository.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/convert/repository.go b/modules/convert/repository.go index 100be99106823..4f4286cc67d26 100644 --- a/modules/convert/repository.go +++ b/modules/convert/repository.go @@ -111,10 +111,10 @@ func innerToRepo(repo *repo_model.Repository, mode perm.AccessMode, isParent boo if repo.Status == repo_model.RepositoryPendingTransfer { t, err := models.GetPendingRepositoryTransfer(repo) if err != nil && !models.IsErrNoPendingTransfer(err) { - log.Debug("GetPendingRepositoryTransfer", err) + log.Warn("GetPendingRepositoryTransfer", err) } else { if err := t.LoadAttributes(); err != nil { - log.Debug("LoadAttributes of RepoTransfer", err) + log.Warn("LoadAttributes of RepoTransfer", err) } else { transfer = ToRepoTransfer(t) } From faa19895db549fcc25b08afff16452d4dfb0c2a7 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 22 Dec 2021 23:42:36 +0800 Subject: [PATCH 8/8] Update repository.go --- modules/convert/repository.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/convert/repository.go b/modules/convert/repository.go index 4f4286cc67d26..725b04e2ca8a4 100644 --- a/modules/convert/repository.go +++ b/modules/convert/repository.go @@ -111,10 +111,10 @@ func innerToRepo(repo *repo_model.Repository, mode perm.AccessMode, isParent boo if repo.Status == repo_model.RepositoryPendingTransfer { t, err := models.GetPendingRepositoryTransfer(repo) if err != nil && !models.IsErrNoPendingTransfer(err) { - log.Warn("GetPendingRepositoryTransfer", err) + log.Warn("GetPendingRepositoryTransfer: %v", err) } else { if err := t.LoadAttributes(); err != nil { - log.Warn("LoadAttributes of RepoTransfer", err) + log.Warn("LoadAttributes of RepoTransfer: %v", err) } else { transfer = ToRepoTransfer(t) }