diff --git a/Common/Server/API/SlackAPI.ts b/Common/Server/API/SlackAPI.ts index 0eedeea40d..79eff30b0a 100644 --- a/Common/Server/API/SlackAPI.ts +++ b/Common/Server/API/SlackAPI.ts @@ -472,9 +472,8 @@ export default class SlackAPI { idToken["https://slack.com/team_id"]?.toString(); // If state is provided, enforce workspace selection. - const expectedTeamId: string | undefined = req.query[ - "state" - ]?.toString(); + const expectedTeamId: string | undefined = + req.query["state"]?.toString(); if (expectedTeamId && teamIdFromSlack) { if (expectedTeamId !== teamIdFromSlack) { @@ -758,9 +757,8 @@ export default class SlackAPI { ); } - const workspaceProjectAuthTokenId: string | undefined = req.query[ - "workspaceProjectAuthTokenId" - ]?.toString(); + const workspaceProjectAuthTokenId: string | undefined = + req.query["workspaceProjectAuthTokenId"]?.toString(); // Get Slack project auth const projectAuthQuery: { diff --git a/Common/Server/Infrastructure/Postgres/SchemaMigrations/1770922660423-MigrationName.ts b/Common/Server/Infrastructure/Postgres/SchemaMigrations/1770922660423-MigrationName.ts index 864be556f9..90dff50bfe 100644 --- a/Common/Server/Infrastructure/Postgres/SchemaMigrations/1770922660423-MigrationName.ts +++ b/Common/Server/Infrastructure/Postgres/SchemaMigrations/1770922660423-MigrationName.ts @@ -1,24 +1,47 @@ import { MigrationInterface, QueryRunner } from "typeorm"; export class MigrationName1770922660423 implements MigrationInterface { - public name = 'MigrationName1770922660423' + public name = "MigrationName1770922660423"; - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`DROP INDEX "public"."IDX_workspace_user_auth_token_workspace_project_id"`); - await queryRunner.query(`DROP INDEX "public"."IDX_workspace_notification_rule_workspace_project_auth_token_id"`); - await queryRunner.query(`ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type":"Recurring","value":{"intervalType":"Day","intervalCount":{"_type":"PositiveNumber","value":1}}}'`); - await queryRunner.query(`ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type":"RestrictionTimes","value":{"restictionType":"None","dayRestrictionTimes":null,"weeklyRestrictionTimes":[]}}'`); - await queryRunner.query(`CREATE INDEX "IDX_50f3ab2c779757f0f72733b9f5" ON "WorkspaceUserAuthToken" ("workspaceProjectId") `); - await queryRunner.query(`CREATE INDEX "IDX_5691297e1b384944dea798b07a" ON "WorkspaceNotificationRule" ("workspaceProjectAuthTokenId") `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`DROP INDEX "public"."IDX_5691297e1b384944dea798b07a"`); - await queryRunner.query(`DROP INDEX "public"."IDX_50f3ab2c779757f0f72733b9f5"`); - await queryRunner.query(`ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type": "RestrictionTimes", "value": {"restictionType": "None", "dayRestrictionTimes": null, "weeklyRestrictionTimes": []}}'`); - await queryRunner.query(`ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type": "Recurring", "value": {"intervalType": "Day", "intervalCount": {"_type": "PositiveNumber", "value": 1}}}'`); - await queryRunner.query(`CREATE INDEX "IDX_workspace_notification_rule_workspace_project_auth_token_id" ON "WorkspaceNotificationRule" ("workspaceProjectAuthTokenId") `); - await queryRunner.query(`CREATE INDEX "IDX_workspace_user_auth_token_workspace_project_id" ON "WorkspaceUserAuthToken" ("workspaceProjectId") `); - } + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `DROP INDEX "public"."IDX_workspace_user_auth_token_workspace_project_id"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_workspace_notification_rule_workspace_project_auth_token_id"`, + ); + await queryRunner.query( + `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type":"Recurring","value":{"intervalType":"Day","intervalCount":{"_type":"PositiveNumber","value":1}}}'`, + ); + await queryRunner.query( + `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type":"RestrictionTimes","value":{"restictionType":"None","dayRestrictionTimes":null,"weeklyRestrictionTimes":[]}}'`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_50f3ab2c779757f0f72733b9f5" ON "WorkspaceUserAuthToken" ("workspaceProjectId") `, + ); + await queryRunner.query( + `CREATE INDEX "IDX_5691297e1b384944dea798b07a" ON "WorkspaceNotificationRule" ("workspaceProjectAuthTokenId") `, + ); + } + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `DROP INDEX "public"."IDX_5691297e1b384944dea798b07a"`, + ); + await queryRunner.query( + `DROP INDEX "public"."IDX_50f3ab2c779757f0f72733b9f5"`, + ); + await queryRunner.query( + `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type": "RestrictionTimes", "value": {"restictionType": "None", "dayRestrictionTimes": null, "weeklyRestrictionTimes": []}}'`, + ); + await queryRunner.query( + `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type": "Recurring", "value": {"intervalType": "Day", "intervalCount": {"_type": "PositiveNumber", "value": 1}}}'`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_workspace_notification_rule_workspace_project_auth_token_id" ON "WorkspaceNotificationRule" ("workspaceProjectAuthTokenId") `, + ); + await queryRunner.query( + `CREATE INDEX "IDX_workspace_user_auth_token_workspace_project_id" ON "WorkspaceUserAuthToken" ("workspaceProjectId") `, + ); + } } diff --git a/Common/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts b/Common/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts index d0470ffec5..643389e494 100644 --- a/Common/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +++ b/Common/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts @@ -523,5 +523,5 @@ export default [ MigrationName1770833704656, MigrationName1770834237090, MigrationName1770919024300, - MigrationName1770922660423 + MigrationName1770922660423, ]; diff --git a/Common/Server/Services/WorkspaceNotificationRuleService.ts b/Common/Server/Services/WorkspaceNotificationRuleService.ts index 080a80dc1e..9cdafa0e57 100644 --- a/Common/Server/Services/WorkspaceNotificationRuleService.ts +++ b/Common/Server/Services/WorkspaceNotificationRuleService.ts @@ -499,8 +499,10 @@ export class Service extends DatabaseService { } } - const rulesByAuthToken: Map> = - new Map(); + const rulesByAuthToken: Map< + string, + Array + > = new Map(); for (const rule of notificationRules) { const key: string = rule.workspaceProjectAuthTokenId @@ -564,7 +566,9 @@ export class Service extends DatabaseService { }; if (authTokenId !== "default") { - archiveAuthQuery.workspaceProjectAuthTokenId = new ObjectID(authTokenId); + archiveAuthQuery.workspaceProjectAuthTokenId = new ObjectID( + authTokenId, + ); } const projectAuth: WorkspaceProjectAuthToken | null = @@ -577,16 +581,18 @@ export class Service extends DatabaseService { continue; } - await WorkspaceUtil.getWorkspaceTypeUtil(workspaceType).archiveChannels({ - authToken: projectAuth.authToken!, - channelIds: channelIds, - userId: this.getBotUserIdFromprojectAuthToken({ - projectAuthToken: projectAuth, - workspaceType: workspaceType, - }), - sendMessageBeforeArchiving: data.sendMessageBeforeArchiving, - projectId: data.projectId, - }); + await WorkspaceUtil.getWorkspaceTypeUtil(workspaceType).archiveChannels( + { + authToken: projectAuth.authToken!, + channelIds: channelIds, + userId: this.getBotUserIdFromprojectAuthToken({ + projectAuthToken: projectAuth, + workspaceType: workspaceType, + }), + sendMessageBeforeArchiving: data.sendMessageBeforeArchiving, + projectId: data.projectId, + }, + ); } } } @@ -669,7 +675,8 @@ export class Service extends DatabaseService { workspaceType: workspaceType, }); - const payloadsByAuthToken: Map = new Map(); + const payloadsByAuthToken: Map = + new Map(); const getPayloadForAuthToken: ( authTokenId?: string, @@ -1370,19 +1377,24 @@ export class Service extends DatabaseService { } const normalizedChannels: Array = - data.workspaceChannels.map((channel: NotificationRuleWorkspaceChannel) => { - if (!channel.workspaceProjectAuthTokenId && channel.notificationRuleId) { - const mappedTokenId: string | undefined = - ruleIdToWorkspaceAuthTokenId.get(channel.notificationRuleId); - if (mappedTokenId) { - return { - ...channel, - workspaceProjectAuthTokenId: mappedTokenId, - }; + data.workspaceChannels.map( + (channel: NotificationRuleWorkspaceChannel) => { + if ( + !channel.workspaceProjectAuthTokenId && + channel.notificationRuleId + ) { + const mappedTokenId: string | undefined = + ruleIdToWorkspaceAuthTokenId.get(channel.notificationRuleId); + if (mappedTokenId) { + return { + ...channel, + workspaceProjectAuthTokenId: mappedTokenId, + }; + } } - } - return channel; - }); + return channel; + }, + ); for (const workspaceType of workspaceTypes) { const rulesForWorkspace: Array = @@ -1394,8 +1406,10 @@ export class Service extends DatabaseService { continue; } - const rulesByAuthToken: Map> = - new Map(); + const rulesByAuthToken: Map< + string, + Array + > = new Map(); for (const rule of rulesForWorkspace) { const key: string = rule.workspaceProjectAuthTokenId ? rule.workspaceProjectAuthTokenId.toString() @@ -1449,7 +1463,9 @@ export class Service extends DatabaseService { }; if (authTokenId !== "default") { - inviteAuthQuery.workspaceProjectAuthTokenId = new ObjectID(authTokenId); + inviteAuthQuery.workspaceProjectAuthTokenId = new ObjectID( + authTokenId, + ); } const projectAuth: WorkspaceProjectAuthToken | null = diff --git a/Dashboard/src/Components/Slack/SlackChannelCacheModal.tsx b/Dashboard/src/Components/Slack/SlackChannelCacheModal.tsx index a632b41d61..28d2f85443 100644 --- a/Dashboard/src/Components/Slack/SlackChannelCacheModal.tsx +++ b/Dashboard/src/Components/Slack/SlackChannelCacheModal.tsx @@ -40,7 +40,10 @@ const SlackChannelCacheModal: FunctionComponent = ( await API.get({ url: URL.fromString( `${HOME_URL.toString()}/api/slack/get-all-channels`, - ).addQueryParam("workspaceProjectAuthTokenId", props.projectAuthTokenId.toString()), + ).addQueryParam( + "workspaceProjectAuthTokenId", + props.projectAuthTokenId.toString(), + ), headers: ModelAPI.getCommonHeaders(), }); diff --git a/Dashboard/src/Components/Slack/SlackIntegration.tsx b/Dashboard/src/Components/Slack/SlackIntegration.tsx index 2cecbfab87..12e8884230 100644 --- a/Dashboard/src/Components/Slack/SlackIntegration.tsx +++ b/Dashboard/src/Components/Slack/SlackIntegration.tsx @@ -142,9 +142,7 @@ const SlackIntegration: FunctionComponent = ( const response: HTTPErrorResponse | HTTPResponse = await API.get({ - url: URL.fromString( - `${HOME_URL.toString()}/api/slack/app-manifest`, - ), + url: URL.fromString(`${HOME_URL.toString()}/api/slack/app-manifest`), }); if (response instanceof HTTPErrorResponse) { @@ -221,9 +219,7 @@ const SlackIntegration: FunctionComponent = ( if (!userId) { setError( -
- Looks like you are not logged in. Please login to continue. -
, +
Looks like you are not logged in. Please login to continue.
, ); return; } @@ -336,10 +332,8 @@ const SlackIntegration: FunctionComponent = ( }; }; - const userAuthByWorkspaceProjectId: Map< - string, - WorkspaceUserAuthToken - > = new Map(); + const userAuthByWorkspaceProjectId: Map = + new Map(); userAuthTokens.forEach((token: WorkspaceUserAuthToken) => { if (token.workspaceProjectId) { @@ -349,17 +343,15 @@ const SlackIntegration: FunctionComponent = ( const workspaceCards: Array = projectAuthTokens.map( (workspace: WorkspaceProjectAuthToken) => { - const teamName: string | undefined = ( - workspace.miscData as SlackMiscData - )?.teamName; + const teamName: string | undefined = (workspace.miscData as SlackMiscData) + ?.teamName; const workspaceProjectId: string | undefined = workspace.workspaceProjectId; - const userAuth: WorkspaceUserAuthToken | undefined = - workspaceProjectId - ? userAuthByWorkspaceProjectId.get(workspaceProjectId) - : undefined; + const userAuth: WorkspaceUserAuthToken | undefined = workspaceProjectId + ? userAuthByWorkspaceProjectId.get(workspaceProjectId) + : undefined; const buttons: Array = []; diff --git a/Dashboard/src/Components/Workspace/WorkspaceNotificationRulesTable.tsx b/Dashboard/src/Components/Workspace/WorkspaceNotificationRulesTable.tsx index c9f1673a0d..71afe9350c 100644 --- a/Dashboard/src/Components/Workspace/WorkspaceNotificationRulesTable.tsx +++ b/Dashboard/src/Components/Workspace/WorkspaceNotificationRulesTable.tsx @@ -423,9 +423,8 @@ const WorkspaceNotificationRuleTable: FunctionComponent = ( workspace: WorkspaceProjectAuthToken, ): string => { if (props.workspaceType === WorkspaceType.Slack) { - const teamName: string | undefined = ( - workspace.miscData as SlackMiscData - )?.teamName; + const teamName: string | undefined = (workspace.miscData as SlackMiscData) + ?.teamName; return teamName || workspace.workspaceProjectId || "Slack Workspace"; }