Skip to content

Commit

Permalink
refactor(core): Deduplicate encryption logic (n8n-io#3434)
Browse files Browse the repository at this point in the history
* ⚡ added function to credentials helper

* Refactor function name

* Fix lint issues

Co-authored-by: Michael Kret <michael.k@radency.com>
  • Loading branch information
2 people authored and simshaun committed Jun 4, 2022
1 parent e1c7c97 commit c45ece0
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 22 deletions.
13 changes: 13 additions & 0 deletions packages/cli/src/CredentialsHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ import {
} from '.';
// eslint-disable-next-line import/no-cycle
import { User } from './databases/entities/User';
// eslint-disable-next-line import/no-cycle
import { CredentialsEntity } from './databases/entities/CredentialsEntity';

const mockNodeTypes: INodeTypes = {
nodeTypes: {} as INodeTypeData,
Expand Down Expand Up @@ -768,3 +770,14 @@ export async function getCredentialWithoutUser(
const credential = await Db.collections.Credentials.findOne(credentialId);
return credential;
}

export function createCredentiasFromCredentialsEntity(
credential: CredentialsEntity,
encrypt = false,
): Credentials {
const { id, name, type, nodesAccess, data } = credential;
if (encrypt) {
return new Credentials({ id: null, name }, type, nodesAccess);
}
return new Credentials({ id: id.toString(), name }, type, nodesAccess, data);
}
21 changes: 4 additions & 17 deletions packages/cli/src/api/credentials.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { RESPONSE_ERROR_MESSAGES } from '../constants';
import { CredentialsEntity } from '../databases/entities/CredentialsEntity';
import { SharedCredentials } from '../databases/entities/SharedCredentials';
import { validateEntity } from '../GenericHelpers';
import { createCredentiasFromCredentialsEntity } from '../CredentialsHelper';
import type { CredentialRequest } from '../requests';
import * as config from '../../config';
import { externalHooks } from '../Server';
Expand Down Expand Up @@ -165,11 +166,7 @@ credentialsController.post(
}

// Encrypt the data
const coreCredential = new Credentials(
{ id: null, name: newCredential.name },
newCredential.type,
newCredential.nodesAccess,
);
const coreCredential = createCredentiasFromCredentialsEntity(newCredential, true);

// @ts-ignore
coreCredential.setData(newCredential.data, encryptionKey);
Expand Down Expand Up @@ -301,12 +298,7 @@ credentialsController.patch(
);
}

const coreCredential = new Credentials(
{ id: credential.id.toString(), name: credential.name },
credential.type,
credential.nodesAccess,
credential.data,
);
const coreCredential = createCredentiasFromCredentialsEntity(credential);

const decryptedData = coreCredential.getData(encryptionKey);

Expand Down Expand Up @@ -410,12 +402,7 @@ credentialsController.get(
);
}

const coreCredential = new Credentials(
{ id: credential.id.toString(), name: credential.name },
credential.type,
credential.nodesAccess,
credential.data,
);
const coreCredential = createCredentiasFromCredentialsEntity(credential);

return {
id: id.toString(),
Expand Down
7 changes: 2 additions & 5 deletions packages/cli/test/integration/shared/testDb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { mysqlMigrations } from '../../../src/databases/mysqldb/migrations';
import { postgresMigrations } from '../../../src/databases/postgresdb/migrations';
import { sqliteMigrations } from '../../../src/databases/sqlite/migrations';
import { categorize, getPostgresSchemaSection } from './utils';
import { createCredentiasFromCredentialsEntity } from '../../../src/CredentialsHelper';

import type { Role } from '../../../src/databases/entities/Role';
import type { User } from '../../../src/databases/entities/User';
Expand Down Expand Up @@ -420,11 +421,7 @@ export const getMySqlOptions = ({ name }: { name: string }): ConnectionOptions =
async function encryptCredentialData(credential: CredentialsEntity) {
const encryptionKey = await UserSettings.getEncryptionKey();

const coreCredential = new Credentials(
{ id: null, name: credential.name },
credential.type,
credential.nodesAccess,
);
const coreCredential = createCredentiasFromCredentialsEntity(credential, true);

// @ts-ignore
coreCredential.setData(credential.data, encryptionKey);
Expand Down

0 comments on commit c45ece0

Please sign in to comment.