Merge branch 'hotfix/21.56.9' into master
[gitter.git] / server / services / repo-service.js
blobfa4345148c868b425387bb1d79076c2e69be625c
1 'use strict';
3 var GithubRepo = require('gitter-web-github').GitHubRepoService;
4 const { GitLabProjectService } = require('gitter-web-gitlab');
5 var isGitHubUser = require('gitter-web-identity/lib/is-github-user');
6 const identityService = require('gitter-web-identity');
7 const {
8   getAdminProjectsForUser
9 } = require('gitter-web-permissions/lib/admin-discovery/gitlab-project');
11 // https://docs.gitlab.com/ee/api/access_requests.html
12 const GUEST_ACCESS_LEVEL = 10;
14 /**
15  * Gets a list of GitHub repos for a user
16  * @returns The promise of a list of repos for the user
17  */
18 async function _getGitHubReposForUser(user) {
19   const ghRepo = new GithubRepo(user);
20   return ghRepo.getAllReposForAuthUser().map(repo => {
21     repo.backend = 'github';
22     return repo;
23   });
26 /**
27  * Gets a list of repos for a user
28  * @returns The promise of a list of repos for the user
29  */
30 async function getReposForUser(user) {
31   if (isGitHubUser(user)) {
32     return _getGitHubReposForUser(user);
33   }
35   const gitLabIdentity = await identityService.getIdentityForUser(
36     user,
37     identityService.GITLAB_IDENTITY_PROVIDER
38   );
39   if (gitLabIdentity) {
40     const gitlabProjectService = new GitLabProjectService(user);
41     return gitlabProjectService.getProjects({
42       perPage: 100,
43       min_access_level: GUEST_ACCESS_LEVEL
44     });
45   }
47   return [];
50 /**
51  *
52  * @returns The promise of a list of repos for the user
53  */
54 async function getAdminReposForUser(user) {
55   if (isGitHubUser(user)) {
56     const repos = await _getGitHubReposForUser(user);
58     return repos.filter(function(repo) {
59       if (repo) return repo.permissions && (repo.permissions.push || repo.permissions.admin);
60     });
61   }
63   const gitLabIdentity = await identityService.getIdentityForUser(
64     user,
65     identityService.GITLAB_IDENTITY_PROVIDER
66   );
67   if (gitLabIdentity) {
68     return getAdminProjectsForUser(user);
69   }
71   return [];
74 module.exports = {
75   getReposForUser: getReposForUser,
76   getAdminReposForUser: getAdminReposForUser