Do not save credential default values to DB #PROD-52

This commit is contained in:
Jan Oberhauser
2020-05-14 14:27:19 +02:00
parent 09a4b44875
commit cfe6e72440
8 changed files with 126 additions and 32 deletions

View File

@@ -5,10 +5,13 @@ import {
import {
ICredentialDataDecryptedObject,
ICredentialsHelper,
INodeParameters,
NodeHelpers,
} from 'n8n-workflow';
import {
CredentialsOverwrites,
CredentialTypes,
Db,
ICredentialsDb,
} from './';
@@ -42,15 +45,51 @@ export class CredentialsHelper extends ICredentialsHelper {
*
* @param {string} name Name of the credentials to return data of
* @param {string} type Type of the credentials to return data of
* @param {boolean} [raw] Return the data as supplied without defaults or overwrites
* @returns {ICredentialDataDecryptedObject}
* @memberof CredentialsHelper
*/
getDecrypted(name: string, type: string): ICredentialDataDecryptedObject {
getDecrypted(name: string, type: string, raw?: boolean): ICredentialDataDecryptedObject {
const credentials = this.getCredentials(name, type);
const decryptedDataOriginal = credentials.getData(this.encryptionKey);
if (raw === true) {
return decryptedDataOriginal;
}
return this.applyDefaultsAndOverwrites(decryptedDataOriginal, type);
}
/**
* Applies credential default data and overwrites
*
* @param {ICredentialDataDecryptedObject} decryptedDataOriginal The credential data to overwrite data on
* @param {string} type Type of the credentials to overwrite data of
* @returns {ICredentialDataDecryptedObject}
* @memberof CredentialsHelper
*/
applyDefaultsAndOverwrites(decryptedDataOriginal: ICredentialDataDecryptedObject, type: string): ICredentialDataDecryptedObject {
const credentialTypes = CredentialTypes();
const credentialType = credentialTypes.getByName(type);
if (credentialType === undefined) {
throw new Error(`The credential type "${type}" is not known and can so not be decrypted.`);
}
// Add the default credential values
const decryptedData = NodeHelpers.getNodeParameters(credentialType.properties, decryptedDataOriginal as INodeParameters, true, false) as ICredentialDataDecryptedObject;
if (decryptedDataOriginal.oauthTokenData !== undefined) {
// The OAuth data gets removed as it is not defined specifically as a parameter
// on the credentials so add it back in case it was set
decryptedData.oauthTokenData = decryptedDataOriginal.oauthTokenData;
}
// Load and apply the credentials overwrites if any exist
const credentialsOverwrites = CredentialsOverwrites();
return credentialsOverwrites.applyOverwrite(credentials.type, credentials.getData(this.encryptionKey));
return credentialsOverwrites.applyOverwrite(type, decryptedData);
}