zahmis před 4 roky
rodič
revize
04e0c20dfa

+ 0 - 1
packages/app/src/server/service/slack-integration.ts

@@ -128,7 +128,6 @@ export class SlackIntegrationService implements S2sMessageHandlable {
   async generateClientByTokenPtoG(tokenPtoG: string): Promise<WebClient> {
     this.isCheckTypeValid();
 
-    // const SlackAppIntegration = mongoose.model('SlackAppIntegration');
     const SlackAppIntegrationMock = mongoose.model('SlackAppIntegrationMock');
 
     const slackAppIntegration = await SlackAppIntegrationMock.findOne({ tokenPtoG });

+ 8 - 20
packages/slackbot-proxy/src/controllers/growi-to-slack.ts

@@ -16,7 +16,6 @@ import { WebclientRes, AddWebclientResponseToRes } from '~/middlewares/growi-to-
 import { GrowiReq } from '~/interfaces/growi-to-slack/growi-req';
 import { InstallationRepository } from '~/repositories/installation';
 import { RelationRepository } from '~/repositories/relation';
-import { RelationMockRepository } from '~/repositories/relation-mock';
 import { OrderRepository } from '~/repositories/order';
 
 import { InstallerService } from '~/services/InstallerService';
@@ -37,11 +36,8 @@ export class GrowiToSlackCtrl {
   @Inject()
   installationRepository: InstallationRepository;
 
-  // @Inject()
-  // relationRepository: RelationRepository;
-
   @Inject()
-  relationMockRepository: RelationMockRepository;
+  relationRepository: RelationRepository;
 
   @Inject()
   orderRepository: OrderRepository;
@@ -76,7 +72,7 @@ export class GrowiToSlackCtrl {
     const { tokenGtoPs } = req;
 
     // retrieve Relation with Installation
-    const relations = await this.relationMockRepository.createQueryBuilder('relation')
+    const relations = await this.relationRepository.createQueryBuilder('relation')
       .where('relation.tokenGtoP IN (:...tokens)', { tokens: tokenGtoPs })
       .leftJoinAndSelect('relation.installation', 'installation')
       .getMany();
@@ -114,7 +110,7 @@ export class GrowiToSlackCtrl {
     const tokenGtoP = tokenGtoPs[0];
 
     // MOCK DATA MODIFY THIS GW 6972 -----------
-    const relation = await this.relationMockRepository.update(
+    const relation = await this.relationRepository.update(
       { tokenGtoP }, { permissionsForBroadcastUseCommands, permissionsForSingleUseCommands },
     );
     // MOCK DATA MODIFY THIS GW 6972 -----------
@@ -134,7 +130,7 @@ export class GrowiToSlackCtrl {
     const tokenGtoP = tokenGtoPs[0];
 
     // retrieve relation with Installation
-    const relation = await this.relationMockRepository.createQueryBuilder('relation')
+    const relation = await this.RelationRepository.createQueryBuilder('relation')
       .where('tokenGtoP = :token', { token: tokenGtoP })
       .leftJoinAndSelect('relation.installation', 'installation')
       .getOne();
@@ -201,12 +197,7 @@ export class GrowiToSlackCtrl {
     // temporary cache for 48 hours
     const expiredAtCommands = addHours(new Date(), 48);
 
-    // MOCK DATA DELETE THIS GW-6972 7004 ---------------
-    /**
-     * this code represents the creation of cache (Relation schema) using request from GROWI
-     */
-    // Transaction is not considered because it is used infrequently
-    const response = await this.relationMockRepository.createQueryBuilder('relation')
+    const response = await this.relationRepository.createQueryBuilder('relation')
       .insert()
       .values({
         installation: order.installation,
@@ -223,13 +214,10 @@ export class GrowiToSlackCtrl {
         overwrite: ['tokenGtoP', 'tokenPtoG', 'permissionsForBroadcastUseCommands', 'permissionsForSingleUseCommands'],
       })
       .execute();
-    // MOCK DATA DELETE THIS GW-6972 7004 ---------------
 
-    // Find the generated relation
-    // const generatedRelation = await this.relationMockRepository.findOne({ id: response.identifiers[0].id });
-    const generatedRelationMock = await this.relationMockRepository.findOne({ id: response.identifiers[0].id });
+    const generatedRelation = await this.relationRepository.findOne({ id: response.identifiers[0].id });
 
-    return res.send({ relation: generatedRelationMock, slackBotToken: token });
+    return res.send({ relation: generatedRelation, slackBotToken: token });
   }
 
   injectGrowiUri(req: GrowiReq, growiUri: string): void {
@@ -276,7 +264,7 @@ export class GrowiToSlackCtrl {
     const tokenGtoP = tokenGtoPs[0];
 
     // retrieve relation with Installation
-    const relation = await this.relationMockRepository.createQueryBuilder('relation')
+    const relation = await this.relationRepository.createQueryBuilder('relation')
       .where('tokenGtoP = :token', { token: tokenGtoP })
       .leftJoinAndSelect('relation.installation', 'installation')
       .getOne();

+ 10 - 15
packages/slackbot-proxy/src/controllers/slack.ts

@@ -13,12 +13,10 @@ import {
   InvalidGrowiCommandError, requiredScopes, postWelcomeMessage, REQUEST_TIMEOUT_FOR_PTOG,
 } from '@growi/slack';
 
-// import { Relation } from '~/entities/relation';
-import { RelationMock } from '~/entities/relation-mock';
+import { Relation } from '~/entities/relation';
 import { SlackOauthReq } from '~/interfaces/slack-to-growi/slack-oauth-req';
 import { InstallationRepository } from '~/repositories/installation';
-// import { RelationRepository } from '~/repositories/relation';
-import { RelationMockRepository } from '~/repositories/relation-mock';
+import { RelationRepository } from '~/repositories/relation';
 import { OrderRepository } from '~/repositories/order';
 import { AddSigningSecretToReq } from '~/middlewares/slack-to-growi/add-signing-secret-to-req';
 import {
@@ -74,11 +72,8 @@ export class SlackCtrl {
   @Inject()
   installationRepository: InstallationRepository;
 
-  // @Inject()
-  // relationRepository: RelationRepository;
-
   @Inject()
-  relationMockRepository: RelationMockRepository;
+  relationRepository: RelationRepository;
 
   @Inject()
   orderRepository: OrderRepository;
@@ -102,13 +97,13 @@ export class SlackCtrl {
    * @param body
    * @returns
    */
-  private async sendCommand(growiCommand: GrowiCommand, relations: RelationMock[], body: any) {
+  private async sendCommand(growiCommand: GrowiCommand, relations: Relation[], body: any) {
     if (relations.length === 0) {
       throw new Error('relations must be set');
     }
 
     const botToken = relations[0].installation?.data.bot?.token; // relations[0] should be exist
-    const promises = relations.map((relation: RelationMock) => {
+    const promises = relations.map((relation: Relation) => {
       // generate API URL
       const url = new URL('/_api/v3/slack-integration/proxied/commands', relation.growiUri);
       return axios.post(url.toString(), {
@@ -179,7 +174,7 @@ export class SlackCtrl {
     const installationId = authorizeResult.enterpriseId || authorizeResult.teamId;
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     const installation = await this.installationRepository.findByTeamIdOrEnterpriseId(installationId!);
-    const relations = await this.relationMockRepository.createQueryBuilder('relation')
+    const relations = await this.relationRepository.createQueryBuilder('relation')
       .where('relation.installationId = :id', { id: installation?.id })
       .leftJoinAndSelect('relation.installation', 'installation')
       .getMany();
@@ -212,8 +207,8 @@ export class SlackCtrl {
 
     const baseDate = new Date();
 
-    const allowedRelationsForSingleUse:RelationMock[] = [];
-    const allowedRelationsForBroadcastUse:RelationMock[] = [];
+    const allowedRelationsForSingleUse:Relation[] = [];
+    const allowedRelationsForBroadcastUse:Relation[] = [];
     const disallowedGrowiUrls: Set<string> = new Set();
 
     // check permission
@@ -321,7 +316,7 @@ export class SlackCtrl {
     }
 
     // check permission
-    const relations = await this.relationMockRepository.createQueryBuilder('relation')
+    const relations = await this.relationRepository.createQueryBuilder('relation')
       .where('relation.installationId = :id', { id: installation?.id })
       .leftJoinAndSelect('relation.installation', 'installation')
       .getMany();
@@ -336,7 +331,7 @@ export class SlackCtrl {
     }
 
 
-    const allowedRelations:RelationMock[] = [];
+    const allowedRelations:Relation[] = [];
     const disallowedGrowiUrls: Set<string> = new Set();
     let notAllowedCommandName!:string;
     const actionId:string = payload?.actions?.[0].action_id;

+ 0 - 51
packages/slackbot-proxy/src/entities/relation-mock.ts

@@ -1,51 +0,0 @@
-import { differenceInMilliseconds } from 'date-fns';
-import {
-  Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn, ManyToOne, Index,
-} from 'typeorm';
-import { Installation } from './installation';
-
-interface PermissionSettingsInterface {
-  [commandName: string]: boolean | string[],
-}
-
-@Entity()
-@Index(['installation', 'growiUri'], { unique: true })
-export class RelationMock {
-
-  @PrimaryGeneratedColumn()
-  readonly id: number;
-
-  @CreateDateColumn()
-  readonly createdAt: Date;
-
-  @UpdateDateColumn()
-  readonly updatedAt: Date;
-
-  @ManyToOne(() => Installation)
-  readonly installation: Installation;
-
-  @Column()
-  @Index({ unique: true })
-  tokenGtoP: string;
-
-  @Column()
-  @Index()
-  tokenPtoG: string;
-
-  @Column()
-  growiUri: string;
-
-  @Column({ type: 'json' })
-  permissionsForBroadcastUseCommands: PermissionSettingsInterface;
-
-  @Column({ type: 'json' })
-  permissionsForSingleUseCommands: PermissionSettingsInterface;
-
-  @Column({ type: 'timestamp' })
-  expiredAtCommands: Date;
-
-  getDistanceInMillisecondsToExpiredAt(baseDate:Date):number {
-    return differenceInMilliseconds(this.expiredAtCommands, baseDate);
-  }
-
-}

+ 8 - 5
packages/slackbot-proxy/src/entities/relation.ts

@@ -4,6 +4,10 @@ import {
 } from 'typeorm';
 import { Installation } from './installation';
 
+interface PermissionSettingsInterface {
+  [commandName: string]: boolean | string[],
+}
+
 @Entity()
 @Index(['installation', 'growiUri'], { unique: true })
 export class Relation {
@@ -31,17 +35,16 @@ export class Relation {
   @Column()
   growiUri: string;
 
-  @Column('simple-array')
-  supportedCommandsForBroadcastUse: string[];
+  @Column({ type: 'json' })
+  permissionsForBroadcastUseCommands: PermissionSettingsInterface;
 
-  @Column('simple-array')
-  supportedCommandsForSingleUse: string[];
+  @Column({ type: 'json' })
+  permissionsForSingleUseCommands: PermissionSettingsInterface;
 
   @Column({ type: 'timestamp' })
   expiredAtCommands: Date;
 
   getDistanceInMillisecondsToExpiredAt(baseDate:Date):number {
-    // differenceInMilliseconds uses Date.prototype.getTime() internally
     return differenceInMilliseconds(this.expiredAtCommands, baseDate);
   }
 

+ 0 - 10
packages/slackbot-proxy/src/repositories/relation-mock.ts

@@ -1,10 +0,0 @@
-import {
-  Repository, EntityRepository,
-} from 'typeorm';
-
-import { RelationMock } from '~/entities/relation-mock';
-
-@EntityRepository(RelationMock)
-export class RelationMockRepository extends Repository<RelationMock> {
-
-}

+ 10 - 20
packages/slackbot-proxy/src/services/RelationsService.ts

@@ -3,11 +3,9 @@ import { Inject, Service } from '@tsed/di';
 import axios from 'axios';
 import { addHours } from 'date-fns';
 
-// import { Relation } from '~/entities/relation';
 import { REQUEST_TIMEOUT_FOR_PTOG } from '@growi/slack';
-import { RelationMock } from '~/entities/relation-mock';
-// import { RelationRepository } from '~/repositories/relation';
-import { RelationMockRepository } from '~/repositories/relation-mock';
+import { Relation } from '~/entities/relation';
+import { RelationRepository } from '~/repositories/relation';
 
 import loggerFactory from '~/utils/logger';
 
@@ -17,11 +15,10 @@ const logger = loggerFactory('slackbot-proxy:services:RelationsService');
 export class RelationsService {
 
   @Inject()
-  // relationRepository: RelationRepository;
 
-  relationMockRepository: RelationMockRepository;
+  relationRepository: RelationRepository;
 
-  async getSupportedGrowiCommands(relation:RelationMock):Promise<any> {
+  async getSupportedGrowiCommands(relation:Relation):Promise<any> {
     // generate API URL
     const url = new URL('/_api/v3/slack-integration/supported-commands', relation.growiUri);
     return axios.get(url.toString(), {
@@ -32,26 +29,19 @@ export class RelationsService {
     });
   }
 
-  async syncSupportedGrowiCommands(relation:RelationMock): Promise<RelationMock> {
+  async syncSupportedGrowiCommands(relation:Relation): Promise<Relation> {
     const res = await this.getSupportedGrowiCommands(relation);
-
-    // MOCK DATA MODIFY THIS GW-6972 ---------------
-    /**
-     * this code represents the update of cache (Relation schema) using request from GROWI
-     */
     const { permissionsForBroadcastUseCommands, permissionsForSingleUseCommands } = res.data.data;
     if (relation !== null) {
       relation.permissionsForBroadcastUseCommands = permissionsForBroadcastUseCommands;
       relation.permissionsForSingleUseCommands = permissionsForSingleUseCommands;
       relation.expiredAtCommands = addHours(new Date(), 48);
-      return this.relationMockRepository.save(relation);
+      return this.RelationRepository.save(relation);
     }
     throw Error('No relation exists.');
-    // MOCK DATA MODIFY THIS GW-6972 ---------------
   }
 
-  // MODIFY THIS METHOD USING ORIGINAL RELATION MODEL GW-6972
-  async syncRelation(relation:RelationMock, baseDate:Date):Promise<RelationMock|null> {
+  async syncRelation(relation:Relation, baseDate:Date):Promise<Relation|null> {
     if (relation == null) return null;
 
     const distanceMillisecondsToExpiredAt = relation.getDistanceInMillisecondsToExpiredAt(baseDate);
@@ -79,7 +69,7 @@ export class RelationsService {
     return relation;
   }
 
-  async isPermissionsForSingleUseCommands(relation:RelationMock, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
+  async isPermissionsForSingleUseCommands(relation:Relation, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
     const syncedRelation = await this.syncRelation(relation, baseDate);
     if (syncedRelation == null) {
       return false;
@@ -98,7 +88,7 @@ export class RelationsService {
     return permission;
   }
 
-  async isPermissionsUseBroadcastCommands(relation:RelationMock, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
+  async isPermissionsUseBroadcastCommands(relation:Relation, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
     const syncedRelation = await this.syncRelation(relation, baseDate);
     if (syncedRelation == null) {
       return false;
@@ -120,7 +110,7 @@ export class RelationsService {
 
   async checkPermissionForInteractions(
       // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
-      relation:RelationMock, channelName:string, callbackId:string, actionId:string,
+      relation:Relation, channelName:string, callbackId:string, actionId:string,
   ):Promise<{isPermittedForInteractions:boolean, commandName:string}> {
 
     let isPermittedForInteractions!:boolean;

+ 5 - 10
packages/slackbot-proxy/src/services/SelectGrowiService.ts

@@ -5,14 +5,12 @@ import { AuthorizeResult } from '@slack/oauth';
 
 import { GrowiCommandProcessor } from '~/interfaces/slack-to-growi/growi-command-processor';
 import { Installation } from '~/entities/installation';
-// import { Relation } from '~/entities/relation';
-import { RelationMock } from '~/entities/relation-mock';
-// import { RelationRepository } from '~/repositories/relation';
-import { RelationMockRepository } from '~/repositories/relation-mock';
+import { Relation } from '~/entities/relation';
+import { RelationRepository } from '~/repositories/relation';
 
 
 export type SelectedGrowiInformation = {
-  relation: RelationMock,
+  relation: Relation,
   growiCommand: GrowiCommand,
   sendCommandBody: any,
 }
@@ -20,11 +18,8 @@ export type SelectedGrowiInformation = {
 @Service()
 export class SelectGrowiService implements GrowiCommandProcessor {
 
-  // @Inject()
-  // relationRepository: RelationRepository;
-
   @Inject()
-  relationMockRepository: RelationMockRepository;
+  relationRepository: RelationRepository;
 
   // eslint-disable-next-line max-len
   async process(growiCommand: GrowiCommand | string, authorizeResult: AuthorizeResult, body: {[key:string]:string } & {growiUrisForSingleUse:string[]}): Promise<void> {
@@ -99,7 +94,7 @@ export class SelectGrowiService implements GrowiCommandProcessor {
     // ovverride trigger_id
     sendCommandBody.trigger_id = triggerId;
 
-    const relation = await this.relationMockRepository.createQueryBuilder('relation')
+    const relation = await this.relationRepository.createQueryBuilder('relation')
       .where('relation.growiUri =:growiUri', { growiUri })
       .andWhere('relation.installationId = :id', { id: installation?.id })
       .leftJoinAndSelect('relation.installation', 'installation')