Beispiel #1
0
        public void Gollum_Event()
        {
            var hook = new GhWebhook(CreateDummyRequestForPayload(GollumEvent.EventString));

            Assert.IsType <GollumEvent>(hook.PayloadObject);
            var gollumEvent = (GollumEvent)hook.PayloadObject;

            Assert.NotNull(gollumEvent.Pages);
            Assert.NotNull(gollumEvent.Repository);
            Assert.NotNull(gollumEvent.Sender);
        }
Beispiel #2
0
        public async Task <IActionResult> Receive()
        {
            _matterhook = new MatterhookClient(_config.MmConfig.WebhookUrl);
            try
            {
                GhWebhook hook;
                try
                {
                    hook = new GhWebhook(Request, _config.Secret); //Signature validation has been moved to GithubWebhookLibrary
                }
                catch (Exception e)
                {
                    return(StatusCode(400, e.Message));
                }

                var message = new MattermostMessage
                {
                    Channel  = _config.MmConfig.Channel,
                    Username = _config.MmConfig.Username,
                    IconUrl  = _config.MmConfig.IconUrl != null ? _config.MmConfig.IconUrl : null
                };

                switch (hook.Event)
                {
                case PullRequestEvent.EventString:
                {
                    var pr = (PullRequestEvent)hook.PayloadObject;

                    if (pr.Action == "closed")
                    {
                        if (pr.PullRequest.Merged != null && (bool)pr.PullRequest.Merged)
                        {
                            var user = pr.PullRequest.User.Login;

                            if (_config.IgnoredUsers_Detailed == null)
                            {
                                _config.IgnoredUsers_Detailed = new List <Code.IgnoredUser>();
                            }

                            if (_config.IgnoredUsers_Detailed.Exists(x => x.UserName == user))
                            {
                                return(StatusCode(200, $"{user} is already in my list!"));
                            }

                            message.Text += "#users-first-contribution\n";

                            var usrMd = $"[{user}]({pr.PullRequest.User.HtmlUrl})";

                            if (_config.CelebrationEmoji != null)
                            {
                                message.Text += $"{_config.CelebrationEmoji} ";
                            }

                            message.Text += $"A User has had a pull request merged for the first time!";

                            if (_config.CelebrationEmoji != null)
                            {
                                message.Text += $" {_config.CelebrationEmoji}";
                            }

                            message.Text += $"\n\nUser: {usrMd}\nPull: {pr.PullRequest.HtmlUrl}";

                            if (_config.CustomString != null)
                            {
                                message.Text += $"\n\n {_config.CustomString}";
                            }

                            var response = await _matterhook.PostAsync(message);

                            if (response == null || response.StatusCode != HttpStatusCode.OK)
                            {
                                return(StatusCode(500, response != null
                                            ? $"Unable to post to Mattermost: {response.StatusCode}"
                                            : "Unable to post to Mattermost"));
                            }

                            _config.IgnoredUsers_Detailed.Add(new Code.IgnoredUser {
                                    UserName         = user,
                                    PullRequestUrl   = pr.PullRequest.HtmlUrl,
                                    ContributionDate = $"{pr.PullRequest.ClosedAt:dd MMMM yyyy HH:mm:ss}"
                                });
                            _config.Save("/config/config.json");

                            return(StatusCode(200, "Succesfully posted to Mattermost"));
                        }
                    }
Beispiel #3
0
        public void Deployment_Event()
        {
            var hook = new GhWebhook(CreateDummyRequestForPayload(DeploymentEvent.EventString));

            Assert.IsType <DeploymentEvent>(hook.PayloadObject);
        }
Beispiel #4
0
        public void PullRequest_Event()
        {
            var hook = new GhWebhook(CreateDummyRequestForPayload(PullRequestEvent.EventString));

            Assert.IsType <PullRequestEvent>(hook.PayloadObject);
        }
Beispiel #5
0
        public void Event_With_Signature()
        {
            var hook = new GhWebhook(CreateDummyRequestForPayloadWithSignature(PushEvent.EventString), "clientSecret");

            Assert.IsType <PushEvent>(hook.PayloadObject);
        }