in backend/plugins/gitlab/api/remote.go [45:129]
func RemoteScopes(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
return remoteHelper.GetScopesFromRemote(input,
func(basicRes context2.BasicRes, gid string, queryData *api.RemoteQueryData, connection models.GitlabConnection) ([]models.GroupResponse, errors.Error) {
apiClient, err := api.NewApiClientFromConnection(context.TODO(), basicRes, &connection)
if err != nil {
return nil, errors.BadInput.Wrap(err, "failed to get create apiClient")
}
query := initialQuery(queryData)
var res *http.Response
if gid == "" {
query.Set("top_level_only", "true")
res, err = apiClient.Get("groups", query, nil)
if err != nil {
return nil, err
}
} else {
if gid[:6] == "group:" {
gid = gid[6:]
}
res, err = apiClient.Get(fmt.Sprintf("groups/%s/subgroups", gid), query, nil)
if err != nil {
return nil, err
}
}
var resBody []models.GroupResponse
err = api.UnmarshalResponse(res, &resBody)
if err != nil {
return nil, err
}
return resBody, err
},
func(basicRes context2.BasicRes, gid string, queryData *api.RemoteQueryData, connection models.GitlabConnection) ([]models.GitlabApiProject, errors.Error) {
apiClient, err := api.NewApiClientFromConnection(context.TODO(), basicRes, &connection)
if err != nil {
return nil, errors.BadInput.Wrap(err, "failed to get create apiClient")
}
query := initialQuery(queryData)
var res *http.Response
var resBody []models.GitlabApiProject
if gid == "" {
res, err = apiClient.Get(fmt.Sprintf("users/%d/projects", apiClient.GetData("UserId")), query, nil)
if err != nil {
return nil, err
}
err = api.UnmarshalResponse(res, &resBody)
if err != nil {
return nil, err
}
} else {
query.Set("with_shared", "false")
if gid[:6] == "group:" {
gid = gid[6:]
}
res, err = apiClient.Get(fmt.Sprintf("/groups/%s/projects", gid), query, nil)
if err != nil {
return nil, err
}
err = api.UnmarshalResponse(res, &resBody)
if err != nil {
return nil, err
}
filteredProjects := make([]models.GitlabApiProject, 0)
for _, project := range resBody {
membersURL := fmt.Sprintf("/projects/%d/members/%d", project.GitlabId, apiClient.GetData("UserId"))
membersRes, err := apiClient.Get(membersURL, nil, nil)
if err != nil {
return nil, err
}
var member models.GitlabMember
err = api.UnmarshalResponse(membersRes, &member)
if err != nil {
return nil, err
}
// Filter out projects where the user only has Guest permission and archived projects
if member.AccessLevel != 10 && !project.Archived {
filteredProjects = append(filteredProjects, project)
}
}
resBody = filteredProjects
}
return resBody, err
})
}