fix(repoinfo): fix userprefs values for repos returned by expanded repo info (#1413)

- now isBookmarked and isStarred are updated correctly

Signed-off-by: Laurentiu Niculae <niculae.laurentiu1@gmail.com>
This commit is contained in:
LaurentiuNiculae
2023-05-04 19:51:21 +03:00
committed by GitHub
parent e299ae199a
commit 449f0d0ac3
11 changed files with 377 additions and 6 deletions
+1 -1
View File
@@ -1096,7 +1096,7 @@ func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cv
return &gql_generated.RepoInfo{}, nil //nolint:nilerr // don't give details to a potential attacker
}
repoMeta, err := repoDB.GetRepoMeta(repo)
repoMeta, err := repoDB.GetUserRepoMeta(ctx, repo)
if err != nil {
log.Error().Err(err).Str("repository", repo).Msg("resolver: can't retrieve repoMeta for repo")
+1 -1
View File
@@ -3274,7 +3274,7 @@ func TestExpandedRepoInfo(t *testing.T) {
graphql.DefaultRecover)
repoDB := mocks.RepoDBMock{
GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) {
GetUserRepoMetaFn: func(ctx context.Context, repo string) (repodb.RepoMetadata, error) {
return repodb.RepoMetadata{
Tags: map[string]repodb.Descriptor{
"tagManifest": {
+1 -1
View File
@@ -4699,7 +4699,7 @@ func TestRepoDBIndexOperations(t *testing.T) {
func RunRepoDBIndexTests(baseURL, port string) {
Convey("Push test index", func() {
repo := "repo"
const repo = "repo"
multiarchImage, err := GetRandomMultiarchImage("tag1")
So(err, ShouldBeNil)
+192
View File
@@ -806,6 +806,198 @@ func TestGlobalSearchWithUserPrefFiltering(t *testing.T) {
})
}
func TestExpandedRepoInfoWithUserPrefs(t *testing.T) {
Convey("ExpandedRepoInfo with User Prefs", t, func() {
dir := t.TempDir()
port := GetFreePort()
baseURL := GetBaseURL(port)
conf := config.New()
conf.HTTP.Port = port
conf.Storage.RootDirectory = dir
simpleUser := "simpleUser"
simpleUserPassword := "simpleUserPass"
credTests := fmt.Sprintf("%s\n\n", getCredString(simpleUser, simpleUserPassword))
htpasswdPath := MakeHtpasswdFileFromString(credTests)
defer os.Remove(htpasswdPath)
conf.HTTP.Auth = &config.AuthConfig{
HTPasswd: config.AuthHTPasswd{
Path: htpasswdPath,
},
}
conf.HTTP.AccessControl = &config.AccessControlConfig{
Repositories: config.Repositories{
"**": config.PolicyGroup{
Policies: []config.Policy{
{
Users: []string{simpleUser},
Actions: []string{"read", "create"},
},
},
},
},
}
defaultVal := true
conf.Extensions = &extconf.ExtensionConfig{
Search: &extconf.SearchConfig{BaseConfig: extconf.BaseConfig{Enable: &defaultVal}},
}
ctlr := api.NewController(conf)
ctlrManager := NewControllerManager(ctlr)
ctlrManager.StartAndWait(port)
defer ctlrManager.StopServer()
preferencesBaseURL := baseURL + constants.FullUserPreferencesPrefix
simpleUserClient := resty.R().SetBasicAuth(simpleUser, simpleUserPassword)
// ------ Add sbrepo and star/bookmark it
sbrepo := "sbrepo"
img, err := GetRandomImage("tag")
So(err, ShouldBeNil)
err = UploadImageWithBasicAuth(img, baseURL, sbrepo, simpleUser, simpleUserPassword)
So(err, ShouldBeNil)
resp, err := simpleUserClient.Put(preferencesBaseURL + PutRepoStarURL(sbrepo))
So(resp.StatusCode(), ShouldEqual, http.StatusOK)
So(err, ShouldBeNil)
resp, err = simpleUserClient.Put(preferencesBaseURL + PutRepoBookmarkURL(sbrepo))
So(resp.StatusCode(), ShouldEqual, http.StatusOK)
So(err, ShouldBeNil)
// ExpandedRepoinfo
query := `
{
ExpandedRepoInfo(repo:"sbrepo"){
Summary {
Name IsStarred IsBookmarked
}
}
}`
resp, err = simpleUserClient.Get(baseURL + graphqlQueryPrefix + "?query=" + url.QueryEscape(query))
So(resp, ShouldNotBeNil)
So(err, ShouldBeNil)
So(resp.StatusCode(), ShouldEqual, 200)
responseStruct := ExpandedRepoInfoResp{}
err = json.Unmarshal(resp.Body(), &responseStruct)
So(err, ShouldBeNil)
repoInfo := responseStruct.ExpandedRepoInfo.RepoInfo
So(repoInfo.Summary.IsBookmarked, ShouldBeTrue)
So(repoInfo.Summary.IsStarred, ShouldBeTrue)
// ------ Add srepo and star it
srepo := "srepo"
img, err = GetRandomImage("tag")
So(err, ShouldBeNil)
err = UploadImageWithBasicAuth(img, baseURL, srepo, simpleUser, simpleUserPassword)
So(err, ShouldBeNil)
resp, err = simpleUserClient.Put(preferencesBaseURL + PutRepoStarURL(srepo))
So(resp.StatusCode(), ShouldEqual, http.StatusOK)
So(err, ShouldBeNil)
// ExpandedRepoinfo
query = `
{
ExpandedRepoInfo(repo:"srepo"){
Summary {
Name IsStarred IsBookmarked
}
}
}`
resp, err = simpleUserClient.Get(baseURL + graphqlQueryPrefix + "?query=" + url.QueryEscape(query))
So(resp, ShouldNotBeNil)
So(err, ShouldBeNil)
So(resp.StatusCode(), ShouldEqual, 200)
responseStruct = ExpandedRepoInfoResp{}
err = json.Unmarshal(resp.Body(), &responseStruct)
So(err, ShouldBeNil)
repoInfo = responseStruct.ExpandedRepoInfo.RepoInfo
So(repoInfo.Summary.IsBookmarked, ShouldBeFalse)
So(repoInfo.Summary.IsStarred, ShouldBeTrue)
// ------ Add brepo and bookmark it
brepo := "brepo"
img, err = GetRandomImage("tag")
So(err, ShouldBeNil)
err = UploadImageWithBasicAuth(img, baseURL, brepo, simpleUser, simpleUserPassword)
So(err, ShouldBeNil)
resp, err = simpleUserClient.Put(preferencesBaseURL + PutRepoBookmarkURL(brepo))
So(resp.StatusCode(), ShouldEqual, http.StatusOK)
So(err, ShouldBeNil)
// ExpandedRepoinfo
query = `
{
ExpandedRepoInfo(repo:"brepo"){
Summary {
Name IsStarred IsBookmarked
}
}
}`
resp, err = simpleUserClient.Get(baseURL + graphqlQueryPrefix + "?query=" + url.QueryEscape(query))
So(resp, ShouldNotBeNil)
So(err, ShouldBeNil)
So(resp.StatusCode(), ShouldEqual, 200)
responseStruct = ExpandedRepoInfoResp{}
err = json.Unmarshal(resp.Body(), &responseStruct)
So(err, ShouldBeNil)
repoInfo = responseStruct.ExpandedRepoInfo.RepoInfo
So(repoInfo.Summary.IsBookmarked, ShouldBeTrue)
So(repoInfo.Summary.IsStarred, ShouldBeFalse)
// ------ Add repo without star/bookmark
repo := "repo"
img, err = GetRandomImage("tag")
So(err, ShouldBeNil)
err = UploadImageWithBasicAuth(img, baseURL, repo, simpleUser, simpleUserPassword)
So(err, ShouldBeNil)
// ExpandedRepoinfo
query = `
{
ExpandedRepoInfo(repo:"repo"){
Summary {
Name IsStarred IsBookmarked
}
}
}`
resp, err = simpleUserClient.Get(baseURL + graphqlQueryPrefix + "?query=" + url.QueryEscape(query))
So(resp, ShouldNotBeNil)
So(err, ShouldBeNil)
So(resp.StatusCode(), ShouldEqual, 200)
responseStruct = ExpandedRepoInfoResp{}
err = json.Unmarshal(resp.Body(), &responseStruct)
So(err, ShouldBeNil)
repoInfo = responseStruct.ExpandedRepoInfo.RepoInfo
So(repoInfo.Summary.IsBookmarked, ShouldBeFalse)
So(repoInfo.Summary.IsStarred, ShouldBeFalse)
})
}
func PutRepoStarURL(repo string) string {
return fmt.Sprintf("?repo=%s&action=toggleStar", repo)
}