public MyIntegrationsController()
        {
            Get("/api/v1/me/integrations/status/get", _ => {
                var me = UserRepository.Find(CurrentRequest.UserId);

                var githubToken = me.ServiceAccessToken(ServiceType.GitHub);

                JObject githubUser = null;

                if (githubToken != null)
                {
                    var githubClient = new GitHubClient(new ProductHeaderValue("GitCom"));

                    githubClient.Credentials = new Credentials(githubToken.access_token);

                    var rawGitHubUser = githubClient.User.Current().Result;

                    githubUser          = new JObject();
                    githubUser["login"] = rawGitHubUser.Login;
                    githubUser["email"] = rawGitHubUser.Email;
                }

                var gitlabToken    = me.ServiceAccessToken(ServiceType.GitLab);
                JObject gitlabUser = null;

                if (gitlabToken != null)
                {
                    var client = new GitLabClient(gitlabToken.access_token);
                    client.SetAuthorizedUser();

                    if (client.User != null)
                    {
                        gitlabUser          = new JObject();
                        gitlabUser["login"] = client.User.Login;
                        gitlabUser["email"] = client.User.Email;
                    }
                }

                return(HttpResponse.Item("integrations", new JObject()
                {
                    ["github"] = new JObject()
                    {
                        ["connected"] = githubUser != null,
                        ["user"] = githubUser
                    },
                    ["gitlab"] = new JObject()
                    {
                        ["connected"] = gitlabUser != null,
                        ["user"] = gitlabUser
                    }
                }));
            });
        }
        public GitlabAuthController()
        {
            var clientId = AppConfig.GetConfiguration("auth:external:gitlab:client_id");

            var redirectUri = AppConfig.GetConfiguration("auth:external:gitlab:redirect_url");

            Get("/api/v1/auth/gitlab/login_link/get", _ => {
                var loginLink =
                    $"https://gitlab.com/oauth/authorize?client_id={clientId}&redirect_uri={redirectUri}" +
                    $"&response_type=token&scope={Scopes}";
                return(HttpResponse.Data(new JObject()
                {
                    ["login_link"] = loginLink
                }));
            });

            Get("/api/v1/auth/gitlab/get_auth_token", av => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "access_token" }),
                });
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var accessToken = GetRequestStr("access_token");

                var client = new GitLabClient(accessToken);
                client.SetAuthorizedUser();

                if (client.User == null)
                {
                    return(HttpResponse.Error(HttpStatusCode.Unauthorized,
                                              "We're unable to get your access token, please try again"));
                }

                var user = UserRepository.FindByEmail(client.User.Email) ??
                           UserRepository.FindOrCreateByEmailAndLogin(
                    client.User.Email,
                    client.User.Login,
                    null,
                    UserRepository.FindByGuid(GetRequestStr("referral_key"))
                    );

                ServiceAccessTokenRepository.FindOrUpdateAccessToken(user, accessToken, ServiceType.GitLab);

                return(HttpResponse.Data(new JObject()
                {
                    ["token"] = Jwt.FromUserId(user.id)
                }));
            });
        }
Beispiel #3
0
        public static (Project project, Repo repo) ImportProject(User me, string originId)
        {
            var tokenModel = me.ServiceAccessToken(ServiceType.GitLab);
            var client     = new GitLabClient(tokenModel.access_token);

            client.SetAuthorizedUser();

            if (tokenModel.origin_user_id == "")
            {
                GitLabUserUtils.UpdateOriginUserId(me);
            }

            var gitLabProject = GitlabApi.GetPublicProject(originId);

            if (gitLabProject == null)
            {
                return(null, null);
            }

            Repo repository = RepoRepository.CreateAndGet(
                me,
                gitLabProject.Value <string>("name"),
                gitLabProject.Value <string>("web_url"),
                RepoServiceType.GitLab,
                gitLabProject.Value <string>("id")
                );

            var originUserId = tokenModel.origin_user_id;

            User creator = null;

            var projectUsers = GitlabApi.GetProjectUsers(originId);

            foreach (var projectUser in projectUsers.Children())
            {
                if (originUserId == projectUser.Value <string>("id"))
                {
                    creator = me;
                    break;
                }
            }

            var project = ProjectRepository.FindOrCreate(repository.title, creator, repository);

            project.UpdateCol("description", gitLabProject.Value <string>("description"));

            return(project, repository);
        }
Beispiel #4
0
        public static ExternalRepo[] GetUserRepositories(User user)
        {
            var result = new ExternalRepo[] { };

            var token = user.ServiceAccessToken(ServiceType.GitLab);

            if (token == null)
            {
                return(result);
            }

            var client = new GitLabClient(token.access_token);

            client.SetAuthorizedUser();

            return(client.GetMyPublicRepositories(user));
        }
Beispiel #5
0
        public static (bool finished, string originUserId) UpdateOriginUserId(User me)
        {
            var serviceAccessToken = me.ServiceAccessToken(ServiceType.GitLab);

            if (serviceAccessToken == null)
            {
                return(false, "");
            }

            var client = new GitLabClient(serviceAccessToken.access_token);

            client.SetAuthorizedUser();

            var originUserId = client.User.Id.ToString();

            serviceAccessToken.UpdateCol("origin_user_id", originUserId);

            return(true, originUserId);
        }