Example #1
0
        private async Task ProcessGithubConnectCommand(SlackCommandDto slackCommand)
        {
            string workspaceId       = slackCommand.team_id;
            string workspaceMemberId = slackCommand.user_id;

            ChatAppUserEntity workspaceUser = await _chatAppUserStorage.FindAsync(u => u.WorkspaceId == workspaceId && u.WorkspaceMemberId == workspaceMemberId);

            var githubService        = new GitHubService();
            var slackCommandResponse = new SlackCommandResponseDto();
            var user = workspaceUser.User;

            try
            {
                var organizationMembership = await githubService.InviteToGithubOrg(slackCommand.text);

                user.GitHubUsername = slackCommand.text;
                await _userStorage.UpdateAsync(user);
            }
            catch
            {
                slackCommandResponse.Text = "Sorry, something happened with our GitHub api call. :(\n Please try once more. If that doesn't work, reach out to <@UBW8QQG86> to be added manually.";
                await _slackService.RespondViaResponsUrl(slackCommand.response_url, slackCommandResponse);

                return;
            }

            slackCommandResponse.Text = $"Success! You should have gotten an email with an invite to the GitHub org. You can also visit https://github.com/{_githubOrganization} to accept the invite.";
            await _slackService.RespondViaResponsUrl(slackCommand.response_url, slackCommandResponse);

            return;
        }
Example #2
0
        private SlackCommandResponseDto BuildProjectsResponse(List <ProjectEntity> projects)
        {
            var slackCommandResponse = new SlackCommandResponseDto();

            if (projects.Count == 0)
            {
                slackCommandResponse.Text = $"It doesn't look like there are any projects looking for members right now. \n Start a new project on {_mainUrl}/projects.";
            }
            else
            {
                slackCommandResponse.Text = $"Here's a list of available projects you can join (visit the <{_mainUrl}/projects|project page> for more advanced filtering). \n";
            }

            foreach (var project in projects)
            {
                slackCommandResponse.Text += $"{project.Name}, <{_mainUrl}/projects/{project.Id}|project page>\n\n";
            }
            return(slackCommandResponse);
        }
Example #3
0
        private async Task GenerateMagicLoginLink(SlackCommandDto slackCommand)
        {
            var    linkExpirationInMinutes = 5;
            string token             = TokenHelper.GenerateToken().Replace("/", "");
            string workspaceId       = slackCommand.team_id;
            string workspaceMemberId = slackCommand.user_id;

            ChatAppUserEntity workspaceUser = await _chatAppUserStorage.FindAsync(u => u.WorkspaceId == workspaceId && u.WorkspaceMemberId == workspaceMemberId);

            var user = workspaceUser.User;

            user.MagicLoginToken          = token;
            user.MagicLoginTokenExpiresAt = DateTimeOffset.Now.AddMinutes(linkExpirationInMinutes);
            await _userStorage.UpdateAsync(user);

            var slackCommandResponse = new SlackCommandResponseDto();

            slackCommandResponse.Text = $"Your magic login link expires in {linkExpirationInMinutes} minutes.\n\n {_mainUrl}/magic-login?token={Uri.EscapeDataString(token)}";
            await _slackService.RespondViaResponsUrl(slackCommand.response_url, slackCommandResponse);

            return;
        }
Example #4
0
        public async Task ProcessCommand(SlackCommandDto slackCommandDto)
        {
            SlackCommandResponseDto slackCommandResponse = new SlackCommandResponseDto();

            switch (slackCommandDto.command)
            {
            case "/projects":
                await ProcessProjectsCommand(slackCommandDto);

                break;

            case "/github-connect":
                await ProcessGithubConnectCommand(slackCommandDto);

                break;

            case "/magic-login-link":
                await GenerateMagicLoginLink(slackCommandDto);

                break;
            }

            return;
        }
Example #5
0
        public async Task RespondViaResponsUrl(string responseUrl, SlackCommandResponseDto slackResponse)
        {
            await _http.Post($"{responseUrl}", headers, slackResponse);

            return;
        }