mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-15 09:04:07 -08:00
68 lines
2.2 KiB
TypeScript
68 lines
2.2 KiB
TypeScript
import { CredentialsEntity } from '@db/entities/CredentialsEntity';
|
|
import type { User } from '@db/entities/User';
|
|
import type { Role } from '@db/entities/Role';
|
|
import type { ICredentialsDb } from '@/Interfaces';
|
|
import { RoleService } from '@/services/role.service';
|
|
import type { CredentialPayload } from '../types';
|
|
import Container from 'typedi';
|
|
import { CredentialsRepository, SharedCredentialsRepository } from '@/databases/repositories';
|
|
|
|
async function encryptCredentialData(credential: CredentialsEntity) {
|
|
const { createCredentialsFromCredentialsEntity } = await import('@/CredentialsHelper');
|
|
const coreCredential = createCredentialsFromCredentialsEntity(credential, true);
|
|
|
|
// @ts-ignore
|
|
coreCredential.setData(credential.data);
|
|
|
|
return coreCredential.getDataToSave() as ICredentialsDb;
|
|
}
|
|
|
|
/**
|
|
* Save a credential to the test DB, sharing it with a user.
|
|
*/
|
|
export async function saveCredential(
|
|
credentialPayload: CredentialPayload,
|
|
{ user, role }: { user: User; role: Role },
|
|
) {
|
|
const newCredential = new CredentialsEntity();
|
|
|
|
Object.assign(newCredential, credentialPayload);
|
|
|
|
const encryptedData = await encryptCredentialData(newCredential);
|
|
|
|
Object.assign(newCredential, encryptedData);
|
|
|
|
const savedCredential = await Container.get(CredentialsRepository).save(newCredential);
|
|
|
|
savedCredential.data = newCredential.data;
|
|
|
|
await Container.get(SharedCredentialsRepository).save({
|
|
user,
|
|
credentials: savedCredential,
|
|
role,
|
|
});
|
|
|
|
return savedCredential;
|
|
}
|
|
|
|
export async function shareCredentialWithUsers(credential: CredentialsEntity, users: User[]) {
|
|
const role = await Container.get(RoleService).findCredentialUserRole();
|
|
const newSharedCredentials = users.map((user) =>
|
|
Container.get(SharedCredentialsRepository).create({
|
|
userId: user.id,
|
|
credentialsId: credential.id,
|
|
roleId: role?.id,
|
|
}),
|
|
);
|
|
return Container.get(SharedCredentialsRepository).save(newSharedCredentials);
|
|
}
|
|
|
|
export function affixRoleToSaveCredential(role: Role) {
|
|
return async (credentialPayload: CredentialPayload, { user }: { user: User }) =>
|
|
saveCredential(credentialPayload, { user, role });
|
|
}
|
|
|
|
export async function getAllCredentials() {
|
|
return Container.get(CredentialsRepository).find();
|
|
}
|