From 068746b52c945d1de146d1aac5abd6e1c4b2719c Mon Sep 17 00:00:00 2001 From: Alexis Hernandez Date: Sat, 10 Mar 2018 22:12:12 -0600 Subject: [PATCH] server: Add custom play HttpErrorHandler --- .../explorer/play/MyHttpErrorHandler.scala | 41 +++++++++++++++++++ server/conf/application.conf | 4 ++ 2 files changed, 45 insertions(+) create mode 100644 server/app/com/xsn/explorer/play/MyHttpErrorHandler.scala diff --git a/server/app/com/xsn/explorer/play/MyHttpErrorHandler.scala b/server/app/com/xsn/explorer/play/MyHttpErrorHandler.scala new file mode 100644 index 0000000..11ff514 --- /dev/null +++ b/server/app/com/xsn/explorer/play/MyHttpErrorHandler.scala @@ -0,0 +1,41 @@ +package com.xsn.explorer.play + +import javax.inject.Inject + +import com.alexitc.playsonify.PublicErrorRenderer +import com.alexitc.playsonify.models.{ErrorId, PublicError} +import org.slf4j.LoggerFactory +import play.api.http.HttpErrorHandler +import play.api.libs.json.Json +import play.api.mvc.RequestHeader +import play.api.mvc.Results.{InternalServerError, Status} + +import scala.concurrent.Future + +class MyHttpErrorHandler @Inject() (errorRenderer: PublicErrorRenderer) extends HttpErrorHandler { + + private val logger = LoggerFactory.getLogger(this.getClass) + + def onClientError(request: RequestHeader, statusCode: Int, message: String) = { + val publicError = PublicError.genericError(message) + val error = errorRenderer.renderPublicError(publicError) + val json = Json.obj( + "errors" -> Json.arr(error) + ) + + val result = Status(statusCode)(json) + Future.successful(result) + } + + def onServerError(request: RequestHeader, exception: Throwable) = { + val errorId = ErrorId.create + val error = errorRenderer.renderPrivateError(errorId) + val json = Json.obj( + "errors" -> Json.arr(error) + ) + + logger.error(s"Server error, errorId = [${errorId.string}]", exception) + val result = InternalServerError(json) + Future.successful(result) + } +} diff --git a/server/conf/application.conf b/server/conf/application.conf index a45d5b6..837dffb 100644 --- a/server/conf/application.conf +++ b/server/conf/application.conf @@ -6,6 +6,10 @@ play.filters.hosts { allowed = ["localhost", "localhost:9000", "127.0.0.1:9000"] } +play.http { + errorHandler = "com.xsn.explorer.play.MyHttpErrorHandler" +} + rpc { host = "http://localhost:51473" username = "dummy"