AWS IAM WIP

This commit is contained in:
SPRINX0\prochazka
2024-10-07 16:05:12 +02:00
parent 1948c8ef89
commit 7c51fcad96
8 changed files with 1061 additions and 23 deletions

View File

@@ -9,6 +9,8 @@ const { MySqlDumper } = require('antares-mysql-dumper');
const logger = getLogger('mysqlDriver');
let authProxy;
function extractColumns(fields) {
if (fields) {
const res = fields.map(col => ({
@@ -32,13 +34,19 @@ const drivers = driverBases.map(driverBase => ({
...driverBase,
analyserClass: Analyser,
async connect({ server, port, user, password, database, ssl, isReadOnly, forceRowsAsObjects, socketPath, authType }) {
async connect(props) {
const { server, port, user, password, database, ssl, isReadOnly, forceRowsAsObjects, socketPath, authType } = props;
let awsIamToken = null;
if (authType == 'awsIam') {
awsIamToken = await authProxy.getAwsIamToken(props);
}
const options = {
host: authType == 'socket' ? null : server,
port: authType == 'socket' ? null : port,
socketPath: authType == 'socket' ? socketPath || driverBase.defaultSocketPath : null,
user,
password,
password: awsIamToken || password,
database,
ssl,
rowsAsArray: forceRowsAsObjects ? false : true,
@@ -49,6 +57,8 @@ const drivers = driverBases.map(driverBase => ({
// multipleStatements: true,
};
console.log('MySQL connection options', options);
const client = mysql2.createConnection(options);
const dbhan = {
client,
@@ -203,7 +213,7 @@ const drivers = driverBases.map(driverBase => ({
return res;
},
getAuthTypes() {
return [
const res = [
{
title: 'Host and port',
name: 'hostPort',
@@ -215,7 +225,18 @@ const drivers = driverBases.map(driverBase => ({
disabledFields: ['server', 'port'],
},
];
if (authProxy.supportsAwsIam()) {
res.push({
title: 'AWS IAM',
name: 'awsIam',
});
}
return res;
},
}));
drivers.initialize = dbgateEnv => {
authProxy = dbgateEnv.authProxy;
};
module.exports = drivers;

View File

@@ -3,4 +3,7 @@ const drivers = require('./drivers');
module.exports = {
packageName: 'dbgate-plugin-mysql',
drivers,
initialize(dbgateEnv) {
drivers.initialize(dbgateEnv);
},
};

View File

@@ -150,10 +150,25 @@ const mysqlDialect = {
const mysqlDriverBase = {
...driverBase,
showConnectionField: (field, values) =>
['authType', 'user', 'password', 'defaultDatabase', 'singleDatabase', 'isReadOnly'].includes(field) ||
(values.authType == 'socket' && ['socketPath'].includes(field)) ||
(values.authType != 'socket' && ['server', 'port'].includes(field)),
showConnectionField: (field, values) => {
if (['authType', 'user', 'defaultDatabase', 'singleDatabase', 'isReadOnly'].includes(field)) {
return true;
}
if (values.authType == 'awsIam') {
return ['awsRegion', 'secretAccessKey', 'accessKeyId', 'server', 'port'].includes(field);
}
if (['password'].includes(field)) {
return true;
}
if (values.authType == 'socket') {
return ['socketPath'].includes(field);
}
return ['server', 'port'].includes(field);
},
dumperClass: Dumper,
defaultPort: 3306,
getQuerySplitterOptions: usage =>