aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/rest
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/core/rest')
-rw-r--r--src/main/scala/xyz/driver/core/rest/DriverRoute.scala3
-rw-r--r--src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala5
-rw-r--r--src/main/scala/xyz/driver/core/rest/errors/serviceException.scala4
3 files changed, 11 insertions, 1 deletions
diff --git a/src/main/scala/xyz/driver/core/rest/DriverRoute.scala b/src/main/scala/xyz/driver/core/rest/DriverRoute.scala
index 55f39ba..288245a 100644
--- a/src/main/scala/xyz/driver/core/rest/DriverRoute.scala
+++ b/src/main/scala/xyz/driver/core/rest/DriverRoute.scala
@@ -79,6 +79,9 @@ trait DriverRoute {
case e: InvalidActionException =>
log.info("Invalid client action error", e)
StatusCodes.Forbidden
+ case e: UnauthorizedException =>
+ log.info("Unauthorized user error", e)
+ StatusCodes.Unauthorized
case e: ResourceNotFoundException =>
log.info("Resource not found error", e)
StatusCodes.NotFound
diff --git a/src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala b/src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala
index 1fddd45..e1a94e1 100644
--- a/src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala
+++ b/src/main/scala/xyz/driver/core/rest/auth/AuthProvider.scala
@@ -4,6 +4,7 @@ import akka.http.scaladsl.server.directives.Credentials
import com.typesafe.scalalogging.Logger
import scalaz.OptionT
import xyz.driver.core.auth.{AuthToken, Permission, User}
+import xyz.driver.core.rest.errors.{ExternalServiceException, UnauthorizedException}
import xyz.driver.core.rest.{AuthorizedServiceRequestContext, ContextHeaders, ServiceRequestContext, serviceContext}
import scala.concurrent.{ExecutionContext, Future}
@@ -34,7 +35,9 @@ abstract class AuthProvider[U <: User](
log.info(s"Request (${context.trackingId}) missing authentication credentials")
Future.successful(None)
case Credentials.Provided(authToken) =>
- authenticatedUser(context.withAuthToken(AuthToken(authToken))).run
+ authenticatedUser(context.withAuthToken(AuthToken(authToken))).run.recover({
+ case ExternalServiceException(_, _, Some(UnauthorizedException(_))) => None
+ })
}
/**
diff --git a/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala b/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
index db289de..f2962c9 100644
--- a/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
+++ b/src/main/scala/xyz/driver/core/rest/errors/serviceException.scala
@@ -7,6 +7,10 @@ final case class InvalidInputException(override val message: String = "Invalid i
final case class InvalidActionException(override val message: String = "This action is not allowed")
extends ServiceException(message)
+final case class UnauthorizedException(
+ override val message: String = "The user's authentication credentials are invalid or missing")
+ extends ServiceException(message)
+
final case class ResourceNotFoundException(override val message: String = "Resource not found")
extends ServiceException(message)