mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-06 17:27:16 +00:00
feat(secret-rotation): Oracle DB
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
import {
|
||||||
|
CreateOracleDBConnectionSchema,
|
||||||
|
SanitizedOracleDBConnectionSchema,
|
||||||
|
UpdateOracleDBConnectionSchema
|
||||||
|
} from "@app/ee/services/app-connections/oracledb";
|
||||||
|
import { registerAppConnectionEndpoints } from "@app/server/routes/v1/app-connection-routers/app-connection-endpoints";
|
||||||
|
import { AppConnection } from "@app/services/app-connection/app-connection-enums";
|
||||||
|
|
||||||
|
export const registerOracleDBConnectionRouter = async (server: FastifyZodProvider) => {
|
||||||
|
registerAppConnectionEndpoints({
|
||||||
|
app: AppConnection.OracleDB,
|
||||||
|
server,
|
||||||
|
sanitizedResponseSchema: SanitizedOracleDBConnectionSchema,
|
||||||
|
createSchema: CreateOracleDBConnectionSchema,
|
||||||
|
updateSchema: UpdateOracleDBConnectionSchema
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -6,6 +6,7 @@ import { registerAzureClientSecretRotationRouter } from "./azure-client-secret-r
|
|||||||
import { registerLdapPasswordRotationRouter } from "./ldap-password-rotation-router";
|
import { registerLdapPasswordRotationRouter } from "./ldap-password-rotation-router";
|
||||||
import { registerMsSqlCredentialsRotationRouter } from "./mssql-credentials-rotation-router";
|
import { registerMsSqlCredentialsRotationRouter } from "./mssql-credentials-rotation-router";
|
||||||
import { registerMySqlCredentialsRotationRouter } from "./mysql-credentials-rotation-router";
|
import { registerMySqlCredentialsRotationRouter } from "./mysql-credentials-rotation-router";
|
||||||
|
import { registerOracleDBCredentialsRotationRouter } from "./oracledb-credentials-rotation-router";
|
||||||
import { registerPostgresCredentialsRotationRouter } from "./postgres-credentials-rotation-router";
|
import { registerPostgresCredentialsRotationRouter } from "./postgres-credentials-rotation-router";
|
||||||
|
|
||||||
export * from "./secret-rotation-v2-router";
|
export * from "./secret-rotation-v2-router";
|
||||||
@@ -17,6 +18,7 @@ export const SECRET_ROTATION_REGISTER_ROUTER_MAP: Record<
|
|||||||
[SecretRotation.PostgresCredentials]: registerPostgresCredentialsRotationRouter,
|
[SecretRotation.PostgresCredentials]: registerPostgresCredentialsRotationRouter,
|
||||||
[SecretRotation.MsSqlCredentials]: registerMsSqlCredentialsRotationRouter,
|
[SecretRotation.MsSqlCredentials]: registerMsSqlCredentialsRotationRouter,
|
||||||
[SecretRotation.MySqlCredentials]: registerMySqlCredentialsRotationRouter,
|
[SecretRotation.MySqlCredentials]: registerMySqlCredentialsRotationRouter,
|
||||||
|
[SecretRotation.OracleDBCredentials]: registerOracleDBCredentialsRotationRouter,
|
||||||
[SecretRotation.Auth0ClientSecret]: registerAuth0ClientSecretRotationRouter,
|
[SecretRotation.Auth0ClientSecret]: registerAuth0ClientSecretRotationRouter,
|
||||||
[SecretRotation.AzureClientSecret]: registerAzureClientSecretRotationRouter,
|
[SecretRotation.AzureClientSecret]: registerAzureClientSecretRotationRouter,
|
||||||
[SecretRotation.AwsIamUserSecret]: registerAwsIamUserSecretRotationRouter,
|
[SecretRotation.AwsIamUserSecret]: registerAwsIamUserSecretRotationRouter,
|
||||||
|
|||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
import {
|
||||||
|
CreateOracleDBCredentialsRotationSchema,
|
||||||
|
OracleDBCredentialsRotationSchema,
|
||||||
|
UpdateOracleDBCredentialsRotationSchema
|
||||||
|
} from "@app/ee/services/secret-rotation-v2/oracledb-credentials";
|
||||||
|
import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums";
|
||||||
|
import { SqlCredentialsRotationGeneratedCredentialsSchema } from "@app/ee/services/secret-rotation-v2/shared/sql-credentials";
|
||||||
|
|
||||||
|
import { registerSecretRotationEndpoints } from "./secret-rotation-v2-endpoints";
|
||||||
|
|
||||||
|
export const registerOracleDBCredentialsRotationRouter = async (server: FastifyZodProvider) =>
|
||||||
|
registerSecretRotationEndpoints({
|
||||||
|
type: SecretRotation.OracleDBCredentials,
|
||||||
|
server,
|
||||||
|
responseSchema: OracleDBCredentialsRotationSchema,
|
||||||
|
createSchema: CreateOracleDBCredentialsRotationSchema,
|
||||||
|
updateSchema: UpdateOracleDBCredentialsRotationSchema,
|
||||||
|
generatedCredentialsSchema: SqlCredentialsRotationGeneratedCredentialsSchema
|
||||||
|
});
|
||||||
@@ -7,6 +7,7 @@ import { AzureClientSecretRotationListItemSchema } from "@app/ee/services/secret
|
|||||||
import { LdapPasswordRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/ldap-password";
|
import { LdapPasswordRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/ldap-password";
|
||||||
import { MsSqlCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/mssql-credentials";
|
import { MsSqlCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/mssql-credentials";
|
||||||
import { MySqlCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/mysql-credentials";
|
import { MySqlCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/mysql-credentials";
|
||||||
|
import { OracleDBCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/oracledb-credentials";
|
||||||
import { PostgresCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/postgres-credentials";
|
import { PostgresCredentialsRotationListItemSchema } from "@app/ee/services/secret-rotation-v2/postgres-credentials";
|
||||||
import { SecretRotationV2Schema } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-union-schema";
|
import { SecretRotationV2Schema } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-union-schema";
|
||||||
import { ApiDocsTags, SecretRotations } from "@app/lib/api-docs";
|
import { ApiDocsTags, SecretRotations } from "@app/lib/api-docs";
|
||||||
@@ -18,6 +19,7 @@ const SecretRotationV2OptionsSchema = z.discriminatedUnion("type", [
|
|||||||
PostgresCredentialsRotationListItemSchema,
|
PostgresCredentialsRotationListItemSchema,
|
||||||
MsSqlCredentialsRotationListItemSchema,
|
MsSqlCredentialsRotationListItemSchema,
|
||||||
MySqlCredentialsRotationListItemSchema,
|
MySqlCredentialsRotationListItemSchema,
|
||||||
|
OracleDBCredentialsRotationListItemSchema,
|
||||||
Auth0ClientSecretRotationListItemSchema,
|
Auth0ClientSecretRotationListItemSchema,
|
||||||
AzureClientSecretRotationListItemSchema,
|
AzureClientSecretRotationListItemSchema,
|
||||||
AwsIamUserSecretRotationListItemSchema,
|
AwsIamUserSecretRotationListItemSchema,
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
export * from "./oracledb-connection-enums";
|
||||||
|
export * from "./oracledb-connection-fns";
|
||||||
|
export * from "./oracledb-connection-schemas";
|
||||||
|
export * from "./oracledb-connection-types";
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export enum OracleDBConnectionMethod {
|
||||||
|
UsernameAndPassword = "username-and-password"
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { AppConnection } from "@app/services/app-connection/app-connection-enums";
|
||||||
|
|
||||||
|
import { OracleDBConnectionMethod } from "./oracledb-connection-enums";
|
||||||
|
|
||||||
|
export const getOracleDBConnectionListItem = () => {
|
||||||
|
return {
|
||||||
|
name: "OracleDB" as const,
|
||||||
|
app: AppConnection.OracleDB as const,
|
||||||
|
methods: Object.values(OracleDBConnectionMethod) as [OracleDBConnectionMethod.UsernameAndPassword],
|
||||||
|
supportsPlatformManagement: true as const // TODO(andrey): Explore if possible
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import z from "zod";
|
||||||
|
|
||||||
|
import { AppConnections } from "@app/lib/api-docs";
|
||||||
|
import { AppConnection } from "@app/services/app-connection/app-connection-enums";
|
||||||
|
import {
|
||||||
|
BaseAppConnectionSchema,
|
||||||
|
GenericCreateAppConnectionFieldsSchema,
|
||||||
|
GenericUpdateAppConnectionFieldsSchema
|
||||||
|
} from "@app/services/app-connection/app-connection-schemas";
|
||||||
|
import { BaseSqlUsernameAndPasswordConnectionSchema } from "@app/services/app-connection/shared/sql";
|
||||||
|
|
||||||
|
import { OracleDBConnectionMethod } from "./oracledb-connection-enums";
|
||||||
|
|
||||||
|
export const OracleDBConnectionAccessTokenCredentialsSchema = BaseSqlUsernameAndPasswordConnectionSchema;
|
||||||
|
|
||||||
|
const BaseOracleDBConnectionSchema = BaseAppConnectionSchema.extend({ app: z.literal(AppConnection.OracleDB) });
|
||||||
|
|
||||||
|
export const OracleDBConnectionSchema = BaseOracleDBConnectionSchema.extend({
|
||||||
|
method: z.literal(OracleDBConnectionMethod.UsernameAndPassword),
|
||||||
|
credentials: OracleDBConnectionAccessTokenCredentialsSchema
|
||||||
|
});
|
||||||
|
|
||||||
|
export const SanitizedOracleDBConnectionSchema = z.discriminatedUnion("method", [
|
||||||
|
BaseOracleDBConnectionSchema.extend({
|
||||||
|
method: z.literal(OracleDBConnectionMethod.UsernameAndPassword),
|
||||||
|
credentials: OracleDBConnectionAccessTokenCredentialsSchema.pick({
|
||||||
|
host: true,
|
||||||
|
database: true,
|
||||||
|
port: true,
|
||||||
|
username: true,
|
||||||
|
sslEnabled: true,
|
||||||
|
sslRejectUnauthorized: true,
|
||||||
|
sslCertificate: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
|
||||||
|
export const ValidateOracleDBConnectionCredentialsSchema = z.discriminatedUnion("method", [
|
||||||
|
z.object({
|
||||||
|
method: z
|
||||||
|
.literal(OracleDBConnectionMethod.UsernameAndPassword)
|
||||||
|
.describe(AppConnections.CREATE(AppConnection.OracleDB).method),
|
||||||
|
credentials: OracleDBConnectionAccessTokenCredentialsSchema.describe(
|
||||||
|
AppConnections.CREATE(AppConnection.OracleDB).credentials
|
||||||
|
)
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
|
||||||
|
export const CreateOracleDBConnectionSchema = ValidateOracleDBConnectionCredentialsSchema.and(
|
||||||
|
GenericCreateAppConnectionFieldsSchema(AppConnection.OracleDB, { supportsPlatformManagedCredentials: true })
|
||||||
|
);
|
||||||
|
|
||||||
|
export const UpdateOracleDBConnectionSchema = z
|
||||||
|
.object({
|
||||||
|
credentials: OracleDBConnectionAccessTokenCredentialsSchema.optional().describe(
|
||||||
|
AppConnections.UPDATE(AppConnection.OracleDB).credentials
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.and(GenericUpdateAppConnectionFieldsSchema(AppConnection.OracleDB, { supportsPlatformManagedCredentials: true }));
|
||||||
|
|
||||||
|
export const OracleDBConnectionListItemSchema = z.object({
|
||||||
|
name: z.literal("OracleDB"),
|
||||||
|
app: z.literal(AppConnection.OracleDB),
|
||||||
|
methods: z.nativeEnum(OracleDBConnectionMethod).array(),
|
||||||
|
supportsPlatformManagement: z.literal(true)
|
||||||
|
});
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import z from "zod";
|
||||||
|
|
||||||
|
import { AppConnection } from "@app/services/app-connection/app-connection-enums";
|
||||||
|
|
||||||
|
import {
|
||||||
|
CreateOracleDBConnectionSchema,
|
||||||
|
OracleDBConnectionSchema,
|
||||||
|
ValidateOracleDBConnectionCredentialsSchema
|
||||||
|
} from "./oracledb-connection-schemas";
|
||||||
|
|
||||||
|
export type TOracleDBConnection = z.infer<typeof OracleDBConnectionSchema>;
|
||||||
|
|
||||||
|
export type TOracleDBConnectionInput = z.infer<typeof CreateOracleDBConnectionSchema> & {
|
||||||
|
app: AppConnection.OracleDB;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type TValidateOracleDBConnectionCredentialsSchema = typeof ValidateOracleDBConnectionCredentialsSchema;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export * from "./oracledb-credentials-rotation-constants";
|
||||||
|
export * from "./oracledb-credentials-rotation-schemas";
|
||||||
|
export * from "./oracledb-credentials-rotation-types";
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums";
|
||||||
|
import { TSecretRotationV2ListItem } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-types";
|
||||||
|
import { AppConnection } from "@app/services/app-connection/app-connection-enums";
|
||||||
|
|
||||||
|
export const ORACLEDB_CREDENTIALS_ROTATION_LIST_OPTION: TSecretRotationV2ListItem = {
|
||||||
|
name: "OracleDB Credentials",
|
||||||
|
type: SecretRotation.OracleDBCredentials,
|
||||||
|
connection: AppConnection.OracleDB,
|
||||||
|
template: {
|
||||||
|
createUserStatement: `-- create user
|
||||||
|
CREATE USER "infisical_user" IDENTIFIED BY "temporary_password";
|
||||||
|
|
||||||
|
-- grant all privileges
|
||||||
|
GRANT ALL PRIVILEGES TO "infisical_user";`,
|
||||||
|
secretsMapping: {
|
||||||
|
username: "ORACLEDB_USERNAME",
|
||||||
|
password: "ORACLEDB_PASSWORD"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
import { SecretRotation } from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-enums";
|
||||||
|
import {
|
||||||
|
BaseCreateSecretRotationSchema,
|
||||||
|
BaseSecretRotationSchema,
|
||||||
|
BaseUpdateSecretRotationSchema
|
||||||
|
} from "@app/ee/services/secret-rotation-v2/secret-rotation-v2-schemas";
|
||||||
|
import {
|
||||||
|
SqlCredentialsRotationParametersSchema,
|
||||||
|
SqlCredentialsRotationSecretsMappingSchema,
|
||||||
|
SqlCredentialsRotationTemplateSchema
|
||||||
|
} from "@app/ee/services/secret-rotation-v2/shared/sql-credentials";
|
||||||
|
import { AppConnection } from "@app/services/app-connection/app-connection-enums";
|
||||||
|
|
||||||
|
export const OracleDBCredentialsRotationSchema = BaseSecretRotationSchema(SecretRotation.OracleDBCredentials).extend({
|
||||||
|
type: z.literal(SecretRotation.OracleDBCredentials),
|
||||||
|
parameters: SqlCredentialsRotationParametersSchema,
|
||||||
|
secretsMapping: SqlCredentialsRotationSecretsMappingSchema
|
||||||
|
});
|
||||||
|
|
||||||
|
export const CreateOracleDBCredentialsRotationSchema = BaseCreateSecretRotationSchema(
|
||||||
|
SecretRotation.OracleDBCredentials
|
||||||
|
).extend({
|
||||||
|
parameters: SqlCredentialsRotationParametersSchema,
|
||||||
|
secretsMapping: SqlCredentialsRotationSecretsMappingSchema
|
||||||
|
});
|
||||||
|
|
||||||
|
export const UpdateOracleDBCredentialsRotationSchema = BaseUpdateSecretRotationSchema(
|
||||||
|
SecretRotation.OracleDBCredentials
|
||||||
|
).extend({
|
||||||
|
parameters: SqlCredentialsRotationParametersSchema.optional(),
|
||||||
|
secretsMapping: SqlCredentialsRotationSecretsMappingSchema.optional()
|
||||||
|
});
|
||||||
|
|
||||||
|
export const OracleDBCredentialsRotationListItemSchema = z.object({
|
||||||
|
name: z.literal("OracleDB Credentials"),
|
||||||
|
connection: z.literal(AppConnection.OracleDB),
|
||||||
|
type: z.literal(SecretRotation.OracleDBCredentials),
|
||||||
|
template: SqlCredentialsRotationTemplateSchema
|
||||||
|
});
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
import { TOracleDBConnection } from "../../app-connections/oracledb";
|
||||||
|
import {
|
||||||
|
CreateOracleDBCredentialsRotationSchema,
|
||||||
|
OracleDBCredentialsRotationListItemSchema,
|
||||||
|
OracleDBCredentialsRotationSchema
|
||||||
|
} from "./oracledb-credentials-rotation-schemas";
|
||||||
|
|
||||||
|
export type TOracleDBCredentialsRotation = z.infer<typeof OracleDBCredentialsRotationSchema>;
|
||||||
|
|
||||||
|
export type TOracleDBCredentialsRotationInput = z.infer<typeof CreateOracleDBCredentialsRotationSchema>;
|
||||||
|
|
||||||
|
export type TOracleDBCredentialsRotationListItem = z.infer<typeof OracleDBCredentialsRotationListItemSchema>;
|
||||||
|
|
||||||
|
export type TOracleDBCredentialsRotationWithConnection = TOracleDBCredentialsRotation & {
|
||||||
|
connection: TOracleDBConnection;
|
||||||
|
};
|
||||||
@@ -2,6 +2,7 @@ export enum SecretRotation {
|
|||||||
PostgresCredentials = "postgres-credentials",
|
PostgresCredentials = "postgres-credentials",
|
||||||
MsSqlCredentials = "mssql-credentials",
|
MsSqlCredentials = "mssql-credentials",
|
||||||
MySqlCredentials = "mysql-credentials",
|
MySqlCredentials = "mysql-credentials",
|
||||||
|
OracleDBCredentials = "oracledb-credentials",
|
||||||
Auth0ClientSecret = "auth0-client-secret",
|
Auth0ClientSecret = "auth0-client-secret",
|
||||||
AzureClientSecret = "azure-client-secret",
|
AzureClientSecret = "azure-client-secret",
|
||||||
AwsIamUserSecret = "aws-iam-user-secret",
|
AwsIamUserSecret = "aws-iam-user-secret",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { AZURE_CLIENT_SECRET_ROTATION_LIST_OPTION } from "./azure-client-secret"
|
|||||||
import { LDAP_PASSWORD_ROTATION_LIST_OPTION, TLdapPasswordRotation } from "./ldap-password";
|
import { LDAP_PASSWORD_ROTATION_LIST_OPTION, TLdapPasswordRotation } from "./ldap-password";
|
||||||
import { MSSQL_CREDENTIALS_ROTATION_LIST_OPTION } from "./mssql-credentials";
|
import { MSSQL_CREDENTIALS_ROTATION_LIST_OPTION } from "./mssql-credentials";
|
||||||
import { MYSQL_CREDENTIALS_ROTATION_LIST_OPTION } from "./mysql-credentials";
|
import { MYSQL_CREDENTIALS_ROTATION_LIST_OPTION } from "./mysql-credentials";
|
||||||
|
import { ORACLEDB_CREDENTIALS_ROTATION_LIST_OPTION } from "./oracledb-credentials";
|
||||||
import { POSTGRES_CREDENTIALS_ROTATION_LIST_OPTION } from "./postgres-credentials";
|
import { POSTGRES_CREDENTIALS_ROTATION_LIST_OPTION } from "./postgres-credentials";
|
||||||
import { SecretRotation, SecretRotationStatus } from "./secret-rotation-v2-enums";
|
import { SecretRotation, SecretRotationStatus } from "./secret-rotation-v2-enums";
|
||||||
import { TSecretRotationV2ServiceFactoryDep } from "./secret-rotation-v2-service";
|
import { TSecretRotationV2ServiceFactoryDep } from "./secret-rotation-v2-service";
|
||||||
@@ -25,6 +26,7 @@ const SECRET_ROTATION_LIST_OPTIONS: Record<SecretRotation, TSecretRotationV2List
|
|||||||
[SecretRotation.PostgresCredentials]: POSTGRES_CREDENTIALS_ROTATION_LIST_OPTION,
|
[SecretRotation.PostgresCredentials]: POSTGRES_CREDENTIALS_ROTATION_LIST_OPTION,
|
||||||
[SecretRotation.MsSqlCredentials]: MSSQL_CREDENTIALS_ROTATION_LIST_OPTION,
|
[SecretRotation.MsSqlCredentials]: MSSQL_CREDENTIALS_ROTATION_LIST_OPTION,
|
||||||
[SecretRotation.MySqlCredentials]: MYSQL_CREDENTIALS_ROTATION_LIST_OPTION,
|
[SecretRotation.MySqlCredentials]: MYSQL_CREDENTIALS_ROTATION_LIST_OPTION,
|
||||||
|
[SecretRotation.OracleDBCredentials]: ORACLEDB_CREDENTIALS_ROTATION_LIST_OPTION,
|
||||||
[SecretRotation.Auth0ClientSecret]: AUTH0_CLIENT_SECRET_ROTATION_LIST_OPTION,
|
[SecretRotation.Auth0ClientSecret]: AUTH0_CLIENT_SECRET_ROTATION_LIST_OPTION,
|
||||||
[SecretRotation.AzureClientSecret]: AZURE_CLIENT_SECRET_ROTATION_LIST_OPTION,
|
[SecretRotation.AzureClientSecret]: AZURE_CLIENT_SECRET_ROTATION_LIST_OPTION,
|
||||||
[SecretRotation.AwsIamUserSecret]: AWS_IAM_USER_SECRET_ROTATION_LIST_OPTION,
|
[SecretRotation.AwsIamUserSecret]: AWS_IAM_USER_SECRET_ROTATION_LIST_OPTION,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const SECRET_ROTATION_NAME_MAP: Record<SecretRotation, string> = {
|
|||||||
[SecretRotation.PostgresCredentials]: "PostgreSQL Credentials",
|
[SecretRotation.PostgresCredentials]: "PostgreSQL Credentials",
|
||||||
[SecretRotation.MsSqlCredentials]: "Microsoft SQL Server Credentials",
|
[SecretRotation.MsSqlCredentials]: "Microsoft SQL Server Credentials",
|
||||||
[SecretRotation.MySqlCredentials]: "MySQL Credentials",
|
[SecretRotation.MySqlCredentials]: "MySQL Credentials",
|
||||||
|
[SecretRotation.OracleDBCredentials]: "OracleDB Credentials",
|
||||||
[SecretRotation.Auth0ClientSecret]: "Auth0 Client Secret",
|
[SecretRotation.Auth0ClientSecret]: "Auth0 Client Secret",
|
||||||
[SecretRotation.AzureClientSecret]: "Azure Client Secret",
|
[SecretRotation.AzureClientSecret]: "Azure Client Secret",
|
||||||
[SecretRotation.AwsIamUserSecret]: "AWS IAM User Secret",
|
[SecretRotation.AwsIamUserSecret]: "AWS IAM User Secret",
|
||||||
@@ -15,6 +16,7 @@ export const SECRET_ROTATION_CONNECTION_MAP: Record<SecretRotation, AppConnectio
|
|||||||
[SecretRotation.PostgresCredentials]: AppConnection.Postgres,
|
[SecretRotation.PostgresCredentials]: AppConnection.Postgres,
|
||||||
[SecretRotation.MsSqlCredentials]: AppConnection.MsSql,
|
[SecretRotation.MsSqlCredentials]: AppConnection.MsSql,
|
||||||
[SecretRotation.MySqlCredentials]: AppConnection.MySql,
|
[SecretRotation.MySqlCredentials]: AppConnection.MySql,
|
||||||
|
[SecretRotation.OracleDBCredentials]: AppConnection.OracleDB,
|
||||||
[SecretRotation.Auth0ClientSecret]: AppConnection.Auth0,
|
[SecretRotation.Auth0ClientSecret]: AppConnection.Auth0,
|
||||||
[SecretRotation.AzureClientSecret]: AppConnection.AzureClientSecrets,
|
[SecretRotation.AzureClientSecret]: AppConnection.AzureClientSecrets,
|
||||||
[SecretRotation.AwsIamUserSecret]: AppConnection.AWS,
|
[SecretRotation.AwsIamUserSecret]: AppConnection.AWS,
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ const SECRET_ROTATION_FACTORY_MAP: Record<SecretRotation, TRotationFactoryImplem
|
|||||||
[SecretRotation.PostgresCredentials]: sqlCredentialsRotationFactory as TRotationFactoryImplementation,
|
[SecretRotation.PostgresCredentials]: sqlCredentialsRotationFactory as TRotationFactoryImplementation,
|
||||||
[SecretRotation.MsSqlCredentials]: sqlCredentialsRotationFactory as TRotationFactoryImplementation,
|
[SecretRotation.MsSqlCredentials]: sqlCredentialsRotationFactory as TRotationFactoryImplementation,
|
||||||
[SecretRotation.MySqlCredentials]: sqlCredentialsRotationFactory as TRotationFactoryImplementation,
|
[SecretRotation.MySqlCredentials]: sqlCredentialsRotationFactory as TRotationFactoryImplementation,
|
||||||
|
[SecretRotation.OracleDBCredentials]: sqlCredentialsRotationFactory as TRotationFactoryImplementation,
|
||||||
[SecretRotation.Auth0ClientSecret]: auth0ClientSecretRotationFactory as TRotationFactoryImplementation,
|
[SecretRotation.Auth0ClientSecret]: auth0ClientSecretRotationFactory as TRotationFactoryImplementation,
|
||||||
[SecretRotation.AzureClientSecret]: azureClientSecretRotationFactory as TRotationFactoryImplementation,
|
[SecretRotation.AzureClientSecret]: azureClientSecretRotationFactory as TRotationFactoryImplementation,
|
||||||
[SecretRotation.AwsIamUserSecret]: awsIamUserSecretRotationFactory as TRotationFactoryImplementation,
|
[SecretRotation.AwsIamUserSecret]: awsIamUserSecretRotationFactory as TRotationFactoryImplementation,
|
||||||
|
|||||||
@@ -45,6 +45,12 @@ import {
|
|||||||
TMySqlCredentialsRotationListItem,
|
TMySqlCredentialsRotationListItem,
|
||||||
TMySqlCredentialsRotationWithConnection
|
TMySqlCredentialsRotationWithConnection
|
||||||
} from "./mysql-credentials";
|
} from "./mysql-credentials";
|
||||||
|
import {
|
||||||
|
TOracleDBCredentialsRotation,
|
||||||
|
TOracleDBCredentialsRotationInput,
|
||||||
|
TOracleDBCredentialsRotationListItem,
|
||||||
|
TOracleDBCredentialsRotationWithConnection
|
||||||
|
} from "./oracledb-credentials";
|
||||||
import {
|
import {
|
||||||
TPostgresCredentialsRotation,
|
TPostgresCredentialsRotation,
|
||||||
TPostgresCredentialsRotationInput,
|
TPostgresCredentialsRotationInput,
|
||||||
@@ -58,6 +64,7 @@ export type TSecretRotationV2 =
|
|||||||
| TPostgresCredentialsRotation
|
| TPostgresCredentialsRotation
|
||||||
| TMsSqlCredentialsRotation
|
| TMsSqlCredentialsRotation
|
||||||
| TMySqlCredentialsRotation
|
| TMySqlCredentialsRotation
|
||||||
|
| TOracleDBCredentialsRotation
|
||||||
| TAuth0ClientSecretRotation
|
| TAuth0ClientSecretRotation
|
||||||
| TAzureClientSecretRotation
|
| TAzureClientSecretRotation
|
||||||
| TLdapPasswordRotation
|
| TLdapPasswordRotation
|
||||||
@@ -67,6 +74,7 @@ export type TSecretRotationV2WithConnection =
|
|||||||
| TPostgresCredentialsRotationWithConnection
|
| TPostgresCredentialsRotationWithConnection
|
||||||
| TMsSqlCredentialsRotationWithConnection
|
| TMsSqlCredentialsRotationWithConnection
|
||||||
| TMySqlCredentialsRotationWithConnection
|
| TMySqlCredentialsRotationWithConnection
|
||||||
|
| TOracleDBCredentialsRotationWithConnection
|
||||||
| TAuth0ClientSecretRotationWithConnection
|
| TAuth0ClientSecretRotationWithConnection
|
||||||
| TAzureClientSecretRotationWithConnection
|
| TAzureClientSecretRotationWithConnection
|
||||||
| TLdapPasswordRotationWithConnection
|
| TLdapPasswordRotationWithConnection
|
||||||
@@ -83,6 +91,7 @@ export type TSecretRotationV2Input =
|
|||||||
| TPostgresCredentialsRotationInput
|
| TPostgresCredentialsRotationInput
|
||||||
| TMsSqlCredentialsRotationInput
|
| TMsSqlCredentialsRotationInput
|
||||||
| TMySqlCredentialsRotationInput
|
| TMySqlCredentialsRotationInput
|
||||||
|
| TOracleDBCredentialsRotationInput
|
||||||
| TAuth0ClientSecretRotationInput
|
| TAuth0ClientSecretRotationInput
|
||||||
| TAzureClientSecretRotationInput
|
| TAzureClientSecretRotationInput
|
||||||
| TLdapPasswordRotationInput
|
| TLdapPasswordRotationInput
|
||||||
@@ -92,6 +101,7 @@ export type TSecretRotationV2ListItem =
|
|||||||
| TPostgresCredentialsRotationListItem
|
| TPostgresCredentialsRotationListItem
|
||||||
| TMsSqlCredentialsRotationListItem
|
| TMsSqlCredentialsRotationListItem
|
||||||
| TMySqlCredentialsRotationListItem
|
| TMySqlCredentialsRotationListItem
|
||||||
|
| TOracleDBCredentialsRotationListItem
|
||||||
| TAuth0ClientSecretRotationListItem
|
| TAuth0ClientSecretRotationListItem
|
||||||
| TAzureClientSecretRotationListItem
|
| TAzureClientSecretRotationListItem
|
||||||
| TLdapPasswordRotationListItem
|
| TLdapPasswordRotationListItem
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ import { MySqlCredentialsRotationSchema } from "@app/ee/services/secret-rotation
|
|||||||
import { PostgresCredentialsRotationSchema } from "@app/ee/services/secret-rotation-v2/postgres-credentials";
|
import { PostgresCredentialsRotationSchema } from "@app/ee/services/secret-rotation-v2/postgres-credentials";
|
||||||
|
|
||||||
import { AwsIamUserSecretRotationSchema } from "./aws-iam-user-secret";
|
import { AwsIamUserSecretRotationSchema } from "./aws-iam-user-secret";
|
||||||
|
import { OracleDBCredentialsRotationSchema } from "./oracledb-credentials";
|
||||||
|
|
||||||
export const SecretRotationV2Schema = z.discriminatedUnion("type", [
|
export const SecretRotationV2Schema = z.discriminatedUnion("type", [
|
||||||
PostgresCredentialsRotationSchema,
|
PostgresCredentialsRotationSchema,
|
||||||
MsSqlCredentialsRotationSchema,
|
MsSqlCredentialsRotationSchema,
|
||||||
MySqlCredentialsRotationSchema,
|
MySqlCredentialsRotationSchema,
|
||||||
|
OracleDBCredentialsRotationSchema,
|
||||||
Auth0ClientSecretRotationSchema,
|
Auth0ClientSecretRotationSchema,
|
||||||
AzureClientSecretRotationSchema,
|
AzureClientSecretRotationSchema,
|
||||||
LdapPasswordRotationSchema,
|
LdapPasswordRotationSchema,
|
||||||
|
|||||||
+3
-1
@@ -4,12 +4,14 @@ import { TMsSqlCredentialsRotationWithConnection } from "@app/ee/services/secret
|
|||||||
import { TMySqlCredentialsRotationWithConnection } from "@app/ee/services/secret-rotation-v2/mysql-credentials";
|
import { TMySqlCredentialsRotationWithConnection } from "@app/ee/services/secret-rotation-v2/mysql-credentials";
|
||||||
import { TPostgresCredentialsRotationWithConnection } from "@app/ee/services/secret-rotation-v2/postgres-credentials";
|
import { TPostgresCredentialsRotationWithConnection } from "@app/ee/services/secret-rotation-v2/postgres-credentials";
|
||||||
|
|
||||||
|
import { TOracleDBCredentialsRotationWithConnection } from "../../oracledb-credentials";
|
||||||
import { SqlCredentialsRotationGeneratedCredentialsSchema } from "./sql-credentials-rotation-schemas";
|
import { SqlCredentialsRotationGeneratedCredentialsSchema } from "./sql-credentials-rotation-schemas";
|
||||||
|
|
||||||
export type TSqlCredentialsRotationWithConnection =
|
export type TSqlCredentialsRotationWithConnection =
|
||||||
| TPostgresCredentialsRotationWithConnection
|
| TPostgresCredentialsRotationWithConnection
|
||||||
| TMsSqlCredentialsRotationWithConnection
|
| TMsSqlCredentialsRotationWithConnection
|
||||||
| TMySqlCredentialsRotationWithConnection;
|
| TMySqlCredentialsRotationWithConnection
|
||||||
|
| TOracleDBCredentialsRotationWithConnection;
|
||||||
|
|
||||||
export type TSqlCredentialsRotationGeneratedCredentials = z.infer<
|
export type TSqlCredentialsRotationGeneratedCredentials = z.infer<
|
||||||
typeof SqlCredentialsRotationGeneratedCredentialsSchema
|
typeof SqlCredentialsRotationGeneratedCredentialsSchema
|
||||||
|
|||||||
+7
@@ -178,6 +178,13 @@ export const getDbSetQuery = (db: TDbProviderClients, variables: { username: str
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (db === TDbProviderClients.OracleDB) {
|
||||||
|
return {
|
||||||
|
query: `ALTER USER ?? IDENTIFIED BY "${variables.password}"`,
|
||||||
|
variables: [variables.username]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// add more based on client
|
// add more based on client
|
||||||
return {
|
return {
|
||||||
query: `ALTER USER ?? IDENTIFIED BY '${variables.password}'`,
|
query: `ALTER USER ?? IDENTIFIED BY '${variables.password}'`,
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ export enum TDbProviderClients {
|
|||||||
// mysql and maria db
|
// mysql and maria db
|
||||||
MySql = "mysql",
|
MySql = "mysql",
|
||||||
|
|
||||||
MsSqlServer = "mssql"
|
MsSqlServer = "mssql",
|
||||||
|
OracleDB = "oracledb"
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum TAwsProviderSystems {
|
export enum TAwsProviderSystems {
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { OCIConnectionListItemSchema, SanitizedOCIConnectionSchema } from "@app/ee/services/app-connections/oci";
|
import { OCIConnectionListItemSchema, SanitizedOCIConnectionSchema } from "@app/ee/services/app-connections/oci";
|
||||||
|
import {
|
||||||
|
OracleDBConnectionListItemSchema,
|
||||||
|
SanitizedOracleDBConnectionSchema
|
||||||
|
} from "@app/ee/services/app-connections/oracledb";
|
||||||
import { EventType } from "@app/ee/services/audit-log/audit-log-types";
|
import { EventType } from "@app/ee/services/audit-log/audit-log-types";
|
||||||
import { ApiDocsTags } from "@app/lib/api-docs";
|
import { ApiDocsTags } from "@app/lib/api-docs";
|
||||||
import { readLimit } from "@app/server/config/rateLimiter";
|
import { readLimit } from "@app/server/config/rateLimiter";
|
||||||
@@ -90,6 +94,7 @@ const SanitizedAppConnectionSchema = z.union([
|
|||||||
...SanitizedLdapConnectionSchema.options,
|
...SanitizedLdapConnectionSchema.options,
|
||||||
...SanitizedTeamCityConnectionSchema.options,
|
...SanitizedTeamCityConnectionSchema.options,
|
||||||
...SanitizedOCIConnectionSchema.options,
|
...SanitizedOCIConnectionSchema.options,
|
||||||
|
...SanitizedOracleDBConnectionSchema.options,
|
||||||
...SanitizedOnePassConnectionSchema.options
|
...SanitizedOnePassConnectionSchema.options
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -115,6 +120,7 @@ const AppConnectionOptionsSchema = z.discriminatedUnion("app", [
|
|||||||
LdapConnectionListItemSchema,
|
LdapConnectionListItemSchema,
|
||||||
TeamCityConnectionListItemSchema,
|
TeamCityConnectionListItemSchema,
|
||||||
OCIConnectionListItemSchema,
|
OCIConnectionListItemSchema,
|
||||||
|
OracleDBConnectionListItemSchema,
|
||||||
OnePassConnectionListItemSchema
|
OnePassConnectionListItemSchema
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { registerOCIConnectionRouter } from "@app/ee/routes/v1/app-connection-routers/oci-connection-router";
|
import { registerOCIConnectionRouter } from "@app/ee/routes/v1/app-connection-routers/oci-connection-router";
|
||||||
|
import { registerOracleDBConnectionRouter } from "@app/ee/routes/v1/app-connection-routers/oracledb-connection-router";
|
||||||
import { AppConnection } from "@app/services/app-connection/app-connection-enums";
|
import { AppConnection } from "@app/services/app-connection/app-connection-enums";
|
||||||
|
|
||||||
import { registerOnePassConnectionRouter } from "./1password-connection-router";
|
import { registerOnePassConnectionRouter } from "./1password-connection-router";
|
||||||
@@ -48,5 +49,6 @@ export const APP_CONNECTION_REGISTER_ROUTER_MAP: Record<AppConnection, (server:
|
|||||||
[AppConnection.LDAP]: registerLdapConnectionRouter,
|
[AppConnection.LDAP]: registerLdapConnectionRouter,
|
||||||
[AppConnection.TeamCity]: registerTeamCityConnectionRouter,
|
[AppConnection.TeamCity]: registerTeamCityConnectionRouter,
|
||||||
[AppConnection.OCI]: registerOCIConnectionRouter,
|
[AppConnection.OCI]: registerOCIConnectionRouter,
|
||||||
|
[AppConnection.OracleDB]: registerOracleDBConnectionRouter,
|
||||||
[AppConnection.OnePass]: registerOnePassConnectionRouter
|
[AppConnection.OnePass]: registerOnePassConnectionRouter
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ export enum AppConnection {
|
|||||||
LDAP = "ldap",
|
LDAP = "ldap",
|
||||||
TeamCity = "teamcity",
|
TeamCity = "teamcity",
|
||||||
OCI = "oci",
|
OCI = "oci",
|
||||||
|
OracleDB = "oracledb",
|
||||||
OnePass = "1password"
|
OnePass = "1password"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
OCIConnectionMethod,
|
OCIConnectionMethod,
|
||||||
validateOCIConnectionCredentials
|
validateOCIConnectionCredentials
|
||||||
} from "@app/ee/services/app-connections/oci";
|
} from "@app/ee/services/app-connections/oci";
|
||||||
|
import { getOracleDBConnectionListItem, OracleDBConnectionMethod } from "@app/ee/services/app-connections/oracledb";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { generateHash } from "@app/lib/crypto/encryption";
|
import { generateHash } from "@app/lib/crypto/encryption";
|
||||||
import { BadRequestError } from "@app/lib/errors";
|
import { BadRequestError } from "@app/lib/errors";
|
||||||
@@ -113,6 +114,7 @@ export const listAppConnectionOptions = () => {
|
|||||||
getLdapConnectionListItem(),
|
getLdapConnectionListItem(),
|
||||||
getTeamCityConnectionListItem(),
|
getTeamCityConnectionListItem(),
|
||||||
getOCIConnectionListItem(),
|
getOCIConnectionListItem(),
|
||||||
|
getOracleDBConnectionListItem(),
|
||||||
getOnePassConnectionListItem()
|
getOnePassConnectionListItem()
|
||||||
].sort((a, b) => a.name.localeCompare(b.name));
|
].sort((a, b) => a.name.localeCompare(b.name));
|
||||||
};
|
};
|
||||||
@@ -186,6 +188,7 @@ export const validateAppConnectionCredentials = async (
|
|||||||
[AppConnection.LDAP]: validateLdapConnectionCredentials as TAppConnectionCredentialsValidator,
|
[AppConnection.LDAP]: validateLdapConnectionCredentials as TAppConnectionCredentialsValidator,
|
||||||
[AppConnection.TeamCity]: validateTeamCityConnectionCredentials as TAppConnectionCredentialsValidator,
|
[AppConnection.TeamCity]: validateTeamCityConnectionCredentials as TAppConnectionCredentialsValidator,
|
||||||
[AppConnection.OCI]: validateOCIConnectionCredentials as TAppConnectionCredentialsValidator,
|
[AppConnection.OCI]: validateOCIConnectionCredentials as TAppConnectionCredentialsValidator,
|
||||||
|
[AppConnection.OracleDB]: validateSqlConnectionCredentials as TAppConnectionCredentialsValidator,
|
||||||
[AppConnection.OnePass]: validateOnePassConnectionCredentials as TAppConnectionCredentialsValidator
|
[AppConnection.OnePass]: validateOnePassConnectionCredentials as TAppConnectionCredentialsValidator
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -221,6 +224,7 @@ export const getAppConnectionMethodName = (method: TAppConnection["method"]) =>
|
|||||||
case PostgresConnectionMethod.UsernameAndPassword:
|
case PostgresConnectionMethod.UsernameAndPassword:
|
||||||
case MsSqlConnectionMethod.UsernameAndPassword:
|
case MsSqlConnectionMethod.UsernameAndPassword:
|
||||||
case MySqlConnectionMethod.UsernameAndPassword:
|
case MySqlConnectionMethod.UsernameAndPassword:
|
||||||
|
case OracleDBConnectionMethod.UsernameAndPassword:
|
||||||
return "Username & Password";
|
return "Username & Password";
|
||||||
case WindmillConnectionMethod.AccessToken:
|
case WindmillConnectionMethod.AccessToken:
|
||||||
case HCVaultConnectionMethod.AccessToken:
|
case HCVaultConnectionMethod.AccessToken:
|
||||||
@@ -284,6 +288,7 @@ export const TRANSITION_CONNECTION_CREDENTIALS_TO_PLATFORM: Record<
|
|||||||
[AppConnection.LDAP]: platformManagedCredentialsNotSupported, // we could support this in the future
|
[AppConnection.LDAP]: platformManagedCredentialsNotSupported, // we could support this in the future
|
||||||
[AppConnection.TeamCity]: platformManagedCredentialsNotSupported,
|
[AppConnection.TeamCity]: platformManagedCredentialsNotSupported,
|
||||||
[AppConnection.OCI]: platformManagedCredentialsNotSupported,
|
[AppConnection.OCI]: platformManagedCredentialsNotSupported,
|
||||||
|
[AppConnection.OracleDB]: platformManagedCredentialsNotSupported, // TODO(andrey): If managed credentials change this
|
||||||
[AppConnection.OnePass]: platformManagedCredentialsNotSupported
|
[AppConnection.OnePass]: platformManagedCredentialsNotSupported
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export const APP_CONNECTION_NAME_MAP: Record<AppConnection, string> = {
|
|||||||
[AppConnection.LDAP]: "LDAP",
|
[AppConnection.LDAP]: "LDAP",
|
||||||
[AppConnection.TeamCity]: "TeamCity",
|
[AppConnection.TeamCity]: "TeamCity",
|
||||||
[AppConnection.OCI]: "OCI",
|
[AppConnection.OCI]: "OCI",
|
||||||
|
[AppConnection.OracleDB]: "OracleDB",
|
||||||
[AppConnection.OnePass]: "1Password"
|
[AppConnection.OnePass]: "1Password"
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -46,6 +47,7 @@ export const APP_CONNECTION_PLAN_MAP: Record<AppConnection, AppConnectionPlanTyp
|
|||||||
[AppConnection.LDAP]: AppConnectionPlanType.Regular,
|
[AppConnection.LDAP]: AppConnectionPlanType.Regular,
|
||||||
[AppConnection.TeamCity]: AppConnectionPlanType.Regular,
|
[AppConnection.TeamCity]: AppConnectionPlanType.Regular,
|
||||||
[AppConnection.OCI]: AppConnectionPlanType.Enterprise,
|
[AppConnection.OCI]: AppConnectionPlanType.Enterprise,
|
||||||
|
[AppConnection.OracleDB]: AppConnectionPlanType.Enterprise,
|
||||||
[AppConnection.OnePass]: AppConnectionPlanType.Regular,
|
[AppConnection.OnePass]: AppConnectionPlanType.Regular,
|
||||||
[AppConnection.MySql]: AppConnectionPlanType.Regular
|
[AppConnection.MySql]: AppConnectionPlanType.Regular
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { ForbiddenError, subject } from "@casl/ability";
|
|||||||
|
|
||||||
import { ValidateOCIConnectionCredentialsSchema } from "@app/ee/services/app-connections/oci";
|
import { ValidateOCIConnectionCredentialsSchema } from "@app/ee/services/app-connections/oci";
|
||||||
import { ociConnectionService } from "@app/ee/services/app-connections/oci/oci-connection-service";
|
import { ociConnectionService } from "@app/ee/services/app-connections/oci/oci-connection-service";
|
||||||
|
import { ValidateOracleDBConnectionCredentialsSchema } from "@app/ee/services/app-connections/oracledb";
|
||||||
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
|
||||||
import { OrgPermissionAppConnectionActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
import { OrgPermissionAppConnectionActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
|
||||||
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service";
|
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service";
|
||||||
@@ -99,6 +100,7 @@ const VALIDATE_APP_CONNECTION_CREDENTIALS_MAP: Record<AppConnection, TValidateAp
|
|||||||
[AppConnection.LDAP]: ValidateLdapConnectionCredentialsSchema,
|
[AppConnection.LDAP]: ValidateLdapConnectionCredentialsSchema,
|
||||||
[AppConnection.TeamCity]: ValidateTeamCityConnectionCredentialsSchema,
|
[AppConnection.TeamCity]: ValidateTeamCityConnectionCredentialsSchema,
|
||||||
[AppConnection.OCI]: ValidateOCIConnectionCredentialsSchema,
|
[AppConnection.OCI]: ValidateOCIConnectionCredentialsSchema,
|
||||||
|
[AppConnection.OracleDB]: ValidateOracleDBConnectionCredentialsSchema,
|
||||||
[AppConnection.OnePass]: ValidateOnePassConnectionCredentialsSchema
|
[AppConnection.OnePass]: ValidateOnePassConnectionCredentialsSchema
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,11 @@ import {
|
|||||||
TOCIConnectionInput,
|
TOCIConnectionInput,
|
||||||
TValidateOCIConnectionCredentialsSchema
|
TValidateOCIConnectionCredentialsSchema
|
||||||
} from "@app/ee/services/app-connections/oci";
|
} from "@app/ee/services/app-connections/oci";
|
||||||
|
import {
|
||||||
|
TOracleDBConnection,
|
||||||
|
TOracleDBConnectionInput,
|
||||||
|
TValidateOracleDBConnectionCredentialsSchema
|
||||||
|
} from "@app/ee/services/app-connections/oracledb";
|
||||||
import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal";
|
import { TAppConnectionDALFactory } from "@app/services/app-connection/app-connection-dal";
|
||||||
import { TSqlConnectionConfig } from "@app/services/app-connection/shared/sql/sql-connection-types";
|
import { TSqlConnectionConfig } from "@app/services/app-connection/shared/sql/sql-connection-types";
|
||||||
import { SecretSync } from "@app/services/secret-sync/secret-sync-enums";
|
import { SecretSync } from "@app/services/secret-sync/secret-sync-enums";
|
||||||
@@ -147,12 +152,13 @@ export type TAppConnection = { id: string } & (
|
|||||||
| TLdapConnection
|
| TLdapConnection
|
||||||
| TTeamCityConnection
|
| TTeamCityConnection
|
||||||
| TOCIConnection
|
| TOCIConnection
|
||||||
|
| TOracleDBConnection
|
||||||
| TOnePassConnection
|
| TOnePassConnection
|
||||||
);
|
);
|
||||||
|
|
||||||
export type TAppConnectionRaw = NonNullable<Awaited<ReturnType<TAppConnectionDALFactory["findById"]>>>;
|
export type TAppConnectionRaw = NonNullable<Awaited<ReturnType<TAppConnectionDALFactory["findById"]>>>;
|
||||||
|
|
||||||
export type TSqlConnection = TPostgresConnection | TMsSqlConnection | TMySqlConnection;
|
export type TSqlConnection = TPostgresConnection | TMsSqlConnection | TMySqlConnection | TOracleDBConnection;
|
||||||
|
|
||||||
export type TAppConnectionInput = { id: string } & (
|
export type TAppConnectionInput = { id: string } & (
|
||||||
| TAwsConnectionInput
|
| TAwsConnectionInput
|
||||||
@@ -176,10 +182,15 @@ export type TAppConnectionInput = { id: string } & (
|
|||||||
| TLdapConnectionInput
|
| TLdapConnectionInput
|
||||||
| TTeamCityConnectionInput
|
| TTeamCityConnectionInput
|
||||||
| TOCIConnectionInput
|
| TOCIConnectionInput
|
||||||
|
| TOracleDBConnectionInput
|
||||||
| TOnePassConnectionInput
|
| TOnePassConnectionInput
|
||||||
);
|
);
|
||||||
|
|
||||||
export type TSqlConnectionInput = TPostgresConnectionInput | TMsSqlConnectionInput | TMySqlConnectionInput;
|
export type TSqlConnectionInput =
|
||||||
|
| TPostgresConnectionInput
|
||||||
|
| TMsSqlConnectionInput
|
||||||
|
| TMySqlConnectionInput
|
||||||
|
| TOracleDBConnectionInput;
|
||||||
|
|
||||||
export type TCreateAppConnectionDTO = Pick<
|
export type TCreateAppConnectionDTO = Pick<
|
||||||
TAppConnectionInput,
|
TAppConnectionInput,
|
||||||
@@ -234,6 +245,7 @@ export type TValidateAppConnectionCredentialsSchema =
|
|||||||
| TValidateLdapConnectionCredentialsSchema
|
| TValidateLdapConnectionCredentialsSchema
|
||||||
| TValidateTeamCityConnectionCredentialsSchema
|
| TValidateTeamCityConnectionCredentialsSchema
|
||||||
| TValidateOCIConnectionCredentialsSchema
|
| TValidateOCIConnectionCredentialsSchema
|
||||||
|
| TValidateOracleDBConnectionCredentialsSchema
|
||||||
| TValidateOnePassConnectionCredentialsSchema;
|
| TValidateOnePassConnectionCredentialsSchema;
|
||||||
|
|
||||||
export type TListAwsConnectionKmsKeys = {
|
export type TListAwsConnectionKmsKeys = {
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ const EXTERNAL_REQUEST_TIMEOUT = 10 * 1000;
|
|||||||
const SQL_CONNECTION_CLIENT_MAP = {
|
const SQL_CONNECTION_CLIENT_MAP = {
|
||||||
[AppConnection.Postgres]: "pg",
|
[AppConnection.Postgres]: "pg",
|
||||||
[AppConnection.MsSql]: "mssql",
|
[AppConnection.MsSql]: "mssql",
|
||||||
[AppConnection.MySql]: "mysql2"
|
[AppConnection.MySql]: "mysql2",
|
||||||
|
[AppConnection.OracleDB]: "oracledb"
|
||||||
};
|
};
|
||||||
|
|
||||||
const getConnectionConfig = ({
|
const getConnectionConfig = ({
|
||||||
@@ -57,6 +58,10 @@ const getConnectionConfig = ({
|
|||||||
: false
|
: false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
// TODO(andrey): Might be interesting for later
|
||||||
|
case AppConnection.OracleDB: {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
throw new Error(`Unhandled SQL Connection Config: ${app as AppConnection}`);
|
throw new Error(`Unhandled SQL Connection Config: ${app as AppConnection}`);
|
||||||
}
|
}
|
||||||
@@ -114,7 +119,8 @@ export const SQL_CONNECTION_ALTER_LOGIN_STATEMENT: Record<
|
|||||||
> = {
|
> = {
|
||||||
[AppConnection.Postgres]: ({ username, password }) => [`ALTER USER ?? WITH PASSWORD '${password}';`, [username]],
|
[AppConnection.Postgres]: ({ username, password }) => [`ALTER USER ?? WITH PASSWORD '${password}';`, [username]],
|
||||||
[AppConnection.MsSql]: ({ username, password }) => [`ALTER LOGIN ?? WITH PASSWORD = '${password}';`, [username]],
|
[AppConnection.MsSql]: ({ username, password }) => [`ALTER LOGIN ?? WITH PASSWORD = '${password}';`, [username]],
|
||||||
[AppConnection.MySql]: ({ username, password }) => [`ALTER USER ??@'%' IDENTIFIED BY '${password}';`, [username]]
|
[AppConnection.MySql]: ({ username, password }) => [`ALTER USER ??@'%' IDENTIFIED BY '${password}';`, [username]],
|
||||||
|
[AppConnection.OracleDB]: ({ username, password }) => [`ALTER USER ?? IDENTIFIED BY "${password}"`, [username]]
|
||||||
};
|
};
|
||||||
|
|
||||||
export const transferSqlConnectionCredentialsToPlatform = async (
|
export const transferSqlConnectionCredentialsToPlatform = async (
|
||||||
|
|||||||
+1
@@ -64,6 +64,7 @@ const Content = ({ secretRotation }: ContentProps) => {
|
|||||||
case SecretRotation.PostgresCredentials:
|
case SecretRotation.PostgresCredentials:
|
||||||
case SecretRotation.MySqlCredentials:
|
case SecretRotation.MySqlCredentials:
|
||||||
case SecretRotation.MsSqlCredentials:
|
case SecretRotation.MsSqlCredentials:
|
||||||
|
case SecretRotation.OracleDBCredentials:
|
||||||
Component = (
|
Component = (
|
||||||
<ViewSqlCredentialsRotationGeneratedCredentials
|
<ViewSqlCredentialsRotationGeneratedCredentials
|
||||||
generatedCredentialsResponse={generatedCredentialsResponse}
|
generatedCredentialsResponse={generatedCredentialsResponse}
|
||||||
|
|||||||
+2
@@ -2,12 +2,14 @@ import { CredentialDisplay } from "@app/components/secret-rotations-v2/ViewSecre
|
|||||||
import { ViewRotationGeneratedCredentialsDisplay } from "@app/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/ViewRotationGeneratedCredentialsDisplay";
|
import { ViewRotationGeneratedCredentialsDisplay } from "@app/components/secret-rotations-v2/ViewSecretRotationV2GeneratedCredentials/shared/ViewRotationGeneratedCredentialsDisplay";
|
||||||
import { TMsSqlCredentialsRotationGeneratedCredentialsResponse } from "@app/hooks/api/secretRotationsV2/types/mssql-credentials-rotation";
|
import { TMsSqlCredentialsRotationGeneratedCredentialsResponse } from "@app/hooks/api/secretRotationsV2/types/mssql-credentials-rotation";
|
||||||
import { TMySqlCredentialsRotationGeneratedCredentialsResponse } from "@app/hooks/api/secretRotationsV2/types/mysql-credentials-rotation";
|
import { TMySqlCredentialsRotationGeneratedCredentialsResponse } from "@app/hooks/api/secretRotationsV2/types/mysql-credentials-rotation";
|
||||||
|
import { TOracleDBCredentialsRotationGeneratedCredentialsResponse } from "@app/hooks/api/secretRotationsV2/types/oracledb-credentials-rotation";
|
||||||
import { TPostgresCredentialsRotationGeneratedCredentialsResponse } from "@app/hooks/api/secretRotationsV2/types/postgres-credentials-rotation";
|
import { TPostgresCredentialsRotationGeneratedCredentialsResponse } from "@app/hooks/api/secretRotationsV2/types/postgres-credentials-rotation";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
generatedCredentialsResponse:
|
generatedCredentialsResponse:
|
||||||
| TMsSqlCredentialsRotationGeneratedCredentialsResponse
|
| TMsSqlCredentialsRotationGeneratedCredentialsResponse
|
||||||
| TMySqlCredentialsRotationGeneratedCredentialsResponse
|
| TMySqlCredentialsRotationGeneratedCredentialsResponse
|
||||||
|
| TOracleDBCredentialsRotationGeneratedCredentialsResponse
|
||||||
| TPostgresCredentialsRotationGeneratedCredentialsResponse;
|
| TPostgresCredentialsRotationGeneratedCredentialsResponse;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+1
@@ -13,6 +13,7 @@ const COMPONENT_MAP: Record<SecretRotation, React.FC> = {
|
|||||||
[SecretRotation.PostgresCredentials]: SqlCredentialsRotationParametersFields,
|
[SecretRotation.PostgresCredentials]: SqlCredentialsRotationParametersFields,
|
||||||
[SecretRotation.MsSqlCredentials]: SqlCredentialsRotationParametersFields,
|
[SecretRotation.MsSqlCredentials]: SqlCredentialsRotationParametersFields,
|
||||||
[SecretRotation.MySqlCredentials]: SqlCredentialsRotationParametersFields,
|
[SecretRotation.MySqlCredentials]: SqlCredentialsRotationParametersFields,
|
||||||
|
[SecretRotation.OracleDBCredentials]: SqlCredentialsRotationParametersFields,
|
||||||
[SecretRotation.Auth0ClientSecret]: Auth0ClientSecretRotationParametersFields,
|
[SecretRotation.Auth0ClientSecret]: Auth0ClientSecretRotationParametersFields,
|
||||||
[SecretRotation.AzureClientSecret]: AzureClientSecretRotationParametersFields,
|
[SecretRotation.AzureClientSecret]: AzureClientSecretRotationParametersFields,
|
||||||
[SecretRotation.LdapPassword]: LdapPasswordRotationParametersFields,
|
[SecretRotation.LdapPassword]: LdapPasswordRotationParametersFields,
|
||||||
|
|||||||
+1
@@ -16,6 +16,7 @@ const COMPONENT_MAP: Record<SecretRotation, React.FC> = {
|
|||||||
[SecretRotation.PostgresCredentials]: SqlCredentialsRotationReviewFields,
|
[SecretRotation.PostgresCredentials]: SqlCredentialsRotationReviewFields,
|
||||||
[SecretRotation.MsSqlCredentials]: SqlCredentialsRotationReviewFields,
|
[SecretRotation.MsSqlCredentials]: SqlCredentialsRotationReviewFields,
|
||||||
[SecretRotation.MySqlCredentials]: SqlCredentialsRotationReviewFields,
|
[SecretRotation.MySqlCredentials]: SqlCredentialsRotationReviewFields,
|
||||||
|
[SecretRotation.OracleDBCredentials]: SqlCredentialsRotationReviewFields,
|
||||||
[SecretRotation.Auth0ClientSecret]: Auth0ClientSecretRotationReviewFields,
|
[SecretRotation.Auth0ClientSecret]: Auth0ClientSecretRotationReviewFields,
|
||||||
[SecretRotation.AzureClientSecret]: AzureClientSecretRotationReviewFields,
|
[SecretRotation.AzureClientSecret]: AzureClientSecretRotationReviewFields,
|
||||||
[SecretRotation.LdapPassword]: LdapPasswordRotationReviewFields,
|
[SecretRotation.LdapPassword]: LdapPasswordRotationReviewFields,
|
||||||
|
|||||||
+1
@@ -13,6 +13,7 @@ const COMPONENT_MAP: Record<SecretRotation, React.FC> = {
|
|||||||
[SecretRotation.PostgresCredentials]: SqlCredentialsRotationSecretsMappingFields,
|
[SecretRotation.PostgresCredentials]: SqlCredentialsRotationSecretsMappingFields,
|
||||||
[SecretRotation.MsSqlCredentials]: SqlCredentialsRotationSecretsMappingFields,
|
[SecretRotation.MsSqlCredentials]: SqlCredentialsRotationSecretsMappingFields,
|
||||||
[SecretRotation.MySqlCredentials]: SqlCredentialsRotationSecretsMappingFields,
|
[SecretRotation.MySqlCredentials]: SqlCredentialsRotationSecretsMappingFields,
|
||||||
|
[SecretRotation.OracleDBCredentials]: SqlCredentialsRotationSecretsMappingFields,
|
||||||
[SecretRotation.Auth0ClientSecret]: Auth0ClientSecretRotationSecretsMappingFields,
|
[SecretRotation.Auth0ClientSecret]: Auth0ClientSecretRotationSecretsMappingFields,
|
||||||
[SecretRotation.AzureClientSecret]: AzureClientSecretRotationSecretsMappingFields,
|
[SecretRotation.AzureClientSecret]: AzureClientSecretRotationSecretsMappingFields,
|
||||||
[SecretRotation.LdapPassword]: LdapPasswordRotationSecretsMappingFields,
|
[SecretRotation.LdapPassword]: LdapPasswordRotationSecretsMappingFields,
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import { PostgresCredentialsRotationSchema } from "@app/components/secret-rotati
|
|||||||
import { SecretRotation } from "@app/hooks/api/secretRotationsV2";
|
import { SecretRotation } from "@app/hooks/api/secretRotationsV2";
|
||||||
import { LdapPasswordRotationMethod } from "@app/hooks/api/secretRotationsV2/types/ldap-password-rotation";
|
import { LdapPasswordRotationMethod } from "@app/hooks/api/secretRotationsV2/types/ldap-password-rotation";
|
||||||
|
|
||||||
|
import { OracleDBCredentialsRotationSchema } from "./oracledb-credentials-rotation-schema";
|
||||||
|
|
||||||
export const SecretRotationV2FormSchema = (isUpdate: boolean) =>
|
export const SecretRotationV2FormSchema = (isUpdate: boolean) =>
|
||||||
z
|
z
|
||||||
.intersection(
|
.intersection(
|
||||||
@@ -19,6 +21,7 @@ export const SecretRotationV2FormSchema = (isUpdate: boolean) =>
|
|||||||
PostgresCredentialsRotationSchema,
|
PostgresCredentialsRotationSchema,
|
||||||
MsSqlCredentialsRotationSchema,
|
MsSqlCredentialsRotationSchema,
|
||||||
MySqlCredentialsRotationSchema,
|
MySqlCredentialsRotationSchema,
|
||||||
|
OracleDBCredentialsRotationSchema,
|
||||||
LdapPasswordRotationSchema,
|
LdapPasswordRotationSchema,
|
||||||
AwsIamUserSecretRotationSchema
|
AwsIamUserSecretRotationSchema
|
||||||
]),
|
]),
|
||||||
|
|||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
import { BaseSecretRotationSchema } from "@app/components/secret-rotations-v2/forms/schemas/base-secret-rotation-v2-schema";
|
||||||
|
import { SqlCredentialsRotationSchema } from "@app/components/secret-rotations-v2/forms/schemas/shared";
|
||||||
|
import { SecretRotation } from "@app/hooks/api/secretRotationsV2";
|
||||||
|
|
||||||
|
export const OracleDBCredentialsRotationSchema = z
|
||||||
|
.object({
|
||||||
|
type: z.literal(SecretRotation.OracleDBCredentials)
|
||||||
|
})
|
||||||
|
.merge(SqlCredentialsRotationSchema)
|
||||||
|
.merge(BaseSecretRotationSchema);
|
||||||
@@ -27,6 +27,7 @@ import {
|
|||||||
MsSqlConnectionMethod,
|
MsSqlConnectionMethod,
|
||||||
MySqlConnectionMethod,
|
MySqlConnectionMethod,
|
||||||
OnePassConnectionMethod,
|
OnePassConnectionMethod,
|
||||||
|
OracleDBConnectionMethod,
|
||||||
PostgresConnectionMethod,
|
PostgresConnectionMethod,
|
||||||
TAppConnection,
|
TAppConnection,
|
||||||
TeamCityConnectionMethod,
|
TeamCityConnectionMethod,
|
||||||
@@ -67,6 +68,7 @@ export const APP_CONNECTION_MAP: Record<
|
|||||||
[AppConnection.Postgres]: { name: "PostgreSQL", image: "Postgres.png" },
|
[AppConnection.Postgres]: { name: "PostgreSQL", image: "Postgres.png" },
|
||||||
[AppConnection.MsSql]: { name: "Microsoft SQL Server", image: "MsSql.png" },
|
[AppConnection.MsSql]: { name: "Microsoft SQL Server", image: "MsSql.png" },
|
||||||
[AppConnection.MySql]: { name: "MySQL", image: "MySql.png" },
|
[AppConnection.MySql]: { name: "MySQL", image: "MySql.png" },
|
||||||
|
[AppConnection.OracleDB]: { name: "OracleDB", image: "Oracle.png" },
|
||||||
[AppConnection.Camunda]: { name: "Camunda", image: "Camunda.png" },
|
[AppConnection.Camunda]: { name: "Camunda", image: "Camunda.png" },
|
||||||
[AppConnection.Windmill]: { name: "Windmill", image: "Windmill.png" },
|
[AppConnection.Windmill]: { name: "Windmill", image: "Windmill.png" },
|
||||||
[AppConnection.Auth0]: { name: "Auth0", image: "Auth0.png", size: 40 },
|
[AppConnection.Auth0]: { name: "Auth0", image: "Auth0.png", size: 40 },
|
||||||
@@ -106,6 +108,7 @@ export const getAppConnectionMethodDetails = (method: TAppConnection["method"])
|
|||||||
case PostgresConnectionMethod.UsernameAndPassword:
|
case PostgresConnectionMethod.UsernameAndPassword:
|
||||||
case MsSqlConnectionMethod.UsernameAndPassword:
|
case MsSqlConnectionMethod.UsernameAndPassword:
|
||||||
case MySqlConnectionMethod.UsernameAndPassword:
|
case MySqlConnectionMethod.UsernameAndPassword:
|
||||||
|
case OracleDBConnectionMethod.UsernameAndPassword:
|
||||||
return { name: "Username & Password", icon: faLock };
|
return { name: "Username & Password", icon: faLock };
|
||||||
case HCVaultConnectionMethod.AccessToken:
|
case HCVaultConnectionMethod.AccessToken:
|
||||||
case TeamCityConnectionMethod.AccessToken:
|
case TeamCityConnectionMethod.AccessToken:
|
||||||
|
|||||||
@@ -20,6 +20,11 @@ export const SECRET_ROTATION_MAP: Record<
|
|||||||
image: "MySql.png",
|
image: "MySql.png",
|
||||||
size: 50
|
size: 50
|
||||||
},
|
},
|
||||||
|
[SecretRotation.OracleDBCredentials]: {
|
||||||
|
name: "OracleDB Credentials",
|
||||||
|
image: "Oracle.png",
|
||||||
|
size: 50
|
||||||
|
},
|
||||||
[SecretRotation.Auth0ClientSecret]: {
|
[SecretRotation.Auth0ClientSecret]: {
|
||||||
name: "Auth0 Client Secret",
|
name: "Auth0 Client Secret",
|
||||||
image: "Auth0.png",
|
image: "Auth0.png",
|
||||||
@@ -46,6 +51,7 @@ export const SECRET_ROTATION_CONNECTION_MAP: Record<SecretRotation, AppConnectio
|
|||||||
[SecretRotation.PostgresCredentials]: AppConnection.Postgres,
|
[SecretRotation.PostgresCredentials]: AppConnection.Postgres,
|
||||||
[SecretRotation.MsSqlCredentials]: AppConnection.MsSql,
|
[SecretRotation.MsSqlCredentials]: AppConnection.MsSql,
|
||||||
[SecretRotation.MySqlCredentials]: AppConnection.MySql,
|
[SecretRotation.MySqlCredentials]: AppConnection.MySql,
|
||||||
|
[SecretRotation.OracleDBCredentials]: AppConnection.OracleDB,
|
||||||
[SecretRotation.Auth0ClientSecret]: AppConnection.Auth0,
|
[SecretRotation.Auth0ClientSecret]: AppConnection.Auth0,
|
||||||
[SecretRotation.AzureClientSecret]: AppConnection.AzureClientSecrets,
|
[SecretRotation.AzureClientSecret]: AppConnection.AzureClientSecrets,
|
||||||
[SecretRotation.LdapPassword]: AppConnection.LDAP,
|
[SecretRotation.LdapPassword]: AppConnection.LDAP,
|
||||||
@@ -57,6 +63,7 @@ export const IS_ROTATION_DUAL_CREDENTIALS: Record<SecretRotation, boolean> = {
|
|||||||
[SecretRotation.PostgresCredentials]: true,
|
[SecretRotation.PostgresCredentials]: true,
|
||||||
[SecretRotation.MsSqlCredentials]: true,
|
[SecretRotation.MsSqlCredentials]: true,
|
||||||
[SecretRotation.MySqlCredentials]: true,
|
[SecretRotation.MySqlCredentials]: true,
|
||||||
|
[SecretRotation.OracleDBCredentials]: true,
|
||||||
[SecretRotation.Auth0ClientSecret]: false,
|
[SecretRotation.Auth0ClientSecret]: false,
|
||||||
[SecretRotation.AzureClientSecret]: true,
|
[SecretRotation.AzureClientSecret]: true,
|
||||||
[SecretRotation.LdapPassword]: false,
|
[SecretRotation.LdapPassword]: false,
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ export enum AppConnection {
|
|||||||
Postgres = "postgres",
|
Postgres = "postgres",
|
||||||
MsSql = "mssql",
|
MsSql = "mssql",
|
||||||
MySql = "mysql",
|
MySql = "mysql",
|
||||||
|
OracleDB = "oracledb",
|
||||||
Camunda = "camunda",
|
Camunda = "camunda",
|
||||||
Windmill = "windmill",
|
Windmill = "windmill",
|
||||||
Auth0 = "auth0",
|
Auth0 = "auth0",
|
||||||
|
|||||||
@@ -69,6 +69,10 @@ export type TMySqlConnectionOption = TAppConnectionOptionBase & {
|
|||||||
app: AppConnection.MySql;
|
app: AppConnection.MySql;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type TOracleDBConnectionOption = TAppConnectionOptionBase & {
|
||||||
|
app: AppConnection.OracleDB;
|
||||||
|
};
|
||||||
|
|
||||||
export type TCamundaConnectionOption = TAppConnectionOptionBase & {
|
export type TCamundaConnectionOption = TAppConnectionOptionBase & {
|
||||||
app: AppConnection.Camunda;
|
app: AppConnection.Camunda;
|
||||||
};
|
};
|
||||||
@@ -115,6 +119,7 @@ export type TAppConnectionOption =
|
|||||||
| TPostgresConnectionOption
|
| TPostgresConnectionOption
|
||||||
| TMsSqlConnectionOption
|
| TMsSqlConnectionOption
|
||||||
| TMySqlConnectionOption
|
| TMySqlConnectionOption
|
||||||
|
| TOracleDBConnectionOption
|
||||||
| TCamundaConnectionOption
|
| TCamundaConnectionOption
|
||||||
| TWindmillConnectionOption
|
| TWindmillConnectionOption
|
||||||
| TAuth0ConnectionOption
|
| TAuth0ConnectionOption
|
||||||
@@ -138,6 +143,7 @@ export type TAppConnectionOptionMap = {
|
|||||||
[AppConnection.Postgres]: TPostgresConnectionOption;
|
[AppConnection.Postgres]: TPostgresConnectionOption;
|
||||||
[AppConnection.MsSql]: TMsSqlConnectionOption;
|
[AppConnection.MsSql]: TMsSqlConnectionOption;
|
||||||
[AppConnection.MySql]: TMySqlConnectionOption;
|
[AppConnection.MySql]: TMySqlConnectionOption;
|
||||||
|
[AppConnection.OracleDB]: TOracleDBConnectionOption;
|
||||||
[AppConnection.Camunda]: TCamundaConnectionOption;
|
[AppConnection.Camunda]: TCamundaConnectionOption;
|
||||||
[AppConnection.Windmill]: TWindmillConnectionOption;
|
[AppConnection.Windmill]: TWindmillConnectionOption;
|
||||||
[AppConnection.Auth0]: TAuth0ConnectionOption;
|
[AppConnection.Auth0]: TAuth0ConnectionOption;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import { TLdapConnection } from "./ldap-connection";
|
|||||||
import { TMsSqlConnection } from "./mssql-connection";
|
import { TMsSqlConnection } from "./mssql-connection";
|
||||||
import { TMySqlConnection } from "./mysql-connection";
|
import { TMySqlConnection } from "./mysql-connection";
|
||||||
import { TOCIConnection } from "./oci-connection";
|
import { TOCIConnection } from "./oci-connection";
|
||||||
|
import { TOracleDBConnection } from "./oracledb-connection";
|
||||||
import { TPostgresConnection } from "./postgres-connection";
|
import { TPostgresConnection } from "./postgres-connection";
|
||||||
import { TTeamCityConnection } from "./teamcity-connection";
|
import { TTeamCityConnection } from "./teamcity-connection";
|
||||||
import { TTerraformCloudConnection } from "./terraform-cloud-connection";
|
import { TTerraformCloudConnection } from "./terraform-cloud-connection";
|
||||||
@@ -40,6 +41,7 @@ export * from "./ldap-connection";
|
|||||||
export * from "./mssql-connection";
|
export * from "./mssql-connection";
|
||||||
export * from "./mysql-connection";
|
export * from "./mysql-connection";
|
||||||
export * from "./oci-connection";
|
export * from "./oci-connection";
|
||||||
|
export * from "./oracledb-connection";
|
||||||
export * from "./postgres-connection";
|
export * from "./postgres-connection";
|
||||||
export * from "./teamcity-connection";
|
export * from "./teamcity-connection";
|
||||||
export * from "./terraform-cloud-connection";
|
export * from "./terraform-cloud-connection";
|
||||||
@@ -61,6 +63,7 @@ export type TAppConnection =
|
|||||||
| TPostgresConnection
|
| TPostgresConnection
|
||||||
| TMsSqlConnection
|
| TMsSqlConnection
|
||||||
| TMySqlConnection
|
| TMySqlConnection
|
||||||
|
| TOracleDBConnection
|
||||||
| TCamundaConnection
|
| TCamundaConnection
|
||||||
| TWindmillConnection
|
| TWindmillConnection
|
||||||
| TAuth0Connection
|
| TAuth0Connection
|
||||||
@@ -110,6 +113,7 @@ export type TAppConnectionMap = {
|
|||||||
[AppConnection.Postgres]: TPostgresConnection;
|
[AppConnection.Postgres]: TPostgresConnection;
|
||||||
[AppConnection.MsSql]: TMsSqlConnection;
|
[AppConnection.MsSql]: TMsSqlConnection;
|
||||||
[AppConnection.MySql]: TMySqlConnection;
|
[AppConnection.MySql]: TMySqlConnection;
|
||||||
|
[AppConnection.OracleDB]: TOracleDBConnection;
|
||||||
[AppConnection.Camunda]: TCamundaConnection;
|
[AppConnection.Camunda]: TCamundaConnection;
|
||||||
[AppConnection.Windmill]: TWindmillConnection;
|
[AppConnection.Windmill]: TWindmillConnection;
|
||||||
[AppConnection.Auth0]: TAuth0Connection;
|
[AppConnection.Auth0]: TAuth0Connection;
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import { AppConnection } from "@app/hooks/api/appConnections/enums";
|
||||||
|
import { TRootAppConnection } from "@app/hooks/api/appConnections/types/root-connection";
|
||||||
|
|
||||||
|
import { TBaseSqlConnectionCredentials } from "./shared";
|
||||||
|
|
||||||
|
export enum OracleDBConnectionMethod {
|
||||||
|
UsernameAndPassword = "username-and-password"
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TOracleDBConnection = TRootAppConnection & { app: AppConnection.OracleDB } & {
|
||||||
|
method: OracleDBConnectionMethod.UsernameAndPassword;
|
||||||
|
credentials: TBaseSqlConnectionCredentials;
|
||||||
|
};
|
||||||
@@ -2,6 +2,7 @@ export enum SecretRotation {
|
|||||||
PostgresCredentials = "postgres-credentials",
|
PostgresCredentials = "postgres-credentials",
|
||||||
MsSqlCredentials = "mssql-credentials",
|
MsSqlCredentials = "mssql-credentials",
|
||||||
MySqlCredentials = "mysql-credentials",
|
MySqlCredentials = "mysql-credentials",
|
||||||
|
OracleDBCredentials = "oracledb-credentials",
|
||||||
Auth0ClientSecret = "auth0-client-secret",
|
Auth0ClientSecret = "auth0-client-secret",
|
||||||
AzureClientSecret = "azure-client-secret",
|
AzureClientSecret = "azure-client-secret",
|
||||||
LdapPassword = "ldap-password",
|
LdapPassword = "ldap-password",
|
||||||
|
|||||||
@@ -35,11 +35,16 @@ import {
|
|||||||
TMySqlCredentialsRotation,
|
TMySqlCredentialsRotation,
|
||||||
TMySqlCredentialsRotationGeneratedCredentialsResponse
|
TMySqlCredentialsRotationGeneratedCredentialsResponse
|
||||||
} from "./mysql-credentials-rotation";
|
} from "./mysql-credentials-rotation";
|
||||||
|
import {
|
||||||
|
TOracleDBCredentialsRotation,
|
||||||
|
TOracleDBCredentialsRotationGeneratedCredentialsResponse
|
||||||
|
} from "./oracledb-credentials-rotation";
|
||||||
|
|
||||||
export type TSecretRotationV2 = (
|
export type TSecretRotationV2 = (
|
||||||
| TPostgresCredentialsRotation
|
| TPostgresCredentialsRotation
|
||||||
| TMsSqlCredentialsRotation
|
| TMsSqlCredentialsRotation
|
||||||
| TMySqlCredentialsRotation
|
| TMySqlCredentialsRotation
|
||||||
|
| TOracleDBCredentialsRotation
|
||||||
| TAuth0ClientSecretRotation
|
| TAuth0ClientSecretRotation
|
||||||
| TAzureClientSecretRotation
|
| TAzureClientSecretRotation
|
||||||
| TLdapPasswordRotation
|
| TLdapPasswordRotation
|
||||||
@@ -63,6 +68,7 @@ export type TViewSecretRotationGeneratedCredentialsResponse =
|
|||||||
| TPostgresCredentialsRotationGeneratedCredentialsResponse
|
| TPostgresCredentialsRotationGeneratedCredentialsResponse
|
||||||
| TMsSqlCredentialsRotationGeneratedCredentialsResponse
|
| TMsSqlCredentialsRotationGeneratedCredentialsResponse
|
||||||
| TMySqlCredentialsRotationGeneratedCredentialsResponse
|
| TMySqlCredentialsRotationGeneratedCredentialsResponse
|
||||||
|
| TOracleDBCredentialsRotationGeneratedCredentialsResponse
|
||||||
| TAuth0ClientSecretRotationGeneratedCredentialsResponse
|
| TAuth0ClientSecretRotationGeneratedCredentialsResponse
|
||||||
| TAzureClientSecretRotationGeneratedCredentialsResponse
|
| TAzureClientSecretRotationGeneratedCredentialsResponse
|
||||||
| TLdapPasswordRotationGeneratedCredentialsResponse
|
| TLdapPasswordRotationGeneratedCredentialsResponse
|
||||||
@@ -113,6 +119,7 @@ export type TSecretRotationOptionMap = {
|
|||||||
[SecretRotation.PostgresCredentials]: TSqlCredentialsRotationOption;
|
[SecretRotation.PostgresCredentials]: TSqlCredentialsRotationOption;
|
||||||
[SecretRotation.MsSqlCredentials]: TSqlCredentialsRotationOption;
|
[SecretRotation.MsSqlCredentials]: TSqlCredentialsRotationOption;
|
||||||
[SecretRotation.MySqlCredentials]: TSqlCredentialsRotationOption;
|
[SecretRotation.MySqlCredentials]: TSqlCredentialsRotationOption;
|
||||||
|
[SecretRotation.OracleDBCredentials]: TSqlCredentialsRotationOption;
|
||||||
[SecretRotation.Auth0ClientSecret]: TAuth0ClientSecretRotationOption;
|
[SecretRotation.Auth0ClientSecret]: TAuth0ClientSecretRotationOption;
|
||||||
[SecretRotation.AzureClientSecret]: TAzureClientSecretRotationOption;
|
[SecretRotation.AzureClientSecret]: TAzureClientSecretRotationOption;
|
||||||
[SecretRotation.LdapPassword]: TLdapPasswordRotationOption;
|
[SecretRotation.LdapPassword]: TLdapPasswordRotationOption;
|
||||||
@@ -123,6 +130,7 @@ export type TSecretRotationGeneratedCredentialsResponseMap = {
|
|||||||
[SecretRotation.PostgresCredentials]: TPostgresCredentialsRotationGeneratedCredentialsResponse;
|
[SecretRotation.PostgresCredentials]: TPostgresCredentialsRotationGeneratedCredentialsResponse;
|
||||||
[SecretRotation.MsSqlCredentials]: TMsSqlCredentialsRotationGeneratedCredentialsResponse;
|
[SecretRotation.MsSqlCredentials]: TMsSqlCredentialsRotationGeneratedCredentialsResponse;
|
||||||
[SecretRotation.MySqlCredentials]: TMySqlCredentialsRotationGeneratedCredentialsResponse;
|
[SecretRotation.MySqlCredentials]: TMySqlCredentialsRotationGeneratedCredentialsResponse;
|
||||||
|
[SecretRotation.OracleDBCredentials]: TOracleDBCredentialsRotationGeneratedCredentialsResponse;
|
||||||
[SecretRotation.Auth0ClientSecret]: TAuth0ClientSecretRotationGeneratedCredentialsResponse;
|
[SecretRotation.Auth0ClientSecret]: TAuth0ClientSecretRotationGeneratedCredentialsResponse;
|
||||||
[SecretRotation.AzureClientSecret]: TAzureClientSecretRotationGeneratedCredentialsResponse;
|
[SecretRotation.AzureClientSecret]: TAzureClientSecretRotationGeneratedCredentialsResponse;
|
||||||
[SecretRotation.LdapPassword]: TLdapPasswordRotationGeneratedCredentialsResponse;
|
[SecretRotation.LdapPassword]: TLdapPasswordRotationGeneratedCredentialsResponse;
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import { SecretRotation } from "@app/hooks/api/secretRotationsV2";
|
||||||
|
import {
|
||||||
|
TSecretRotationV2Base,
|
||||||
|
TSecretRotationV2GeneratedCredentialsResponseBase,
|
||||||
|
TSqlCredentialsRotationGeneratedCredentials,
|
||||||
|
TSqlCredentialsRotationProperties
|
||||||
|
} from "@app/hooks/api/secretRotationsV2/types/shared";
|
||||||
|
|
||||||
|
export type TOracleDBCredentialsRotation = TSecretRotationV2Base & {
|
||||||
|
type: SecretRotation.OracleDBCredentials;
|
||||||
|
} & TSqlCredentialsRotationProperties;
|
||||||
|
|
||||||
|
export type TOracleDBCredentialsRotationGeneratedCredentialsResponse =
|
||||||
|
TSecretRotationV2GeneratedCredentialsResponseBase<
|
||||||
|
SecretRotation.OracleDBCredentials,
|
||||||
|
TSqlCredentialsRotationGeneratedCredentials
|
||||||
|
>;
|
||||||
@@ -17,8 +17,13 @@ export type TSqlCredentialsRotationOption = {
|
|||||||
type:
|
type:
|
||||||
| SecretRotation.PostgresCredentials
|
| SecretRotation.PostgresCredentials
|
||||||
| SecretRotation.MsSqlCredentials
|
| SecretRotation.MsSqlCredentials
|
||||||
| SecretRotation.MySqlCredentials;
|
| SecretRotation.MySqlCredentials
|
||||||
connection: AppConnection.Postgres | AppConnection.MsSql | AppConnection.MySql;
|
| SecretRotation.OracleDBCredentials;
|
||||||
|
connection:
|
||||||
|
| AppConnection.Postgres
|
||||||
|
| AppConnection.MsSql
|
||||||
|
| AppConnection.MySql
|
||||||
|
| AppConnection.OracleDB;
|
||||||
template: {
|
template: {
|
||||||
secretsMapping: TSqlCredentialsRotationProperties["secretsMapping"];
|
secretsMapping: TSqlCredentialsRotationProperties["secretsMapping"];
|
||||||
createUserStatement: string;
|
createUserStatement: string;
|
||||||
|
|||||||
+5
@@ -26,6 +26,7 @@ import { LdapConnectionForm } from "./LdapConnectionForm";
|
|||||||
import { MsSqlConnectionForm } from "./MsSqlConnectionForm";
|
import { MsSqlConnectionForm } from "./MsSqlConnectionForm";
|
||||||
import { MySqlConnectionForm } from "./MySqlConnectionForm";
|
import { MySqlConnectionForm } from "./MySqlConnectionForm";
|
||||||
import { OCIConnectionForm } from "./OCIConnectionForm";
|
import { OCIConnectionForm } from "./OCIConnectionForm";
|
||||||
|
import { OracleDBConnectionForm } from "./OracleDBConnectionForm";
|
||||||
import { PostgresConnectionForm } from "./PostgresConnectionForm";
|
import { PostgresConnectionForm } from "./PostgresConnectionForm";
|
||||||
import { TeamCityConnectionForm } from "./TeamCityConnectionForm";
|
import { TeamCityConnectionForm } from "./TeamCityConnectionForm";
|
||||||
import { TerraformCloudConnectionForm } from "./TerraformCloudConnectionForm";
|
import { TerraformCloudConnectionForm } from "./TerraformCloudConnectionForm";
|
||||||
@@ -95,6 +96,8 @@ const CreateForm = ({ app, onComplete }: CreateFormProps) => {
|
|||||||
return <MsSqlConnectionForm onSubmit={onSubmit} />;
|
return <MsSqlConnectionForm onSubmit={onSubmit} />;
|
||||||
case AppConnection.MySql:
|
case AppConnection.MySql:
|
||||||
return <MySqlConnectionForm onSubmit={onSubmit} />;
|
return <MySqlConnectionForm onSubmit={onSubmit} />;
|
||||||
|
case AppConnection.OracleDB:
|
||||||
|
return <OracleDBConnectionForm onSubmit={onSubmit} />;
|
||||||
case AppConnection.Camunda:
|
case AppConnection.Camunda:
|
||||||
return <CamundaConnectionForm onSubmit={onSubmit} />;
|
return <CamundaConnectionForm onSubmit={onSubmit} />;
|
||||||
case AppConnection.AzureClientSecrets:
|
case AppConnection.AzureClientSecrets:
|
||||||
@@ -175,6 +178,8 @@ const UpdateForm = ({ appConnection, onComplete }: UpdateFormProps) => {
|
|||||||
return <MsSqlConnectionForm onSubmit={onSubmit} appConnection={appConnection} />;
|
return <MsSqlConnectionForm onSubmit={onSubmit} appConnection={appConnection} />;
|
||||||
case AppConnection.MySql:
|
case AppConnection.MySql:
|
||||||
return <MySqlConnectionForm onSubmit={onSubmit} appConnection={appConnection} />;
|
return <MySqlConnectionForm onSubmit={onSubmit} appConnection={appConnection} />;
|
||||||
|
case AppConnection.OracleDB:
|
||||||
|
return <OracleDBConnectionForm onSubmit={onSubmit} appConnection={appConnection} />;
|
||||||
case AppConnection.Camunda:
|
case AppConnection.Camunda:
|
||||||
return <CamundaConnectionForm onSubmit={onSubmit} appConnection={appConnection} />;
|
return <CamundaConnectionForm onSubmit={onSubmit} appConnection={appConnection} />;
|
||||||
case AppConnection.AzureClientSecrets:
|
case AppConnection.AzureClientSecrets:
|
||||||
|
|||||||
+155
@@ -0,0 +1,155 @@
|
|||||||
|
import { useState } from "react";
|
||||||
|
import { Controller, FormProvider, useForm } from "react-hook-form";
|
||||||
|
import { zodResolver } from "@hookform/resolvers/zod";
|
||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
import { Button, FormControl, ModalClose, Select, SelectItem } from "@app/components/v2";
|
||||||
|
import { APP_CONNECTION_MAP, getAppConnectionMethodDetails } from "@app/helpers/appConnections";
|
||||||
|
import { OracleDBConnectionMethod, TOracleDBConnection } from "@app/hooks/api/appConnections";
|
||||||
|
import { AppConnection } from "@app/hooks/api/appConnections/enums";
|
||||||
|
import { PlatformManagedConfirmationModal } from "@app/pages/organization/AppConnections/AppConnectionsPage/components/AppConnectionForm/shared/PlatformManagedConfirmationModal";
|
||||||
|
|
||||||
|
import {
|
||||||
|
genericAppConnectionFieldsSchema,
|
||||||
|
GenericAppConnectionsFields
|
||||||
|
} from "./GenericAppConnectionFields";
|
||||||
|
import {
|
||||||
|
BaseSqlUsernameAndPasswordConnectionSchema,
|
||||||
|
PlatformManagedNoticeBanner,
|
||||||
|
SqlConnectionFields
|
||||||
|
} from "./shared";
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
appConnection?: TOracleDBConnection;
|
||||||
|
onSubmit: (formData: FormData) => Promise<void>;
|
||||||
|
};
|
||||||
|
|
||||||
|
const rootSchema = genericAppConnectionFieldsSchema.extend({
|
||||||
|
app: z.literal(AppConnection.OracleDB),
|
||||||
|
isPlatformManagedCredentials: z.boolean().optional()
|
||||||
|
});
|
||||||
|
|
||||||
|
const formSchema = z.discriminatedUnion("method", [
|
||||||
|
rootSchema.extend({
|
||||||
|
method: z.literal(OracleDBConnectionMethod.UsernameAndPassword),
|
||||||
|
credentials: BaseSqlUsernameAndPasswordConnectionSchema
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
|
||||||
|
type FormData = z.infer<typeof formSchema>;
|
||||||
|
|
||||||
|
export const OracleDBConnectionForm = ({ appConnection, onSubmit }: Props) => {
|
||||||
|
const isUpdate = Boolean(appConnection);
|
||||||
|
const [showConfirmation, setShowConfirmation] = useState(false);
|
||||||
|
const [selectedTabIndex, setSelectedTabIndex] = useState(0);
|
||||||
|
|
||||||
|
const form = useForm<FormData>({
|
||||||
|
resolver: zodResolver(formSchema),
|
||||||
|
defaultValues: appConnection ?? {
|
||||||
|
app: AppConnection.OracleDB,
|
||||||
|
method: OracleDBConnectionMethod.UsernameAndPassword,
|
||||||
|
credentials: {
|
||||||
|
host: "",
|
||||||
|
port: 1521,
|
||||||
|
database: "FREEPDB1",
|
||||||
|
username: "", // Typically pdbadmin or ADMIN
|
||||||
|
password: "",
|
||||||
|
sslEnabled: true,
|
||||||
|
sslRejectUnauthorized: true,
|
||||||
|
sslCertificate: undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const {
|
||||||
|
handleSubmit,
|
||||||
|
control,
|
||||||
|
formState: { isSubmitting, isDirty }
|
||||||
|
} = form;
|
||||||
|
|
||||||
|
const isPlatformManagedCredentials = appConnection?.isPlatformManagedCredentials ?? false;
|
||||||
|
|
||||||
|
const confirmSubmit = async (formData: FormData) => {
|
||||||
|
if (formData.isPlatformManagedCredentials) {
|
||||||
|
setShowConfirmation(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await onSubmit(formData);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormProvider {...form}>
|
||||||
|
<form
|
||||||
|
onSubmit={(e) => {
|
||||||
|
setSelectedTabIndex(0);
|
||||||
|
handleSubmit(confirmSubmit)(e);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{!isUpdate && <GenericAppConnectionsFields />}
|
||||||
|
<Controller
|
||||||
|
name="method"
|
||||||
|
control={control}
|
||||||
|
render={({ field: { value, onChange }, fieldState: { error } }) => (
|
||||||
|
<FormControl
|
||||||
|
tooltipText={`The method you would like to use to connect with ${
|
||||||
|
APP_CONNECTION_MAP[AppConnection.OracleDB].name
|
||||||
|
}. This field cannot be changed after creation.`}
|
||||||
|
errorText={error?.message}
|
||||||
|
isError={Boolean(error?.message)}
|
||||||
|
label="Method"
|
||||||
|
>
|
||||||
|
<Select
|
||||||
|
isDisabled={isUpdate}
|
||||||
|
value={value}
|
||||||
|
onValueChange={(val) => onChange(val)}
|
||||||
|
className="w-full border border-mineshaft-500"
|
||||||
|
position="popper"
|
||||||
|
dropdownContainerClassName="max-w-none"
|
||||||
|
>
|
||||||
|
{Object.values(OracleDBConnectionMethod).map((method) => {
|
||||||
|
return (
|
||||||
|
<SelectItem value={method} key={method}>
|
||||||
|
{getAppConnectionMethodDetails(method).name}{" "}
|
||||||
|
</SelectItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Select>
|
||||||
|
</FormControl>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
<SqlConnectionFields
|
||||||
|
isPlatformManagedCredentials={isPlatformManagedCredentials}
|
||||||
|
selectedTabIndex={selectedTabIndex}
|
||||||
|
setSelectedTabIndex={setSelectedTabIndex}
|
||||||
|
/>
|
||||||
|
{isPlatformManagedCredentials ? (
|
||||||
|
<PlatformManagedNoticeBanner />
|
||||||
|
) : (
|
||||||
|
<div className="mt-6 flex items-center">
|
||||||
|
<Button
|
||||||
|
className="mr-4"
|
||||||
|
size="sm"
|
||||||
|
type="submit"
|
||||||
|
colorSchema="secondary"
|
||||||
|
isLoading={isSubmitting}
|
||||||
|
isDisabled={isSubmitting || !isDirty}
|
||||||
|
>
|
||||||
|
{isUpdate ? "Update Credentials" : "Connect to Database"}
|
||||||
|
</Button>
|
||||||
|
<ModalClose asChild>
|
||||||
|
<Button colorSchema="secondary" variant="plain">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
</ModalClose>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</form>
|
||||||
|
<PlatformManagedConfirmationModal
|
||||||
|
onConfirm={() => handleSubmit(onSubmit)()}
|
||||||
|
onOpenChange={setShowConfirmation}
|
||||||
|
isOpen={showConfirmation}
|
||||||
|
/>
|
||||||
|
</FormProvider>
|
||||||
|
);
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user