package slacknotifications.teamcity.extension; import jetbrains.buildServer.controllers.admin.AdminPage; import jetbrains.buildServer.serverSide.SBuildServer; import jetbrains.buildServer.serverSide.auth.Permission; import jetbrains.buildServer.serverSide.crypt.RSACipher; import jetbrains.buildServer.web.openapi.PagePlaces; import jetbrains.buildServer.web.openapi.PluginDescriptor; import jetbrains.buildServer.web.openapi.PositionConstraint; import org.jetbrains.annotations.NotNull; import slacknotifications.SlackNotificationProxyConfig; import slacknotifications.teamcity.Loggers; import slacknotifications.teamcity.settings.SlackNotificationMainSettings; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.ArrayList; import java.util.Map; import java.util.Properties; /** * Created by Peter on 24/01/2015. */ public class SlackNotifierAdminPage extends AdminPage { private static final String AFTER_PAGE_ID = "jabber"; private static final String BEFORE_PAGE_ID = "clouds"; private static final String PAGE = "SlackNotification/slackAdminSettings.jsp"; private static final String PLUGIN_NAME = "slackNotifications"; private static final String TAB_TITLE = "Slack Notifications"; private final String jspHome; private SBuildServer sBuildServer; private SlackNotificationMainSettings slackMainSettings; protected SlackNotifierAdminPage(@NotNull PagePlaces pagePlaces, @NotNull PluginDescriptor descriptor, @NotNull SBuildServer sBuildServer, @NotNull SlackNotificationMainSettings slackMainSettings ) { super(pagePlaces); this.sBuildServer = sBuildServer; this.slackMainSettings = slackMainSettings; setPluginName(PLUGIN_NAME); setIncludeUrl(descriptor.getPluginResourcesPath(PAGE)); jspHome = descriptor.getPluginResourcesPath(); setTabTitle(TAB_TITLE); ArrayList<String> after = new ArrayList<String>(); after.add(AFTER_PAGE_ID); ArrayList<String> before = new ArrayList<String>(); before.add(BEFORE_PAGE_ID); setPosition(PositionConstraint.between(after, before)); register(); Loggers.SERVER.info("Slack global configuration page registered"); } @Override public void fillModel(@NotNull Map<String, Object> model, @NotNull HttpServletRequest request){ super.fillModel(model, request); slackMainSettings.refresh(); model.put("teamName", this.slackMainSettings.getTeamName()); model.put("token", this.slackMainSettings.getToken()); model.put("botName", this.slackMainSettings.getBotName()); model.put("iconUrl", this.slackMainSettings.getIconUrl()); model.put("defaultChannel", this.slackMainSettings.getDefaultChannel()); model.put("maxCommitsToDisplay", this.slackMainSettings.getMaxCommitsToDisplay()); model.put("showBuildAgent", this.slackMainSettings.getShowBuildAgent()); model.put("showCommits", this.slackMainSettings.getShowCommits()); model.put("showCommitters", this.slackMainSettings.getShowCommitters()); model.put("showElapsedBuildTime", this.slackMainSettings.getShowElapsedBuildTime()); model.put("showFailureReason", this.slackMainSettings.getShowFailureReason()); SlackNotificationProxyConfig proxyConfig = this.slackMainSettings.getProxyConfig(); model.put("proxyHost", proxyConfig.getProxyHost()); model.put("proxyPort", proxyConfig.getProxyPort()); model.put("proxyUser", proxyConfig.getCreds() == null ? null : proxyConfig.getCreds().getUserPrincipal().getName()); model.put("proxyPassword", proxyConfig.getCreds() == null ? null : proxyConfig.getCreds().getPassword()); model.put("encryptedProxyPassword", proxyConfig.getCreds() == null || proxyConfig.getCreds().getPassword() == null ? null : RSACipher.encryptDataForWeb(proxyConfig.getCreds().getPassword())); model.put("hexEncodedPublicKey", RSACipher.getHexEncodedPublicKey()); try { model.put("pluginVersion", this.slackMainSettings.getPluginVersion()); } catch (IOException e) { Loggers.ACTIVITIES.error("Could not retrieve slack plugin version", e); } model.put("disabled", !this.slackMainSettings.getEnabled()); model.put("jspHome", this.jspHome); } @NotNull @Override public String getGroup() { return SERVER_RELATED_GROUP; } @Override public boolean isAvailable(@NotNull HttpServletRequest request) { return super.isAvailable(request) && checkHasGlobalPermission(request, Permission.CHANGE_SERVER_SETTINGS); } }