Reputation: 11
Hello I'm faily new with Finatra and wanted to know if there is a way to validate that a request was made using the https protocol?
Upvotes: 1
Views: 79
Reputation:
If you want to always use HTTPS you can disable the http server server
import com.twitter.finagle.Http
import com.twitter.finatra.http.HttpServer
import com.twitter.finatra.http.routing.HttpRouter
object ExampleHttpsServerMain extends ExampleHttpsServer
class ExampleHttpsServer
extends HttpServer
with Tls {
override val defaultHttpPort: String = "" // disable the default HTTP port
override val defaultHttpsPort: String = ":443"
override def configureHttp(router: HttpRouter): Unit = {
router
.add[ExampleController]
}
}
But if you want for some specific controller or route to check if it is https for example Login should only be used via https then you can define Filters for example:
Per Route
class ExampleController @Inject()(
exampleService: ExampleService
) extends Controller {
filter[ExampleFilter].get("/ping") { request: Request =>
"pong"
}
filter[ExampleFilter]
.filter[AnotherExampleFilter]
.get("/name") { request: Request =>
response.ok.body("Bob")
}
filter(new OtherFilter).post("/foo") { request: Request =>
exampleService.do(request)
"bar"
}
}
Per Controller
import DoEverythingModule
import ExampleController
import ExampleFilter
import com.twitter.finagle.http.Request
import com.twitter.finatra.http.filters.AccessLoggingFilter
import com.twitter.finatra.http.routing.HttpRouter
import com.twitter.finatra.http.{Controller, HttpServer}
object ExampleServerMain extends ExampleServer
class ExampleServer extends HttpServer {
override val modules = Seq(
DoEverythingModule)
override def configureHttp(router: HttpRouter) {
router
.add[ExampleFilter, ExampleController]
}
}
If you check all implementations of SimpleFilter you may find some filters that you can reuse or base your filter from.
Upvotes: 0