in management/src/main/scala/org/apache/pekko/management/scaladsl/PekkoManagement.scala [173:218]
private def prepareCombinedRoutes(providerSettings: ManagementRouteProviderSettings): Route = {
val basePath: Directive[Unit] = {
val pathPrefixName = settings.Http.BasePath.getOrElse("")
if (pathPrefixName.isEmpty) {
rawPathPrefix(pathPrefixName)
} else {
pathPrefix(PathMatchers.separateOnSlashes(pathPrefixName))
}
}
def wrapWithAuthenticatorIfPresent(inner: Route): Route = {
val providerSettingsImpl = providerSettings.asInstanceOf[ManagementRouteProviderSettingsImpl]
(providerSettingsImpl.scaladslAuth, providerSettingsImpl.javadslAuth) match {
case (None, None) =>
inner
case (Some(asyncAuthenticator), None) =>
authenticateBasicAsync[String](realm = "secured", asyncAuthenticator)(_ => inner)
case (None, Some(auth)) =>
def credsToJava(cred: Credentials): Optional[ProvidedCredentials] = cred match {
case provided: Credentials.Provided => Optional.of(ProvidedCredentials(provided))
case _ => Optional.empty()
}
authenticateBasicAsync(realm = "secured", c => auth.apply(credsToJava(c)).asScala.map(_.toScala)).optional
.apply(_ => inner)
case (Some(_), Some(_)) =>
throw new IllegalStateException("Unexpected that both scaladsl and javadsl auth were defined")
}
}
val combinedRoutes = routeProviders.map { provider =>
log.info("Including HTTP management routes for {}", Logging.simpleName(provider))
provider.routes(providerSettings)
}
if (combinedRoutes.nonEmpty) {
basePath {
wrapWithAuthenticatorIfPresent(Directives.concat(combinedRoutes: _*))
}
} else
throw new IllegalArgumentException(
"No routes configured for pekko management! " +
"Double check your `pekko.management.http.routes` config.")
}