2021-06-25 08:28:55 -06:00
|
|
|
// Copyright 2021 The Gitea Authors. All rights reserved.
|
2022-11-27 11:20:29 -07:00
|
|
|
// SPDX-License-Identifier: MIT
|
2021-06-25 08:28:55 -06:00
|
|
|
|
2022-06-12 09:51:54 -06:00
|
|
|
package git_test
|
2021-06-25 08:28:55 -06:00
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
2022-11-19 01:12:33 -07:00
|
|
|
"code.gitea.io/gitea/models/db"
|
2022-06-12 09:51:54 -06:00
|
|
|
git_model "code.gitea.io/gitea/models/git"
|
2021-11-12 07:36:47 -07:00
|
|
|
"code.gitea.io/gitea/models/unittest"
|
|
|
|
|
2021-06-25 08:28:55 -06:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestIsUserAllowed(t *testing.T) {
|
2021-11-12 07:36:47 -07:00
|
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
2021-06-25 08:28:55 -06:00
|
|
|
|
2022-06-12 09:51:54 -06:00
|
|
|
pt := &git_model.ProtectedTag{}
|
2022-11-19 01:12:33 -07:00
|
|
|
allowed, err := git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 1)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.False(t, allowed)
|
|
|
|
|
2022-06-12 09:51:54 -06:00
|
|
|
pt = &git_model.ProtectedTag{
|
2021-06-25 08:28:55 -06:00
|
|
|
AllowlistUserIDs: []int64{1},
|
|
|
|
}
|
2022-11-19 01:12:33 -07:00
|
|
|
allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 1)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.True(t, allowed)
|
|
|
|
|
2022-11-19 01:12:33 -07:00
|
|
|
allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 2)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.False(t, allowed)
|
|
|
|
|
2022-06-12 09:51:54 -06:00
|
|
|
pt = &git_model.ProtectedTag{
|
2021-06-25 08:28:55 -06:00
|
|
|
AllowlistTeamIDs: []int64{1},
|
|
|
|
}
|
2022-11-19 01:12:33 -07:00
|
|
|
allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 1)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.False(t, allowed)
|
|
|
|
|
2022-11-19 01:12:33 -07:00
|
|
|
allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 2)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.True(t, allowed)
|
|
|
|
|
2022-06-12 09:51:54 -06:00
|
|
|
pt = &git_model.ProtectedTag{
|
2021-06-25 08:28:55 -06:00
|
|
|
AllowlistUserIDs: []int64{1},
|
|
|
|
AllowlistTeamIDs: []int64{1},
|
|
|
|
}
|
2022-11-19 01:12:33 -07:00
|
|
|
allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 1)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.True(t, allowed)
|
|
|
|
|
2022-11-19 01:12:33 -07:00
|
|
|
allowed, err = git_model.IsUserAllowedModifyTag(db.DefaultContext, pt, 2)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.True(t, allowed)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestIsUserAllowedToControlTag(t *testing.T) {
|
|
|
|
cases := []struct {
|
|
|
|
name string
|
|
|
|
userid int64
|
|
|
|
allowed bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "test",
|
|
|
|
userid: 1,
|
|
|
|
allowed: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "test",
|
|
|
|
userid: 3,
|
|
|
|
allowed: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "gitea",
|
|
|
|
userid: 1,
|
|
|
|
allowed: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "gitea",
|
|
|
|
userid: 3,
|
|
|
|
allowed: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "test-gitea",
|
|
|
|
userid: 1,
|
|
|
|
allowed: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "test-gitea",
|
|
|
|
userid: 3,
|
|
|
|
allowed: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "gitea-test",
|
|
|
|
userid: 1,
|
|
|
|
allowed: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "gitea-test",
|
|
|
|
userid: 3,
|
|
|
|
allowed: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "v-1",
|
|
|
|
userid: 1,
|
|
|
|
allowed: false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "v-1",
|
|
|
|
userid: 2,
|
|
|
|
allowed: true,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "release",
|
|
|
|
userid: 1,
|
|
|
|
allowed: false,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("Glob", func(t *testing.T) {
|
2022-06-12 09:51:54 -06:00
|
|
|
protectedTags := []*git_model.ProtectedTag{
|
2021-06-25 08:28:55 -06:00
|
|
|
{
|
|
|
|
NamePattern: `*gitea`,
|
|
|
|
AllowlistUserIDs: []int64{1},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
NamePattern: `v-*`,
|
|
|
|
AllowlistUserIDs: []int64{2},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
NamePattern: "release",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for n, c := range cases {
|
2022-11-19 01:12:33 -07:00
|
|
|
isAllowed, err := git_model.IsUserAllowedToControlTag(db.DefaultContext, protectedTags, c.name, c.userid)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, c.allowed, isAllowed, "case %d: error should match", n)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Regex", func(t *testing.T) {
|
2022-06-12 09:51:54 -06:00
|
|
|
protectedTags := []*git_model.ProtectedTag{
|
2021-06-25 08:28:55 -06:00
|
|
|
{
|
|
|
|
NamePattern: `/gitea\z/`,
|
|
|
|
AllowlistUserIDs: []int64{1},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
NamePattern: `/\Av-/`,
|
|
|
|
AllowlistUserIDs: []int64{2},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
NamePattern: "/release/",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for n, c := range cases {
|
2022-11-19 01:12:33 -07:00
|
|
|
isAllowed, err := git_model.IsUserAllowedToControlTag(db.DefaultContext, protectedTags, c.name, c.userid)
|
2021-06-25 08:28:55 -06:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, c.allowed, isAllowed, "case %d: error should match", n)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|