diff --git a/packages/@n8n/db/src/entities/deployment-key.ts b/packages/@n8n/db/src/entities/deployment-key.ts new file mode 100644 index 0000000000000..92600a63d2de0 --- /dev/null +++ b/packages/@n8n/db/src/entities/deployment-key.ts @@ -0,0 +1,21 @@ +import { Column, Entity } from '@n8n/typeorm'; + +import { datetimeColumnType, WithTimestampsAndStringId } from './abstract-entity'; + +@Entity() +export class DeploymentKey extends WithTimestampsAndStringId { + @Column({ type: 'varchar', length: 64 }) + type: string; + + @Column('text') + value: string; + + @Column({ type: 'varchar', length: 20, nullable: true }) + algorithm: string | null; + + @Column({ type: 'varchar', length: 20 }) + status: string; + + @Column({ type: datetimeColumnType, nullable: true }) + deprecatedAt: Date | null; +} diff --git a/packages/@n8n/db/src/entities/index.ts b/packages/@n8n/db/src/entities/index.ts index 28a0bafe3aba5..f05294750fcff 100644 --- a/packages/@n8n/db/src/entities/index.ts +++ b/packages/@n8n/db/src/entities/index.ts @@ -9,6 +9,7 @@ import { type CredentialDependencyType, } from './credential-dependency-entity'; import { CredentialsEntity } from './credentials-entity'; +import { DeploymentKey } from './deployment-key'; import { ExecutionAnnotation } from './execution-annotation.ee'; import { ExecutionData } from './execution-data'; import { ExecutionEntity } from './execution-entity'; @@ -58,6 +59,7 @@ export { CredentialsEntity, CredentialDependency, type CredentialDependencyType, + DeploymentKey, Folder, Project, ProjectRelation, @@ -101,6 +103,7 @@ export const entities = { AuthIdentity, CredentialsEntity, CredentialDependency, + DeploymentKey, Folder, Project, ProjectRelation, diff --git a/packages/@n8n/db/src/migrations/common/1777000000000-CreateDeploymentKeyTable.ts b/packages/@n8n/db/src/migrations/common/1777000000000-CreateDeploymentKeyTable.ts new file mode 100644 index 0000000000000..808d05bd48bd2 --- /dev/null +++ b/packages/@n8n/db/src/migrations/common/1777000000000-CreateDeploymentKeyTable.ts @@ -0,0 +1,25 @@ +import type { MigrationContext, ReversibleMigration } from '../migration-types'; + +export class CreateDeploymentKeyTable1777000000000 implements ReversibleMigration { + async up({ schemaBuilder: { createTable, column, createIndex } }: MigrationContext) { + await createTable('deployment_key').withColumns( + column('type').varchar(64).notNull, + column('value').text.notNull, + column('algorithm').varchar(20), + column('status').varchar(20).notNull, + column('deprecatedAt').timestamp(), + ).withTimestamps; + + await createIndex( + 'deployment_key', + ['type'], + true, + 'IDX_deployment_key_data_encryption_active', + "status = 'active' AND type = 'data_encryption'", + ); + } + + async down({ schemaBuilder: { dropTable } }: MigrationContext) { + await dropTable('deployment_key'); + } +} diff --git a/packages/@n8n/db/src/migrations/postgresdb/index.ts b/packages/@n8n/db/src/migrations/postgresdb/index.ts index af2acc6f545a0..64da91cc9445f 100644 --- a/packages/@n8n/db/src/migrations/postgresdb/index.ts +++ b/packages/@n8n/db/src/migrations/postgresdb/index.ts @@ -159,6 +159,7 @@ import { CreateInstanceVersionHistoryTable1774854660000 } from '../common/177485 import { CreateInstanceAiTables1775000000000 } from '../common/1775000000000-CreateInstanceAiTables'; import { CreateTokenExchangeJtiTable1775116241000 } from '../common/1775116241000-CreateTokenExchangeJtiTable'; import { CreateTrustedKeyTables1776000000000 } from '../common/1776000000000-CreateTrustedKeyTables'; +import { CreateDeploymentKeyTable1777000000000 } from '../common/1777000000000-CreateDeploymentKeyTable'; import type { Migration } from '../migration-types'; export const postgresMigrations: Migration[] = [ @@ -323,4 +324,5 @@ export const postgresMigrations: Migration[] = [ CreateInstanceAiTables1775000000000, CreateTokenExchangeJtiTable1775116241000, CreateTrustedKeyTables1776000000000, + CreateDeploymentKeyTable1777000000000, ]; diff --git a/packages/@n8n/db/src/migrations/sqlite/index.ts b/packages/@n8n/db/src/migrations/sqlite/index.ts index e99e2ff4ce2f0..879ba55c386bc 100644 --- a/packages/@n8n/db/src/migrations/sqlite/index.ts +++ b/packages/@n8n/db/src/migrations/sqlite/index.ts @@ -153,6 +153,7 @@ import { CreateInstanceVersionHistoryTable1774854660000 } from '../common/177485 import { CreateInstanceAiTables1775000000000 } from '../common/1775000000000-CreateInstanceAiTables'; import { CreateTokenExchangeJtiTable1775116241000 } from '../common/1775116241000-CreateTokenExchangeJtiTable'; import { CreateTrustedKeyTables1776000000000 } from '../common/1776000000000-CreateTrustedKeyTables'; +import { CreateDeploymentKeyTable1777000000000 } from '../common/1777000000000-CreateDeploymentKeyTable'; import type { Migration } from '../migration-types'; const sqliteMigrations: Migration[] = [ @@ -311,6 +312,7 @@ const sqliteMigrations: Migration[] = [ CreateInstanceAiTables1775000000000, CreateTokenExchangeJtiTable1775116241000, CreateTrustedKeyTables1776000000000, + CreateDeploymentKeyTable1777000000000, ]; export { sqliteMigrations }; diff --git a/packages/@n8n/db/src/repositories/deployment-key.repository.ts b/packages/@n8n/db/src/repositories/deployment-key.repository.ts new file mode 100644 index 0000000000000..e8e8acc71578d --- /dev/null +++ b/packages/@n8n/db/src/repositories/deployment-key.repository.ts @@ -0,0 +1,23 @@ +import { Service } from '@n8n/di'; +import { DataSource, Repository } from '@n8n/typeorm'; + +import { DeploymentKey } from '../entities/deployment-key'; + +@Service() +export class DeploymentKeyRepository extends Repository { + constructor(dataSource: DataSource) { + super(DeploymentKey, dataSource.manager); + } + + async findActiveByType(type: string): Promise { + return await this.findOne({ where: { type, status: 'active' } }); + } + + async findById(id: string): Promise { + return await this.findOne({ where: { id } }); + } + + async findAllByType(type: string): Promise { + return await this.find({ where: { type } }); + } +} diff --git a/packages/@n8n/db/src/repositories/index.ts b/packages/@n8n/db/src/repositories/index.ts index 059a672493f34..e06f038d8adb8 100644 --- a/packages/@n8n/db/src/repositories/index.ts +++ b/packages/@n8n/db/src/repositories/index.ts @@ -7,6 +7,7 @@ export { BinaryDataRepository } from './binary-data.repository'; export { ClockRepository } from './clock.repository'; export { CredentialsRepository } from './credentials.repository'; export { CredentialDependencyRepository } from './credential-dependency.repository'; +export { DeploymentKeyRepository } from './deployment-key.repository'; export { ExecutionAnnotationRepository } from './execution-annotation.repository'; export { ExecutionDataRepository } from './execution-data.repository'; export { ExecutionMetadataRepository } from './execution-metadata.repository';