mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-01 20:59:45 +09:00
1b1274486c
Introduces gitproxy module which spawns a small forward proxy as scanner for git calls Replaces hostmatcher with matchlist which supports port rules Deprecates ALLOWED_DOMAINS/BLOCKED_DOMAINS and ALLOW_LOCALNETWORKS settings in migration in favor of full names we have in security configs. Removes `external` preset in favor of lax/strict modes, strict mode requiring explicit ports if they aren't standard http/s ones. Breaking changes: - `external` preset no longer works as deny rule. To enforce that, use `strict` mode and allow ranges to connect to - Wildcards are no longer accepted in IP addresses - `*` is no longer allowed as entry in lists - domain rules now use curl like syntax `*.example.com` matching subdomains but not `example.com`, `example.com` matching itself and all subdomains. `example.*` is not a valid rule - In the default `lax` mode, `[security] ALLOWED_HOST_LIST` no longer restricts public hosts, set `EGRESS_MODE = strict` to keep an exclusive list. A startup warning flags this - Invalid list entries are logged at startup, invalid `BLOCKED_HOST_LIST`/`BLOCKED_DOMAINS` entries stop it Docs: https://gitea.com/gitea/docs/pulls/557 Signed-off-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: bircni <bircni@icloud.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
264 lines
9.8 KiB
Go
264 lines
9.8 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// Copyright 2018 Jonas Franz. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package migrations
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"gitea.dev/models/unittest"
|
|
base "gitea.dev/modules/migration"
|
|
"gitea.dev/modules/setting"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
setting.Migrations.AllowedHostList = "private:*, loopback:*"
|
|
unittest.MainTest(m)
|
|
}
|
|
|
|
func assertTimeEqual(t *testing.T, expected, actual time.Time) {
|
|
assert.Equal(t, expected.UTC(), actual.UTC())
|
|
}
|
|
|
|
func assertTimePtrEqual(t *testing.T, expected, actual *time.Time) {
|
|
if expected == nil {
|
|
assert.Nil(t, actual)
|
|
} else if assert.NotNil(t, actual) {
|
|
assertTimeEqual(t, *expected, *actual)
|
|
}
|
|
}
|
|
|
|
func assertCommentEqual(t *testing.T, expected, actual *base.Comment) {
|
|
assert.Equal(t, expected.IssueIndex, actual.IssueIndex)
|
|
assert.Equal(t, expected.PosterID, actual.PosterID)
|
|
assert.Equal(t, expected.PosterName, actual.PosterName)
|
|
assert.Equal(t, expected.PosterEmail, actual.PosterEmail)
|
|
assertTimeEqual(t, expected.Created, actual.Created)
|
|
assertTimeEqual(t, expected.Updated, actual.Updated)
|
|
assert.Equal(t, expected.Content, actual.Content)
|
|
assertReactionsEqual(t, expected.Reactions, actual.Reactions)
|
|
}
|
|
|
|
func assertCommentsEqual(t *testing.T, expected, actual []*base.Comment) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertCommentEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertLabelEqual(t *testing.T, expected, actual *base.Label) {
|
|
assert.Equal(t, expected.Name, actual.Name)
|
|
assert.Equal(t, expected.Exclusive, actual.Exclusive)
|
|
assert.Equal(t, expected.Color, actual.Color)
|
|
assert.Equal(t, expected.Description, actual.Description)
|
|
}
|
|
|
|
func assertLabelsEqual(t *testing.T, expected, actual []*base.Label) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertLabelEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertMilestoneEqual(t *testing.T, expected, actual *base.Milestone) {
|
|
assert.Equal(t, expected.Title, actual.Title)
|
|
assert.Equal(t, expected.Description, actual.Description)
|
|
assertTimePtrEqual(t, expected.Deadline, actual.Deadline)
|
|
assertTimeEqual(t, expected.Created, actual.Created)
|
|
assertTimePtrEqual(t, expected.Updated, actual.Updated)
|
|
assertTimePtrEqual(t, expected.Closed, actual.Closed)
|
|
assert.Equal(t, expected.State, actual.State)
|
|
}
|
|
|
|
func assertMilestonesEqual(t *testing.T, expected, actual []*base.Milestone) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertMilestoneEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertIssueEqual(t *testing.T, expected, actual *base.Issue) {
|
|
assert.Equal(t, expected.Number, actual.Number)
|
|
assert.Equal(t, expected.PosterID, actual.PosterID)
|
|
assert.Equal(t, expected.PosterName, actual.PosterName)
|
|
assert.Equal(t, expected.PosterEmail, actual.PosterEmail)
|
|
assert.Equal(t, expected.Title, actual.Title)
|
|
assert.Equal(t, expected.Content, actual.Content)
|
|
assert.Equal(t, expected.Ref, actual.Ref)
|
|
assert.Equal(t, expected.Milestone, actual.Milestone)
|
|
assert.Equal(t, expected.State, actual.State)
|
|
assert.Equal(t, expected.IsLocked, actual.IsLocked)
|
|
assertTimeEqual(t, expected.Created, actual.Created)
|
|
assertTimeEqual(t, expected.Updated, actual.Updated)
|
|
assertTimePtrEqual(t, expected.Closed, actual.Closed)
|
|
assertLabelsEqual(t, expected.Labels, actual.Labels)
|
|
assertReactionsEqual(t, expected.Reactions, actual.Reactions)
|
|
assert.ElementsMatch(t, expected.Assignees, actual.Assignees)
|
|
}
|
|
|
|
func assertIssuesEqual(t *testing.T, expected, actual []*base.Issue) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertIssueEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertPullRequestEqual(t *testing.T, expected, actual *base.PullRequest) {
|
|
assert.Equal(t, expected.Number, actual.Number)
|
|
assert.Equal(t, expected.Title, actual.Title)
|
|
assert.Equal(t, expected.PosterID, actual.PosterID)
|
|
assert.Equal(t, expected.PosterName, actual.PosterName)
|
|
assert.Equal(t, expected.PosterEmail, actual.PosterEmail)
|
|
assert.Equal(t, expected.Content, actual.Content)
|
|
assert.Equal(t, expected.Milestone, actual.Milestone)
|
|
assert.Equal(t, expected.State, actual.State)
|
|
assertTimeEqual(t, expected.Created, actual.Created)
|
|
assertTimeEqual(t, expected.Updated, actual.Updated)
|
|
assertTimePtrEqual(t, expected.Closed, actual.Closed)
|
|
assertLabelsEqual(t, expected.Labels, actual.Labels)
|
|
assert.Equal(t, expected.PatchURL, actual.PatchURL)
|
|
assert.Equal(t, expected.Merged, actual.Merged)
|
|
assertTimePtrEqual(t, expected.MergedTime, actual.MergedTime)
|
|
assert.Equal(t, expected.MergeCommitSHA, actual.MergeCommitSHA)
|
|
assertPullRequestBranchEqual(t, expected.Head, actual.Head)
|
|
assertPullRequestBranchEqual(t, expected.Base, actual.Base)
|
|
assert.ElementsMatch(t, expected.Assignees, actual.Assignees)
|
|
assert.Equal(t, expected.IsLocked, actual.IsLocked)
|
|
assertReactionsEqual(t, expected.Reactions, actual.Reactions)
|
|
}
|
|
|
|
func assertPullRequestsEqual(t *testing.T, expected, actual []*base.PullRequest) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertPullRequestEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertPullRequestBranchEqual(t *testing.T, expected, actual base.PullRequestBranch) {
|
|
assert.Equal(t, expected.CloneURL, actual.CloneURL)
|
|
assert.Equal(t, expected.Ref, actual.Ref)
|
|
assert.Equal(t, expected.SHA, actual.SHA)
|
|
assert.Equal(t, expected.RepoName, actual.RepoName)
|
|
assert.Equal(t, expected.OwnerName, actual.OwnerName)
|
|
}
|
|
|
|
func assertReactionEqual(t *testing.T, expected, actual *base.Reaction) {
|
|
assert.Equal(t, expected.UserID, actual.UserID)
|
|
assert.Equal(t, expected.UserName, actual.UserName)
|
|
assert.Equal(t, expected.Content, actual.Content)
|
|
}
|
|
|
|
func assertReactionsEqual(t *testing.T, expected, actual []*base.Reaction) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertReactionEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertReleaseAssetEqual(t *testing.T, expected, actual *base.ReleaseAsset) {
|
|
assert.Equal(t, expected.ID, actual.ID)
|
|
assert.Equal(t, expected.Name, actual.Name)
|
|
assert.Equal(t, expected.Size, actual.Size)
|
|
assert.Equal(t, expected.DownloadCount, actual.DownloadCount)
|
|
assertTimeEqual(t, expected.Created, actual.Created)
|
|
assertTimeEqual(t, expected.Updated, actual.Updated)
|
|
assert.Equal(t, expected.DownloadURL, actual.DownloadURL)
|
|
}
|
|
|
|
func assertReleaseAssetsEqual(t *testing.T, expected, actual []*base.ReleaseAsset) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertReleaseAssetEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertReleaseEqual(t *testing.T, expected, actual *base.Release) {
|
|
assert.Equal(t, expected.TagName, actual.TagName)
|
|
assert.Equal(t, expected.TargetCommitish, actual.TargetCommitish)
|
|
assert.Equal(t, expected.Name, actual.Name)
|
|
assert.Equal(t, expected.Body, actual.Body)
|
|
assert.Equal(t, expected.Draft, actual.Draft)
|
|
assert.Equal(t, expected.Prerelease, actual.Prerelease)
|
|
assert.Equal(t, expected.PublisherID, actual.PublisherID)
|
|
assert.Equal(t, expected.PublisherName, actual.PublisherName)
|
|
assert.Equal(t, expected.PublisherEmail, actual.PublisherEmail)
|
|
assertReleaseAssetsEqual(t, expected.Assets, actual.Assets)
|
|
assertTimeEqual(t, expected.Created, actual.Created)
|
|
assertTimeEqual(t, expected.Published, actual.Published)
|
|
}
|
|
|
|
func assertReleasesEqual(t *testing.T, expected, actual []*base.Release) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertReleaseEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertRepositoryEqual(t *testing.T, expected, actual *base.Repository) {
|
|
assert.Equal(t, expected.Name, actual.Name)
|
|
assert.Equal(t, expected.Owner, actual.Owner)
|
|
assert.Equal(t, expected.IsPrivate, actual.IsPrivate)
|
|
assert.Equal(t, expected.IsMirror, actual.IsMirror)
|
|
assert.Equal(t, expected.Description, actual.Description)
|
|
assert.Equal(t, expected.Website, actual.Website)
|
|
assert.Equal(t, expected.CloneURL, actual.CloneURL)
|
|
assert.Equal(t, expected.OriginalURL, actual.OriginalURL)
|
|
assert.Equal(t, expected.DefaultBranch, actual.DefaultBranch)
|
|
}
|
|
|
|
func assertReviewEqual(t *testing.T, expected, actual *base.Review) {
|
|
assert.Equal(t, expected.ID, actual.ID, "ID")
|
|
assert.Equal(t, expected.IssueIndex, actual.IssueIndex, "IssueIndex")
|
|
assert.Equal(t, expected.ReviewerID, actual.ReviewerID, "ReviewerID")
|
|
assert.Equal(t, expected.ReviewerName, actual.ReviewerName, "ReviewerName")
|
|
assert.Equal(t, expected.Official, actual.Official, "Official")
|
|
assert.Equal(t, expected.CommitID, actual.CommitID, "CommitID")
|
|
assert.Equal(t, expected.Content, actual.Content, "Content")
|
|
assert.WithinDuration(t, expected.CreatedAt, actual.CreatedAt, 10*time.Second)
|
|
assert.Equal(t, expected.State, actual.State, "State")
|
|
assertReviewCommentsEqual(t, expected.Comments, actual.Comments)
|
|
}
|
|
|
|
func assertReviewsEqual(t *testing.T, expected, actual []*base.Review) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertReviewEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertReviewCommentEqual(t *testing.T, expected, actual *base.ReviewComment) {
|
|
assert.Equal(t, expected.ID, actual.ID)
|
|
assert.Equal(t, expected.InReplyTo, actual.InReplyTo)
|
|
assert.Equal(t, expected.Content, actual.Content)
|
|
assert.Equal(t, expected.TreePath, actual.TreePath)
|
|
assert.Equal(t, expected.DiffHunk, actual.DiffHunk)
|
|
assert.Equal(t, expected.Position, actual.Position)
|
|
assert.Equal(t, expected.Line, actual.Line)
|
|
assert.Equal(t, expected.CommitID, actual.CommitID)
|
|
assert.Equal(t, expected.PosterID, actual.PosterID)
|
|
assertReactionsEqual(t, expected.Reactions, actual.Reactions)
|
|
assertTimeEqual(t, expected.CreatedAt, actual.CreatedAt)
|
|
assertTimeEqual(t, expected.UpdatedAt, actual.UpdatedAt)
|
|
}
|
|
|
|
func assertReviewCommentsEqual(t *testing.T, expected, actual []*base.ReviewComment) {
|
|
if assert.Len(t, actual, len(expected)) {
|
|
for i := range expected {
|
|
assertReviewCommentEqual(t, expected[i], actual[i])
|
|
}
|
|
}
|
|
}
|