/** * Returns true if the repository can be posted to Slack. * * @param repository * @return true if the repository can be posted to Slack */ public boolean shallPost(RepositoryModel repository) { boolean postPersonalRepos = runtimeManager.getSettings().getBoolean(Plugin.SETTING_POST_PERSONAL_REPOS, false); if (repository.isPersonalRepository() && !postPersonalRepos) { return false; } return true; }
public String getURL() throws IOException { String url = runtimeManager.getSettings().getString(Plugin.SETTING_URL, null); if (StringUtils.isEmpty(url)) { throw new IOException( String.format( "Could not send message to Slack because '%s' is not defined!", Plugin.SETTING_URL)); } return url; }
/** * Optionally sets the channel of the payload based on the repository. * * @param repository * @param payload */ public void setChannel(RepositoryModel repository, Payload payload) { boolean useProjectChannels = runtimeManager.getSettings().getBoolean(Plugin.SETTING_USE_PROJECT_CHANNELS, false); if (!useProjectChannels) { return; } if (StringUtils.isEmpty(repository.projectPath)) { return; } String defaultChannel = runtimeManager.getSettings().getString(Plugin.SETTING_DEFAULT_CHANNEL, null); if (!StringUtils.isEmpty(defaultChannel)) { payload.setChannel(defaultChannel + "-" + repository.projectPath); } else { payload.setChannel(repository.projectPath); } }
/** * Send a payload message. * * @param payload * @throws IOException */ public void send(Payload payload) throws IOException { String slackUrl = getURL(); payload.setUnfurlLinks(true); if (StringUtils.isEmpty(payload.getUsername())) { payload.setUsername(Constants.NAME); } String defaultChannel = runtimeManager.getSettings().getString(Plugin.SETTING_DEFAULT_CHANNEL, null); if (!StringUtils.isEmpty(defaultChannel) && StringUtils.isEmpty(payload.getChannel())) { // specify the default channel if (defaultChannel.charAt(0) != '#' && defaultChannel.charAt(0) != '@') { defaultChannel = "#" + defaultChannel; } // channels must be lowercase payload.setChannel(defaultChannel.toLowerCase()); } String defaultEmoji = runtimeManager.getSettings().getString(Plugin.SETTING_DEFAULT_EMOJI, null); if (!StringUtils.isEmpty(defaultEmoji)) { if (StringUtils.isEmpty(payload.getIconEmoji()) && StringUtils.isEmpty(payload.getIconUrl())) { // specify the default emoji payload.setIconEmoji(defaultEmoji); } } Gson gson = new GsonBuilder().create(); String json = gson.toJson(payload); log.debug(json); HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(slackUrl); post.getParams() .setParameter(CoreProtocolPNames.USER_AGENT, Constants.NAME + "/" + Constants.getVersion()); post.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8"); client.getParams().setParameter(AllClientPNames.CONNECTION_TIMEOUT, 5000); client.getParams().setParameter(AllClientPNames.SO_TIMEOUT, 5000); List<NameValuePair> nvps = new ArrayList<NameValuePair>(1); nvps.add(new BasicNameValuePair("payload", json)); post.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); HttpResponse response = client.execute(post); int rc = response.getStatusLine().getStatusCode(); if (HttpStatus.SC_OK == rc) { // replace this with post.closeConnection() after JGit updates to HttpClient 4.2 post.abort(); } else { String result = null; InputStream is = response.getEntity().getContent(); try { byte[] buffer = new byte[8192]; ByteArrayOutputStream os = new ByteArrayOutputStream(); int len = 0; while ((len = is.read(buffer)) > -1) { os.write(buffer, 0, len); } result = os.toString("UTF-8"); } finally { if (is != null) { is.close(); } } log.error("Slack plugin sent:"); log.error(json); log.error("Slack returned:"); log.error(result); throw new IOException(String.format("Slack Error (%s): %s", rc, result)); } }