n8n 1.112.5 → 1.113.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/active-executions.d.ts +3 -1
- package/dist/active-executions.js +6 -2
- package/dist/active-executions.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/chat/chat-execution-manager.js +7 -1
- package/dist/chat/chat-execution-manager.js.map +1 -1
- package/dist/commands/export/entities.d.ts +14 -0
- package/dist/commands/export/entities.js +46 -0
- package/dist/commands/export/entities.js.map +1 -0
- package/dist/commands/import/entities.d.ts +14 -0
- package/dist/commands/import/entities.js +47 -0
- package/dist/commands/import/entities.js.map +1 -0
- package/dist/controllers/me.controller.d.ts +1 -0
- package/dist/controllers/me.controller.js +50 -21
- package/dist/controllers/me.controller.js.map +1 -1
- package/dist/controllers/role.controller.d.ts +3 -3
- package/dist/controllers/role.controller.js +9 -6
- package/dist/controllers/role.controller.js.map +1 -1
- package/dist/credentials/credentials-finder.service.d.ts +3 -1
- package/dist/credentials/credentials-finder.service.js +23 -10
- package/dist/credentials/credentials-finder.service.js.map +1 -1
- package/dist/credentials/credentials.service.ee.d.ts +3 -1
- package/dist/credentials/credentials.service.ee.js +7 -3
- package/dist/credentials/credentials.service.ee.js.map +1 -1
- package/dist/credentials/credentials.service.js +2 -2
- package/dist/credentials/credentials.service.js.map +1 -1
- package/dist/deprecation/deprecation.service.js +5 -0
- package/dist/deprecation/deprecation.service.js.map +1 -1
- package/dist/environments.ee/source-control/source-control-resource-helper.d.ts +4 -0
- package/dist/environments.ee/source-control/source-control-resource-helper.js +21 -0
- package/dist/environments.ee/source-control/source-control-resource-helper.js.map +1 -0
- package/dist/environments.ee/source-control/source-control-status.service.ee.d.ts +79 -0
- package/dist/environments.ee/source-control/source-control-status.service.ee.js +439 -0
- package/dist/environments.ee/source-control/source-control-status.service.ee.js.map +1 -0
- package/dist/environments.ee/source-control/source-control.service.ee.d.ts +22 -40
- package/dist/environments.ee/source-control/source-control.service.ee.js +23 -428
- package/dist/environments.ee/source-control/source-control.service.ee.js.map +1 -1
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.js +13 -4
- package/dist/evaluation.ee/test-runner/test-runner.service.ee.js.map +1 -1
- package/dist/events/maps/relay.event-map.d.ts +3 -0
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js +7 -3
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
- package/dist/executions/execution.service.d.ts +5 -2
- package/dist/executions/execution.service.js +46 -24
- package/dist/executions/execution.service.js.map +1 -1
- package/dist/executions/executions.controller.d.ts +5 -0
- package/dist/executions/executions.controller.js +16 -4
- package/dist/executions/executions.controller.js.map +1 -1
- package/dist/modules/data-table/data-store-aggregate.controller.d.ts +1 -4
- package/dist/modules/data-table/data-store-aggregate.controller.js +3 -3
- package/dist/modules/data-table/data-store-aggregate.controller.js.map +1 -1
- package/dist/modules/data-table/data-store-proxy.service.d.ts +4 -0
- package/dist/modules/data-table/data-store-proxy.service.js +11 -1
- package/dist/modules/data-table/data-store-proxy.service.js.map +1 -1
- package/dist/modules/data-table/data-store-rows.repository.js +12 -2
- package/dist/modules/data-table/data-store-rows.repository.js.map +1 -1
- package/dist/modules/data-table/data-store-size-validator.service.d.ts +5 -5
- package/dist/modules/data-table/data-store-size-validator.service.js +16 -15
- package/dist/modules/data-table/data-store-size-validator.service.js.map +1 -1
- package/dist/modules/data-table/data-store.controller.js +1 -1
- package/dist/modules/data-table/data-store.controller.js.map +1 -1
- package/dist/modules/data-table/data-store.repository.d.ts +6 -2
- package/dist/modules/data-table/data-store.repository.js +117 -31
- package/dist/modules/data-table/data-store.repository.js.map +1 -1
- package/dist/modules/data-table/data-store.service.d.ts +8 -6
- package/dist/modules/data-table/data-store.service.js +51 -20
- package/dist/modules/data-table/data-store.service.js.map +1 -1
- package/dist/modules/data-table/utils/sql-utils.d.ts +2 -0
- package/dist/modules/data-table/utils/sql-utils.js +7 -2
- package/dist/modules/data-table/utils/sql-utils.js.map +1 -1
- package/dist/modules/external-secrets.ee/external-secrets-manager.ee.d.ts +1 -1
- package/dist/modules/external-secrets.ee/external-secrets-manager.ee.js +22 -9
- package/dist/modules/external-secrets.ee/external-secrets-manager.ee.js.map +1 -1
- package/dist/modules/insights/database/repositories/insights-by-period.repository.d.ts +6 -3
- package/dist/modules/insights/database/repositories/insights-by-period.repository.js +21 -8
- package/dist/modules/insights/database/repositories/insights-by-period.repository.js.map +1 -1
- package/dist/modules/insights/insights.controller.d.ts +1 -1
- package/dist/modules/insights/insights.controller.js +6 -2
- package/dist/modules/insights/insights.controller.js.map +1 -1
- package/dist/modules/insights/insights.service.d.ts +6 -3
- package/dist/modules/insights/insights.service.js +6 -3
- package/dist/modules/insights/insights.service.js.map +1 -1
- package/dist/permissions.ee/check-access.js +6 -3
- package/dist/permissions.ee/check-access.js.map +1 -1
- package/dist/public-api/v1/openapi.yml +1 -1
- package/dist/scaling/constants.d.ts +2 -2
- package/dist/scaling/pubsub/pubsub.event-map.d.ts +1 -0
- package/dist/scaling/pubsub/pubsub.types.d.ts +2 -1
- package/dist/services/export.service.d.ts +9 -0
- package/dist/services/export.service.js +107 -0
- package/dist/services/export.service.js.map +1 -0
- package/dist/services/frontend.service.js +1 -0
- package/dist/services/frontend.service.js.map +1 -1
- package/dist/services/project.service.ee.d.ts +4 -2
- package/dist/services/project.service.ee.js +19 -4
- package/dist/services/project.service.ee.js.map +1 -1
- package/dist/services/role-cache.service.d.ts +14 -0
- package/dist/services/role-cache.service.js +79 -0
- package/dist/services/role-cache.service.js.map +1 -0
- package/dist/services/role.service.d.ts +16 -4
- package/dist/services/role.service.js +30 -7
- package/dist/services/role.service.js.map +1 -1
- package/dist/sso.ee/saml/saml.service.ee.d.ts +8 -3
- package/dist/sso.ee/saml/saml.service.ee.js +49 -5
- package/dist/sso.ee/saml/saml.service.ee.js.map +1 -1
- package/dist/task-runners/task-managers/task-requester.d.ts +5 -0
- package/dist/task-runners/task-managers/task-requester.js +42 -0
- package/dist/task-runners/task-managers/task-requester.js.map +1 -1
- package/dist/task-runners/task-runner-module.d.ts +3 -1
- package/dist/task-runners/task-runner-module.js +8 -2
- package/dist/task-runners/task-runner-module.js.map +1 -1
- package/dist/utils/get-item-count-by-connection-type.d.ts +2 -0
- package/dist/utils/get-item-count-by-connection-type.js +20 -0
- package/dist/utils/get-item-count-by-connection-type.js.map +1 -0
- package/dist/webhooks/webhook-request-handler.js +4 -26
- package/dist/webhooks/webhook-request-handler.js.map +1 -1
- package/dist/workflows/workflow-finder.service.d.ts +3 -1
- package/dist/workflows/workflow-finder.service.js +13 -6
- package/dist/workflows/workflow-finder.service.js.map +1 -1
- package/dist/workflows/workflow-sharing.service.js +6 -2
- package/dist/workflows/workflow-sharing.service.js.map +1 -1
- package/dist/workflows/workflows.controller.js +1 -1
- package/dist/workflows/workflows.controller.js.map +1 -1
- package/package.json +27 -27
|
@@ -132,7 +132,13 @@ let ChatExecutionManager = class ChatExecutionManager {
|
|
|
132
132
|
}
|
|
133
133
|
async getRunData(execution, message) {
|
|
134
134
|
const { workflowData, mode: executionMode, data: runExecutionData } = execution;
|
|
135
|
-
|
|
135
|
+
const result = await this.runNode(execution, message);
|
|
136
|
+
if ((0, n8n_core_1.isEngineRequest)(result)) {
|
|
137
|
+
throw new n8n_workflow_1.UnexpectedError("Can't handle actions inside the chat trigger.");
|
|
138
|
+
}
|
|
139
|
+
runExecutionData.executionData.nodeExecutionStack[0].data.main = result ?? [
|
|
140
|
+
[{ json: message }],
|
|
141
|
+
];
|
|
136
142
|
let project = undefined;
|
|
137
143
|
try {
|
|
138
144
|
project = await this.ownershipService.getWorkflowProjectCached(workflowData.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-execution-manager.js","sourceRoot":"","sources":["../../src/chat/chat-execution-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gCAA8C;AAE9C,gCAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"chat-execution-manager.js","sourceRoot":"","sources":["../../src/chat/chat-execution-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseCommand } from '../base-command';
|
|
3
|
+
declare const flagsSchema: z.ZodObject<{
|
|
4
|
+
outputDir: z.ZodDefault<z.ZodString>;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
outputDir: string;
|
|
7
|
+
}, {
|
|
8
|
+
outputDir?: string | undefined;
|
|
9
|
+
}>;
|
|
10
|
+
export declare class ExportEntitiesCommand extends BaseCommand<z.infer<typeof flagsSchema>> {
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
catch(error: Error): void;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ExportEntitiesCommand = void 0;
|
|
13
|
+
const decorators_1 = require("@n8n/decorators");
|
|
14
|
+
const zod_1 = require("zod");
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const di_1 = require("@n8n/di");
|
|
17
|
+
const base_command_1 = require("../base-command");
|
|
18
|
+
const export_service_1 = require("../../services/export.service");
|
|
19
|
+
const flagsSchema = zod_1.z.object({
|
|
20
|
+
outputDir: zod_1.z
|
|
21
|
+
.string()
|
|
22
|
+
.describe('Output directory path')
|
|
23
|
+
.default(path_1.default.join(__dirname, './outputs')),
|
|
24
|
+
});
|
|
25
|
+
let ExportEntitiesCommand = class ExportEntitiesCommand extends base_command_1.BaseCommand {
|
|
26
|
+
async run() {
|
|
27
|
+
const outputDir = this.flags.outputDir;
|
|
28
|
+
await di_1.Container.get(export_service_1.ExportService).exportEntities(outputDir);
|
|
29
|
+
}
|
|
30
|
+
catch(error) {
|
|
31
|
+
this.logger.error('❌ Error exporting entities. See log messages for details. \n');
|
|
32
|
+
this.logger.error('Error details:');
|
|
33
|
+
this.logger.error('\n====================================\n');
|
|
34
|
+
this.logger.error(`${error.message} \n`);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.ExportEntitiesCommand = ExportEntitiesCommand;
|
|
38
|
+
exports.ExportEntitiesCommand = ExportEntitiesCommand = __decorate([
|
|
39
|
+
(0, decorators_1.Command)({
|
|
40
|
+
name: 'export:entities',
|
|
41
|
+
description: 'Export database entities to JSON files',
|
|
42
|
+
examples: ['', '--outputDir=./exports', '--outputDir=/path/to/backup'],
|
|
43
|
+
flagsSchema,
|
|
44
|
+
})
|
|
45
|
+
], ExportEntitiesCommand);
|
|
46
|
+
//# sourceMappingURL=entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/commands/export/entities.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA0C;AAC1C,6BAAwB;AACxB,gDAAwB;AACxB,gCAAoC;AAEpC,kDAA8C;AAC9C,8DAA0D;AAE1D,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,SAAS,EAAE,OAAC;SACV,MAAM,EAAE;SACR,QAAQ,CAAC,uBAAuB,CAAC;SACjC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;CAC5C,CAAC,CAAC;AAQI,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,0BAAwC;IAClF,KAAK,CAAC,GAAG;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAEvC,MAAM,cAAS,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,KAAY;QACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;IAC1C,CAAC;CACD,CAAA;AAbY,sDAAqB;gCAArB,qBAAqB;IANjC,IAAA,oBAAO,EAAC;QACR,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,wCAAwC;QACrD,QAAQ,EAAE,CAAC,EAAE,EAAE,uBAAuB,EAAE,6BAA6B,CAAC;QACtE,WAAW;KACX,CAAC;GACW,qBAAqB,CAajC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { BaseCommand } from '../base-command';
|
|
3
|
+
declare const flagsSchema: z.ZodObject<{
|
|
4
|
+
inputDir: z.ZodDefault<z.ZodString>;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
inputDir: string;
|
|
7
|
+
}, {
|
|
8
|
+
inputDir?: string | undefined;
|
|
9
|
+
}>;
|
|
10
|
+
export declare class ImportEntitiesCommand extends BaseCommand<z.infer<typeof flagsSchema>> {
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
catch(error: Error): void;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ImportEntitiesCommand = void 0;
|
|
13
|
+
const decorators_1 = require("@n8n/decorators");
|
|
14
|
+
const zod_1 = require("zod");
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const base_command_1 = require("../base-command");
|
|
17
|
+
const flagsSchema = zod_1.z.object({
|
|
18
|
+
inputDir: zod_1.z
|
|
19
|
+
.string()
|
|
20
|
+
.describe('Input directory that holds output files for import')
|
|
21
|
+
.default(path_1.default.join(__dirname, './outputs')),
|
|
22
|
+
});
|
|
23
|
+
let ImportEntitiesCommand = class ImportEntitiesCommand extends base_command_1.BaseCommand {
|
|
24
|
+
async run() {
|
|
25
|
+
const inputDir = this.flags.inputDir;
|
|
26
|
+
this.logger.info('\n⚠️⚠️ This feature is currently under development. ⚠️⚠️');
|
|
27
|
+
this.logger.info('\n🚀 Starting entity import...');
|
|
28
|
+
this.logger.info(`📁 Input directory: ${inputDir}`);
|
|
29
|
+
this.logger.info('✅ Task completed successfully! \n');
|
|
30
|
+
}
|
|
31
|
+
catch(error) {
|
|
32
|
+
this.logger.error('❌ Error importing entities. See log messages for details. \n');
|
|
33
|
+
this.logger.error('Error details:');
|
|
34
|
+
this.logger.error('\n====================================\n');
|
|
35
|
+
this.logger.error(`${error.message} \n`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.ImportEntitiesCommand = ImportEntitiesCommand;
|
|
39
|
+
exports.ImportEntitiesCommand = ImportEntitiesCommand = __decorate([
|
|
40
|
+
(0, decorators_1.Command)({
|
|
41
|
+
name: 'import:entities',
|
|
42
|
+
description: 'Import database entities from JSON files',
|
|
43
|
+
examples: ['', '--inputDir=./exports', '--inputDir=/path/to/backup'],
|
|
44
|
+
flagsSchema,
|
|
45
|
+
})
|
|
46
|
+
], ImportEntitiesCommand);
|
|
47
|
+
//# sourceMappingURL=entities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/commands/import/entities.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA0C;AAC1C,6BAAwB;AACxB,gDAAwB;AAExB,kDAA8C;AAE9C,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,QAAQ,EAAE,OAAC;SACT,MAAM,EAAE;SACR,QAAQ,CAAC,oDAAoD,CAAC;SAC9D,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;CAC5C,CAAC,CAAC;AAQI,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,0BAAwC;IAClF,KAAK,CAAC,GAAG;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAIpD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,KAAY;QACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;IAC1C,CAAC;CACD,CAAA;AAnBY,sDAAqB;gCAArB,qBAAqB;IANjC,IAAA,oBAAO,EAAC;QACR,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,0CAA0C;QACvD,QAAQ,EAAE,CAAC,EAAE,EAAE,sBAAsB,EAAE,4BAA4B,CAAC;QACpE,WAAW;KACX,CAAC;GACW,qBAAqB,CAmBjC"}
|
|
@@ -21,6 +21,7 @@ export declare class MeController {
|
|
|
21
21
|
private readonly mfaService;
|
|
22
22
|
constructor(logger: Logger, externalHooks: ExternalHooks, authService: AuthService, userService: UserService, passwordUtility: PasswordUtility, userRepository: UserRepository, eventService: EventService, mfaService: MfaService);
|
|
23
23
|
updateCurrentUser(req: AuthenticatedRequest, res: Response, payload: UserUpdateRequestDto): Promise<PublicUser>;
|
|
24
|
+
private validateChangingUserEmail;
|
|
24
25
|
updatePassword(req: AuthenticatedRequest, res: Response, payload: PasswordUpdateRequestDto): Promise<{
|
|
25
26
|
success: boolean;
|
|
26
27
|
}>;
|
|
@@ -18,6 +18,7 @@ const backend_common_1 = require("@n8n/backend-common");
|
|
|
18
18
|
const db_1 = require("@n8n/db");
|
|
19
19
|
const decorators_1 = require("@n8n/decorators");
|
|
20
20
|
const class_transformer_1 = require("class-transformer");
|
|
21
|
+
const survey_answers_dto_1 = require("./survey-answers.dto");
|
|
21
22
|
const auth_service_1 = require("../auth/auth.service");
|
|
22
23
|
const bad_request_error_1 = require("../errors/response-errors/bad-request.error");
|
|
23
24
|
const invalid_mfa_code_error_1 = require("../errors/response-errors/invalid-mfa-code.error");
|
|
@@ -29,7 +30,6 @@ const password_utility_1 = require("../services/password.utility");
|
|
|
29
30
|
const user_service_1 = require("../services/user.service");
|
|
30
31
|
const saml_helpers_1 = require("../sso.ee/saml/saml-helpers");
|
|
31
32
|
const sso_helpers_1 = require("../sso.ee/sso-helpers");
|
|
32
|
-
const survey_answers_dto_1 = require("./survey-answers.dto");
|
|
33
33
|
let MeController = class MeController {
|
|
34
34
|
constructor(logger, externalHooks, authService, userService, passwordUtility, userRepository, eventService, mfaService) {
|
|
35
35
|
this.logger = logger;
|
|
@@ -42,7 +42,8 @@ let MeController = class MeController {
|
|
|
42
42
|
this.mfaService = mfaService;
|
|
43
43
|
}
|
|
44
44
|
async updateCurrentUser(req, res, payload) {
|
|
45
|
-
const { id: userId, email: currentEmail,
|
|
45
|
+
const { id: userId, email: currentEmail, firstName: currentFirstName, lastName: currentLastName, } = req.user;
|
|
46
|
+
const { currentPassword, ...payloadWithoutPassword } = payload;
|
|
46
47
|
const { email, firstName, lastName } = payload;
|
|
47
48
|
const isEmailBeingChanged = email !== currentEmail;
|
|
48
49
|
const isFirstNameChanged = firstName !== currentFirstName;
|
|
@@ -51,29 +52,18 @@ let MeController = class MeController {
|
|
|
51
52
|
(isEmailBeingChanged || isFirstNameChanged || isLastNameChanged)) {
|
|
52
53
|
this.logger.debug(`Request to update user failed because ${(0, sso_helpers_1.getCurrentAuthenticationMethod)()} user may not change their profile information`, {
|
|
53
54
|
userId,
|
|
54
|
-
payload,
|
|
55
|
+
payload: payloadWithoutPassword,
|
|
55
56
|
});
|
|
56
57
|
throw new bad_request_error_1.BadRequestError(` ${(0, sso_helpers_1.getCurrentAuthenticationMethod)()} user may not change their profile information`);
|
|
57
58
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
if (mfaEnabled && isEmailBeingChanged) {
|
|
66
|
-
if (!payload.mfaCode) {
|
|
67
|
-
throw new bad_request_error_1.BadRequestError('Two-factor code is required to change email');
|
|
68
|
-
}
|
|
69
|
-
const isMfaCodeValid = await this.mfaService.validateMfa(userId, payload.mfaCode, undefined);
|
|
70
|
-
if (!isMfaCodeValid) {
|
|
71
|
-
throw new invalid_mfa_code_error_1.InvalidMfaCodeError();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
await this.externalHooks.run('user.profile.beforeUpdate', [userId, currentEmail, payload]);
|
|
59
|
+
await this.validateChangingUserEmail(req.user, payload);
|
|
60
|
+
await this.externalHooks.run('user.profile.beforeUpdate', [
|
|
61
|
+
userId,
|
|
62
|
+
currentEmail,
|
|
63
|
+
payloadWithoutPassword,
|
|
64
|
+
]);
|
|
75
65
|
const preUpdateUser = await this.userRepository.findOneByOrFail({ id: userId });
|
|
76
|
-
await this.userService.update(userId,
|
|
66
|
+
await this.userService.update(userId, payloadWithoutPassword);
|
|
77
67
|
const user = await this.userRepository.findOneOrFail({
|
|
78
68
|
where: { id: userId },
|
|
79
69
|
relations: ['role'],
|
|
@@ -87,6 +77,45 @@ let MeController = class MeController {
|
|
|
87
77
|
await this.externalHooks.run('user.profile.update', [currentEmail, publicUser]);
|
|
88
78
|
return publicUser;
|
|
89
79
|
}
|
|
80
|
+
async validateChangingUserEmail(currentUser, payload) {
|
|
81
|
+
if (!payload.email || payload.email === currentUser.email) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const { currentPassword: providedCurrentPassword, ...payloadWithoutPassword } = payload;
|
|
85
|
+
const { id: userId, mfaEnabled } = currentUser;
|
|
86
|
+
if ((0, saml_helpers_1.isSamlLicensedAndEnabled)()) {
|
|
87
|
+
this.logger.debug('Request to update user failed because SAML user may not change their email', {
|
|
88
|
+
userId: currentUser.id,
|
|
89
|
+
payload: payloadWithoutPassword,
|
|
90
|
+
});
|
|
91
|
+
throw new bad_request_error_1.BadRequestError('SAML user may not change their email');
|
|
92
|
+
}
|
|
93
|
+
if (mfaEnabled) {
|
|
94
|
+
if (!payload.mfaCode) {
|
|
95
|
+
throw new bad_request_error_1.BadRequestError('Two-factor code is required to change email');
|
|
96
|
+
}
|
|
97
|
+
const isMfaCodeValid = await this.mfaService.validateMfa(userId, payload.mfaCode, undefined);
|
|
98
|
+
if (!isMfaCodeValid) {
|
|
99
|
+
throw new invalid_mfa_code_error_1.InvalidMfaCodeError();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
if (currentUser.password === null) {
|
|
104
|
+
this.logger.debug('User with no password changed their email', {
|
|
105
|
+
userId: currentUser.id,
|
|
106
|
+
payload: payloadWithoutPassword,
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!providedCurrentPassword || typeof providedCurrentPassword !== 'string') {
|
|
111
|
+
throw new bad_request_error_1.BadRequestError('Current password is required to change email');
|
|
112
|
+
}
|
|
113
|
+
const isProvidedPasswordCorrect = await this.passwordUtility.compare(providedCurrentPassword, currentUser.password);
|
|
114
|
+
if (!isProvidedPasswordCorrect) {
|
|
115
|
+
throw new bad_request_error_1.BadRequestError('Unable to update profile. Please check your credentials and try again.');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
90
119
|
async updatePassword(req, res, payload) {
|
|
91
120
|
const { user } = req;
|
|
92
121
|
const { currentPassword, newPassword, mfaCode } = payload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"me.controller.js","sourceRoot":"","sources":["../../src/controllers/me.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8CAKwB;AACxB,wDAA6C;AAE7C,gCAA+D;AAC/D,gDAAoE;AACpE,yDAAoD;AAGpD,sDAAkD;AAClD,kFAA6E;AAC7E,4FAAsF;AACtF,0DAAsD;AACtD,qDAAiD;AACjD,uDAAmD;AACnD,mDAA+C;AAE/C,kEAA8D;AAC9D,0DAAsD;AACtD,6DAAsE;AACtE,sDAI8B;
|
|
1
|
+
{"version":3,"file":"me.controller.js","sourceRoot":"","sources":["../../src/controllers/me.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8CAKwB;AACxB,wDAA6C;AAE7C,gCAA+D;AAC/D,gDAAoE;AACpE,yDAAoD;AAGpD,6DAAsE;AAEtE,sDAAkD;AAClD,kFAA6E;AAC7E,4FAAsF;AACtF,0DAAsD;AACtD,qDAAiD;AACjD,uDAAmD;AACnD,mDAA+C;AAE/C,kEAA8D;AAC9D,0DAAsD;AACtD,6DAAsE;AACtE,sDAI8B;AAGvB,IAAM,YAAY,GAAlB,MAAM,YAAY;IACxB,YACkB,MAAc,EACd,aAA4B,EAC5B,WAAwB,EACxB,WAAwB,EACxB,eAAgC,EAChC,cAA8B,EAC9B,YAA0B,EAC1B,UAAsB;QAPtB,WAAM,GAAN,MAAM,CAAQ;QACd,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAa;QACxB,oBAAe,GAAf,eAAe,CAAiB;QAChC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,eAAU,GAAV,UAAU,CAAY;IACrC,CAAC;IAME,AAAN,KAAK,CAAC,iBAAiB,CACtB,GAAyB,EACzB,GAAa,EACP,OAA6B;QAEnC,MAAM,EACL,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,eAAe,GACzB,GAAG,GAAG,CAAC,IAAI,CAAC;QAEb,MAAM,EAAE,eAAe,EAAE,GAAG,sBAAsB,EAAE,GAAG,OAAO,CAAC;QAC/D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAC/C,MAAM,mBAAmB,GAAG,KAAK,KAAK,YAAY,CAAC;QACnD,MAAM,kBAAkB,GAAG,SAAS,KAAK,gBAAgB,CAAC;QAC1D,MAAM,iBAAiB,GAAG,QAAQ,KAAK,eAAe,CAAC;QAEvD,IACC,CAAC,IAAA,+CAAiC,GAAE,IAAI,IAAA,+CAAiC,GAAE,CAAC;YAC5E,CAAC,mBAAmB,IAAI,kBAAkB,IAAI,iBAAiB,CAAC,EAC/D,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAChB,yCAAyC,IAAA,4CAA8B,GAAE,gDAAgD,EACzH;gBACC,MAAM;gBACN,OAAO,EAAE,sBAAsB;aAC/B,CACD,CAAC;YACF,MAAM,IAAI,mCAAe,CACxB,IAAI,IAAA,4CAA8B,GAAE,gDAAgD,CACpF,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAExD,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,2BAA2B,EAAE;YACzD,MAAM;YACN,YAAY;YACZ,sBAAsB;SACtB,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YACpD,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;YACrB,SAAS,EAAE,CAAC,MAAM,CAAC;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAEvF,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;QACrE,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAC5C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,CAC9D,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAEhE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;QAEhF,OAAO,UAAU,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,WAAiB,EAAE,OAA6B;QACvF,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;YAE3D,OAAO;QACR,CAAC;QACD,MAAM,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,sBAAsB,EAAE,GAAG,OAAO,CAAC;QACxF,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;QAG/C,IAAI,IAAA,uCAAwB,GAAE,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAChB,4EAA4E,EAC5E;gBACC,MAAM,EAAE,WAAW,CAAC,EAAE;gBACtB,OAAO,EAAE,sBAAsB;aAC/B,CACD,CAAC;YACF,MAAM,IAAI,mCAAe,CAAC,sCAAsC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtB,MAAM,IAAI,mCAAe,CAAC,6CAA6C,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC7F,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,MAAM,IAAI,4CAAmB,EAAE,CAAC;YACjC,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;oBAC9D,MAAM,EAAE,WAAW,CAAC,EAAE;oBACtB,OAAO,EAAE,sBAAsB;iBAC/B,CAAC,CAAC;gBACH,OAAO;YACR,CAAC;YAED,IAAI,CAAC,uBAAuB,IAAI,OAAO,uBAAuB,KAAK,QAAQ,EAAE,CAAC;gBAC7E,MAAM,IAAI,mCAAe,CAAC,8CAA8C,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,yBAAyB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CACnE,uBAAuB,EACvB,WAAW,CAAC,QAAQ,CACpB,CAAC;YACF,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBAChC,MAAM,IAAI,mCAAe,CACxB,wEAAwE,CACxE,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;IAMK,AAAN,KAAK,CAAC,cAAc,CACnB,GAAyB,EACzB,GAAa,EACP,OAAiC;QAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;QACrB,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAG1D,IAAI,IAAA,uCAAwB,GAAE,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,EAAE;gBACjF,MAAM,EAAE,IAAI,CAAC,EAAE;aACf,CAAC,CAAC;YACH,MAAM,IAAI,mCAAe,CACxB,8EAA8E,CAC9E,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,mCAAe,CAAC,6BAA6B,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9F,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACzB,MAAM,IAAI,mCAAe,CAAC,yCAAyC,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,kBAAkB,GAAG,0BAAc,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,mCAAe,CACxB,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACvE,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACjC,MAAM,IAAI,mCAAe,CAAC,iDAAiD,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACtF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,MAAM,IAAI,4CAAmB,EAAE,CAAC;YACjC,CAAC;QACF,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAEvE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAE9F,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAE3F,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEhG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAMK,AAAN,KAAK,CAAC,kBAAkB,CAAC,GAA4B;QACpD,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,GAAG,CAAC;QAE7C,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAChB,kFAAkF,EAClF;gBACC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;aACnB,CACD,CAAC;YACF,MAAM,IAAI,mCAAe,CAAC,uCAAuC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAA,mCAAe,EACvC,mDAA8B,EAC9B,sBAAsB,EACtB,EAAE,uBAAuB,EAAE,IAAI,EAAE,CACjC,CAAC;QAEF,MAAM,IAAA,gCAAc,EAAC,gBAAgB,CAAC,CAAC;QAEvC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAC7B;YACC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;YACf,sBAAsB,EAAE,gBAAgB;SACxC,EACD,EAAE,WAAW,EAAE,KAAK,EAAE,CACtB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAE9E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,uCAAuC,EAAE;YAC/D,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO,EAAE,gBAAgB;SACzB,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAMK,AAAN,KAAK,CAAC,yBAAyB,CAC9B,GAAyB,EACzB,CAAW,EACL,OAAiC;QAEvC,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAExB,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YACpD,MAAM,EAAE,CAAC,UAAU,CAAC;YACpB,KAAK,EAAE,EAAE,EAAE,EAAE;SACb,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD,CAAA;AAvQY,oCAAY;AAgBlB;IADL,IAAA,kBAAK,EAAC,GAAG,CAAC;IAIT,WAAA,iBAAI,CAAA;;qDAAU,gCAAoB;;qDA8DnC;AA4DK;IADL,IAAA,kBAAK,EAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAItC,WAAA,iBAAI,CAAA;;qDAAU,oCAAwB;;kDAsDvC;AAMK;IADL,IAAA,iBAAI,EAAC,SAAS,CAAC;;;;sDAsCf;AAMK;IADL,IAAA,kBAAK,EAAC,WAAW,CAAC;IAIjB,WAAA,iBAAI,CAAA;;qDAAU,oCAAwB;;6DAYvC;uBAtQW,YAAY;IADxB,IAAA,2BAAc,EAAC,KAAK,CAAC;qCAGK,uBAAM;QACC,8BAAa;QACf,0BAAW;QACX,0BAAW;QACP,kCAAe;QAChB,mBAAc;QAChB,4BAAY;QACd,wBAAU;GAT5B,YAAY,CAuQxB"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { CreateRoleDto, UpdateRoleDto } from '@n8n/api-types';
|
|
1
|
+
import { CreateRoleDto, RoleGetQueryDto, RoleListQueryDto, UpdateRoleDto } from '@n8n/api-types';
|
|
2
2
|
import { AuthenticatedRequest } from '@n8n/db';
|
|
3
3
|
import { Role as RoleDTO } from '@n8n/permissions';
|
|
4
4
|
import { RoleService } from '../services/role.service';
|
|
5
5
|
export declare class RoleController {
|
|
6
6
|
private readonly roleService;
|
|
7
7
|
constructor(roleService: RoleService);
|
|
8
|
-
getAllRoles(): Promise<Record<string, RoleDTO[]>>;
|
|
9
|
-
getRoleBySlug(_req: AuthenticatedRequest, _res: Response, slug: string): Promise<RoleDTO>;
|
|
8
|
+
getAllRoles(_req: AuthenticatedRequest, _res: Response, query: RoleListQueryDto): Promise<Record<string, RoleDTO[]>>;
|
|
9
|
+
getRoleBySlug(_req: AuthenticatedRequest, _res: Response, slug: string, query: RoleGetQueryDto): Promise<RoleDTO>;
|
|
10
10
|
updateRole(_req: AuthenticatedRequest, _res: Response, slug: string, updateRole: UpdateRoleDto): Promise<RoleDTO>;
|
|
11
11
|
deleteRole(_req: AuthenticatedRequest, _res: Response, slug: string): Promise<RoleDTO>;
|
|
12
12
|
createRole(_req: AuthenticatedRequest, _res: Response, createRole: CreateRoleDto): Promise<RoleDTO>;
|
|
@@ -21,8 +21,8 @@ let RoleController = class RoleController {
|
|
|
21
21
|
constructor(roleService) {
|
|
22
22
|
this.roleService = roleService;
|
|
23
23
|
}
|
|
24
|
-
async getAllRoles() {
|
|
25
|
-
const allRoles = await this.roleService.getAllRoles();
|
|
24
|
+
async getAllRoles(_req, _res, query) {
|
|
25
|
+
const allRoles = await this.roleService.getAllRoles(query.withUsageCount);
|
|
26
26
|
return {
|
|
27
27
|
global: allRoles.filter((r) => r.roleType === 'global'),
|
|
28
28
|
project: allRoles.filter((r) => r.roleType === 'project'),
|
|
@@ -30,8 +30,8 @@ let RoleController = class RoleController {
|
|
|
30
30
|
workflow: allRoles.filter((r) => r.roleType === 'workflow'),
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
async getRoleBySlug(_req, _res, slug) {
|
|
34
|
-
return await this.roleService.getRole(slug);
|
|
33
|
+
async getRoleBySlug(_req, _res, slug, query) {
|
|
34
|
+
return await this.roleService.getRole(slug, query.withUsageCount);
|
|
35
35
|
}
|
|
36
36
|
async updateRole(_req, _res, slug, updateRole) {
|
|
37
37
|
return await this.roleService.updateCustomRole(slug, updateRole);
|
|
@@ -46,15 +46,18 @@ let RoleController = class RoleController {
|
|
|
46
46
|
exports.RoleController = RoleController;
|
|
47
47
|
__decorate([
|
|
48
48
|
(0, decorators_1.Get)('/'),
|
|
49
|
+
__param(2, decorators_1.Query),
|
|
49
50
|
__metadata("design:type", Function),
|
|
50
|
-
__metadata("design:paramtypes", [
|
|
51
|
+
__metadata("design:paramtypes", [Object, Response,
|
|
52
|
+
api_types_1.RoleListQueryDto]),
|
|
51
53
|
__metadata("design:returntype", Promise)
|
|
52
54
|
], RoleController.prototype, "getAllRoles", null);
|
|
53
55
|
__decorate([
|
|
54
56
|
(0, decorators_1.Get)('/:slug'),
|
|
55
57
|
__param(2, (0, decorators_1.Param)('slug')),
|
|
58
|
+
__param(3, decorators_1.Query),
|
|
56
59
|
__metadata("design:type", Function),
|
|
57
|
-
__metadata("design:paramtypes", [Object, Response, String]),
|
|
60
|
+
__metadata("design:paramtypes", [Object, Response, String, api_types_1.RoleGetQueryDto]),
|
|
58
61
|
__metadata("design:returntype", Promise)
|
|
59
62
|
], RoleController.prototype, "getRoleBySlug", null);
|
|
60
63
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role.controller.js","sourceRoot":"","sources":["../../src/controllers/role.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"role.controller.js","sourceRoot":"","sources":["../../src/controllers/role.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,12 @@ import type { CredentialsEntity, SharedCredentials, User } from '@n8n/db';
|
|
|
2
2
|
import { CredentialsRepository, SharedCredentialsRepository } from '@n8n/db';
|
|
3
3
|
import type { CredentialSharingRole, ProjectRole, Scope } from '@n8n/permissions';
|
|
4
4
|
import type { EntityManager } from '@n8n/typeorm';
|
|
5
|
+
import { RoleService } from '../services/role.service';
|
|
5
6
|
export declare class CredentialsFinderService {
|
|
6
7
|
private readonly sharedCredentialsRepository;
|
|
7
8
|
private readonly credentialsRepository;
|
|
8
|
-
|
|
9
|
+
private readonly roleService;
|
|
10
|
+
constructor(sharedCredentialsRepository: SharedCredentialsRepository, credentialsRepository: CredentialsRepository, roleService: RoleService);
|
|
9
11
|
findCredentialsForUser(user: User, scopes: Scope[]): Promise<CredentialsEntity[]>;
|
|
10
12
|
findCredentialForUser(credentialsId: string, user: User, scopes: Scope[]): Promise<CredentialsEntity | null>;
|
|
11
13
|
findAllCredentialsForUser(user: User, scopes: Scope[], trx?: EntityManager): Promise<{
|
|
@@ -14,16 +14,20 @@ const db_1 = require("@n8n/db");
|
|
|
14
14
|
const di_1 = require("@n8n/di");
|
|
15
15
|
const permissions_1 = require("@n8n/permissions");
|
|
16
16
|
const typeorm_1 = require("@n8n/typeorm");
|
|
17
|
+
const role_service_1 = require("../services/role.service");
|
|
17
18
|
let CredentialsFinderService = class CredentialsFinderService {
|
|
18
|
-
constructor(sharedCredentialsRepository, credentialsRepository) {
|
|
19
|
+
constructor(sharedCredentialsRepository, credentialsRepository, roleService) {
|
|
19
20
|
this.sharedCredentialsRepository = sharedCredentialsRepository;
|
|
20
21
|
this.credentialsRepository = credentialsRepository;
|
|
22
|
+
this.roleService = roleService;
|
|
21
23
|
}
|
|
22
24
|
async findCredentialsForUser(user, scopes) {
|
|
23
25
|
let where = {};
|
|
24
26
|
if (!(0, permissions_1.hasGlobalScope)(user, scopes, { mode: 'allOf' })) {
|
|
25
|
-
const projectRoles =
|
|
26
|
-
|
|
27
|
+
const [projectRoles, credentialRoles] = await Promise.all([
|
|
28
|
+
this.roleService.rolesWithScope('project', scopes),
|
|
29
|
+
this.roleService.rolesWithScope('credential', scopes),
|
|
30
|
+
]);
|
|
27
31
|
where = {
|
|
28
32
|
...where,
|
|
29
33
|
shared: {
|
|
@@ -42,8 +46,10 @@ let CredentialsFinderService = class CredentialsFinderService {
|
|
|
42
46
|
async findCredentialForUser(credentialsId, user, scopes) {
|
|
43
47
|
let where = { credentialsId };
|
|
44
48
|
if (!(0, permissions_1.hasGlobalScope)(user, scopes, { mode: 'allOf' })) {
|
|
45
|
-
const projectRoles =
|
|
46
|
-
|
|
49
|
+
const [projectRoles, credentialRoles] = await Promise.all([
|
|
50
|
+
this.roleService.rolesWithScope('project', scopes),
|
|
51
|
+
this.roleService.rolesWithScope('credential', scopes),
|
|
52
|
+
]);
|
|
47
53
|
where = {
|
|
48
54
|
...where,
|
|
49
55
|
role: (0, typeorm_1.In)(credentialRoles),
|
|
@@ -70,8 +76,10 @@ let CredentialsFinderService = class CredentialsFinderService {
|
|
|
70
76
|
async findAllCredentialsForUser(user, scopes, trx) {
|
|
71
77
|
let where = {};
|
|
72
78
|
if (!(0, permissions_1.hasGlobalScope)(user, scopes, { mode: 'allOf' })) {
|
|
73
|
-
const projectRoles =
|
|
74
|
-
|
|
79
|
+
const [projectRoles, credentialRoles] = await Promise.all([
|
|
80
|
+
this.roleService.rolesWithScope('project', scopes),
|
|
81
|
+
this.roleService.rolesWithScope('credential', scopes),
|
|
82
|
+
]);
|
|
75
83
|
where = {
|
|
76
84
|
role: (0, typeorm_1.In)(credentialRoles),
|
|
77
85
|
project: {
|
|
@@ -86,8 +94,12 @@ let CredentialsFinderService = class CredentialsFinderService {
|
|
|
86
94
|
return sharedCredential.map((sc) => ({ ...sc.credentials, projectId: sc.projectId }));
|
|
87
95
|
}
|
|
88
96
|
async getCredentialIdsByUserAndRole(userIds, options, trx) {
|
|
89
|
-
const projectRoles = 'scopes' in options
|
|
90
|
-
|
|
97
|
+
const projectRoles = 'scopes' in options
|
|
98
|
+
? await this.roleService.rolesWithScope('project', options.scopes)
|
|
99
|
+
: options.projectRoles;
|
|
100
|
+
const credentialRoles = 'scopes' in options
|
|
101
|
+
? await this.roleService.rolesWithScope('credential', options.scopes)
|
|
102
|
+
: options.credentialRoles;
|
|
91
103
|
const sharings = await this.sharedCredentialsRepository.findCredentialsByRoles(userIds, projectRoles, credentialRoles, trx);
|
|
92
104
|
return sharings.map((s) => s.credentialsId);
|
|
93
105
|
}
|
|
@@ -96,6 +108,7 @@ exports.CredentialsFinderService = CredentialsFinderService;
|
|
|
96
108
|
exports.CredentialsFinderService = CredentialsFinderService = __decorate([
|
|
97
109
|
(0, di_1.Service)(),
|
|
98
110
|
__metadata("design:paramtypes", [db_1.SharedCredentialsRepository,
|
|
99
|
-
db_1.CredentialsRepository
|
|
111
|
+
db_1.CredentialsRepository,
|
|
112
|
+
role_service_1.RoleService])
|
|
100
113
|
], CredentialsFinderService);
|
|
101
114
|
//# sourceMappingURL=credentials-finder.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials-finder.service.js","sourceRoot":"","sources":["../../src/credentials/credentials-finder.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,gCAA6E;AAC7E,gCAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"credentials-finder.service.js","sourceRoot":"","sources":["../../src/credentials/credentials-finder.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { type EntityManager } from '@n8n/typeorm';
|
|
|
4
4
|
import type { ICredentialDataDecryptedObject } from 'n8n-workflow';
|
|
5
5
|
import { OwnershipService } from '../services/ownership.service';
|
|
6
6
|
import { ProjectService } from '../services/project.service.ee';
|
|
7
|
+
import { RoleService } from '../services/role.service';
|
|
7
8
|
import { CredentialsFinderService } from './credentials-finder.service';
|
|
8
9
|
import { CredentialsService } from './credentials.service';
|
|
9
10
|
export declare class EnterpriseCredentialsService {
|
|
@@ -12,7 +13,8 @@ export declare class EnterpriseCredentialsService {
|
|
|
12
13
|
private readonly credentialsService;
|
|
13
14
|
private readonly projectService;
|
|
14
15
|
private readonly credentialsFinderService;
|
|
15
|
-
|
|
16
|
+
private readonly roleService;
|
|
17
|
+
constructor(sharedCredentialsRepository: SharedCredentialsRepository, ownershipService: OwnershipService, credentialsService: CredentialsService, projectService: ProjectService, credentialsFinderService: CredentialsFinderService, roleService: RoleService);
|
|
16
18
|
shareWithProjects(user: User, credentialId: string, shareWithIds: string[], entityManager?: EntityManager): Promise<SharedCredentials[]>;
|
|
17
19
|
getOne(user: User, credentialId: string, includeDecryptedData: boolean): Promise<{
|
|
18
20
|
name: string;
|
|
@@ -18,18 +18,21 @@ const not_found_error_1 = require("../errors/response-errors/not-found.error");
|
|
|
18
18
|
const transfer_credential_error_1 = require("../errors/response-errors/transfer-credential.error");
|
|
19
19
|
const ownership_service_1 = require("../services/ownership.service");
|
|
20
20
|
const project_service_ee_1 = require("../services/project.service.ee");
|
|
21
|
+
const role_service_1 = require("../services/role.service");
|
|
21
22
|
const credentials_finder_service_1 = require("./credentials-finder.service");
|
|
22
23
|
const credentials_service_1 = require("./credentials.service");
|
|
23
24
|
let EnterpriseCredentialsService = class EnterpriseCredentialsService {
|
|
24
|
-
constructor(sharedCredentialsRepository, ownershipService, credentialsService, projectService, credentialsFinderService) {
|
|
25
|
+
constructor(sharedCredentialsRepository, ownershipService, credentialsService, projectService, credentialsFinderService, roleService) {
|
|
25
26
|
this.sharedCredentialsRepository = sharedCredentialsRepository;
|
|
26
27
|
this.ownershipService = ownershipService;
|
|
27
28
|
this.credentialsService = credentialsService;
|
|
28
29
|
this.projectService = projectService;
|
|
29
30
|
this.credentialsFinderService = credentialsFinderService;
|
|
31
|
+
this.roleService = roleService;
|
|
30
32
|
}
|
|
31
33
|
async shareWithProjects(user, credentialId, shareWithIds, entityManager) {
|
|
32
34
|
const em = entityManager ?? this.sharedCredentialsRepository.manager;
|
|
35
|
+
const roles = await this.roleService.rolesWithScope('project', ['project:list']);
|
|
33
36
|
let projects = await em.find(db_1.Project, {
|
|
34
37
|
where: [
|
|
35
38
|
{
|
|
@@ -40,7 +43,7 @@ let EnterpriseCredentialsService = class EnterpriseCredentialsService {
|
|
|
40
43
|
: {
|
|
41
44
|
projectRelations: {
|
|
42
45
|
userId: user.id,
|
|
43
|
-
role: (0, typeorm_1.In)(
|
|
46
|
+
role: (0, typeorm_1.In)(roles),
|
|
44
47
|
},
|
|
45
48
|
}),
|
|
46
49
|
},
|
|
@@ -115,6 +118,7 @@ exports.EnterpriseCredentialsService = EnterpriseCredentialsService = __decorate
|
|
|
115
118
|
ownership_service_1.OwnershipService,
|
|
116
119
|
credentials_service_1.CredentialsService,
|
|
117
120
|
project_service_ee_1.ProjectService,
|
|
118
|
-
credentials_finder_service_1.CredentialsFinderService
|
|
121
|
+
credentials_finder_service_1.CredentialsFinderService,
|
|
122
|
+
role_service_1.RoleService])
|
|
119
123
|
], EnterpriseCredentialsService);
|
|
120
124
|
//# sourceMappingURL=credentials.service.ee.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.service.ee.js","sourceRoot":"","sources":["../../src/credentials/credentials.service.ee.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,gCAAkF;AAClF,gCAAkC;AAClC,
|
|
1
|
+
{"version":3,"file":"credentials.service.ee.js","sourceRoot":"","sources":["../../src/credentials/credentials.service.ee.ts"],"names":[],"mappings":"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"}
|