Skip to content

Instantly share code, notes, and snippets.

@krisrice
Created December 6, 2021 19:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krisrice/cd2ee4bf93d91e70a51d3bcd34cfe9f8 to your computer and use it in GitHub Desktop.
Save krisrice/cd2ee4bf93d91e70a51d3bcd34cfe9f8 to your computer and use it in GitHub Desktop.
const common = require("oci-common");
const databasetools = require("oci-databasetools");
const secrets = require("oci-secrets");
const core = require("oci-core");
const fs = require("fs");
const oracledb = require('oracledb');
//
// Configure Instant Client
//
oracledb.initOracleClient({libDir: "/Users/klrice/workspace/node/instantClient/instantclient_19_8",
configDir: __dirname});
//
// Configure OCI Connectivity
//
const configurationFilePath = "~/.oci/config";
const profile = "SICDBAAS";
const provider = new common.ConfigFileAuthenticationDetailsProvider(
configurationFilePath,
profile
);
//
// set Compartment / Connection OCIDs
//
const compartmentId = "ocid1.compartment.oc1..xxxx";
const dbId= "ocid1.databasetoolsconnection.oc1.phx.xxx"
//
// Simple Timer output
//
var last = Date.now();
var messNum = 0;
function elap(message, data) {
messNum++;
var ret = (""+messNum).padEnd(3," ") + " " + message.padEnd(30,".") + ((Date.now()-last) + "").padStart(4," ") + "ms".padEnd(8," ") + ( data ? " Results: " + JSON.stringify(data) : "");
last = Date.now();
console.log(ret);
}
elap('Starting');
(async () => {
try {
// Create a service client
const client = new databasetools.DatabaseToolsClient({
authenticationDetailsProvider: provider
});
elap('Created Client');
// Create a request and dependent object(s).
const request= databasetools.requests.GetDatabaseToolsConnectionRequest = {databaseToolsConnectionId:dbId};
elap('Created Request');
// Send request to the Client.
const response = await client.getDatabaseToolsConnection(request);
keyType = response.databaseToolsConnection.keyStores[0].keyStoreType;
keyStoreID = response.databaseToolsConnection.keyStores[0].keyStoreContent.secretId;
connString = response.databaseToolsConnection.connectionString;
username = response.databaseToolsConnection.userName;
userPasswordID = response.databaseToolsConnection.userPassword.secretId;
elap('Received Details');
// Create a service client
const secretClient = new secrets.SecretsClient({authenticationDetailsProvider: provider});
const secretRequestPassword= secrets.requests.GetSecretRequest = {secretId:userPasswordID};
const secretResponsePassword = await secretClient.getSecretBundle(secretRequestPassword);
passwd = Buffer.from(secretResponsePassword.secretBundle.secretBundleContent.content, 'base64').toString('ascii');
elap('Got Password');
const secretRequestWallet= secrets.requests.GetSecretRequest = {secretId:keyStoreID};
const secretResponseWallet = await secretClient.getSecretBundle(secretRequestWallet);
buff = Buffer.from(secretResponseWallet.secretBundle.secretBundleContent.content, 'base64');
fs.writeFileSync("cwallet.sso", buff);
fs.writeFileSync("sqlnet.ora",`WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="`+__dirname +`")))
SSL_SERVER_DN_MATCH=yes`)
elap('Wrote cwallet/sqlnet');
dbConfig = {
user: username,
connectString: connString,
password : passwd
};
elap('Connecting...');
//console.log(dbConfig);
connection = await oracledb.getConnection(dbConfig);
elap('Connected');
for(var i=0; i<10; i++) {
var sql = "select "+i+" from dual";
const result = await connection.execute( sql);
elap( ".."+sql,result.rows[0][0]);
}
} catch (error) {
console.log("getDatabaseToolsConnection Failed with error " + error);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment