code.gitea.io/gitea@v1.22.3/tests/integration/api_private_serv_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package integration 5 6 import ( 7 "context" 8 "net/url" 9 "testing" 10 11 asymkey_model "code.gitea.io/gitea/models/asymkey" 12 "code.gitea.io/gitea/models/perm" 13 "code.gitea.io/gitea/modules/private" 14 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestAPIPrivateNoServ(t *testing.T) { 19 onGiteaRun(t, func(*testing.T, *url.URL) { 20 ctx, cancel := context.WithCancel(context.Background()) 21 defer cancel() 22 key, user, err := private.ServNoCommand(ctx, 1) 23 assert.NoError(t, err) 24 assert.Equal(t, int64(2), user.ID) 25 assert.Equal(t, "user2", user.Name) 26 assert.Equal(t, int64(1), key.ID) 27 assert.Equal(t, "user2@localhost", key.Name) 28 29 deployKey, err := asymkey_model.AddDeployKey(ctx, 1, "test-deploy", "sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGXEEzWmm1dxb+57RoK5KVCL0w2eNv9cqJX2AGGVlkFsVDhOXHzsadS3LTK4VlEbbrDMJdoti9yM8vclA8IeRacAAAAEc3NoOg== nocomment", false) 30 assert.NoError(t, err) 31 32 key, user, err = private.ServNoCommand(ctx, deployKey.KeyID) 33 assert.NoError(t, err) 34 assert.Empty(t, user) 35 assert.Equal(t, deployKey.KeyID, key.ID) 36 assert.Equal(t, "test-deploy", key.Name) 37 }) 38 } 39 40 func TestAPIPrivateServ(t *testing.T) { 41 onGiteaRun(t, func(*testing.T, *url.URL) { 42 ctx, cancel := context.WithCancel(context.Background()) 43 defer cancel() 44 45 // Can push to a repo we own 46 results, extra := private.ServCommand(ctx, 1, "user2", "repo1", perm.AccessModeWrite, "git-upload-pack", "") 47 assert.NoError(t, extra.Error) 48 assert.False(t, results.IsWiki) 49 assert.Zero(t, results.DeployKeyID) 50 assert.Equal(t, int64(1), results.KeyID) 51 assert.Equal(t, "user2@localhost", results.KeyName) 52 assert.Equal(t, "user2", results.UserName) 53 assert.Equal(t, int64(2), results.UserID) 54 assert.Equal(t, "user2", results.OwnerName) 55 assert.Equal(t, "repo1", results.RepoName) 56 assert.Equal(t, int64(1), results.RepoID) 57 58 // Cannot push to a private repo we're not associated with 59 results, extra = private.ServCommand(ctx, 1, "user15", "big_test_private_1", perm.AccessModeWrite, "git-upload-pack", "") 60 assert.Error(t, extra.Error) 61 assert.Empty(t, results) 62 63 // Cannot pull from a private repo we're not associated with 64 results, extra = private.ServCommand(ctx, 1, "user15", "big_test_private_1", perm.AccessModeRead, "git-upload-pack", "") 65 assert.Error(t, extra.Error) 66 assert.Empty(t, results) 67 68 // Can pull from a public repo we're not associated with 69 results, extra = private.ServCommand(ctx, 1, "user15", "big_test_public_1", perm.AccessModeRead, "git-upload-pack", "") 70 assert.NoError(t, extra.Error) 71 assert.False(t, results.IsWiki) 72 assert.Zero(t, results.DeployKeyID) 73 assert.Equal(t, int64(1), results.KeyID) 74 assert.Equal(t, "user2@localhost", results.KeyName) 75 assert.Equal(t, "user2", results.UserName) 76 assert.Equal(t, int64(2), results.UserID) 77 assert.Equal(t, "user15", results.OwnerName) 78 assert.Equal(t, "big_test_public_1", results.RepoName) 79 assert.Equal(t, int64(17), results.RepoID) 80 81 // Cannot push to a public repo we're not associated with 82 results, extra = private.ServCommand(ctx, 1, "user15", "big_test_public_1", perm.AccessModeWrite, "git-upload-pack", "") 83 assert.Error(t, extra.Error) 84 assert.Empty(t, results) 85 86 // Add reading deploy key 87 deployKey, err := asymkey_model.AddDeployKey(ctx, 19, "test-deploy", "sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGXEEzWmm1dxb+57RoK5KVCL0w2eNv9cqJX2AGGVlkFsVDhOXHzsadS3LTK4VlEbbrDMJdoti9yM8vclA8IeRacAAAAEc3NoOg== nocomment", true) 88 assert.NoError(t, err) 89 90 // Can pull from repo we're a deploy key for 91 results, extra = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", perm.AccessModeRead, "git-upload-pack", "") 92 assert.NoError(t, extra.Error) 93 assert.False(t, results.IsWiki) 94 assert.NotZero(t, results.DeployKeyID) 95 assert.Equal(t, deployKey.KeyID, results.KeyID) 96 assert.Equal(t, "test-deploy", results.KeyName) 97 assert.Equal(t, "user15", results.UserName) 98 assert.Equal(t, int64(15), results.UserID) 99 assert.Equal(t, "user15", results.OwnerName) 100 assert.Equal(t, "big_test_private_1", results.RepoName) 101 assert.Equal(t, int64(19), results.RepoID) 102 103 // Cannot push to a private repo with reading key 104 results, extra = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", perm.AccessModeWrite, "git-upload-pack", "") 105 assert.Error(t, extra.Error) 106 assert.Empty(t, results) 107 108 // Cannot pull from a private repo we're not associated with 109 results, extra = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_private_2", perm.AccessModeRead, "git-upload-pack", "") 110 assert.Error(t, extra.Error) 111 assert.Empty(t, results) 112 113 // Cannot pull from a public repo we're not associated with 114 results, extra = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_public_1", perm.AccessModeRead, "git-upload-pack", "") 115 assert.Error(t, extra.Error) 116 assert.Empty(t, results) 117 118 // Add writing deploy key 119 deployKey, err = asymkey_model.AddDeployKey(ctx, 20, "test-deploy", "sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBGXEEzWmm1dxb+57RoK5KVCL0w2eNv9cqJX2AGGVlkFsVDhOXHzsadS3LTK4VlEbbrDMJdoti9yM8vclA8IeRacAAAAEc3NoOg== nocomment", false) 120 assert.NoError(t, err) 121 122 // Cannot push to a private repo with reading key 123 results, extra = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", perm.AccessModeWrite, "git-upload-pack", "") 124 assert.Error(t, extra.Error) 125 assert.Empty(t, results) 126 127 // Can pull from repo we're a writing deploy key for 128 results, extra = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", perm.AccessModeRead, "git-upload-pack", "") 129 assert.NoError(t, extra.Error) 130 assert.False(t, results.IsWiki) 131 assert.NotZero(t, results.DeployKeyID) 132 assert.Equal(t, deployKey.KeyID, results.KeyID) 133 assert.Equal(t, "test-deploy", results.KeyName) 134 assert.Equal(t, "user15", results.UserName) 135 assert.Equal(t, int64(15), results.UserID) 136 assert.Equal(t, "user15", results.OwnerName) 137 assert.Equal(t, "big_test_private_2", results.RepoName) 138 assert.Equal(t, int64(20), results.RepoID) 139 140 // Can push to repo we're a writing deploy key for 141 results, extra = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", perm.AccessModeWrite, "git-upload-pack", "") 142 assert.NoError(t, extra.Error) 143 assert.False(t, results.IsWiki) 144 assert.NotZero(t, results.DeployKeyID) 145 assert.Equal(t, deployKey.KeyID, results.KeyID) 146 assert.Equal(t, "test-deploy", results.KeyName) 147 assert.Equal(t, "user15", results.UserName) 148 assert.Equal(t, int64(15), results.UserID) 149 assert.Equal(t, "user15", results.OwnerName) 150 assert.Equal(t, "big_test_private_2", results.RepoName) 151 assert.Equal(t, int64(20), results.RepoID) 152 }) 153 }