Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 04:42

    http4s-steward[bot] on http4s-scala-xml-0.23.11

    (compare)

  • 04:42
    http4s-steward[bot] closed #698
  • 04:42
    http4s-steward[bot] commented #698
  • 04:42
    http4s-steward[bot] opened #712
  • 04:41

    http4s-steward[bot] on http4s-scala-xml-0.23.12

    Update http4s-scala-xml to 0.23… (compare)

  • Jun 24 20:30
    http4s-steward[bot] opened #711
  • Jun 24 20:30

    http4s-steward[bot] on http4s-server-0.23.13

    Update http4s-circe, http4s-dsl… (compare)

  • Jun 10 16:51

    http4s-steward[bot] on scala-library-2.12.15

    (compare)

  • Jun 10 16:51
    http4s-steward[bot] closed #699
  • Jun 10 16:51
    http4s-steward[bot] commented #699
  • Jun 10 16:51
    http4s-steward[bot] opened #710
  • Jun 10 16:51

    http4s-steward[bot] on scala-library-2.12.16

    Update scala-library, scala-ref… (compare)

  • Jun 08 16:34

    http4s-steward[bot] on silencer-lib-1.7.8

    (compare)

  • Jun 08 16:34
    http4s-steward[bot] closed #691
  • Jun 08 16:34
    http4s-steward[bot] commented #691
  • Jun 08 16:34
    http4s-steward[bot] opened #709
  • Jun 08 16:34

    http4s-steward[bot] on silencer-lib-1.7.9

    Update silencer-lib, silencer-p… (compare)

  • Jun 03 18:38
    typelevel-steward[bot] opened #708
  • Jun 03 18:38

    typelevel-steward[bot] on swagger-ui-4.11.1

    Update swagger-ui to 4.11.1 (compare)

  • Jun 03 18:38
    typelevel-steward[bot] opened #707
Eric Meisel
@etspaceman

http4s/rho@7944593

This isn't in 0.19.0 :(

Of course that wouldn't explain why my BuildInfo behaves the same way... that is not an ADT
Eric Meisel
@etspaceman
converting the Success to a case class works
Eric Meisel
@etspaceman
same w/ the BuildInfo (was a case object w/ a custom circe encoder)
Mikkel Storgaard Knudsen
@MikkelStorgaard
Hello everyone! I'm really really new at Scala, and I'm trying to solve a case.
is it possible to add http4s authentication middleware to RhoRoutes and still also use SwaggerMiddleware?
Guillaume Balaine
@Igosuki
@MikkelStorgaard
class SwaggerSpecEndpoint[F[+ _] : Effect](swaggerSpec: Swagger)(implicit F: Monad[F]) extends Http4sDsl[F] {

  lazy val response: F[Response[F]] = {
    val fOk = Ok.apply(
      Json
        .mapper()
        .writerWithDefaultPrettyPrinter()
        .writeValueAsString(swaggerSpec.toJModel)
    )

    F.map(fOk) { ok =>
      ok.copy(headers = ok.headers.put(`Content-Type`(MediaType.application.json)))
    }
  }

  val service: HttpRoutes[F] = HttpRoutes.of[F] {
    case _ @GET -> Root / "swagger.json" => response
  }
}

object SwaggerSpecEndpoint {
  def endpoint[F[+ _] : Effect](swagger: SwaggerSupport[F], swaggerFormats: SwaggerFormats)(
    routes: Seq[RhoRoute[F, _]]
  ): SwaggerSpecEndpoint[F] = {
    import swagger._
    val swaggerSpec: Swagger = createSwagger(
      swaggerFormats,
      security = List(SecurityRequirement("JWT", Nil)),
      securityDefinitions = Map("JWT" -> ApiKeyAuthDefinition(auth.JWT_AUTH_HEADER, In.HEADER, "JWT".some))
    )(routes)
    new SwaggerSpecEndpoint[F](swaggerSpec)
  }
}
Here’s how I mounted my endpoints
rootServices = Metrics[F](metricsOps)(
        GZip(
          CORS(authEndpoint.service, corsConfig) <+> snsService.routes <+>
            authService.authenticated(authContext.toService(CORS(coreApi, corsConfig))) <+>
            swaggerSpecEndpoint.service <+> CORS(home.service, corsConfig) <+> home.noop
        )
      )
And in AuthService :
val authenticated: AuthMiddleware[F, User] =
    AuthMiddleware.withFallThrough(authUser)
with
val authUser: Kleisli[OptionT[F, ?], Request[F], User]
have fun
Henry
@hygt
Hi, I'm new to rho (and http4s) and I'm trying to implement some custom error handling like this:
class Routes[F[+_]: Sync](service: FooService[F]) extends RhoRoutes[F] {

  private def handleError(t: Throwable): F[BaseResult[F]] = t match {
    case e: CustomError =>
      BadGateway(e)
    case _ =>
      InternalServerError(UnexpectedError)
  }

  GET / "api" +? param[Int]("id") |>> { id: Int =>
    service
      .getFoo(id)
      .flatMap { foo =>
        Ok(foo).widen[BaseResult[F]]
      }
      .handleErrorWith(handleError)
  }
}
I couldn't find a way to make it work without the widen
and of course, this messes up with the Swagger documentation
do I need some single ADT for all my API response types, including errors I want to encode?
I tried to return something like InternalServerError(someEmptyFooInstance) but it wouldn't compile either
Henry
@hygt
Ok... I moved the error handling to the service and it seems to work as expected
Magrahi haikal
@JMagrahiHaikal_twitter
Hello any Ideas on how to make a route deprecated please
Magrahi haikal
@JMagrahiHaikal_twitter
I discovered that deprecated feature not supported
0.20.0-M2 rho still using swagger 1.6 which don't support deprecation
Guillaume Balaine
@Igosuki
@hygt thanks for that, you actually solved my problem with scala 2.13, assigning every result in the Rho Kleislis to a F[BaseResult[F]] when the upper bound is F[A >:> Ok | BadRequest] for instance just works
now I can use foldF on EitherT and it all works
@hygt do you also have code that returns multiple response types and still works ?
in line 39 there is an example of how to return multiple response type
Guillaume Balaine
@Igosuki
ha! interesting
Ray Eldath
@Ray-Eldath
val authUser: Kleisli[IO, Request[IO], Either[String, User]] = Kleisli { req =>
  IO(Right(User("Bob", UUID.randomUUID())))
}

val onFailure: AuthedRoutes[String, IO] = Kleisli(req => OptionT.liftF(Forbidden(req.authInfo)))


val middleware = AuthMiddleware(authUser, onFailure)

object Auth extends AuthedContext[IO, User]

object BobRoutes extends RhoRoutes[IO] {
  GET +? param("foo", "bar") >>> Auth.auth |>> { (foo: String, user: User) =>
    Ok(s"Bob with id ${user.id}, foo $foo")
  }
}

val service = middleware.apply(Auth.toService(BobRoutes.toRoutes()))

This code is copied from AuthedContext.scala. But the Forbidden part is still "not found" after import bulk of things to make other part of code works... By the way, how to make service available for BlazeServerBuilder, or convert to HttpApp...?

Many thx!

Ray Eldath
@Ray-Eldath
And... is it possible to integrate rho with TSec...?
Guillaume Balaine
@Igosuki
Yes it is
Easily
  val jwtStatelessAuthenticator =
    JWTAuthenticator.pstateless.inHeader[F, User, HMACSHA256](
      signingKey = signingKey,
      settings = TSecJWTSettings(JWT_AUTH_HEADER, FiniteDuration(24L * 3600L, TimeUnit.SECONDS), None)
    )

  val authUser: Kleisli[OptionT[F, ?], Request[F], User] = Kleisli({ req =>
    if (userAuthentication) {
      jwtStatelessAuthenticator
        .extractAndValidate(req)
        .map(_.identity)
    } else {
      OptionT.pure[F](User.dummy)
    }
  })

  private[auth] val defaultNotAuthenticated: AuthedRequest[F, String] => OptionT[F, Response[F]] =
    req => OptionT.liftF(Forbidden(req.authInfo))

  val onAuthFailure: AuthedRoutes[String, F] = Kleisli(defaultNotAuthenticated)

  val authenticated: AuthMiddleware[F, User] =
    AuthMiddleware.withFallThrough(authUser)
Darren Gibson
@zarthross
Should be hitting maven central soon.
Guillaume Balaine
@Igosuki
nice
Tom Poczos
@TomPoczos
Hi, thought I'd ask if I'm going in a wrong direction. Refactoring a class that creates RhoRoutes so that it takes an F[_] instead of IO. Is RhoRoutes suitable for that? I guess it is, although all the example code / documentation uses IO. The reason I'm asking for is I have a route that returns different status codes based on some intermediate results and it works fine with IO but I can't get it to be of the required F[Result[...]] type with F[_]:ConcurrentEffect, instead it just defaults to Any As far as Intellij's shw implicits feature goes I can't see any difference. My ConcurrentEffect is being picked up instead of ioEffect which seems to be fine.
Guillaume Balaine
@Igosuki
@TomPoczos I have en entire App written with F
Yes with the latest Scala 2.12 and Http4s simply returning Ok or BadRequest won’t work anymore
Tom Poczos
@TomPoczos
@Igosuki thanks for the reply. Are you saying that it's a bug? Do you know of any workarounds or should I just give up on the idea to parametrize on F[_] instead of IO for now?
I mean, all over the documentation Ok & etc. are returned. Then again, all the documentation also appears to be using IO which works for me too
Christopher Davenport
@ChristopherDavenport
Have you tried F[+_]
Tom Poczos
@TomPoczos
@ChristopherDavenport doesn't work, just tried it. Anyway, I'm stuck with divergent implicits (confused myself a bit there, thought there's another error also occurring when trying to do this, but can't reproduce it any more), and for that at least I'm told there is an explanation at http4s/rho#292 ...not of much help since I can't get either of the proposed workarounds working. But at least I know it shouldn't be this way :)
Tom Poczos
@TomPoczos
@ChristopherDavenport thanks for your suggestion, together with some other changes (wrong cats import) it solved my issue
Darren Gibson
@zarthross
Rho 0.20.0 based on Http4s 0.21.0 has been released. (Should be rolling out to maven central now)
Eric Meisel
@etspaceman

Hello there. Is it possible to get this feature backported to the 0.19.x releases series? We are stuck using the 0.20.x Http4s series right now, and we're trying to build some functionality that depends on the content-type headers:

http4s/rho#359

Happy to open a PR against a branch if one is opened for me.

Eric Meisel
@etspaceman
I was able to open a PR against my own fork here to give an example: etspaceman/rho#1
If someone could help me out with a branch in the origin upstream, that would be helpful
Eric Meisel
@etspaceman

@zarthross is this something you can help me out with? We're using Rho internally but this is kind of a roadblock for us. We want to have a route support multiple content-types (e.g. json and proto), and we want to use the content-type header to control that. The Swagger document will unfortunately not work properly for this use case without that backport.

We are using 0.19.x because our team is still supporting Scala 2.11 at this time (and that cannot be changed until other vendor changes are completed).

Fredy Captuayo
@fredycaptuayo_gitlab

Hello, I updated ther dependencies in my project,
cats-core = 2.1.1
cats-effect = 2.1.2
rho-swagger = 0.20.0
http4s-blaze-server = 0.21.0

now, I have a problem in start the project, the error is

Could not find an instance of Applicative for [x]F[x]
[error]       server <- BlazeServerBuilder[F]
[error]              ^

Any suggestions to solve this error?, The code is this


import cats.effect.{ConcurrentEffect, ContextShift, ExitCode, IO, IOApp, Resource, Timer}
import co.yyyy.xxxxAPI
import org.http4s.server.Server
import org.http4s.server.blaze.BlazeServerBuilder

object Main extends IOApp {
  def run(args: List[String]): IO[ExitCode] =
    AppServer.create.use(_ => IO.never).as(ExitCode.Success)
}

object AppServerSwagger {
  def create[F[+_]: ConcurrentEffect: ContextShift: Timer]: Resource[F, Server[F]] =
    for {
      server <- BlazeServerBuilder[F]
        .withHttpApp(xxxxAPI[F].httpApi)
        .bindLocal(8085)
        .resource
    } yield server
}

Any error message

[error]  found   : cats.effect.Resource[[x]F[x],Nothing]
[error]  required: cats.effect.Resource[F,org.http4s.server.Server[F]]
[error]       config <- Resource.liftF(parser.decodePathF[F, DefaultConfig]("app"))
[error]              ^
Darren Gibson
@zarthross
@fredycaptuayo_gitlab It's because your ConcurrentEffect is defined using a F[+_]... its messing with the compiler inference. I suggest constructing your Rho parts in a separate function and passing it to the create so you can make create take a F[_] instead.
Darren Gibson
@zarthross
@etspaceman I'm open to a PR of the backport, here is a branch you can PR against: https://github.com/http4s/rho/tree/v0.19. I'll keep a lookout for your PR.
Eric Meisel
@etspaceman
Perfect, thanks Darren! I will submit that today