typelevel / skunk

A data access library for Scala + Postgres.
https://typelevel.org/skunk/
MIT License
1.58k stars 160 forks source link

Support dynamic passwords #1109

Open ybasket opened 1 month ago

ybasket commented 1 month ago

Use Case At $work, we're looking to switch from doobie to skunk. One obstacle on the migration comes from the likely requirement to use AWS RDS IAM. It integrates Postgres authentication with AWS IAM by signing short-lived (15 min) tokens that can be used as password when connecting to RDS Postgres. The problem with skunk is that it expects the password to be static, it's just String in all relevant signatures.

Feature request Unless I'm overlooking some smart way to deal with a connection pool and a dynamic password in the existing setup, it would be cool if skunk added support. From what I've seen at first glance, taking a F[String] (or maybe more general a F[SomeConnectionParamsIncludingPassword] that is evaluated when the connection is established, would help to support it. The existing (public) method signatures could just lift the password using pure, for RDS IAM, the effect would ask the AWS SDK for a fresh/TTL-aware-cached token.

ybasket commented 1 month ago

After further exploration, I was able to inject a dynamic password somewhat OK-ish:

  1. Copy Session.pooledF's implementation
  2. Replace the password parameter by an effect supplying the password
  3. In the inner method called session, evaluate that effect to obtain the current password

Not great UX, but okay. Would still be cool to have a method on Session that did this directly, pooledF could just delegate with a pure effect.