in src/main/kotlin/jetbrains/buildServer/notification/slackNotifier/UserSlackNotifierSettingsController.kt [86:151]
override fun doHandle(request: HttpServletRequest, response: HttpServletResponse): ModelAndView? {
val mv = ModelAndView(pluginDescriptor.getPluginResourcesPath("editUserSlackNotifierSettings.jsp"))
val user = getUser(request, response) ?: return null
val currentUser = SessionUser.getUser(request)
if (currentUser == null) {
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Unauthenticated")
return null
}
val slackUserId = user.getPropertyValue(SlackProperties.channelProperty)
val selectedConnectionId = user.getPropertyValue(SlackProperties.connectionProperty) ?: ""
val availableConnections = projectManager.projects.filter {
user.isPermissionGrantedForProject(it.projectId, Permission.VIEW_PROJECT)
}.flatMap { project ->
oAuthConnectionsManager.getAvailableConnectionsOfType(project, SlackConnection.type)
}.distinctBy { it.id }
val selectedConnection = availableConnections.find { it.id == selectedConnectionId }
val slackUsername = selectedConnection?.let { connection ->
connection.parameters["secure:token"]?.let { token ->
val users = try {
aggregatedSlackApi.getUsersList(token)
} catch (e: TimeoutException) {
emptyList<User>()
} catch (e: ExecutionException) {
emptyList<User>()
} catch (e: SlackResponseError) {
emptyList<User>()
}
val slackUser = users.find {
it.id == slackUserId
}
if (slackUser == null && !slackUserId.isNullOrEmpty()) {
user.getPropertyValue(SlackProperties.displayNameProperty)
} else {
slackUser?.displayName
}
}
}
val defaultProperties = mapOf(
SlackProperties.maximumNumberOfChangesProperty.key to VerboseMessageBuilderFactory.defaultMaximumNumberOfChanges.toString()
)
mv.model["connectionsBean"] = SlackConnectionsBean(availableConnections, aggregatedSlackApi)
mv.model["propertiesBean"] = BasePropertiesBean(user.properties.filter {
it.key != SlackProperties.channelProperty
}.map {
it.key.key to it.value
}.toMap(), defaultProperties)
mv.model["properties"] = SlackProperties()
mv.model["user"] = user
mv.model["slackUsername"] = slackUsername ?: ""
mv.model["selectedConnection"] = selectedConnectionId
mv.model["displaySettings"] = currentUser.id == user.id
mv.model["rootUrl"] = WebUtil.getRootUrl(request)
mv.model["editConnectionUrl"] = webLinks.getEditProjectPageUrl("_Root") + "&tab=oauthConnections"
mv.model["editNotificationSettingsUrl"] = userNotificationSettingsURL
mv.model["rootProject"] = projectManager.rootProject
return mv
}