Skip to content

Commit

Permalink
External connector api (#346)
Browse files Browse the repository at this point in the history
Co-authored-by: Thanasis Stouraitis <thanasis.stouraitis@raw-labs.com>
  • Loading branch information
gkiomour and stthanos authored Jan 30, 2024
1 parent 3b1becd commit 8f4b4a8
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 47 deletions.
34 changes: 31 additions & 3 deletions snapi-frontend/src/main/scala/raw/creds/api/Credentials.scala
Original file line number Diff line number Diff line change
Expand Up @@ -146,16 +146,44 @@ final case class SnowflakeCredential(
val port = None
}

final case class SalesforceCredential(
case class ExternalConnectorCredentialId(name: String, connectorType: AbstractConnectorType)

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "repr")
@JsonSubTypes(
Array(
new JsonType(value = classOf[SalesforceConnectorType], name = "SALESFORCE")
)
)
trait AbstractConnectorType {
def repr: String
}
case class SalesforceConnectorType() extends AbstractConnectorType {
override def repr: String = "SALESFORCE"
}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "connectorType")
@JsonSubTypes(
Array(
new JsonType(value = classOf[ExternalConnectorSalesforceCredential], name = "SALESFORCE")
)
)
sealed trait ExternalConnectorCredential extends Credential {
def connectorType: AbstractConnectorType
def sensitiveFields: List[String]
}

final case class ExternalConnectorSalesforceCredential(
url: String,
username: String,
password: String,
securityToken: String,
clientId: String,
apiVersion: String,
customObjects: Seq[String],
options: Map[String, String]
) extends Credential
override val sensitiveFields: List[String] = List("password", "securityToken")
) extends ExternalConnectorCredential {
override def connectorType: AbstractConnectorType = SalesforceConnectorType()
}

final case class Secret(name: String, value: String) extends Credential

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,22 +100,22 @@ trait CredentialsService extends RawService {

def unregisterDropboxToken(user: AuthenticatedUser): Boolean

/** Salesforce */
/** ExternalConnector */

def registerSalesforceCredential(
def registerExternalConnectorCredential(
user: AuthenticatedUser,
name: String,
salesforceCredential: SalesforceCredential
credential: ExternalConnectorCredential
): Boolean

def getSalesforceCredential(user: AuthenticatedUser, name: String): Option[SalesforceCredential]
def getExternalConnectorCredential(user: AuthenticatedUser, name: String): Option[ExternalConnectorCredential]

def existsSalesforceCredential(user: AuthenticatedUser, name: String): Boolean =
getSalesforceCredential(user, name).isDefined
def existsExternalConnectorCredential(user: AuthenticatedUser, name: String): Boolean =
getExternalConnectorCredential(user, name).isDefined

def listSalesforceCredentials(user: AuthenticatedUser): List[String]
def listExternalConnectorCredentials(user: AuthenticatedUser): List[ExternalConnectorCredentialId]

def unregisterSalesforceCredential(user: AuthenticatedUser, name: String): Boolean
def unregisterExternalConnectorCredential(user: AuthenticatedUser, name: String): Boolean

/** Http Credentials */

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,46 +109,54 @@ class ClientCredentials(serverAddress: URI)(implicit settings: RawSettings) exte

/** Salesforce */

def registerSalesforceCredential(
def registerExternalConnectorCredential(
user: AuthenticatedUser,
name: String,
salesforceCredential: SalesforceCredential
externalConnectorCredential: ExternalConnectorCredential
): Boolean = {
try {
restClient.doJsonPostWithEmptyResponse(
"2/salesforce/register",
RegisterSalesforceCredential(user, name, salesforceCredential),
"2/connector/register",
RegisterExternalConnectorCredential(user, name, externalConnectorCredential),
withAuth = false
)
true
} catch {
case ex: ClientAPIException if ex.errorCode == "salesforceCredentialAlreadyExists" => false
case ex: ClientAPIException if ex.errorCode == "externalConnectorCredentialAlreadyExists" => false
}
}

def getSalesforceCredential(user: AuthenticatedUser, name: String): Option[SalesforceCredential] = {
def getExternalConnectorCredential(user: AuthenticatedUser, name: String): Option[ExternalConnectorCredential] = {
try {
Some(
restClient
.doJsonPost[SalesforceCredential]("2/salesforce/get", GetSalesforceCredential(user, name), withAuth = false)
.doJsonPost[ExternalConnectorCredential](
"2/connector/get",
GetExternalConnectorCredential(user, name),
withAuth = false
)
)
} catch {
case ex: ClientAPIException if ex.errorCode == "salesforceCredentialNotFound" => None
case ex: ClientAPIException if ex.errorCode == "externalConnectorCredentialNotFound" => None
}
}

def existsSalesforceCredential(user: AuthenticatedUser, name: String): Boolean =
getSalesforceCredential(user, name).isDefined
def existsExternalConnectorCredential(user: AuthenticatedUser, name: String): Boolean =
getExternalConnectorCredential(user, name).isDefined

def listSalesforceCredentials(user: AuthenticatedUser): List[String] = {
restClient.doJsonPost[List[String]]("2/salesforce/list", ListSalesforceCredentials(user), withAuth = false)
def listExternalConnectorCredentials(user: AuthenticatedUser): List[ExternalConnectorCredentialId] = {
restClient.doJsonPost[List[ExternalConnectorCredentialId]](
"2/connector/list",
ListExternalConnectorCredential(user),
withAuth = false
)
}

def unregisterSalesforceCredential(user: AuthenticatedUser, name: String): Boolean = {
def unregisterExternalConnectorCredential(user: AuthenticatedUser, name: String): Boolean = {
try {
restClient.doJsonPostWithEmptyResponse(
"2/salesforce/unregister",
UnregisterSalesforceCredential(user, name),
"2/connector/unregister",
UnregisterExternalConnectorCredential(user, name),
HttpStatus.SC_NO_CONTENT,
withAuth = false
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,39 +85,42 @@ class ClientCredentialsService(implicit settings: RawSettings) extends Credentia
}
}

/** Salesforce */
/** ExternalConnector */

override def registerSalesforceCredential(
override def registerExternalConnectorCredential(
user: AuthenticatedUser,
name: String,
salesforceCredential: SalesforceCredential
externalConnectorCredential: ExternalConnectorCredential
): Boolean = {
try {
client.registerSalesforceCredential(user, name, salesforceCredential)
client.registerExternalConnectorCredential(user, name, externalConnectorCredential)
} catch {
case ex: APIException => throw new ClientCredentialsException(ex.getMessage, ex)
}
}

override def getSalesforceCredential(user: AuthenticatedUser, name: String): Option[SalesforceCredential] = {
override def getExternalConnectorCredential(
user: AuthenticatedUser,
name: String
): Option[ExternalConnectorCredential] = {
try {
client.getSalesforceCredential(user, name)
client.getExternalConnectorCredential(user, name)
} catch {
case ex: APIException => throw new ClientCredentialsException(ex.getMessage, ex)
}
}

override def listSalesforceCredentials(user: AuthenticatedUser): List[String] = {
override def listExternalConnectorCredentials(user: AuthenticatedUser): List[ExternalConnectorCredentialId] = {
try {
client.listSalesforceCredentials(user)
client.listExternalConnectorCredentials(user)
} catch {
case ex: APIException => throw new ClientCredentialsException(ex.getMessage, ex)
}
}

override def unregisterSalesforceCredential(user: AuthenticatedUser, name: String): Boolean = {
override def unregisterExternalConnectorCredential(user: AuthenticatedUser, name: String): Boolean = {
try {
client.unregisterSalesforceCredential(user, name)
client.unregisterExternalConnectorCredential(user, name)
} catch {
case ex: APIException => throw new ClientCredentialsException(ex.getMessage, ex)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,23 +45,26 @@ class LocalCredentialsService extends CredentialsService {
false
}

override def registerSalesforceCredential(
override def registerExternalConnectorCredential(
user: AuthenticatedUser,
name: String,
salesforceCredential: SalesforceCredential
credential: ExternalConnectorCredential
): Boolean = {
false
}

override def getSalesforceCredential(user: AuthenticatedUser, name: String): Option[SalesforceCredential] = {
override def getExternalConnectorCredential(
user: AuthenticatedUser,
name: String
): Option[ExternalConnectorCredential] = {
None
}

override def listSalesforceCredentials(user: AuthenticatedUser): List[String] = {
override def listExternalConnectorCredentials(user: AuthenticatedUser): List[ExternalConnectorCredentialId] = {
List.empty
}

override def unregisterSalesforceCredential(user: AuthenticatedUser, name: String): Boolean = {
override def unregisterExternalConnectorCredential(user: AuthenticatedUser, name: String): Boolean = {
false
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,14 @@ final case class RegisterDropboxCredential(user: AuthenticatedUser, token: Dropb
final case class GetDropboxCredential(user: AuthenticatedUser)
final case class UnregisterDropboxCredential(user: AuthenticatedUser)

final case class RegisterSalesforceCredential(
final case class RegisterExternalConnectorCredential(
user: AuthenticatedUser,
name: String,
salesforceCredential: SalesforceCredential
externalConnectorCredentialProtocol: ExternalConnectorCredential
)
final case class GetSalesforceCredential(user: AuthenticatedUser, name: String)
final case class ListSalesforceCredentials(user: AuthenticatedUser)

final case class UnregisterSalesforceCredential(user: AuthenticatedUser, name: String)
final case class GetExternalConnectorCredential(user: AuthenticatedUser, name: String)
final case class ListExternalConnectorCredential(user: AuthenticatedUser)
final case class UnregisterExternalConnectorCredential(user: AuthenticatedUser, name: String)

final case class RegisterHttpCredential(user: AuthenticatedUser, credential: HttpCredential)
final case class ListHttpCredentials(user: AuthenticatedUser)
Expand Down

0 comments on commit 8f4b4a8

Please sign in to comment.