diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/CogboardConstants.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/CogboardConstants.kt index 9e4a45c2d..b52bd69cb 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/CogboardConstants.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/CogboardConstants.kt @@ -4,92 +4,115 @@ import io.vertx.core.json.JsonObject class CogboardConstants { companion object { - const val DEFAULT_WEB_SOCKET_PORT = 9001 - const val STATUS_CODE_401 = 401 - const val STATUS_CODE_200 = 200 - const val PROP_ID = "id" - const val PROP_EVENT_TYPE = "eventType" - const val PROP_BOARDS = "boards" - const val PROP_BOARDS_BY_ID = "boardsById" - const val PROP_BOARDS_ALL = "allBoards" - const val PROP_WIDGETS = "widgets" - const val PROP_WIDGETS_BY_ID = "widgetsById" - const val PROP_AVAILABLE_WIDGETS = "widgetTypes" - const val PROP_STATUS = "status" - const val PROP_WIDGET_STATUS = "widgetStatus" - const val PROP_ERROR_MESSAGE = "errorMessage" - const val PROP_ERROR_CAUSE = "errorCause" - const val PROP_DISABLED = "disabled" - const val PROP_HEADERS = "headers" - const val PROP_CONTENT = "content" - const val PROP_WIDGET_TYPE = "type" - const val PROP_AUTHENTICATION_TYPES = "authenticationTypes" - const val PROP_SCHEDULE_PERIOD = "schedulePeriod" - const val PROP_SCHEDULE_PERIOD_DEFAULT = 120L // 120 seconds - const val PROP_SCHEDULE_DELAY_DEFAULT = 10L // 10 seconds - const val PROP_URL = "url" - const val PROP_REQUEST_ID = "requestId" - const val PROP_PUBLIC_URL = "publicUrl" - const val PROP_USER = "user" - const val PROP_USERNAME = "username" - const val PROP_PASSWORD = "password" - const val PROP_CURRENT_PASSWORD = "currentPassword" - const val PROP_NEW_PASSWORD = "newPassword" - const val PROP_TOKEN = "token" - const val PROP_BODY = "body" - const val PROP_EVENT_ADDRESS = "event.address" - const val PROP_ENDPOINT = "endpoint" - const val PROP_ENDPOINTS = "endpoints" - const val PROP_ENDPOINT_LOADED = "endpoint.loaded" - const val PROP_CREDENTIAL = "credential" - const val PROP_CREDENTIALS = "credentials" - const val PROP_LAST_UPDATED = "lastUpdated" - const val PROP_ARRAY = "array" - const val PROP_STATUS_CODE = "statusCode" - const val PROP_STATUS_MESSAGE = "statusMessage" - const val PROP_EXPECTED_STATUS_CODE = "expectedStatusCode" - const val PROP_REQUEST_METHOD = "requestMethod" - const val PROP_EXPECTED_RESPONSE_BODY = "expectedResponseBody" - const val PROP_CONTENT_TYPE = "contentType" - const val PROP_PATH = "path" - const val PROP_LABEL = "label" - const val PROP_BOARD_COLUMN_MAX = 20 - const val PROP_BOARD_COLUMN_MIN = 4 - const val PROP_NAME = "name" - const val PROP_DISPLAY = "display" - const val PROP_VALUE = "value" - const val PROP_RELEASE_NAME = "releaseName" - const val PROP_JQL_QUERY = "jqlQuery" - const val PROP_BUCKET_QUERIES = "bucketQueries" - const val PROP_BUCKET_NAME = "bucketName" + val DEFAULT_VALUES: JsonObject = JsonObject().put(Props.SCHEDULE_PERIOD, Props.SCHEDULE_PERIOD_DEFAULT) + fun errorResponse(message: String = ""): JsonObject = JsonObject().put("status", "failed $message") + } + + class StatusCode { + companion object { + const val a401 = 401 + const val a200 = 200 + } + } - const val EVENT_SEND_MESSAGE_TO_WEBSOCKET = "cogboard.websocket.message" - const val EVENT_VERSION_CONFIG = "cogboard.config.handler.version" - const val EVENT_BOARDS_CONFIG = "cogboard.config.boards" - const val EVENT_UPDATE_WIDGET_CONTENT_CONFIG = "cogboard.config.widget.contentUpdate" - const val EVENT_UPDATE_WIDGET_CONFIG = "cogboard.config.widget.update" - const val EVENT_REFRESH_WIDGET_CONFIG = "cogboard.config.widget.refresh" - const val EVENT_DELETE_WIDGET_CONFIG = "cogboard.config.widget.delete" - const val EVENT_PURGE_WIDGET_CONFIG = "cogboard.config.widget.purge" - const val EVENT_ENDPOINTS = "cogboard.config.endpoints" - const val EVENT_UPDATE_ENDPOINTS = "cogboard.config.endpoints.update" - const val EVENT_CREDENTIALS = "cogboard.config.credentials" - const val EVENT_UPDATE_CREDENTIALS = "cogboard.config.credentials.update" - const val EVENT_USER_CONTROL = "cogboard.config.user.control" - const val EVENT_HTTP_GET = "cogboard.httpclient.get" - const val EVENT_HTTP_CHECK = "cogboard.httpclient.check" - const val EVENT_HTTP_POST = "cogboard.httpclient.post" - const val EVENT_HTTP_PUT = "cogboard.httpclient.put" - const val EVENT_HTTP_DELETE = "cogboard.httpclient.delete" - const val REQUEST_METHOD_GET = "get" - const val REQUEST_METHOD_POST = "post" - const val REQUEST_METHOD_PUT = "put" - const val REQUEST_METHOD_DELETE = "delete" + class Props { + companion object { + const val ID = "id" + const val EVENT_TYPE = "eventType" + const val BOARDS = "boards" + const val BOARDS_BY_ID = "boardsById" + const val BOARDS_ALL = "allBoards" + const val WIDGETS = "widgets" + const val WIDGETS_BY_ID = "widgetsById" + const val AVAILABLE_WIDGETS = "widgetTypes" + const val STATUS = "status" + const val WIDGET_STATUS = "widgetStatus" + const val ERROR_MESSAGE = "errorMessage" + const val ERROR_CAUSE = "errorCause" + const val DISABLED = "disabled" + const val HEADERS = "headers" + const val CONTENT = "content" + const val WIDGET_TYPE = "type" + const val AUTHENTICATION_TYPES = "authenticationTypes" + const val SCHEDULE_PERIOD = "schedulePeriod" + const val SCHEDULE_PERIOD_DEFAULT = 120L // 120 seconds + const val SCHEDULE_DELAY_DEFAULT = 10L // 10 seconds + const val URL = "url" + const val REQUEST_ID = "requestId" + const val PUBLIC_URL = "publicUrl" + const val USER = "user" + const val USERNAME = "username" + const val PASSWORD = "password" + const val CURRENT_PASSWORD = "currentPassword" + const val NEW_PASSWORD = "newPassword" + const val TOKEN = "token" + const val BODY = "body" + const val EVENT_ADDRESS = "event.address" + const val ENDPOINT = "endpoint" + const val ENDPOINTS = "endpoints" + const val ENDPOINT_LOADED = "endpoint.loaded" + const val CREDENTIAL = "credential" + const val CREDENTIALS = "credentials" + const val LAST_UPDATED = "lastUpdated" + const val ARRAY = "array" + const val STATUS_CODE = "statusCode" + const val STATUS_MESSAGE = "statusMessage" + const val EXPECTED_STATUS_CODE = "expectedStatusCode" + const val REQUEST_METHOD = "requestMethod" + const val EXPECTED_RESPONSE_BODY = "expectedResponseBody" + const val CONTENT_TYPE = "contentType" + const val PATH = "path" + const val LABEL = "label" + const val BOARD_COLUMN_MAX = 20 + const val BOARD_COLUMN_MIN = 4 + const val NAME = "name" + const val DISPLAY = "display" + const val VALUE = "value" + const val RELEASE_NAME = "releaseName" + const val JQL_QUERY = "jqlQuery" + const val BUCKET_QUERIES = "bucketQueries" + const val BUCKET_NAME = "bucketName" + } + } - val DEFAULT_VALUES: JsonObject = JsonObject() - .put(PROP_SCHEDULE_PERIOD, PROP_SCHEDULE_PERIOD_DEFAULT) + class RequestMethod { + companion object { + const val GET = "get" + const val POST = "post" + const val PUT = "put" + const val DELETE = "delete" + } + } - fun errorResponse(message: String = ""): JsonObject = JsonObject().put("status", "failed $message") + class Event { + companion object { + const val SEND_MESSAGE_TO_WEBSOCKET = "cogboard.websocket.message" + const val VERSION_CONFIG = "cogboard.config.handler.version" + const val BOARDS_CONFIG = "cogboard.config.boards" + const val UPDATE_WIDGET_CONTENT_CONFIG = "cogboard.config.widget.contentUpdate" + const val UPDATE_WIDGET_CONFIG = "cogboard.config.widget.update" + const val REFRESH_WIDGET_CONFIG = "cogboard.config.widget.refresh" + const val DELETE_WIDGET_CONFIG = "cogboard.config.widget.delete" + const val PURGE_WIDGET_CONFIG = "cogboard.config.widget.purge" + const val ENDPOINTS = "cogboard.config.endpoints" + const val UPDATE_ENDPOINTS = "cogboard.config.endpoints.update" + const val CREDENTIALS = "cogboard.config.credentials" + const val UPDATE_CREDENTIALS = "cogboard.config.credentials.update" + const val USER_CONTROL = "cogboard.config.user.control" + const val HTTP_GET = "cogboard.httpclient.get" + const val HTTP_CHECK = "cogboard.httpclient.check" + const val HTTP_POST = "cogboard.httpclient.post" + const val HTTP_PUT = "cogboard.httpclient.put" + const val HTTP_DELETE = "cogboard.httpclient.delete" + } + } + + class EventType { + companion object { + const val WIDGET_UPDATE = "widget-update" + const val CONFIG_SAVED = "config-saved" + const val NEW_VERSION = "new-version" + } } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/CredentialsConfig.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/CredentialsConfig.kt index fe1624928..45778e4ef 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/CredentialsConfig.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/CredentialsConfig.kt @@ -1,13 +1,13 @@ package com.cognifide.cogboard.config -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props class CredentialsConfig { companion object { - const val CREDENTIALS_ARRAY = CogboardConstants.PROP_CREDENTIALS - const val CREDENTIAL_ID_PROP = CogboardConstants.PROP_ID - const val CREDENTIAL_ID_PREFIX = CogboardConstants.PROP_CREDENTIAL - const val CREDENTIAL_LABEL_PROP = CogboardConstants.PROP_LABEL + const val CREDENTIALS_ARRAY = Props.CREDENTIALS + const val CREDENTIAL_ID_PROP = Props.ID + const val CREDENTIAL_ID_PREFIX = Props.CREDENTIAL + const val CREDENTIAL_LABEL_PROP = Props.LABEL } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointLoader.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointLoader.kt index 98529e0fe..97609a8c2 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointLoader.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointLoader.kt @@ -1,8 +1,6 @@ package com.cognifide.cogboard.config -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PASSWORD -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_TOKEN -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USER +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.EndpointsConfig.Companion.CREDENTIALS_PROP import com.cognifide.cogboard.config.service.CredentialsService import com.cognifide.cogboard.config.service.EndpointsService @@ -30,9 +28,9 @@ class EndpointLoader( private fun JsonObject.attachCredentials(): JsonObject { this.remove(CREDENTIALS_PROP)?.let { credId -> credentials.findById(credId as String).let { credentials -> - this.put(PROP_USER, credentials.getString(PROP_USER) ?: "") - this.put(PROP_PASSWORD, credentials.getString(PROP_PASSWORD) ?: "") - this.put(PROP_TOKEN, credentials.getString(PROP_TOKEN) ?: "") + this.put(Props.USER, credentials.getString(Props.USER) ?: "") + this.put(Props.PASSWORD, credentials.getString(Props.PASSWORD) ?: "") + this.put(Props.TOKEN, credentials.getString(Props.TOKEN) ?: "") } } return this diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointsConfig.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointsConfig.kt index d4c281f0d..d2ac8feb7 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointsConfig.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/EndpointsConfig.kt @@ -1,14 +1,14 @@ package com.cognifide.cogboard.config -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props class EndpointsConfig { companion object { - const val ENDPOINTS_ARRAY = CogboardConstants.PROP_ENDPOINTS - const val ENDPOINT_ID_PROP = CogboardConstants.PROP_ID - const val ENDPOINT_ID_PREFIX = CogboardConstants.PROP_ENDPOINT - const val ENDPOINT_LABEL_PROP = CogboardConstants.PROP_LABEL - const val CREDENTIALS_PROP = CogboardConstants.PROP_CREDENTIALS + const val ENDPOINTS_ARRAY = Props.ENDPOINTS + const val ENDPOINT_ID_PROP = Props.ID + const val ENDPOINT_ID_PREFIX = Props.ENDPOINT + const val ENDPOINT_LABEL_PROP = Props.LABEL + const val CREDENTIALS_PROP = Props.CREDENTIALS } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/BoardsController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/BoardsController.kt index 38568413a..7ac89f0f6 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/BoardsController.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/BoardsController.kt @@ -16,21 +16,24 @@ class BoardsController(private val factory: ControllerFactory = ControllerFactor val contentRepository = ContentRepository() sender = ConfirmationSender(vertx) boardsConfigService = BoardsConfigService( - contentRepository, - EntityCleanupHelper(vertx)) + contentRepository, + EntityCleanupHelper(vertx) + ) - factory.create(CogboardConstants.EVENT_BOARDS_CONFIG, vertx, prepareConfig()) + factory.create(CogboardConstants.Event.BOARDS_CONFIG, vertx, prepareConfig()) } private fun prepareConfig() = mapOf<String, (JsonObject) -> String>( - "update" to { body -> update(body) }, - "get" to { _ -> get() } + "update" to { body -> update(body) }, + "get" to { _ -> get() } ) private fun update(body: JsonObject): String { - val saved = boardsConfigService.saveBoardsConfig(body) + boardsConfigService.saveBoardsConfig(body) sender.sendOk() - return saved.toString() + return JsonObject() + .put("message", "OK") + .toString() } private fun get() = boardsConfigService.loadBoardsConfig().toString() diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/ConfirmationSender.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/ConfirmationSender.kt index 7528695d6..5b1e013f8 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/ConfirmationSender.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/ConfirmationSender.kt @@ -1,34 +1,24 @@ package com.cognifide.cogboard.config.controller -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Event +import com.cognifide.cogboard.CogboardConstants.EventType +import com.cognifide.cogboard.CogboardConstants.Props import io.vertx.core.Vertx import io.vertx.core.json.JsonObject -import io.vertx.core.logging.Logger -import io.vertx.core.logging.LoggerFactory class ConfirmationSender(private val vertx: Vertx) { fun sendOk() { - vertx.eventBus().send(CogboardConstants.EVENT_SEND_MESSAGE_TO_WEBSOCKET, - JsonObject().message(OK_MESSAGE)) - } - - fun sendError(body: JsonObject) { - LOGGER.error("$ERROR_MESSAGE \nconfig:\n$body") - vertx.eventBus().send(CogboardConstants.EVENT_SEND_MESSAGE_TO_WEBSOCKET, - JsonObject().message(ERROR_MESSAGE)) + vertx.eventBus().send(Event.SEND_MESSAGE_TO_WEBSOCKET, JsonObject().message(OK_MESSAGE)) } private fun JsonObject.message(message: String): JsonObject { return this - .put(CogboardConstants.PROP_EVENT_TYPE, PROP_EVENT_TYPE_NOTIFICATION_CONFIG_SAVE) - .put("message", message) + .put(Props.EVENT_TYPE, EventType.CONFIG_SAVED) + .put("message", message) } companion object { - private val LOGGER: Logger = LoggerFactory.getLogger(ConfirmationSender::class.java) private const val OK_MESSAGE = "Configuration saved" - private const val ERROR_MESSAGE = "Configuration not saved - wrong configuration" - private const val PROP_EVENT_TYPE_NOTIFICATION_CONFIG_SAVE = "notification-config-save" } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/CredentialsController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/CredentialsController.kt index e2efaf6a9..b417d92b6 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/CredentialsController.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/CredentialsController.kt @@ -1,7 +1,7 @@ package com.cognifide.cogboard.config.controller -import com.cognifide.cogboard.CogboardConstants.Companion.EVENT_CREDENTIALS -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PASSWORD +import com.cognifide.cogboard.CogboardConstants.Event +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.CredentialsConfig.Companion.CREDENTIAL_ID_PROP import com.cognifide.cogboard.config.service.CredentialsService import io.vertx.core.AbstractVerticle @@ -14,7 +14,7 @@ class CredentialsController : AbstractVerticle() { override fun start() { credentialsService = CredentialsService() - factory.create(EVENT_CREDENTIALS, vertx, prepareConfig()) + factory.create(Event.CREDENTIALS, vertx, prepareConfig()) } private fun prepareConfig() = mapOf<String, (JsonObject) -> String>( @@ -36,7 +36,7 @@ class CredentialsController : AbstractVerticle() { } private fun JsonObject.filterSensitiveData(): JsonObject { - this.remove(PROP_PASSWORD) + this.remove(Props.PASSWORD) return this } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/EndpointsController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/EndpointsController.kt index cf6971d1d..47fa5e8ab 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/EndpointsController.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/EndpointsController.kt @@ -1,6 +1,7 @@ package com.cognifide.cogboard.config.controller -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props +import com.cognifide.cogboard.CogboardConstants.Event import com.cognifide.cogboard.config.EndpointsConfig.Companion.ENDPOINT_ID_PROP import com.cognifide.cogboard.config.service.EndpointsService import com.cognifide.cogboard.utils.ExtensionFunctions.findAllByKeyValue @@ -16,7 +17,7 @@ class EndpointsController : AbstractVerticle() { override fun start() { endpointsService = EndpointsService() - factory.create(CogboardConstants.EVENT_ENDPOINTS, vertx, prepareConfig()) + factory.create(Event.ENDPOINTS, vertx, prepareConfig()) listenOnCredentialsUpdate() listenOnEndpointsUpdate() @@ -47,26 +48,26 @@ class EndpointsController : AbstractVerticle() { private fun listenOnCredentialsUpdate() = vertx .eventBus() - .consumer<JsonObject>(CogboardConstants.EVENT_UPDATE_CREDENTIALS) + .consumer<JsonObject>(Event.UPDATE_CREDENTIALS) .handler { val relatedEndpoints = endpointsWithChangedCredentials(it) - val message = JsonObject().put(CogboardConstants.PROP_ENDPOINTS, relatedEndpoints) - vertx.eventBus().send(CogboardConstants.EVENT_REFRESH_WIDGET_CONFIG, message) + val message = JsonObject().put(Props.ENDPOINTS, relatedEndpoints) + vertx.eventBus().send(Event.REFRESH_WIDGET_CONFIG, message) } private fun listenOnEndpointsUpdate() = vertx .eventBus() - .consumer<JsonObject>(CogboardConstants.EVENT_UPDATE_ENDPOINTS) + .consumer<JsonObject>(Event.UPDATE_ENDPOINTS) .handler { - val message = JsonObject().put(CogboardConstants.PROP_ENDPOINTS, JsonArray().add(it.body())) - vertx.eventBus().send(CogboardConstants.EVENT_REFRESH_WIDGET_CONFIG, message) + val message = JsonObject().put(Props.ENDPOINTS, JsonArray().add(it.body())) + vertx.eventBus().send(Event.REFRESH_WIDGET_CONFIG, message) } private fun endpointsWithChangedCredentials(it: Message<JsonObject>): List<JsonObject>? { - val changedCredentialId = it.body().getString(CogboardConstants.PROP_ID) + val changedCredentialId = it.body().getString(Props.ID) return changedCredentialId ?.let { id -> - endpointsService.getAllEndpoints().findAllByKeyValue(id, CogboardConstants.PROP_CREDENTIALS) + endpointsService.getAllEndpoints().findAllByKeyValue(id, Props.CREDENTIALS) } } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/UserController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/UserController.kt index a1ed1c1ee..71d47b993 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/UserController.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/UserController.kt @@ -1,6 +1,6 @@ package com.cognifide.cogboard.config.controller -import com.cognifide.cogboard.CogboardConstants.Companion.EVENT_USER_CONTROL +import com.cognifide.cogboard.CogboardConstants.Event import com.cognifide.cogboard.config.service.UserService import io.vertx.core.AbstractVerticle import io.vertx.core.json.JsonObject @@ -12,7 +12,7 @@ class UserController : AbstractVerticle() { override fun start() { userService = UserService() - factory.create(EVENT_USER_CONTROL, vertx, prepareConfig()) + factory.create(Event.USER_CONTROL, vertx, prepareConfig()) } private fun prepareConfig() = mapOf<String, (JsonObject) -> String>( diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/VersionController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/VersionController.kt index 041395eb6..609e4e3e8 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/VersionController.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/VersionController.kt @@ -1,6 +1,8 @@ package com.cognifide.cogboard.config.controller -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props +import com.cognifide.cogboard.CogboardConstants.Event +import com.cognifide.cogboard.CogboardConstants.EventType import com.cognifide.cogboard.config.service.VersionService import io.vertx.core.AbstractVerticle import io.vertx.core.http.HttpHeaders @@ -19,7 +21,7 @@ class VersionController : AbstractVerticle() { private fun listenOnCheckVersion() = vertx .eventBus() - .consumer<JsonObject>(CogboardConstants.EVENT_VERSION_CONFIG) + .consumer<JsonObject>(Event.VERSION_CONFIG) .handler { if (versionService.isLatestVersionAvailable()) { sendResponse(versionService.prepareVersionResponse()) @@ -39,23 +41,22 @@ class VersionController : AbstractVerticle() { private fun sendResponse(response: JsonObject) { val message = JsonObject() - message.put(CogboardConstants.PROP_EVENT_TYPE, PROP_EVENT_TYPE_NEW_VERSION) - message.put(CogboardConstants.PROP_CONTENT, response) - vertx.eventBus().send(CogboardConstants.EVENT_SEND_MESSAGE_TO_WEBSOCKET, message) + message.put(Props.EVENT_TYPE, EventType.NEW_VERSION) + message.put(Props.CONTENT, response) + vertx.eventBus().send(Event.SEND_MESSAGE_TO_WEBSOCKET, message) } private fun sendRequestForNewVersion() { - vertx.eventBus().send(CogboardConstants.EVENT_HTTP_GET, + vertx.eventBus().send(Event.HTTP_GET, JsonObject() - .put(CogboardConstants.PROP_URL, GITHUB_REPOSITORY_LATEST_VERSION_URL) - .put(CogboardConstants.PROP_EVENT_ADDRESS, NEW_VERSION_RESPONSE) - .put(CogboardConstants.PROP_HEADERS, JsonObject() + .put(Props.URL, GITHUB_REPOSITORY_LATEST_VERSION_URL) + .put(Props.EVENT_ADDRESS, NEW_VERSION_RESPONSE) + .put(Props.HEADERS, JsonObject() .put(HttpHeaders.USER_AGENT.toString(), USER_AGENT_HEADER)) ) } companion object { - const val PROP_EVENT_TYPE_NEW_VERSION = "new-version" const val GITHUB_REPOSITORY_LATEST_VERSION_URL = "https://api.github.com/repos/wttech/cogboard/releases/latest" const val USER_AGENT_HEADER = "Cogboard" diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/WidgetsController.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/WidgetsController.kt index 90b84b9c3..f66ab489c 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/WidgetsController.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/controller/WidgetsController.kt @@ -1,6 +1,7 @@ package com.cognifide.cogboard.config.controller -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Event +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.helper.EntityCleanupHelper import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.config.service.WidgetRuntimeService @@ -34,31 +35,31 @@ class WidgetsController : AbstractVerticle() { private fun listenOnWidgetUpdate() = vertx .eventBus() - .consumer<JsonObject>(CogboardConstants.EVENT_UPDATE_WIDGET_CONFIG) + .consumer<JsonObject>(Event.UPDATE_WIDGET_CONFIG) .handler { widgetRuntimeService.createOrUpdateWidget(it.body()) } private fun listenOnWidgetRefresh() = vertx .eventBus() - .consumer<JsonObject>(CogboardConstants.EVENT_REFRESH_WIDGET_CONFIG) + .consumer<JsonObject>(Event.REFRESH_WIDGET_CONFIG) .handler { - val ids = it.body().getValue(CogboardConstants.PROP_ENDPOINTS) + val ids = it.body().getValue(Props.ENDPOINTS) widgetRuntimeService.reloadWidgetsWithChangedEndpoints(ids as JsonArray) } private fun listenOnWidgetContentUpdate() = vertx .eventBus() - .consumer<JsonObject>(CogboardConstants.EVENT_UPDATE_WIDGET_CONTENT_CONFIG) + .consumer<JsonObject>(Event.UPDATE_WIDGET_CONTENT_CONFIG) .handler { widgetRuntimeService.handleWidgetContentUpdate(it.body()) } private fun listenOnWidgetDelete() = vertx .eventBus() - .consumer<JsonObject>(CogboardConstants.EVENT_DELETE_WIDGET_CONFIG) + .consumer<JsonObject>(Event.DELETE_WIDGET_CONFIG) .handler { widgetRuntimeService.destroyWidget("Delete", it.body()) } private fun listenOnWidgetPurge() = vertx .eventBus() - .consumer<JsonObject>(CogboardConstants.EVENT_PURGE_WIDGET_CONFIG) + .consumer<JsonObject>(Event.PURGE_WIDGET_CONFIG) .handler { widgetRuntimeService.destroyWidget("Purge", it.body()) } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/handler/VersionHandler.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/handler/VersionHandler.kt index cfcb1cf9b..d1c7f0276 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/handler/VersionHandler.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/handler/VersionHandler.kt @@ -15,7 +15,7 @@ class VersionHandler : RoutingHandlerFactory { override fun create(vertx: Vertx?, config: JsonObject?): Handler<RoutingContext> = Handler { event -> vertx ?.eventBus() - ?.publish(CogboardConstants.EVENT_VERSION_CONFIG, JsonObject()) + ?.publish(CogboardConstants.Event.VERSION_CONFIG, JsonObject()) event .response() .endEmptyJson() diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/helper/EntityCleanupHelper.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/helper/EntityCleanupHelper.kt index d031316e7..61616194d 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/helper/EntityCleanupHelper.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/helper/EntityCleanupHelper.kt @@ -3,7 +3,8 @@ package com.cognifide.cogboard.config.helper import io.vertx.core.Vertx import io.vertx.core.json.JsonArray import io.vertx.core.json.JsonObject -import com.cognifide.cogboard.CogboardConstants as CC +import com.cognifide.cogboard.CogboardConstants.Props +import com.cognifide.cogboard.CogboardConstants.Event class EntityCleanupHelper(private val vertx: Vertx) { fun handle(oldConfig: JsonObject, newConfig: JsonObject): List<String> { @@ -27,8 +28,8 @@ class EntityCleanupHelper(private val vertx: Vertx) { .map { it.toString() } val declaredWidgets = config - .getJsonObject(CC.PROP_WIDGETS) - .getJsonObject(CC.PROP_WIDGETS_BY_ID) + .getJsonObject(Props.WIDGETS) + .getJsonObject(Props.WIDGETS_BY_ID) .map { it.key.toString() } .toList() @@ -42,23 +43,23 @@ class EntityCleanupHelper(private val vertx: Vertx) { private fun getBoardWidgets(config: JsonObject, it: Any): JsonArray? = config - .getJsonObject(CC.PROP_BOARDS) - .getJsonObject(CC.PROP_BOARDS_BY_ID) + .getJsonObject(Props.BOARDS) + .getJsonObject(Props.BOARDS_BY_ID) .getJsonObject(it.toString()) - ?.getJsonArray(CC.PROP_WIDGETS) + ?.getJsonArray(Props.WIDGETS) private fun getAllBoards(config: JsonObject) = config - .getJsonObject(CC.PROP_BOARDS) - .getJsonArray(CC.PROP_BOARDS_ALL) + .getJsonObject(Props.BOARDS) + .getJsonArray(Props.BOARDS_ALL) private fun sendWidgetPurgeEvent(widgetId: String) = vertx .eventBus() .publish( - CC.EVENT_PURGE_WIDGET_CONFIG, + Event.PURGE_WIDGET_CONFIG, JsonObject().put( - CC.PROP_ID, + Props.ID, widgetId) ) } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/BoardsConfigService.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/BoardsConfigService.kt index 3eb203b53..ce6f1c7e4 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/BoardsConfigService.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/BoardsConfigService.kt @@ -1,13 +1,12 @@ package com.cognifide.cogboard.config.service -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_CONTENT +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.helper.EntityCleanupHelper import com.cognifide.cogboard.storage.ContentRepository import com.cognifide.cogboard.storage.Storage import com.cognifide.cogboard.storage.VolumeStorageFactory.boards import com.cognifide.cogboard.widget.WidgetIndex import io.vertx.core.json.JsonObject -import com.cognifide.cogboard.CogboardConstants as CC class BoardsConfigService( private val contentRepository: ContentRepository = ContentRepository(), @@ -15,17 +14,16 @@ class BoardsConfigService( private val storage: Storage = boards() ) { - fun saveBoardsConfig(boardsConfig: JsonObject): JsonObject { + fun saveBoardsConfig(boardsConfig: JsonObject) { val cleanBoardsConfig = executeForWidgets(boardsConfig, this::resetContentNode) handleDeletedEntities(cleanBoardsConfig) storage.saveConfig(cleanBoardsConfig) - return boardsConfig } fun loadBoardsConfig(): JsonObject { val config = storage.loadConfig() executeForWidgets(config, this::addContent) - config.getJsonObject(CC.PROP_WIDGETS).put(CC.PROP_AVAILABLE_WIDGETS, WidgetIndex.availableWidgets()) + config.getJsonObject(Props.WIDGETS).put(Props.AVAILABLE_WIDGETS, WidgetIndex.availableWidgets()) return config } @@ -40,15 +38,15 @@ class BoardsConfigService( } private fun getWidgetById(boardsConfig: JsonObject) = - boardsConfig.getJsonObject(CC.PROP_WIDGETS) - ?.getJsonObject(CC.PROP_WIDGETS_BY_ID) ?: JsonObject() + boardsConfig.getJsonObject(Props.WIDGETS) + ?.getJsonObject(Props.WIDGETS_BY_ID) ?: JsonObject() private fun resetContentNode(widgetId: String, widget: JsonObject) { - widget.put(PROP_CONTENT, JsonObject()) + widget.put(Props.CONTENT, JsonObject()) } private fun addContent(widgetId: String, widget: JsonObject) { - widget.put(PROP_CONTENT, contentRepository.get(widgetId)) + widget.put(Props.CONTENT, contentRepository.get(widgetId)) } private fun executeForWidgets( @@ -68,8 +66,8 @@ class BoardsConfigService( ?.handle(storage.loadConfig(), boardsConfig) ?.forEach { boardsConfig - .getJsonObject(CC.PROP_WIDGETS) - .getJsonObject(CC.PROP_WIDGETS_BY_ID) + .getJsonObject(Props.WIDGETS) + .getJsonObject(Props.WIDGETS_BY_ID) .remove(it) } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/UserService.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/UserService.kt index 99576fe74..9e0356126 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/UserService.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/UserService.kt @@ -1,9 +1,6 @@ package com.cognifide.cogboard.config.service -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_CURRENT_PASSWORD -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_NEW_PASSWORD -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PASSWORD -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USER +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.model.Admin import com.cognifide.cogboard.storage.Storage import com.cognifide.cogboard.storage.VolumeStorageFactory.admin @@ -18,7 +15,7 @@ class UserService( fun save(newLoginData: JsonObject): JsonObject { val wrongPassMsg = config.getString("wrongPassMsg") ?: "Please, enter correct Password" val admin = newLoginData.toAdmin() - val currentPassword = newLoginData.getString(PROP_CURRENT_PASSWORD) + val currentPassword = newLoginData.getString(Props.CURRENT_PASSWORD) return if (confirmPassword(currentPassword)) { update(admin) response() @@ -26,7 +23,7 @@ class UserService( } private fun confirmPassword(currentPassword: String): Boolean { - return config.getString(PROP_PASSWORD) == currentPassword + return config.getString(Props.PASSWORD) == currentPassword } private fun update(admin: JsonObject) { @@ -35,8 +32,8 @@ class UserService( } private fun JsonObject.toAdmin(): JsonObject { - val user = config.getString(PROP_USER) - val newPassword = this.getString(PROP_NEW_PASSWORD) + val user = config.getString(Props.USER) + val newPassword = this.getString(Props.NEW_PASSWORD) return JsonObject.mapFrom(Admin(user, newPassword)) } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/WidgetRuntimeService.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/WidgetRuntimeService.kt index 2f4913a08..167122cc6 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/WidgetRuntimeService.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/service/WidgetRuntimeService.kt @@ -1,6 +1,7 @@ package com.cognifide.cogboard.config.service -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props +import com.cognifide.cogboard.CogboardConstants.Event import com.cognifide.cogboard.config.EndpointLoader import com.cognifide.cogboard.storage.ContentRepository import com.cognifide.cogboard.widget.Widget @@ -48,7 +49,7 @@ class WidgetRuntimeService( fun reloadWidgetsWithChangedEndpoints(endpoints: JsonArray) { val endpointIds = endpoints.stream() .map { it as JsonObject } - .map { it.getValue(CogboardConstants.PROP_ID) } + .map { it.getValue(Props.ID) } .collect(Collectors.toList()) widgets.map { it.value } @@ -57,7 +58,7 @@ class WidgetRuntimeService( } private fun getEndpointId(widget: Widget): String { - return widget.config().getString(CogboardConstants.PROP_ENDPOINT, "") + return widget.config().getString(Props.ENDPOINT, "") } fun handleWidgetContentUpdate(widgetConfig: JsonObject) { @@ -86,13 +87,13 @@ class WidgetRuntimeService( } private fun JsonObject.getId(): String? = - this.getString(CogboardConstants.PROP_ID) + this.getString(Props.ID) private fun JsonObject.attachEndpoint() { - val endpointId = this.getString(CogboardConstants.PROP_ENDPOINT) + val endpointId = this.getString(Props.ENDPOINT) endpointId?.let { val endpoint = EndpointLoader().loadWithSensitiveData(endpointId) - this.put(CogboardConstants.PROP_ENDPOINT_LOADED, endpoint) + this.put(Props.ENDPOINT_LOADED, endpoint) } } @@ -100,6 +101,6 @@ class WidgetRuntimeService( val LOGGER: Logger = LoggerFactory.getLogger(WidgetRuntimeService::class.java) internal fun createWidgetContentUpdateAddress(id: String) = - CogboardConstants.EVENT_UPDATE_WIDGET_CONTENT_CONFIG + '.' + id + Event.UPDATE_WIDGET_CONTENT_CONFIG + '.' + id } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/validation/boards/BoardsValidator.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/validation/boards/BoardsValidator.kt index a04041e33..366beb7c8 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/validation/boards/BoardsValidator.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/config/validation/boards/BoardsValidator.kt @@ -1,11 +1,11 @@ package com.cognifide.cogboard.config.validation.boards +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.model.Board import com.cognifide.cogboard.config.model.Config import com.cognifide.cogboard.config.validation.Validator import com.fasterxml.jackson.databind.JsonMappingException import com.fasterxml.jackson.module.kotlin.readValue -import com.cognifide.cogboard.CogboardConstants as CC object BoardsValidator : Validator { @@ -41,8 +41,8 @@ object BoardsValidator : Validator { if (!checkColumnsRange(board)) { errors.add(BoardsValidationError(board, - "Columns number should be between ${CC.PROP_BOARD_COLUMN_MIN} and " + - "${CC.PROP_BOARD_COLUMN_MAX}")) + "Columns number should be between ${Props.BOARD_COLUMN_MIN} and " + + "${Props.BOARD_COLUMN_MAX}")) } if (!checkTitleLength(board)) { errors.add(BoardsValidationError(board, @@ -60,7 +60,7 @@ object BoardsValidator : Validator { } private fun checkColumnsRange(board: Board) = - board.columns in CC.PROP_BOARD_COLUMN_MIN..CC.PROP_BOARD_COLUMN_MAX + board.columns in Props.BOARD_COLUMN_MIN..Props.BOARD_COLUMN_MAX private fun checkTitleLength(board: Board) = board.title.length in TITLE_LENGTH_MIN..TITLE_LENGTH_MAX diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/HttpClient.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/HttpClient.kt index 603a133bd..f67097c02 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/HttpClient.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/HttpClient.kt @@ -1,8 +1,7 @@ package com.cognifide.cogboard.http -import com.cognifide.cogboard.CogboardConstants as CC -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_STATUS_CODE -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_STATUS_MESSAGE +import com.cognifide.cogboard.CogboardConstants.Event +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.http.HttpConstants.CONTENT_TYPE_JSON import com.cognifide.cogboard.http.HttpConstants.HEADER_CONTENT_TYPE import com.cognifide.cogboard.http.auth.AuthenticationFactory @@ -32,45 +31,45 @@ class HttpClient : AbstractVerticle() { } private fun registerGET(client: WebClient) { - vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_GET).handler { message -> + vertx.eventBus().consumer<JsonObject>(Event.HTTP_GET).handler { message -> message.body()?.let { - val httpRequest = client.getAbs(it.getString(CC.PROP_URL)) + val httpRequest = client.getAbs(it.getString(Props.URL)) makeRequest(httpRequest, it) } } } private fun registerCHECK(client: WebClient) { - vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_CHECK).handler { message -> + vertx.eventBus().consumer<JsonObject>(Event.HTTP_CHECK).handler { message -> message.body()?.let { - val httpRequest = client.getAbs(it.getString(CC.PROP_URL)) + val httpRequest = client.getAbs(it.getString(Props.URL)) makeRequest(httpRequest, it) } } } private fun registerPUT(client: WebClient) { - vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_PUT).handler { message -> + vertx.eventBus().consumer<JsonObject>(Event.HTTP_PUT).handler { message -> message.body()?.let { - val httpRequest = client.putAbs(it.getString(CC.PROP_URL)) + val httpRequest = client.putAbs(it.getString(Props.URL)) makeRequest(httpRequest, it) } } } private fun registerPOST(client: WebClient) { - vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_POST).handler { message -> + vertx.eventBus().consumer<JsonObject>(Event.HTTP_POST).handler { message -> message.body()?.let { - val httpRequest = client.postAbs(it.getString(CC.PROP_URL)) + val httpRequest = client.postAbs(it.getString(Props.URL)) makeRequest(httpRequest, it) } } } private fun registerDELETE(client: WebClient) { - vertx.eventBus().consumer<JsonObject>(CC.EVENT_HTTP_DELETE).handler { message -> + vertx.eventBus().consumer<JsonObject>(Event.HTTP_DELETE).handler { message -> message.body()?.let { - val httpRequest = client.deleteAbs(it.getString(CC.PROP_URL)) + val httpRequest = client.deleteAbs(it.getString(Props.URL)) makeRequest(httpRequest, it) } } @@ -78,9 +77,9 @@ class HttpClient : AbstractVerticle() { private fun makeRequest(httpRequest: HttpRequest<Buffer>, config: JsonObject) { val request = initRequest(httpRequest, config) - val address = config.getString(CC.PROP_EVENT_ADDRESS) - val body = config.getJsonObject(CC.PROP_BODY) - val requestId = config.getString(CC.PROP_REQUEST_ID) ?: "" + val address = config.getString(Props.EVENT_ADDRESS) + val body = config.getJsonObject(Props.BODY) + val requestId = config.getString(Props.REQUEST_ID) ?: "" body?.let { executeCheckRequest(request, address, body) @@ -90,12 +89,12 @@ class HttpClient : AbstractVerticle() { } private fun initRequest(request: HttpRequest<Buffer>, config: JsonObject): HttpRequest<Buffer> { - val user = config.getString(CC.PROP_USER) ?: "" - val pass = config.getString(CC.PROP_PASSWORD) ?: "" - val token = config.getString(CC.PROP_TOKEN) ?: "" - val contentType = config.getString(CC.PROP_CONTENT_TYPE) ?: CONTENT_TYPE_JSON - val headers = config.getJsonObject(CC.PROP_HEADERS) ?: JsonObject() - val authTypesString = config.getString(CC.PROP_AUTHENTICATION_TYPES) + val user = config.getString(Props.USER) ?: "" + val pass = config.getString(Props.PASSWORD) ?: "" + val token = config.getString(Props.TOKEN) ?: "" + val contentType = config.getString(Props.CONTENT_TYPE) ?: CONTENT_TYPE_JSON + val headers = config.getJsonObject(Props.HEADERS) ?: JsonObject() + val authTypesString = config.getString(Props.AUTHENTICATION_TYPES) val authTypes = if (authTypesString != null) Json.decodeValue(authTypesString) else JsonArray() @@ -157,11 +156,11 @@ class HttpClient : AbstractVerticle() { request.sendJsonObject(body) { val result = JsonObject() if (it.succeeded()) { - result.put(PROP_STATUS_CODE, it.result().statusCode()) - result.put(PROP_STATUS_MESSAGE, it.result().statusMessage()) - result.put(CC.PROP_BODY, it.result().bodyAsString()) + result.put(Props.STATUS_CODE, it.result().statusCode()) + result.put(Props.STATUS_MESSAGE, it.result().statusMessage()) + result.put(Props.BODY, it.result().bodyAsString()) } else { - result.put(PROP_STATUS_MESSAGE, "unsuccessful") + result.put(Props.STATUS_MESSAGE, "unsuccessful") LOGGER.error(it.cause()?.message) } vertx.eventBus().send(address, result) @@ -172,15 +171,15 @@ class HttpClient : AbstractVerticle() { request.send { if (!it.succeeded()) { vertx.eventBus().send(address, JsonObject() - .put(CC.PROP_ERROR_MESSAGE, "Http Error") - .put(CC.PROP_ERROR_CAUSE, it.cause()?.message) - .put(CC.PROP_REQUEST_ID, requestId)) + .put(Props.ERROR_MESSAGE, "Http Error") + .put(Props.ERROR_CAUSE, it.cause()?.message) + .put(Props.REQUEST_ID, requestId)) LOGGER.error(it.cause()?.message) } else { toJson(it.result()).let { json -> - json.put(PROP_STATUS_CODE, it.result().statusCode()) - json.put(PROP_STATUS_MESSAGE, it.result().statusMessage()) - json.put(CC.PROP_REQUEST_ID, requestId) + json.put(Props.STATUS_CODE, it.result().statusCode()) + json.put(Props.STATUS_MESSAGE, it.result().statusMessage()) + json.put(Props.REQUEST_ID, requestId) vertx.eventBus().send(address, json) } } @@ -192,9 +191,9 @@ class HttpClient : AbstractVerticle() { response.bodyAsJsonObject() } catch (e: DecodeException) { try { - JsonObject().put(CC.PROP_ARRAY, response.bodyAsJsonArray()) + JsonObject().put(Props.ARRAY, response.bodyAsJsonArray()) } catch (e: DecodeException) { - JsonObject().put(CC.PROP_BODY, response.bodyAsString()) + JsonObject().put(Props.BODY, response.bodyAsString()) } } catch (e: IllegalStateException) { JsonObject() diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/WebSocketsServer.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/WebSocketsServer.kt index cff68e7a3..3e97877f3 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/WebSocketsServer.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/http/WebSocketsServer.kt @@ -25,7 +25,7 @@ class WebSocketsServer : AbstractVerticle() { LOGGER.info("Starting <{}>", this::class.java.simpleName) val sockets: MutableSet<ServerWebSocket> = hashSetOf() - val consumer = vertx.eventBus().consumer<JsonObject>(CogboardConstants.EVENT_SEND_MESSAGE_TO_WEBSOCKET) + val consumer = vertx.eventBus().consumer<JsonObject>(CogboardConstants.Event.SEND_MESSAGE_TO_WEBSOCKET) vertx.createHttpServer().websocketHandler { socket -> sockets.add(socket) diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/LoginHandler.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/LoginHandler.kt index 9fe9f9663..6a70f0f65 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/LoginHandler.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/LoginHandler.kt @@ -1,9 +1,7 @@ package com.cognifide.cogboard.security -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PASSWORD -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USER -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USERNAME -import com.cognifide.cogboard.CogboardConstants.Companion.STATUS_CODE_401 +import com.cognifide.cogboard.CogboardConstants.Props +import com.cognifide.cogboard.CogboardConstants.StatusCode import com.cognifide.cogboard.config.model.Admin import com.cognifide.cogboard.storage.Storage import com.cognifide.cogboard.storage.VolumeStorageFactory @@ -29,8 +27,8 @@ class LoginHandler(val storage: Storage = VolumeStorageFactory.admin()) : Routin return Handler { ctx -> ctx.bodyAsJson?.let { - val username = it.getString(PROP_USERNAME, "") - val password = it.getString(PROP_PASSWORD, "") + val username = it.getString(Props.USERNAME, "") + val password = it.getString(Props.PASSWORD, "") val admin = getAdmin(username) when { admin == null -> sendUnauthorized(ctx, wrongUserMsg) @@ -49,9 +47,9 @@ class LoginHandler(val storage: Storage = VolumeStorageFactory.admin()) : Routin private fun getAdmin(name: String): Admin? { val admin = storage.loadConfig() - val username = admin.getString(PROP_USER) + val username = admin.getString(Props.USER) return if (username == name) { - val password = admin.getString(PROP_PASSWORD) + val password = admin.getString(Props.PASSWORD) Admin(username, password) } else null } @@ -60,6 +58,6 @@ class LoginHandler(val storage: Storage = VolumeStorageFactory.admin()) : Routin admin.password.isNotBlank() && admin.password == password private fun sendUnauthorized(ctx: RoutingContext, message: String) { - ctx.response().setStatusMessage(message).setStatusCode(STATUS_CODE_401).end() + ctx.response().setStatusMessage(message).setStatusCode(StatusCode.a401).end() } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/SessionHandler.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/SessionHandler.kt index 554de2f80..214f895cc 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/SessionHandler.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/security/SessionHandler.kt @@ -1,6 +1,6 @@ package com.cognifide.cogboard.security -import com.cognifide.cogboard.CogboardConstants.Companion.STATUS_CODE_401 +import com.cognifide.cogboard.CogboardConstants.StatusCode import com.cognifide.cogboard.utils.ExtensionFunctions.asJsonObject import com.cognifide.cogboard.storage.Storage import com.cognifide.cogboard.storage.VolumeStorageFactory @@ -45,6 +45,6 @@ class SessionHandler(val storage: Storage = VolumeStorageFactory.admin()) : Rout } private fun sendUnauthorized(ctx: RoutingContext, message: String) { - ctx.response().setStatusMessage(message).setStatusCode(STATUS_CODE_401).end() + ctx.response().setStatusMessage(message).setStatusCode(StatusCode.a401).end() } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/utils/ExtensionFunctions.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/utils/ExtensionFunctions.kt index f907935ff..394ebc2f3 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/utils/ExtensionFunctions.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/utils/ExtensionFunctions.kt @@ -1,6 +1,6 @@ package com.cognifide.cogboard.utils -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props import io.vertx.core.json.JsonArray import io.vertx.core.json.JsonObject import io.vertx.ext.auth.KeyStoreOptions @@ -10,7 +10,7 @@ import java.util.stream.Collectors object ExtensionFunctions { - fun JsonArray.findById(idValue: String, idKey: String = CogboardConstants.PROP_ID): JsonObject { + fun JsonArray.findById(idValue: String, idKey: String = Props.ID): JsonObject { return this.findByKeyValue(idValue, idKey) } @@ -37,7 +37,7 @@ object ExtensionFunctions { .collect(Collectors.toList()) } - fun JsonArray.getObjectPositionById(idValue: String, idKey: String = CogboardConstants.PROP_ID): Int { + fun JsonArray.getObjectPositionById(idValue: String, idKey: String = Props.ID): Int { var index = 0 while (index < this.size()) { val credential = this.getJsonObject(index) diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/AsyncWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/AsyncWidget.kt index 52330e30f..80dd5cf97 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/AsyncWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/AsyncWidget.kt @@ -1,6 +1,7 @@ package com.cognifide.cogboard.widget -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props +import com.cognifide.cogboard.CogboardConstants.Event import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.http.auth.AuthenticationType import io.vertx.core.Vertx @@ -18,12 +19,12 @@ abstract class AsyncWidget( serv: BoardsConfigService ) : BaseWidget(vertx, config, serv) { - val user: String = config.endpointProp(CogboardConstants.PROP_USER) - val password: String = config.endpointProp(CogboardConstants.PROP_PASSWORD) - val token: String = config.endpointProp(CogboardConstants.PROP_TOKEN) - val url: String = config.endpointProp(CogboardConstants.PROP_URL) - val publicUrl: String = config.endpointProp(CogboardConstants.PROP_PUBLIC_URL).ifBlank { url } - private val contentType: String = config.getString(CogboardConstants.PROP_CONTENT_TYPE) + val user: String = config.endpointProp(Props.USER) + val password: String = config.endpointProp(Props.PASSWORD) + val token: String = config.endpointProp(Props.TOKEN) + val url: String = config.endpointProp(Props.URL) + val publicUrl: String = config.endpointProp(Props.PUBLIC_URL).ifBlank { url } + private val contentType: String = config.getString(Props.CONTENT_TYPE) ?: com.cognifide.cogboard.http.HttpConstants.CONTENT_TYPE_JSON private lateinit var consumer: MessageConsumer<JsonObject> @@ -63,46 +64,46 @@ abstract class AsyncWidget( abstract fun handleResponse(responseBody: JsonObject) protected fun httpGet(url: String, requestId: String = "") { - vertx.eventBus().send(CogboardConstants.EVENT_HTTP_GET, + vertx.eventBus().send(Event.HTTP_GET, basicProps(url) - .put(CogboardConstants.PROP_REQUEST_ID, requestId) - .put(CogboardConstants.PROP_TOKEN, token) + .put(Props.REQUEST_ID, requestId) + .put(Props.TOKEN, token) ) } protected fun httpGetStatus(url: String) { - vertx.eventBus().send(CogboardConstants.EVENT_HTTP_CHECK, + vertx.eventBus().send(Event.HTTP_CHECK, basicProps(url) ) } protected fun httpPut(url: String, body: JsonObject) { - vertx.eventBus().send(CogboardConstants.EVENT_HTTP_PUT, + vertx.eventBus().send(Event.HTTP_PUT, basicProps(url) - .put(CogboardConstants.PROP_BODY, body) + .put(Props.BODY, body) ) } protected fun httpPost(url: String, body: JsonObject) { - vertx.eventBus().send(CogboardConstants.EVENT_HTTP_POST, + vertx.eventBus().send(Event.HTTP_POST, basicProps(url) - .put(CogboardConstants.PROP_BODY, body) + .put(Props.BODY, body) ) } protected fun httpDelete(url: String) { - vertx.eventBus().send(CogboardConstants.EVENT_HTTP_DELETE, + vertx.eventBus().send(Event.HTTP_DELETE, basicProps(url) ) } private fun basicProps(url: String): JsonObject { return JsonObject() - .put(CogboardConstants.PROP_URL, url) - .put(CogboardConstants.PROP_EVENT_ADDRESS, eventBusAddress) - .put(CogboardConstants.PROP_USER, user) - .put(CogboardConstants.PROP_PASSWORD, password) - .put(CogboardConstants.PROP_AUTHENTICATION_TYPES, Json.encode(authenticationTypes())) - .put(CogboardConstants.PROP_CONTENT_TYPE, contentType) + .put(Props.URL, url) + .put(Props.EVENT_ADDRESS, eventBusAddress) + .put(Props.USER, user) + .put(Props.PASSWORD, password) + .put(Props.AUTHENTICATION_TYPES, Json.encode(authenticationTypes())) + .put(Props.CONTENT_TYPE, contentType) } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/BaseWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/BaseWidget.kt index d1053ed9c..24985ebd4 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/BaseWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/BaseWidget.kt @@ -9,7 +9,11 @@ import java.util.Date import java.util.Timer import java.util.TimerTask import kotlin.concurrent.timerTask -import com.cognifide.cogboard.CogboardConstants as CC +import com.cognifide.cogboard.CogboardConstants.Props +import com.cognifide.cogboard.CogboardConstants.Event +import com.cognifide.cogboard.CogboardConstants.EventType +import com.cognifide.cogboard.CogboardConstants.StatusCode +import com.cognifide.cogboard.CogboardConstants.Companion.DEFAULT_VALUES /** * Base widget class for extending - use this class if your new widget needs to do some computations on backend. @@ -24,16 +28,16 @@ abstract class BaseWidget( private var consumer: MessageConsumer<JsonObject>? = null override val id: String - get() = config.getString(CC.PROP_ID) + get() = config.getString(Props.ID) override val type: String - get() = config.getString(CC.PROP_WIDGET_TYPE) + get() = config.getString(Props.WIDGET_TYPE) val eventBusAddress: String get() = "event.widget.$id" val schedulePeriod: Long - get() = config.getLong(CC.PROP_SCHEDULE_PERIOD) ?: CC.PROP_SCHEDULE_PERIOD_DEFAULT + get() = config.getLong(Props.SCHEDULE_PERIOD) ?: Props.SCHEDULE_PERIOD_DEFAULT var task: TimerTask? = null @@ -41,7 +45,7 @@ abstract class BaseWidget( * Attach all default values to config */ init { - CC.DEFAULT_VALUES.forEach { + DEFAULT_VALUES.forEach { if (!config.containsKey(it.key)) with(config) { put(it.key, it.value) } } } @@ -58,13 +62,13 @@ abstract class BaseWidget( */ override fun send(state: Any, dontWrap: Boolean) { val data = if (dontWrap && state is JsonObject) state - else JsonObject().put(CC.PROP_CONTENT, state) + else JsonObject().put(Props.CONTENT, state) - data.put(CC.PROP_ID, id) - data.put(CC.PROP_EVENT_TYPE, PROP_EVENT_TYPE_WIDGET_UPDATE) - data.getJsonObject(CC.PROP_CONTENT).attachUpdateDate() - boardService.saveContent(id, data.getJsonObject(CC.PROP_CONTENT)) - vertx.eventBus().send(CC.EVENT_SEND_MESSAGE_TO_WEBSOCKET, data) + data.put(Props.ID, id) + data.put(Props.EVENT_TYPE, EventType.WIDGET_UPDATE) + data.getJsonObject(Props.CONTENT).attachUpdateDate() + boardService.saveContent(id, data.getJsonObject(Props.CONTENT)) + vertx.eventBus().send(Event.SEND_MESSAGE_TO_WEBSOCKET, data) } /** @@ -72,9 +76,9 @@ abstract class BaseWidget( */ fun sendConfigurationError(cause: String = "") { send(JsonObject() - .put(CC.PROP_ERROR_MESSAGE, "Configuration Error") - .put(CC.PROP_ERROR_CAUSE, cause) - .put(CC.PROP_WIDGET_STATUS, Widget.Status.ERROR_CONFIGURATION) + .put(Props.ERROR_MESSAGE, "Configuration Error") + .put(Props.ERROR_CAUSE, cause) + .put(Props.WIDGET_STATUS, Widget.Status.ERROR_CONFIGURATION) ) } @@ -83,8 +87,8 @@ abstract class BaseWidget( } fun checkAuthorized(responseBody: JsonObject): Boolean { - val statusCode = responseBody.getInteger(CC.PROP_STATUS_CODE, CC.STATUS_CODE_200) - return if (statusCode == CC.STATUS_CODE_401) { + val statusCode = responseBody.getInteger(Props.STATUS_CODE, StatusCode.a200) + return if (statusCode == StatusCode.a401) { sendConfigurationError("Unauthorized") false } else true @@ -94,7 +98,7 @@ abstract class BaseWidget( * Will start Schedule when schedulePeriod > 0, execute once otherwise */ override fun start(): Widget { - if (config.getBoolean(CC.PROP_DISABLED) != true) { + if (config.getBoolean(Props.DISABLED) != true) { startWithSchedule() } return this @@ -131,22 +135,21 @@ abstract class BaseWidget( private fun startWithSchedule() { if (schedulePeriod > 0L) { task = timerTask { updateState() } - Timer().schedule(task, CC.PROP_SCHEDULE_DELAY_DEFAULT, schedulePeriod * TO_SECONDS) + Timer().schedule(task, Props.SCHEDULE_DELAY_DEFAULT, schedulePeriod * TO_SECONDS) } else { updateState() } } private fun JsonObject.attachUpdateDate() { - this.put(CC.PROP_LAST_UPDATED, Date().time) + this.put(Props.LAST_UPDATED, Date().time) } protected fun JsonObject.endpointProp(prop: String): String { - return this.getJsonObject(CC.PROP_ENDPOINT_LOADED)?.getString(prop) ?: "" + return this.getJsonObject(Props.ENDPOINT_LOADED)?.getString(prop) ?: "" } companion object { - const val PROP_EVENT_TYPE_WIDGET_UPDATE = "widget-update" const val TO_SECONDS = 1000 } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/WidgetIndex.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/WidgetIndex.kt index 5b727c854..70e8e7992 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/WidgetIndex.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/WidgetIndex.kt @@ -1,6 +1,6 @@ package com.cognifide.cogboard.widget -import com.cognifide.cogboard.CogboardConstants as CC +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.storage.VolumeStorageFactory.appConfig import com.cognifide.cogboard.widget.type.AemBundleInfoWidget @@ -60,8 +60,8 @@ class WidgetIndex { .filter { !excludedWidgets.contains(it.key) } .forEach { widgetsJson.add(JsonObject() - .put(CC.PROP_VALUE, it.value.simpleName) - .put(CC.PROP_DISPLAY, it.key)) + .put(Props.VALUE, it.value.simpleName) + .put(Props.DISPLAY, it.key)) } return widgetsJson } @@ -70,7 +70,7 @@ class WidgetIndex { * @return new widget instance or default widget instance for all widgets that don't require any backend logic. */ fun create(config: JsonObject, vertx: Vertx): BaseWidget { - val typeName = config.getString(CC.PROP_WIDGET_TYPE) + val typeName = config.getString(Props.WIDGET_TYPE) val widgetType = AVAILABLE_WIDGETS .values .stream() diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/ContentUpdateWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/ContentUpdateWidget.kt index 7df1e27db..914f4f52e 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/ContentUpdateWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/ContentUpdateWidget.kt @@ -14,7 +14,7 @@ class ContentUpdateWidget : RoutingHandlerFactory { override fun create(vertx: Vertx?, config: JsonObject?): Handler<RoutingContext> = Handler { event -> vertx ?.eventBus() - ?.publish(CogboardConstants.EVENT_UPDATE_WIDGET_CONTENT_CONFIG, event.body.toJsonObject()) + ?.publish(CogboardConstants.Event.UPDATE_WIDGET_CONTENT_CONFIG, event.body.toJsonObject()) event .response() .end(config?.getJsonObject("body", DEFAULT_NO_BODY)?.encode()) diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/DeleteWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/DeleteWidget.kt index 5d3dab857..5d757fb27 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/DeleteWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/DeleteWidget.kt @@ -14,7 +14,7 @@ class DeleteWidget : RoutingHandlerFactory { override fun create(vertx: Vertx?, config: JsonObject?): Handler<RoutingContext> = Handler { event -> vertx ?.eventBus() - ?.publish(CogboardConstants.EVENT_DELETE_WIDGET_CONFIG, event.body.toJsonObject()) + ?.publish(CogboardConstants.Event.DELETE_WIDGET_CONFIG, event.body.toJsonObject()) event.reroute("/api/session/refresh") } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/UpdateWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/UpdateWidget.kt index 2fb65badb..dfa3b2896 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/UpdateWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/handler/UpdateWidget.kt @@ -14,7 +14,7 @@ class UpdateWidget : RoutingHandlerFactory { override fun create(vertx: Vertx?, config: JsonObject?): Handler<RoutingContext> = Handler { event -> vertx ?.eventBus() - ?.publish(CogboardConstants.EVENT_UPDATE_WIDGET_CONFIG, event.body.toJsonObject()) + ?.publish(CogboardConstants.Event.UPDATE_WIDGET_CONFIG, event.body.toJsonObject()) event.reroute("/api/session/refresh") } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemBundleInfoWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemBundleInfoWidget.kt index 8e7b05add..12d092fd6 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemBundleInfoWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemBundleInfoWidget.kt @@ -6,7 +6,7 @@ import com.cognifide.cogboard.widget.Widget import io.vertx.core.Vertx import io.vertx.core.json.JsonArray import io.vertx.core.json.JsonObject -import com.cognifide.cogboard.CogboardConstants as CC +import com.cognifide.cogboard.CogboardConstants.Props class AemBundleInfoWidget( vertx: Vertx, @@ -67,11 +67,11 @@ class AemBundleInfoWidget( val url = "$url/system/console/bundles" return JsonObject() - .put(CC.PROP_URL, url) + .put(Props.URL, url) .put(PROP_BUNDLE_STATUS, numericStatus) .put(PROP_EXCLUDED_BUNDLES, excludedBundles) .put(PROP_INACTIVE_BUNDLES, inactiveBundles) - .put(CC.PROP_WIDGET_STATUS, statusByNumbers(numericStatus)) + .put(Props.WIDGET_STATUS, statusByNumbers(numericStatus)) } private fun statusByNumbers(numericStatus: MutableMap<String, Int>): Widget.Status { diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemHealthcheckWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemHealthcheckWidget.kt index 50077a8fe..7ee825fa9 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemHealthcheckWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/AemHealthcheckWidget.kt @@ -1,6 +1,5 @@ package com.cognifide.cogboard.widget.type -import com.cognifide.cogboard.CogboardConstants import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.widget.AsyncWidget import com.cognifide.cogboard.widget.Widget @@ -10,6 +9,7 @@ import com.cognifide.cogboard.widget.Widget.Status.UNSTABLE import io.vertx.core.Vertx import io.vertx.core.json.JsonArray import io.vertx.core.json.JsonObject +import com.cognifide.cogboard.CogboardConstants.Props class AemHealthcheckWidget( vertx: Vertx, @@ -23,7 +23,7 @@ class AemHealthcheckWidget( if (checkAuthorized(responseBody)) { if (responseBody.containsKey("HealthCheck")) { sendSuccess(responseBody) - } else sendConfigurationError(responseBody.getString(CogboardConstants.PROP_ERROR_CAUSE)) + } else sendConfigurationError(responseBody.getString(Props.ERROR_CAUSE)) } } @@ -32,7 +32,7 @@ class AemHealthcheckWidget( val content = JsonObject() val status = attachHealthChecks(content, healthChecksResponse) - content.put(CogboardConstants.PROP_WIDGET_STATUS, status) + content.put(Props.WIDGET_STATUS, status) send(content) } @@ -53,7 +53,7 @@ class AemHealthcheckWidget( var widgetStatus = OK val overviewUrl = "$publicUrl/$OVERVIEW_PATH" val result = JsonObject() - content.put(CogboardConstants.PROP_URL, overviewUrl) + content.put(Props.URL, overviewUrl) content.put("healthChecks", result) selectedHealthChecks @@ -61,15 +61,15 @@ class AemHealthcheckWidget( .map { it as String } .forEach { healthcheckName -> healthChecksResponse.getJsonObject(healthcheckName)?.let { - val status = Widget.Status.from(it.getString(CogboardConstants.PROP_STATUS)) + val status = Widget.Status.from(it.getString(Props.STATUS)) val url = "$publicUrl/$DETAILS_PATH/$healthcheckName" if (status == FAIL) widgetStatus = FAIL if (status == UNSTABLE && widgetStatus == OK) widgetStatus = UNSTABLE result.put(healthcheckName, JsonObject() - .put(CogboardConstants.PROP_STATUS, status) - .put(CogboardConstants.PROP_URL, url) + .put(Props.STATUS, status) + .put(Props.URL, url) ) } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidget.kt index 4c37bfc64..2fcf863a6 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidget.kt @@ -5,7 +5,7 @@ import com.cognifide.cogboard.widget.AsyncWidget import com.cognifide.cogboard.widget.Widget import io.vertx.core.Vertx import io.vertx.core.json.JsonObject -import com.cognifide.cogboard.CogboardConstants as CC +import com.cognifide.cogboard.CogboardConstants.Props class BambooDeploymentWidget( vertx: Vertx, @@ -29,9 +29,9 @@ class BambooDeploymentWidget( private fun sendNeverDeployed() { send(JsonObject() - .put(CC.PROP_ERROR_MESSAGE, "Never Deployed") - .put(CC.PROP_ERROR_CAUSE, "") - .put(CC.PROP_WIDGET_STATUS, Widget.Status.UNKNOWN)) + .put(Props.ERROR_MESSAGE, "Never Deployed") + .put(Props.ERROR_CAUSE, "") + .put(Props.WIDGET_STATUS, Widget.Status.UNKNOWN)) } private fun sendSuccess(result: JsonObject) { @@ -39,9 +39,9 @@ class BambooDeploymentWidget( val deploymentResultId = result.getInteger("id") result.apply { - put(CC.PROP_URL, constructUrl(deploymentResultId)) - put(CC.PROP_RELEASE_NAME, deploymentVersionName) - put(CC.PROP_WIDGET_STATUS, getStatus(result)) + put(Props.URL, constructUrl(deploymentResultId)) + put(Props.RELEASE_NAME, deploymentVersionName) + put(Props.WIDGET_STATUS, getStatus(result)) remove("items") } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooPlanWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooPlanWidget.kt index 40645e27f..fce78a77b 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooPlanWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/BambooPlanWidget.kt @@ -5,7 +5,7 @@ import com.cognifide.cogboard.widget.AsyncWidget import com.cognifide.cogboard.widget.Widget import io.vertx.core.Vertx import io.vertx.core.json.JsonObject -import com.cognifide.cogboard.CogboardConstants as CC +import com.cognifide.cogboard.CogboardConstants.Props class BambooPlanWidget( vertx: Vertx, @@ -29,17 +29,17 @@ class BambooPlanWidget( private fun sendNeverBuilt() { send(JsonObject() - .put(CC.PROP_ERROR_MESSAGE, "Never Built") - .put(CC.PROP_ERROR_CAUSE, "") - .put(CC.PROP_WIDGET_STATUS, Widget.Status.UNKNOWN)) + .put(Props.ERROR_MESSAGE, "Never Built") + .put(Props.ERROR_CAUSE, "") + .put(Props.WIDGET_STATUS, Widget.Status.UNKNOWN)) } private fun sendSuccess(results: JsonObject) { results.getJsonArray("result")?.first().let { val result = it as JsonObject - result.put(CC.PROP_URL, extractUrl(result.getString("buildResultKey"))) - .put(CC.PROP_WIDGET_STATUS, Widget.Status.from(result.getString("state"))) + result.put(Props.URL, extractUrl(result.getString("buildResultKey"))) + .put(Props.WIDGET_STATUS, Widget.Status.from(result.getString("state"))) send(result) } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JenkinsJobWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JenkinsJobWidget.kt index 1dbc54c2c..dcfc2961b 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JenkinsJobWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JenkinsJobWidget.kt @@ -8,7 +8,7 @@ import com.cognifide.cogboard.widget.Widget import io.vertx.core.Vertx import io.vertx.core.json.JsonObject import kotlin.streams.toList -import com.cognifide.cogboard.CogboardConstants as CC +import com.cognifide.cogboard.CogboardConstants.Props class JenkinsJobWidget( vertx: Vertx, @@ -37,8 +37,8 @@ class JenkinsJobWidget( else Widget.Status.from(lastBuild.getString("result", "")) lastBuild.put("branch", extractBranchInfo(lastBuild)) - .put(CC.PROP_URL, lastBuild.getString(CC.PROP_URL, "").makeUrlPublic(publicUrl)) - .put(CC.PROP_WIDGET_STATUS, status) + .put(Props.URL, lastBuild.getString(Props.URL, "").makeUrlPublic(publicUrl)) + .put(Props.WIDGET_STATUS, status) send(lastBuild) } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JiraBucketsWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JiraBucketsWidget.kt index 0da4836c5..a0cabe480 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JiraBucketsWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/JiraBucketsWidget.kt @@ -5,31 +5,30 @@ import com.cognifide.cogboard.widget.AsyncWidget import io.vertx.core.Vertx import io.vertx.core.json.JsonArray import io.vertx.core.json.JsonObject -import com.cognifide.cogboard.CogboardConstants as CC - +import com.cognifide.cogboard.CogboardConstants.Props class JiraBucketsWidget( vertx: Vertx, config: JsonObject, serv: BoardsConfigService ) : AsyncWidget(vertx, config, serv) { - private val bucketQueries: JsonArray = config.getJsonArray(CC.PROP_BUCKET_QUERIES) + private val bucketQueries: JsonArray = config.getJsonArray(Props.BUCKET_QUERIES) private val buckets: JsonArray = JsonArray() init { bucketQueries.forEach { if (it is JsonObject) { buckets.add(JsonObject() - .put(CC.PROP_ID, it.getString(CC.PROP_ID)) - .put(CC.PROP_NAME, it.getString(CC.PROP_BUCKET_NAME)) - .put(CC.PROP_URL, createBucketUrl(it))) + .put(Props.ID, it.getString(Props.ID)) + .put(Props.NAME, it.getString(Props.BUCKET_NAME)) + .put(Props.URL, createBucketUrl(it))) } } } override fun handleResponse(responseBody: JsonObject) { val totalIssues = responseBody.getInteger("total") - val bucketId = responseBody.getString(CC.PROP_REQUEST_ID) + val bucketId = responseBody.getString(Props.REQUEST_ID) (buckets.first { compareId(bucketId, it) } as JsonObject) .put("issueCounts", totalIssues ?: "Error") @@ -38,16 +37,16 @@ class JiraBucketsWidget( } private fun createBucketUrl(bucket: JsonObject) = - "${url}jira/issues/?jql=${bucket.getString(CC.PROP_JQL_QUERY)}&maxResults=0" + "${url}jira/issues/?jql=${bucket.getString(Props.JQL_QUERY)}&maxResults=0" - private fun compareId(bucketId: String?, it: Any?) = bucketId == (it as JsonObject).getString(CC.PROP_ID) + private fun compareId(bucketId: String?, it: Any?) = bucketId == (it as JsonObject).getString(Props.ID) override fun updateState() { if (url.isNotBlank()) { bucketQueries.list.forEach { bucketQuery -> if (bucketQuery is JsonObject) { - val bucketId = bucketQuery.getString(CC.PROP_ID) - val jqlQuery = bucketQuery.getString(CC.PROP_JQL_QUERY) + val bucketId = bucketQuery.getString(Props.ID) + val jqlQuery = bucketQuery.getString(Props.JQL_QUERY) httpGet(url = "$url/jira/rest/api/2/search/?jql=$jqlQuery&maxResults=0", requestId = bucketId) } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/ServiceCheckWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/ServiceCheckWidget.kt index 7c24fc064..cc59d40e4 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/ServiceCheckWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/ServiceCheckWidget.kt @@ -1,17 +1,7 @@ package com.cognifide.cogboard.widget.type -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_BODY -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_EXPECTED_RESPONSE_BODY -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_EXPECTED_STATUS_CODE -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_PATH -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_REQUEST_METHOD -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_STATUS_CODE -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_URL -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_WIDGET_STATUS -import com.cognifide.cogboard.CogboardConstants.Companion.REQUEST_METHOD_DELETE -import com.cognifide.cogboard.CogboardConstants.Companion.REQUEST_METHOD_GET -import com.cognifide.cogboard.CogboardConstants.Companion.REQUEST_METHOD_POST -import com.cognifide.cogboard.CogboardConstants.Companion.REQUEST_METHOD_PUT +import com.cognifide.cogboard.CogboardConstants.Props +import com.cognifide.cogboard.CogboardConstants.RequestMethod import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.http.auth.AuthenticationType import com.cognifide.cogboard.widget.AsyncWidget @@ -27,13 +17,13 @@ class ServiceCheckWidget( serv: BoardsConfigService ) : AsyncWidget(vertx, config, serv) { - private val expectedStatusCode = config.getInteger(PROP_EXPECTED_STATUS_CODE, 0) - private val requestMethod = config.getString(PROP_REQUEST_METHOD, EMPTY_STRING) - private val requestBody = config.getString(PROP_BODY, EMPTY_STRING) - private val expectedResponseBody = config.getString(PROP_EXPECTED_RESPONSE_BODY, EMPTY_STRING) + private val expectedStatusCode = config.getInteger(Props.EXPECTED_STATUS_CODE, 0) + private val requestMethod = config.getString(Props.REQUEST_METHOD, EMPTY_STRING) + private val requestBody = config.getString(Props.BODY, EMPTY_STRING) + private val expectedResponseBody = config.getString(Props.EXPECTED_RESPONSE_BODY, EMPTY_STRING) private val urlToCheck: String - get() = if (publicUrl.isNotBlank()) "$publicUrl${config.getString(PROP_PATH, EMPTY_STRING)}" - else config.getString(PROP_PATH, EMPTY_STRING) + get() = if (publicUrl.isNotBlank()) "$publicUrl${config.getString(Props.PATH, EMPTY_STRING)}" + else config.getString(Props.PATH, EMPTY_STRING) override fun authenticationTypes(): Set<AuthenticationType> { return setOf(AuthenticationType.TOKEN, AuthenticationType.BASIC) @@ -42,8 +32,8 @@ class ServiceCheckWidget( override fun updateState() { if (urlToCheck.isNotBlank()) { when (requestMethod) { - REQUEST_METHOD_GET -> httpGet(url = urlToCheck) - REQUEST_METHOD_DELETE -> httpDelete(url = urlToCheck) + RequestMethod.GET -> httpGet(url = urlToCheck) + RequestMethod.DELETE -> httpDelete(url = urlToCheck) else -> handlePostPut() } } else { @@ -54,9 +44,9 @@ class ServiceCheckWidget( private fun handlePostPut() { try { val body = if (requestBody.isNotBlank()) JsonObject(requestBody) else JsonObject() - if (requestMethod == REQUEST_METHOD_PUT) { + if (requestMethod == RequestMethod.PUT) { httpPut(url = urlToCheck, body = body) - } else if (requestMethod == REQUEST_METHOD_POST) { + } else if (requestMethod == RequestMethod.POST) { httpPost(url = urlToCheck, body = body) } } catch (e: DecodeException) { @@ -65,16 +55,16 @@ class ServiceCheckWidget( } override fun handleResponse(responseBody: JsonObject) { - responseBody.put(PROP_URL, urlToCheck) - .put(PROP_EXPECTED_RESPONSE_BODY, expectedResponseBody) - .put(PROP_EXPECTED_STATUS_CODE, expectedStatusCode) - .put(PROP_WIDGET_STATUS, getStatusResponse(responseBody)) + responseBody.put(Props.URL, urlToCheck) + .put(Props.EXPECTED_RESPONSE_BODY, expectedResponseBody) + .put(Props.EXPECTED_STATUS_CODE, expectedStatusCode) + .put(Props.WIDGET_STATUS, getStatusResponse(responseBody)) send(responseBody) } private fun getStatusResponse(responseBody: JsonObject): Widget.Status { - val statusCode = responseBody.getInteger(PROP_STATUS_CODE, 0) + val statusCode = responseBody.getInteger(Props.STATUS_CODE, 0) val isStatusEquals = Widget.Status.compare(expectedStatusCode, statusCode) val isBodyEquals = isResponseBodyEquals(responseBody) @@ -85,7 +75,7 @@ class ServiceCheckWidget( private fun isResponseBodyEquals(responseBody: JsonObject): Boolean { return if (expectedResponseBody.isNotBlank()) { - responseBody.getString(PROP_BODY)?.contains(expectedResponseBody) == true + responseBody.getString(Props.BODY)?.contains(expectedResponseBody) == true } else expectedResponseBody.isEmpty() } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/randompicker/RandomPickerWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/randompicker/RandomPickerWidget.kt index a1301833e..8f5ad6dae 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/randompicker/RandomPickerWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/randompicker/RandomPickerWidget.kt @@ -1,6 +1,5 @@ package com.cognifide.cogboard.widget.type.randompicker -import com.cognifide.cogboard.CogboardConstants import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.storage.ContentRepository import com.cognifide.cogboard.widget.BaseWidget @@ -8,6 +7,7 @@ import io.vertx.core.Vertx import io.vertx.core.json.JsonArray import io.vertx.core.json.JsonObject import java.time.LocalDateTime +import com.cognifide.cogboard.CogboardConstants.Props import java.time.ZoneOffset class RandomPickerWidget( @@ -22,7 +22,7 @@ class RandomPickerWidget( private val isDaily: Boolean = config.getBoolean(PROP_IS_DAILY, false) init { - super.config.put(CogboardConstants.PROP_SCHEDULE_PERIOD, SYNC_INTERVAL) + super.config.put(Props.SCHEDULE_PERIOD, SYNC_INTERVAL) createDynamicChangeSubscriber()?.handler { userEventCycle() } } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/sonarqube/SonarQubeWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/sonarqube/SonarQubeWidget.kt index e9f659d96..870666a55 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/sonarqube/SonarQubeWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/sonarqube/SonarQubeWidget.kt @@ -1,6 +1,5 @@ package com.cognifide.cogboard.widget.type.sonarqube -import com.cognifide.cogboard.CogboardConstants import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.http.auth.AuthenticationType import com.cognifide.cogboard.widget.AsyncWidget @@ -8,6 +7,7 @@ import com.cognifide.cogboard.widget.Widget import io.vertx.core.Vertx import io.vertx.core.json.JsonArray import io.vertx.core.json.JsonObject +import com.cognifide.cogboard.CogboardConstants.Props class SonarQubeWidget( vertx: Vertx, @@ -39,8 +39,8 @@ class SonarQubeWidget( val content = data.copy() attachMetrics(content, it) - content.put(CogboardConstants.PROP_URL, version.getDashboardUrl(publicUrl, key, idNumber)) - .put(CogboardConstants.PROP_WIDGET_STATUS, extractStatus(it)) + content.put(Props.URL, version.getDashboardUrl(publicUrl, key, idNumber)) + .put(Props.WIDGET_STATUS, extractStatus(it)) send(content) } diff --git a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/zabbix/ZabbixWidget.kt b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/zabbix/ZabbixWidget.kt index ab99d4d7b..471ffdc0f 100644 --- a/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/zabbix/ZabbixWidget.kt +++ b/cogboard-app/src/main/kotlin/com/cognifide/cogboard/widget/type/zabbix/ZabbixWidget.kt @@ -1,6 +1,5 @@ package com.cognifide.cogboard.widget.type.zabbix -import com.cognifide.cogboard.CogboardConstants import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.http.auth.AuthenticationType import com.cognifide.cogboard.widget.AsyncWidget @@ -11,6 +10,7 @@ import io.vertx.core.json.JsonObject import io.vertx.core.logging.Logger import io.vertx.core.logging.LoggerFactory import kotlin.math.roundToLong +import com.cognifide.cogboard.CogboardConstants.Props class ZabbixWidget( vertx: Vertx, @@ -42,8 +42,8 @@ class ZabbixWidget( private fun attachCredentialsToBody(): JsonObject { val credentials = JsonObject() - .put(CogboardConstants.PROP_USER, user) - .put(CogboardConstants.PROP_PASSWORD, password) + .put(Props.USER, user) + .put(Props.PASSWORD, password) return prepareRequestBody(USER_LOGIN, credentials) } @@ -76,7 +76,7 @@ class ZabbixWidget( .put(IS_EXPANDED_CONTENT, hasExpandedContent(responseParams.extractValue(NAME))) .put(NAME, responseParams.extractValue(NAME)) .put(HISTORY, modifyHistory(responseParams)) - .put(CogboardConstants.PROP_WIDGET_STATUS, getStatusResponse(lastValue)) + .put(Props.WIDGET_STATUS, getStatusResponse(lastValue)) send(state) } @@ -93,7 +93,7 @@ class ZabbixWidget( } private fun fetchHistoryFromContent(): Map<String, Any> { - val widgetId = config.getString(CogboardConstants.PROP_ID) + val widgetId = config.getString(Props.ID) val content = boardService.getContent(widgetId) return content.getJsonObject(HISTORY, JsonObject()).map } @@ -127,8 +127,8 @@ class ZabbixWidget( LOGGER.error("Error message: $errorMessage; Cause: $errorCause") send(JsonObject() - .put(CogboardConstants.PROP_ERROR_MESSAGE, errorMessage) - .put(CogboardConstants.PROP_ERROR_CAUSE, errorCause)) + .put(Props.ERROR_MESSAGE, errorMessage) + .put(Props.ERROR_CAUSE, errorCause)) } private fun saveToken(token: String) { diff --git a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/config/storage/VolumeStorageTest.kt b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/config/storage/VolumeStorageTest.kt index 746bce950..8b023d694 100644 --- a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/config/storage/VolumeStorageTest.kt +++ b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/config/storage/VolumeStorageTest.kt @@ -1,9 +1,6 @@ package com.cognifide.cogboard.config.storage -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_BOARDS -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_CREDENTIALS -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_ENDPOINTS -import com.cognifide.cogboard.CogboardConstants.Companion.PROP_USER +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.ConfigType import com.cognifide.cogboard.storage.VolumeStorage import io.vertx.core.json.JsonObject @@ -19,10 +16,10 @@ internal class VolumeStorageTest { private val storagePath = VolumeStorageTest::class.java.getResource("/board").path private val configs = listOf( - Triple(ConfigType.ADMIN, "admin.json", PROP_USER), - Triple(ConfigType.CREDENTIALS, "credentials.json", PROP_CREDENTIALS), - Triple(ConfigType.BOARDS, "config.json", PROP_BOARDS), - Triple(ConfigType.ENDPOINTS, "endpoints.json", PROP_ENDPOINTS) + Triple(ConfigType.ADMIN, "admin.json", Props.USER), + Triple(ConfigType.CREDENTIALS, "credentials.json", Props.CREDENTIALS), + Triple(ConfigType.BOARDS, "config.json", Props.BOARDS), + Triple(ConfigType.ENDPOINTS, "endpoints.json", Props.ENDPOINTS) ) @TestFactory diff --git a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/WidgetIndexTest.kt b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/WidgetIndexTest.kt index 27dc854ec..b3bce5368 100644 --- a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/WidgetIndexTest.kt +++ b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/WidgetIndexTest.kt @@ -1,6 +1,6 @@ package com.cognifide.cogboard.widget -import com.cognifide.cogboard.CogboardConstants as CC +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.widget.type.ServiceCheckWidget import com.cognifide.cogboard.widget.type.WhiteSpaceWidget import com.cognifide.cogboard.widget.type.WidgetTestBase @@ -43,12 +43,12 @@ class WidgetIndexTest : WidgetTestBase() { val widget = WidgetIndex.availableWidgets() .stream() .map { it as JsonObject } - .filter { it.getString(CC.PROP_DISPLAY) == "Zabbix" } + .filter { it.getString(Props.DISPLAY) == "Zabbix" } .findFirst() .orElse(JsonObject()) - assertEquals("Zabbix", widget.getString(CC.PROP_DISPLAY)) - assertEquals("ZabbixWidget", widget.getString(CC.PROP_VALUE)) + assertEquals("Zabbix", widget.getString(Props.DISPLAY)) + assertEquals("ZabbixWidget", widget.getString(Props.VALUE)) } @Test @@ -56,15 +56,15 @@ class WidgetIndexTest : WidgetTestBase() { val widget = WidgetIndex.availableWidgets() .stream() .map { it as JsonObject } - .filter { it.getString(CC.PROP_DISPLAY) == "Service Check" } + .filter { it.getString(Props.DISPLAY) == "Service Check" } .findFirst() .orElse(JsonObject()) - assertEquals("Service Check", widget.getString(CC.PROP_DISPLAY)) - assertEquals("ServiceCheckWidget", widget.getString(CC.PROP_VALUE)) + assertEquals("Service Check", widget.getString(Props.DISPLAY)) + assertEquals("ServiceCheckWidget", widget.getString(Props.VALUE)) } - private fun config(type: String) = JsonObject().put(CC.PROP_WIDGET_TYPE, type) + private fun config(type: String) = JsonObject().put(Props.WIDGET_TYPE, type) override fun widgetName() = "not required" } \ No newline at end of file diff --git a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidgetTest.kt b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidgetTest.kt index 09e02be42..df60fc818 100644 --- a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidgetTest.kt +++ b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/BambooDeploymentWidgetTest.kt @@ -1,6 +1,6 @@ package com.cognifide.cogboard.widget.type -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props import io.vertx.core.json.JsonObject import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach @@ -13,7 +13,7 @@ class BambooDeploymentWidgetTest : WidgetTestBase() { override fun initWidget(): JsonObject = super.initWidget() - .put(CogboardConstants.PROP_ENDPOINT_LOADED, + .put(Props.ENDPOINT_LOADED, JsonObject().put("url", "https://test.bamboo.com")) @BeforeEach diff --git a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/WidgetTestBase.kt b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/WidgetTestBase.kt index 3a5bb9b55..1cbed7d04 100644 --- a/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/WidgetTestBase.kt +++ b/cogboard-app/src/test/kotlin/com/cognifide/cogboard/widget/type/WidgetTestBase.kt @@ -1,6 +1,6 @@ package com.cognifide.cogboard.widget.type -import com.cognifide.cogboard.CogboardConstants +import com.cognifide.cogboard.CogboardConstants.Props import com.cognifide.cogboard.config.service.BoardsConfigService import com.cognifide.cogboard.storage.ContentRepository import io.vertx.core.Vertx @@ -51,20 +51,20 @@ abstract class WidgetTestBase { fun captureWhatIsSent(eventBus: EventBus, captor: ArgumentCaptor<JsonObject>): Pair<JsonObject, JsonObject> { verify(eventBus).send(eq("cogboard.websocket.message"), captor.capture()) - return Pair(captor.value, captor.value.getJsonObject(CogboardConstants.PROP_CONTENT)) + return Pair(captor.value, captor.value.getJsonObject(Props.CONTENT)) } fun assertStatus(expected: String, result: JsonObject) { - assertEquals(expected, result.getJsonObject(CogboardConstants.PROP_CONTENT) - .getString(CogboardConstants.PROP_WIDGET_STATUS)) + assertEquals(expected, result.getJsonObject(Props.CONTENT) + .getString(Props.WIDGET_STATUS)) } fun assertUpdateDatePresent(result: JsonObject) { - assertNotNull(result.getJsonObject(CogboardConstants.PROP_CONTENT) - .getLong(CogboardConstants.PROP_LAST_UPDATED)) + assertNotNull(result.getJsonObject(Props.CONTENT) + .getLong(Props.LAST_UPDATED)) } fun assertURL(expected: String, result: JsonObject) { - assertEquals(expected, result.getString(CogboardConstants.PROP_URL)) + assertEquals(expected, result.getString(Props.URL)) } } diff --git a/cogboard-webapp/src/App.js b/cogboard-webapp/src/App.js index a02ba2bbc..6923d0a06 100644 --- a/cogboard-webapp/src/App.js +++ b/cogboard-webapp/src/App.js @@ -14,7 +14,8 @@ import { import { saveDataSuccess, loginSuccess, - guestLoginSuccess + guestLoginSuccess, + refetchInitData } from './actions/actionCreators'; import { getIsWaitingForNewVersion } from './selectors'; import { useInterval } from './hooks'; @@ -28,6 +29,7 @@ import ServerErrorPage from './components/ServerErrorPage'; function App() { const appInitialized = useSelector(({ app }) => app.initialized); + const refetchInitialData = useSelector(({ app }) => app.requiresRefetching); const dispatch = useDispatch(); const isWaitingForNewVersion = useSelector(getIsWaitingForNewVersion); const pullingNewVersionInfoDelay = isWaitingForNewVersion @@ -44,6 +46,12 @@ function App() { dispatch(fetchInitialData()); }, [dispatch]); + useEffect(() => { + if (refetchInitialData) { + dispatch(fetchInitialData()); + } + }, [refetchInitialData, dispatch]); + useInterval(() => { if (!isWaitingForNewVersion) { dispatch(fetchAppInfo()); @@ -58,8 +66,9 @@ function App() { if (eventType === 'widget-update') { dispatch(updateWidgetContent(data)); - } else if (eventType === 'notification-config-save') { + } else if (eventType === 'config-saved') { dispatch(saveDataSuccess()); + dispatch(refetchInitData()); } else if (eventType === 'new-version') { dispatch(pushNewVersionNotification(data)); } diff --git a/cogboard-webapp/src/actions/actionCreators.js b/cogboard-webapp/src/actions/actionCreators.js index 5fb7e45e3..eeb14828d 100644 --- a/cogboard-webapp/src/actions/actionCreators.js +++ b/cogboard-webapp/src/actions/actionCreators.js @@ -15,7 +15,7 @@ import { SORT_WIDGETS, REORDER_BOARDS, DATA_CHANGED, - SAVE_DATA_START, + REFETCH_DATA, SAVE_DATA_SUCCESS, LOGIN_SUCCESS, GUEST_LOGIN_SUCCESS, @@ -65,6 +65,10 @@ export const receiveData = state => ({ payload: state }); +export const refetchInitData = () => ({ + type: REFETCH_DATA +}); + export const requestUpdate = id => ({ type: REQUEST_UPDATE, payload: id @@ -129,10 +133,6 @@ export const dataChanged = () => ({ type: DATA_CHANGED }); -export const saveDataStart = () => ({ - type: SAVE_DATA_START -}); - export const saveDataSuccess = () => ({ type: SAVE_DATA_SUCCESS }); diff --git a/cogboard-webapp/src/actions/thunks.js b/cogboard-webapp/src/actions/thunks.js index e19027f96..7224d78d0 100644 --- a/cogboard-webapp/src/actions/thunks.js +++ b/cogboard-webapp/src/actions/thunks.js @@ -56,6 +56,7 @@ export const fetchInitialData = () => dispatch => { return fetchData(URL.LOAD_DATA).then(data => { dispatch(receiveData(data)); dispatch(initBoardProps()); + dispatch(pushNotification(NOTIFICATIONS.CONFIG_LOADED())); }, console.error); }; diff --git a/cogboard-webapp/src/actions/types.js b/cogboard-webapp/src/actions/types.js index 37175e867..93823f81d 100644 --- a/cogboard-webapp/src/actions/types.js +++ b/cogboard-webapp/src/actions/types.js @@ -1,6 +1,7 @@ export const INIT_BOARD_PROPS = 'INIT_BOARD_PROPS'; export const REQUEST_DATA = 'REQUEST_DATA'; export const RECEIVE_DATA = 'RECEIVE_DATA'; +export const REFETCH_DATA = 'REFETCH_DATA'; export const REQUEST_UPDATE = 'REQUEST_UPDATE'; export const UPDATE_WIDGET = 'UPDATE_WIDGET'; export const ADD_BOARD = 'ADD_BOARD'; diff --git a/cogboard-webapp/src/constants/index.js b/cogboard-webapp/src/constants/index.js index b20cc9aeb..277842657 100644 --- a/cogboard-webapp/src/constants/index.js +++ b/cogboard-webapp/src/constants/index.js @@ -331,5 +331,10 @@ export const NOTIFICATIONS = { type: 'error', message: message, duration: 3000 + }), + CONFIG_LOADED: () => ({ + type: 'info', + message: 'Config Loaded', + duration: 3000 }) }; diff --git a/cogboard-webapp/src/reducers/app/index.js b/cogboard-webapp/src/reducers/app/index.js index 69956f244..afe616c1e 100644 --- a/cogboard-webapp/src/reducers/app/index.js +++ b/cogboard-webapp/src/reducers/app/index.js @@ -8,10 +8,12 @@ import loginErrorMessage from './loginErrorMessage'; import isAuthenticated from './isAuthenticated'; import guestLogin from './guestLogin'; import logoutReasonMessage from './logoutReasonMessage'; +import requiresRefetching from './requiresRefetching'; import settings from './settings'; const app = combineReducers({ initialized, + requiresRefetching, dataFetching, isDataChanged, isDataSaving, diff --git a/cogboard-webapp/src/reducers/app/requiresRefetching.js b/cogboard-webapp/src/reducers/app/requiresRefetching.js new file mode 100644 index 000000000..7c2912152 --- /dev/null +++ b/cogboard-webapp/src/reducers/app/requiresRefetching.js @@ -0,0 +1,7 @@ +import { REFETCH_DATA } from '../../actions/types'; + +const requiresRefetching = (state = false, { type }) => { + return type === REFETCH_DATA; +}; + +export default requiresRefetching; diff --git a/cogboard-webapp/src/reducers/boards/allBoards.js b/cogboard-webapp/src/reducers/boards/allBoards.js index aae6ebdbd..887e930a9 100644 --- a/cogboard-webapp/src/reducers/boards/allBoards.js +++ b/cogboard-webapp/src/reducers/boards/allBoards.js @@ -11,7 +11,7 @@ const receiveData = (state, { payload }) => { boards: { allBoards } } = payload; - return [...state, ...allBoards]; + return [...allBoards]; }; const addBoard = (state, { payload }) => { diff --git a/detekt.yml b/detekt.yml index ca171e8e5..6dec38a35 100644 --- a/detekt.yml +++ b/detekt.yml @@ -504,7 +504,7 @@ style: active: false ReturnCount: active: true - max: 2 + max: 3 excludedFunctions: "equals" excludeLabeled: false excludeReturnFromLambda: true