// newSlackServer returns an http handler for handling Slack slash commands at <url>/slack. func newSlackServer(q conveyor.BuildQueue, c *cli.Context) http.Handler { ts := oauth2.StaticTokenSource( &oauth2.Token{AccessToken: c.String("github.token")}, ) tc := oauth2.NewClient(oauth2.NoContext, ts) cy := github.NewClient(tc) r := slash.NewMux() r.Match(slash.MatchSubcommand(`help`), slack.Help) r.MatchText( regexp.MustCompile(`enable (?P<owner>\S+?)/(?P<repo>\S+)`), slack.NewEnable( cy, slack.NewHook(c.String("url"), c.String("github.secret")), ), ) r.MatchText( regexp.MustCompile(`build (?P<owner>\S+?)/(?P<repo>\S+)@(?P<branch>\S+)`), slack.NewBuild( cy, q, fmt.Sprintf(logsURLTemplate, c.String("url")), ), ) return slash.NewServer(slash.ValidateToken(r, c.String("slack.token"))) }
func newSlack(c client) *Slack { r := slash.NewMux() s := &Slack{client: c, mux: r} r.Match(slash.MatchSubcommand(`help`), Help) r.MatchText( regexp.MustCompile(`enable (?P<owner>\S+?)/(?P<repo>\S+)`), slash.HandlerFunc(s.Enable), ) r.MatchText( regexp.MustCompile(`build (?P<owner>\S+?)/(?P<repo>\S+)@(?P<branch>\S+)`), slash.HandlerFunc(s.Build), ) return s }