From 5f22150880c37b0f98e1790feeff36859c90de34 Mon Sep 17 00:00:00 2001 From: Benjamin Gaidioz Date: Tue, 2 Jul 2024 15:45:23 +0200 Subject: [PATCH] RD-11102: Added getUserJdbc to the Credentials API (#460) --- .../raw/creds/api/CredentialsService.scala | 17 +++++++++++++---- .../raw/creds/client/ClientCredentials.scala | 8 ++++++++ .../creds/client/ClientCredentialsService.scala | 4 ++++ .../creds/local/LocalCredentialsService.scala | 6 +++++- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/sources/src/main/scala/raw/creds/api/CredentialsService.scala b/sources/src/main/scala/raw/creds/api/CredentialsService.scala index 46641262e..5b3b151b6 100644 --- a/sources/src/main/scala/raw/creds/api/CredentialsService.scala +++ b/sources/src/main/scala/raw/creds/api/CredentialsService.scala @@ -241,11 +241,20 @@ trait CredentialsService extends RawService { def unregisterSecret(user: AuthenticatedUser, name: String): Boolean /** - * Returns a PostgreSQL FDW database for the given user. If that database does not exist, then it should be - * automatically generated. This call is meant to be used by the SQL compiler in order to execute user-defined SQL queries. + * Returns a PostgreSQL FDW database for the given user, creating the database + * if it does not already exist. * - * @param user the Authenticated User which corresponds to the combination of RAW Organization and Repository - * @return the database name the corresponds to the given user. + * @param user the AuthenticatedUser which corresponds to the combination of RAW Organization and Repository + * @return the database name that corresponds to the given user. */ def getUserDb(user: AuthenticatedUser): String + + /** + * Returns a JDBC connection string for the specified user, creating the corresponding database + * if it does not already exist. + * + * @param user the AuthenticatedUser we need the JDBC connection string for + * @return the JDBC connection string for the specified user + */ + def getUserJdbc(user: AuthenticatedUser): String } diff --git a/sources/src/main/scala/raw/creds/client/ClientCredentials.scala b/sources/src/main/scala/raw/creds/client/ClientCredentials.scala index 9a3a8538c..6e1c4a791 100644 --- a/sources/src/main/scala/raw/creds/client/ClientCredentials.scala +++ b/sources/src/main/scala/raw/creds/client/ClientCredentials.scala @@ -368,6 +368,14 @@ class ClientCredentials(serverAddress: URI)(implicit settings: RawSettings) exte ) } + def getUserJdbc(user: AuthenticatedUser): String = { + restClient.doJsonPost[String]( + "2/fdw/user-jdbc", + ProvisionFdwDbCredentials(user), + withAuth = false + ) + } + def close(): Unit = { restClient.close() } diff --git a/sources/src/main/scala/raw/creds/client/ClientCredentialsService.scala b/sources/src/main/scala/raw/creds/client/ClientCredentialsService.scala index 80517324e..ec89f433c 100644 --- a/sources/src/main/scala/raw/creds/client/ClientCredentialsService.scala +++ b/sources/src/main/scala/raw/creds/client/ClientCredentialsService.scala @@ -286,6 +286,10 @@ class ClientCredentialsService(implicit settings: RawSettings) extends Credentia client.getUserDb(user) } + override def getUserJdbc(user: AuthenticatedUser): String = { + client.getUserJdbc(user) + } + override def doStop(): Unit = { client.close() } diff --git a/sources/src/main/scala/raw/creds/local/LocalCredentialsService.scala b/sources/src/main/scala/raw/creds/local/LocalCredentialsService.scala index 0205d64bb..f667deb8d 100644 --- a/sources/src/main/scala/raw/creds/local/LocalCredentialsService.scala +++ b/sources/src/main/scala/raw/creds/local/LocalCredentialsService.scala @@ -146,7 +146,11 @@ class LocalCredentialsService extends CredentialsService { } override def getUserDb(user: AuthenticatedUser): String = { - sys.env.getOrElse("FDW_DATABASE", "raw") + ??? + } + + override def getUserJdbc(user: AuthenticatedUser): String = { + ??? } override def doStop(): Unit = {}