feat: updated statements for oracle and adjusted the username and password generator for oracle

This commit is contained in:
Akhil Mohan
2024-04-17 23:09:58 +05:30
parent 62aa23a059
commit ab83e61068
2 changed files with 13 additions and 9 deletions
@@ -8,11 +8,14 @@ import { BadRequestError } from "@app/lib/errors";
import { getDbConnectionHost } from "@app/lib/knex"; import { getDbConnectionHost } from "@app/lib/knex";
import { alphaNumericNanoId } from "@app/lib/nanoid"; import { alphaNumericNanoId } from "@app/lib/nanoid";
import { DynamicSecretSqlDBSchema, TDynamicProviderFns } from "./models"; import { DynamicSecretSqlDBSchema, SqlProviders, TDynamicProviderFns } from "./models";
const EXTERNAL_REQUEST_TIMEOUT = 10 * 1000; const EXTERNAL_REQUEST_TIMEOUT = 10 * 1000;
const generatePassword = (size?: number) => { const generatePassword = (provider: SqlProviders) => {
// for now everyone else oracle can accept 48 password length
const size = provider === SqlProviders.Oracle ? 30 : 48;
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~!*$#"; const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~!*$#";
return customAlphabet(charset, 48)(size); return customAlphabet(charset, 48)(size);
}; };
@@ -59,10 +62,10 @@ export const SqlDatabaseProvider = (): TDynamicProviderFns => {
const validateConnection = async (inputs: unknown) => { const validateConnection = async (inputs: unknown) => {
const providerInputs = await validateProviderInputs(inputs); const providerInputs = await validateProviderInputs(inputs);
const db = await getClient(providerInputs); const db = await getClient(providerInputs);
const isConnected = await db // oracle needs from keyword
.raw("SELECT NOW()") const testStatement = providerInputs.client === SqlProviders.Oracle ? "SELECT 1 FROM DUAL" : "SELECT 1";
.then(() => true)
.catch(() => false); const isConnected = await db.raw(testStatement).then(() => true);
await db.destroy(); await db.destroy();
return isConnected; return isConnected;
}; };
@@ -72,7 +75,7 @@ export const SqlDatabaseProvider = (): TDynamicProviderFns => {
const db = await getClient(providerInputs); const db = await getClient(providerInputs);
const username = alphaNumericNanoId(32); const username = alphaNumericNanoId(32);
const password = generatePassword(); const password = generatePassword(providerInputs.client);
const { database } = providerInputs; const { database } = providerInputs;
const expiration = new Date(expireAt).toISOString(); const expiration = new Date(expireAt).toISOString();
@@ -80,9 +80,10 @@ const getSqlStatements = (provider: SqlProviders) => {
if (provider === SqlProviders.Oracle) { if (provider === SqlProviders.Oracle) {
return { return {
creationStatement: creationStatement:
'CREATE USER "{{username}}" IDENTIFIED BY \'{{password}}\';\nGRANT CONNECT TO "{{username}}";\nGRANT CREATE SESSION TO "{{username}}";', 'CREATE USER "{{username}}" IDENTIFIED BY "{{password}}";\nGRANT CONNECT TO "{{username}}";\nGRANT CREATE SESSION TO "{{username}}";',
renewStatement: "", renewStatement: "",
revocationStatement: 'REVOKE ALL PRIVILEGES FROM "{{username}}";\nDROP USER "{{username}}";' revocationStatement:
'REVOKE CONNECT FROM "{{username}}";\nREVOKE CREATE SESSION FROM "{{username}}";\nDROP USER "{{username}}";'
}; };
} }