mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-09-07 04:08:21 +02:00
Backport #20844 Currently the function takes in the UserID option, but isn't being used within the SQL query. This patch fixes that by checking that only teams are being returned that the user belongs to. Fix #20829
120 lines
3.3 KiB
Go
120 lines
3.3 KiB
Go
// Copyright 2018 The Gitea Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.package models
|
|
|
|
package integrations
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/models/unittest"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
api "code.gitea.io/gitea/modules/structs"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestUserOrgs(t *testing.T) {
|
|
defer prepareTestEnv(t)()
|
|
adminUsername := "user1"
|
|
normalUsername := "user2"
|
|
privateMemberUsername := "user4"
|
|
unrelatedUsername := "user5"
|
|
|
|
orgs := getUserOrgs(t, adminUsername, normalUsername)
|
|
|
|
user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user3"}).(*user_model.User)
|
|
user17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user17"}).(*user_model.User)
|
|
|
|
assert.Equal(t, []*api.Organization{
|
|
{
|
|
ID: 17,
|
|
UserName: user17.Name,
|
|
FullName: user17.FullName,
|
|
AvatarURL: user17.AvatarLink(),
|
|
Description: "",
|
|
Website: "",
|
|
Location: "",
|
|
Visibility: "public",
|
|
},
|
|
{
|
|
ID: 3,
|
|
UserName: user3.Name,
|
|
FullName: user3.FullName,
|
|
AvatarURL: user3.AvatarLink(),
|
|
Description: "",
|
|
Website: "",
|
|
Location: "",
|
|
Visibility: "public",
|
|
},
|
|
}, orgs)
|
|
|
|
// user itself should get it's org's he is a member of
|
|
orgs = getUserOrgs(t, privateMemberUsername, privateMemberUsername)
|
|
assert.Len(t, orgs, 1)
|
|
|
|
// unrelated user should not get private org membership of privateMemberUsername
|
|
orgs = getUserOrgs(t, unrelatedUsername, privateMemberUsername)
|
|
assert.Len(t, orgs, 0)
|
|
|
|
// not authenticated call also should hide org membership
|
|
orgs = getUserOrgs(t, "", privateMemberUsername)
|
|
assert.Len(t, orgs, 0)
|
|
}
|
|
|
|
func getUserOrgs(t *testing.T, userDoer, userCheck string) (orgs []*api.Organization) {
|
|
token := ""
|
|
session := emptyTestSession(t)
|
|
if len(userDoer) != 0 {
|
|
session = loginUser(t, userDoer)
|
|
token = getTokenForLoggedInUser(t, session)
|
|
}
|
|
urlStr := fmt.Sprintf("/api/v1/users/%s/orgs?token=%s", userCheck, token)
|
|
req := NewRequest(t, "GET", urlStr)
|
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
|
DecodeJSON(t, resp, &orgs)
|
|
return orgs
|
|
}
|
|
|
|
func TestMyOrgs(t *testing.T) {
|
|
defer prepareTestEnv(t)()
|
|
|
|
session := emptyTestSession(t)
|
|
req := NewRequest(t, "GET", "/api/v1/user/orgs")
|
|
session.MakeRequest(t, req, http.StatusUnauthorized)
|
|
|
|
normalUsername := "user2"
|
|
session = loginUser(t, normalUsername)
|
|
token := getTokenForLoggedInUser(t, session)
|
|
req = NewRequest(t, "GET", "/api/v1/user/orgs?token="+token)
|
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
|
var orgs []*api.Organization
|
|
DecodeJSON(t, resp, &orgs)
|
|
user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user3"}).(*user_model.User)
|
|
user17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user17"}).(*user_model.User)
|
|
|
|
assert.Equal(t, []*api.Organization{
|
|
{
|
|
ID: 17,
|
|
UserName: user17.Name,
|
|
FullName: user17.FullName,
|
|
AvatarURL: user17.AvatarLink(),
|
|
Description: "",
|
|
Website: "",
|
|
Location: "",
|
|
Visibility: "public",
|
|
},
|
|
{
|
|
ID: 3,
|
|
UserName: user3.Name,
|
|
FullName: user3.FullName,
|
|
AvatarURL: user3.AvatarLink(),
|
|
Description: "",
|
|
Website: "",
|
|
Location: "",
|
|
Visibility: "public",
|
|
},
|
|
}, orgs)
|
|
}
|