Skip to content

Commit

Permalink
An inactive user shouldn't be able to be added as a collaborator (#4535)
Browse files Browse the repository at this point in the history
* an inactive user shouldn't be able to be a collaborator

* use translated error message

* add active user check when adding a new collaborator via the api

* fix translation text

* added collaborator test

* improvee testcases
  • Loading branch information
adelowo authored and lafriks committed Aug 7, 2018
1 parent c7a6ee5 commit 59b10e6
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 1 deletion.
3 changes: 2 additions & 1 deletion options/locale/locale_en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1025,7 +1025,8 @@ settings.transfer_succeed = The repository has been transferred.
settings.confirm_delete = Delete Repository
settings.add_collaborator = Add Collaborator
settings.add_collaborator_success = The collaborator has been added.
settings.add_collaborator_duplicate =The collaborator is already added to this repository.
settings.add_collaborator_inactive_user = Can not add an inactive user as a collaborator.
settings.add_collaborator_duplicate = The collaborator is already added to this repository.
settings.delete_collaborator = Remove
settings.collaborator_deletion = Remove Collaborator
settings.collaborator_deletion_desc = Removing a collaborator will revoke their access to this repository. Continue?
Expand Down
7 changes: 7 additions & 0 deletions routers/api/v1/repo/collaborators.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
package repo

import (
"errors"

"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"

Expand Down Expand Up @@ -145,6 +147,11 @@ func AddCollaborator(ctx *context.APIContext, form api.AddCollaboratorOption) {
return
}

if !collaborator.IsActive {
ctx.Error(500, "InactiveCollaborator", errors.New("collaborator's account is inactive"))
return
}

if err := ctx.Repo.Repository.AddCollaborator(collaborator); err != nil {
ctx.Error(500, "AddCollaborator", err)
return
Expand Down
6 changes: 6 additions & 0 deletions routers/repo/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,12 @@ func CollaborationPost(ctx *context.Context) {
return
}

if !u.IsActive {
ctx.Flash.Error(ctx.Tr("repo.settings.add_collaborator_inactive_user"))
ctx.Redirect(setting.AppSubURL + ctx.Req.URL.Path)
return
}

// Organization is not allowed to be added as a collaborator.
if u.IsOrganization() {
ctx.Flash.Error(ctx.Tr("repo.settings.org_not_allowed_to_be_collaborator"))
Expand Down
24 changes: 24 additions & 0 deletions routers/repo/settings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,30 @@ func TestCollaborationPost(t *testing.T) {
assert.True(t, exists)
}

func TestCollaborationPost_InactiveUser(t *testing.T) {

models.PrepareTestEnv(t)
ctx := test.MockContext(t, "user2/repo1/issues/labels")
test.LoadUser(t, ctx, 2)
test.LoadUser(t, ctx, 9)
test.LoadRepo(t, ctx, 1)

ctx.Req.Form.Set("collaborator", "user9")

repo := &context.Repository{
Owner: &models.User{
LowerName: "user2",
},
}

ctx.Repo = repo

CollaborationPost(ctx)

assert.EqualValues(t, http.StatusFound, ctx.Resp.Status())
assert.NotEmpty(t, ctx.Flash.ErrorMsg)
}

func TestCollaborationPost_AddCollaboratorTwice(t *testing.T) {

models.PrepareTestEnv(t)
Expand Down

0 comments on commit 59b10e6

Please sign in to comment.