// GetRepos fetches all repositories that the specified // user has access to in the remote system. func (r *Gitlab) GetRepos(user *model.User) ([]*model.Repo, error) { var repos []*model.Repo var client = NewClient(r.url, user.Access, r.SkipVerify) var list, err = client.AllProjects() if err != nil { return nil, err } var remote = r.GetKind() var hostname = r.GetHost() for _, item := range list { var repo = model.Repo{ UserID: user.ID, Remote: remote, Host: hostname, Owner: item.Namespace.Path, Name: item.Path, Private: !item.Public, CloneURL: item.HttpRepoUrl, GitURL: item.HttpRepoUrl, SSHURL: item.SshRepoUrl, URL: item.Url, Role: &model.Perm{}, } if repo.Private { repo.CloneURL = repo.SSHURL } // if the user is the owner we can assume full access, // otherwise check for the permission items. if repo.Owner == user.Login { repo.Role = new(model.Perm) repo.Role.Admin = true repo.Role.Write = true repo.Role.Read = true } else { // Fetch current project project, err := client.Project(strconv.Itoa(item.Id)) if err != nil || project.Permissions == nil { continue } repo.Role.Admin = IsAdmin(project) repo.Role.Write = IsWrite(project) repo.Role.Read = IsRead(project) } repos = append(repos, &repo) } return repos, err }