@things-factory/board-service 6.2.40 → 6.2.42

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.
Files changed (32) hide show
  1. package/dist-server/service/board/board-query.js +53 -2
  2. package/dist-server/service/board/board-query.js.map +1 -1
  3. package/dist-server/service/index.js +2 -10
  4. package/dist-server/service/index.js.map +1 -1
  5. package/dist-server/service/permission/board-permission-subscriber.js +14 -39
  6. package/dist-server/service/permission/board-permission-subscriber.js.map +1 -1
  7. package/dist-server/service/permission/domain-permission-subscriber.js +5 -35
  8. package/dist-server/service/permission/domain-permission-subscriber.js.map +1 -1
  9. package/dist-server/tsconfig.tsbuildinfo +1 -1
  10. package/package.json +7 -7
  11. package/server/service/board/board-query.ts +58 -2
  12. package/server/service/index.ts +2 -10
  13. package/server/service/permission/board-permission-subscriber.ts +18 -48
  14. package/server/service/permission/domain-permission-subscriber.ts +7 -40
  15. package/dist-server/service/board-secret/board-resolver.js +0 -156
  16. package/dist-server/service/board-secret/board-resolver.js.map +0 -1
  17. package/dist-server/service/board-secret/board-secret.js +0 -55
  18. package/dist-server/service/board-secret/board-secret.js.map +0 -1
  19. package/dist-server/service/board-secret/index.js +0 -8
  20. package/dist-server/service/board-secret/index.js.map +0 -1
  21. package/dist-server/service/domain-secret/domain-resolver.js +0 -46
  22. package/dist-server/service/domain-secret/domain-resolver.js.map +0 -1
  23. package/dist-server/service/domain-secret/domain-secret.js +0 -49
  24. package/dist-server/service/domain-secret/domain-secret.js.map +0 -1
  25. package/dist-server/service/domain-secret/index.js +0 -8
  26. package/dist-server/service/domain-secret/index.js.map +0 -1
  27. package/server/service/board-secret/board-resolver.ts +0 -148
  28. package/server/service/board-secret/board-secret.ts +0 -38
  29. package/server/service/board-secret/index.ts +0 -5
  30. package/server/service/domain-secret/domain-resolver.ts +0 -46
  31. package/server/service/domain-secret/domain-secret.ts +0 -34
  32. package/server/service/domain-secret/index.ts +0 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/board-service",
3
- "version": "6.2.40",
3
+ "version": "6.2.42",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -24,12 +24,12 @@
24
24
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
25
25
  },
26
26
  "dependencies": {
27
- "@things-factory/auth-base": "^6.2.38",
27
+ "@things-factory/auth-base": "^6.2.42",
28
28
  "@things-factory/env": "^6.2.33",
29
- "@things-factory/fav-base": "^6.2.38",
30
- "@things-factory/font-base": "^6.2.38",
31
- "@things-factory/integration-base": "^6.2.40",
32
- "@things-factory/operato-license-checker": "^3.1.0",
29
+ "@things-factory/fav-base": "^6.2.42",
30
+ "@things-factory/font-base": "^6.2.42",
31
+ "@things-factory/integration-base": "^6.2.42",
32
+ "@things-factory/operato-license-checker": "^4.0.4",
33
33
  "content-disposition": "^0.5.3",
34
34
  "generic-pool": "^3.8.2"
35
35
  },
@@ -37,5 +37,5 @@
37
37
  "@thiagoelg/node-printer": "0.6.2",
38
38
  "puppeteer": "^20.7.3"
39
39
  },
40
- "gitHead": "fd7decc71972d25ef12ad0f44ab19eb66c6d289b"
40
+ "gitHead": "cc76b5c3dea6a88d4381e914eeaaff9e102e672d"
41
41
  }
@@ -3,6 +3,7 @@ import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root, Directive } from
3
3
 
4
4
  import { User } from '@things-factory/auth-base'
5
5
  import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
6
+ import { checkTarget, checkDomain, getPermission } from '@things-factory/operato-license-checker'
6
7
 
7
8
  import { Group } from '../group/group'
8
9
  import { PlayGroup } from '../play-group/play-group'
@@ -10,16 +11,71 @@ import { Board } from './board'
10
11
  import { BoardList } from './board-type'
11
12
  import { BoardHistory } from './board-history'
12
13
 
14
+ import { LicenseError } from '../../errors/license-error'
13
15
  @Resolver(Board)
14
16
  export class BoardQuery {
15
- @Query(returns => Board, { description: 'To fetch a Board' })
17
+ @Query(returns => [String], { description: 'Board Usage Permissions' })
18
+ async boardPermissions(@Ctx() context: ResolverContext): Promise<string[]> {
19
+ const { user, domain } = context.state
20
+
21
+ const licensedPermissions = (getPermission('Permissions For Board Usage') || 'Modeller, Viewer')
22
+ .split(',')
23
+ .map(p => p.trim())
24
+
25
+ var permissions = []
26
+
27
+ licensedPermissions.includes('Modeller') &&
28
+ (await User.hasPrivilege('mutation', 'board', domain, user)) &&
29
+ permissions.push('Modeller')
30
+
31
+ licensedPermissions.includes('Viewer') &&
32
+ (await User.hasPrivilege('query', 'board', domain, user)) &&
33
+ permissions.push('Viewer')
34
+
35
+ return permissions
36
+ }
37
+
16
38
  @Directive('@privilege(category: "board", privilege: "query", domainOwnerGranted: true)')
39
+ @Query(returns => Board, { description: 'To fetch a board' })
17
40
  async board(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Board> {
18
41
  const { domain } = context.state
19
42
 
20
- return await getRepository(Board).findOne({
43
+ var board = await getRepository(Board).findOne({
21
44
  where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id }
22
45
  })
46
+
47
+ if (domain) {
48
+ // 1. check domainSecret is over limit quantity or not
49
+ var count = await getRepository(Domain)
50
+ .manager.createQueryBuilder()
51
+ .select('id')
52
+ .from(Domain, 'domain')
53
+ .getCount()
54
+
55
+ if (!checkDomain(count)) {
56
+ throw new LicenseError({
57
+ errorCode: context.t(LicenseError.ERROR_CODES.OVER_LIMIT)
58
+ })
59
+ }
60
+ }
61
+
62
+ if (board) {
63
+ // 1. check boardSecret is over limit quantity or not
64
+ var count = await getRepository(Board)
65
+ .manager.createQueryBuilder()
66
+ .select('id')
67
+ .from(Board, 'board')
68
+ .where('"domain_id" = :domainId', { domainId: domain.id })
69
+ .getCount()
70
+
71
+ if (!checkTarget(count)) {
72
+ throw new LicenseError({
73
+ errorCode: context.t(LicenseError.ERROR_CODES.OVER_LIMIT)
74
+ })
75
+ }
76
+ }
77
+
78
+ return board
23
79
  }
24
80
 
25
81
  @Query(returns => Board, { nullable: true, description: 'To fetch a Board Model by name' })
@@ -4,8 +4,6 @@ export * from './theme/theme'
4
4
  export * from './board/board'
5
5
  export * from './group/group'
6
6
  export * from './play-group/play-group'
7
- export * from './board-secret/board-secret'
8
- export * from './domain-secret/domain-secret'
9
7
 
10
8
  /* IMPORT ENTITIES AND RESOLVERS */
11
9
  import {
@@ -22,9 +20,7 @@ import {
22
20
  subscribers as PlayGroupSubscribers
23
21
  } from './play-group'
24
22
  import { resolvers as IntegrationAnalysisQuery } from './analysis'
25
- import { entities as BoardSecretEntities, resolvers as BoardSecretResolvers } from './board-secret'
26
23
  import { entities as BoardFavoriteEntities, resolvers as BoardFavoriteResolvers } from './board-favorite'
27
- import { entities as DomainSecretEntities, resolvers as DomainSecretResolvers } from './domain-secret'
28
24
  import { subscribers as PermissionSubscriber } from './permission'
29
25
 
30
26
  export const entities = [
@@ -34,9 +30,7 @@ export const entities = [
34
30
  ...BoardEntities,
35
31
  ...GroupEntities,
36
32
  ...PlayGroupEntities,
37
- ...BoardSecretEntities,
38
- ...BoardFavoriteEntities,
39
- ...DomainSecretEntities
33
+ ...BoardFavoriteEntities
40
34
  ]
41
35
 
42
36
  export const subscribers = [
@@ -57,8 +51,6 @@ export const schema = {
57
51
  ...GroupResolvers,
58
52
  ...PlayGroupResolvers,
59
53
  ...IntegrationAnalysisQuery,
60
- ...BoardSecretResolvers,
61
- ...BoardFavoriteResolvers,
62
- ...DomainSecretResolvers
54
+ ...BoardFavoriteResolvers
63
55
  ]
64
56
  }
@@ -1,13 +1,10 @@
1
- import { EntitySubscriberInterface, EventSubscriber, InsertEvent, RemoveEvent } from 'typeorm'
1
+ import { EntitySubscriberInterface, EventSubscriber, InsertEvent } from 'typeorm'
2
2
 
3
- import { checkTarget, doSomething, getValidity } from '@things-factory/operato-license-checker'
3
+ import { checkTarget } from '@things-factory/operato-license-checker'
4
4
 
5
5
  import { Board } from '../board/board'
6
- import { BoardSecret } from '../board-secret/board-secret'
7
6
  import { LicenseError } from '../../errors/license-error'
8
7
 
9
- const crypto = require('crypto')
10
-
11
8
  @EventSubscriber()
12
9
  export class BoardPermissionSubscriber implements EntitySubscriberInterface<Board> {
13
10
  listenTo() {
@@ -18,49 +15,22 @@ export class BoardPermissionSubscriber implements EntitySubscriberInterface<Boar
18
15
  */
19
16
  async afterInsert(event: InsertEvent<Board>) {
20
17
  var entityManager = event.manager
21
- if (getValidity()) {
22
- //target
23
- //1. check board count is over licensed quantity or not
24
- var board: Board = event.entity
25
- var domain: any = event.entity.domain
26
- var count =
27
- (await entityManager
28
- .createQueryBuilder()
29
- .select('board')
30
- .from(BoardSecret, 'secret')
31
- .where('"domain_id" = :domainId', { domainId: domain.id })
32
- .getCount()) + 1
33
-
34
- //2. create new token to board and save board-secret
35
- if (checkTarget(count)) {
36
- var board: Board = event.entity
37
- var boardSecret: BoardSecret = new BoardSecret()
38
- boardSecret.id = crypto.randomUUID()
39
- boardSecret.targetId = board.id
40
- boardSecret.targetType = 'board'
41
- boardSecret.domain = board.domain
42
-
43
- var hash = doSomething({ secId: boardSecret.id, id: board.id })
44
- boardSecret.secret = hash
45
-
46
- await entityManager.save(boardSecret)
47
- } else {
48
- throw new LicenseError({
49
- errorCode: LicenseError.ERROR_CODES.OVER_LIMIT
50
- })
51
- }
18
+ //target
19
+ //1. check board count is over licensed quantity or not
20
+ var domain: any = event.entity.domain
21
+ var count =
22
+ (await entityManager
23
+ .createQueryBuilder()
24
+ .select('board')
25
+ .from(Board, 'board')
26
+ .where('"domain_id" = :domainId', { domainId: domain.id })
27
+ .getCount()) + 1
28
+
29
+ //2. create new token to board and save board-secret
30
+ if (!checkTarget(count)) {
31
+ throw new LicenseError({
32
+ errorCode: LicenseError.ERROR_CODES.OVER_LIMIT
33
+ })
52
34
  }
53
35
  }
54
-
55
- /**
56
- * Called after entity is removed.
57
- */
58
- async afterRemove(event: RemoveEvent<Board>) {
59
- var entityManager = event.manager
60
- await entityManager.query(
61
- `delete
62
- from "board_secrets"
63
- where "target_id" not in (select "id" from "boards")`
64
- )
65
- }
66
36
  }
@@ -1,10 +1,8 @@
1
- import { EntitySubscriberInterface, EventSubscriber, InsertEvent, RemoveEvent } from 'typeorm'
2
- import { v4 as uuidv4 } from 'uuid'
1
+ import { EntitySubscriberInterface, EventSubscriber, InsertEvent } from 'typeorm'
3
2
 
4
- import { checkDomain, doSomething, getValidity } from '@things-factory/operato-license-checker'
3
+ import { checkDomain } from '@things-factory/operato-license-checker'
5
4
  import { Domain } from '@things-factory/shell'
6
5
 
7
- import { DomainSecret } from '../domain-secret/domain-secret'
8
6
  import { LicenseError } from '../../errors/license-error'
9
7
 
10
8
  @EventSubscriber()
@@ -18,43 +16,12 @@ export class DomainPermissionSubscriber implements EntitySubscriberInterface<Dom
18
16
  async afterInsert(event: InsertEvent<Domain>) {
19
17
  var entityManager = event.manager
20
18
 
21
- if (getValidity()) {
22
- //1. check domain count is over licensed quantity or not
23
- var domain: Domain = event.entity
24
- var count =
25
- (await entityManager
26
- .createQueryBuilder()
27
- .select('domain')
28
- .from(DomainSecret, 'secret')
29
- .where('"domain_id" = :domainId', { domainId: domain.id })
30
- .getCount()) + 1
19
+ var count = (await entityManager.createQueryBuilder().select('id').from(Domain, 'domain').getCount()) + 1
31
20
 
32
- //2. create new token to domain and save domain-secret
33
- if (checkDomain(count)) {
34
- var domain: Domain = event.entity
35
- var domainSecret: DomainSecret = new DomainSecret()
36
- domainSecret.id = uuidv4()
37
- domainSecret.domain = domain
38
- var hash = doSomething({ secId: domainSecret.id, id: domain.id })
39
- domainSecret.secret = hash
40
-
41
- await entityManager.save(domainSecret)
42
- } else {
43
- throw new LicenseError({
44
- errorCode: LicenseError.ERROR_CODES.VERIFICATION_ERROR
45
- })
46
- }
21
+ if (!checkDomain(count)) {
22
+ throw new LicenseError({
23
+ errorCode: LicenseError.ERROR_CODES.VERIFICATION_ERROR
24
+ })
47
25
  }
48
26
  }
49
- /**
50
- * Called after entity is removed.
51
- */
52
- async afterRemove(event: RemoveEvent<Domain>) {
53
- var entityManager = event.manager
54
- await entityManager.query(
55
- `delete
56
- from "domain_secrets"
57
- where "domain_id" not in (select "id" from "domains")`
58
- )
59
- }
60
27
  }
@@ -1,156 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BoardResolver = void 0;
4
- const tslib_1 = require("tslib");
5
- const typeorm_1 = require("typeorm");
6
- const type_graphql_1 = require("type-graphql");
7
- const operato_license_checker_1 = require("@things-factory/operato-license-checker");
8
- const shell_1 = require("@things-factory/shell");
9
- const auth_base_1 = require("@things-factory/auth-base");
10
- const license_error_1 = require("../../errors/license-error");
11
- const board_1 = require("../board/board");
12
- const domain_secret_1 = require("../domain-secret/domain-secret");
13
- const board_secret_1 = require("./board-secret");
14
- const crypto = require('crypto');
15
- let BoardResolver = class BoardResolver {
16
- async boardPermissions(context) {
17
- const { user, domain } = context.state;
18
- const licensedPermissions = ((0, operato_license_checker_1.getPermission)('Permissions For Board Usage') || 'Modeller, Viewer')
19
- .split(',')
20
- .map(p => p.trim());
21
- var permissions = [];
22
- licensedPermissions.includes('Modeller') &&
23
- (await auth_base_1.User.hasPrivilege('mutation', 'board', domain, user)) &&
24
- permissions.push('Modeller');
25
- licensedPermissions.includes('Viewer') &&
26
- (await auth_base_1.User.hasPrivilege('query', 'board', domain, user)) &&
27
- permissions.push('Viewer');
28
- return permissions;
29
- }
30
- async board(id, context) {
31
- const { domain } = context.state;
32
- var board = await (0, shell_1.getRepository)(board_1.Board).findOne({
33
- where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, id }
34
- });
35
- if (domain) {
36
- // 1. check domainSecret is over limit quantity or not
37
- var count = (await (0, shell_1.getRepository)(domain_secret_1.DomainSecret)
38
- .manager.createQueryBuilder()
39
- .select('board')
40
- .from(domain_secret_1.DomainSecret, 'secret')
41
- .where('"id" = :domainId', { domainId: domain.id })
42
- .getCount()) + 1;
43
- if (!(0, operato_license_checker_1.checkTarget)(count)) {
44
- throw new license_error_1.LicenseError({
45
- errorCode: context.t(license_error_1.LicenseError.ERROR_CODES.OVER_LIMIT)
46
- });
47
- }
48
- else {
49
- var domainSecret = await (0, shell_1.getRepository)(domain_secret_1.DomainSecret).findOne({
50
- where: { domain: { id: domain.id } }
51
- });
52
- // 2. if there's no domainSecret then create it
53
- if (!domainSecret) {
54
- var domainSecret = new domain_secret_1.DomainSecret();
55
- domainSecret.id = crypto.randomUUID();
56
- domainSecret.domain = domain;
57
- var hash = (0, operato_license_checker_1.doSomething)({ secId: domainSecret.id, id: domain.id });
58
- domainSecret.secret = hash;
59
- await (0, shell_1.getRepository)(domain_secret_1.DomainSecret).save(domainSecret);
60
- // 3. if there's domainSecret then check it
61
- }
62
- else {
63
- var domainRepo = (0, shell_1.getRepository)(domain_secret_1.DomainSecret);
64
- var domainSecret = await domainRepo.findOne({
65
- where: { domain: { id: domain.id } }
66
- });
67
- if (domainSecret) {
68
- var hash = (0, operato_license_checker_1.doSomething)({ secId: domainSecret.id, id: domain.id });
69
- if (domainSecret.secret !== hash) {
70
- throw new license_error_1.LicenseError({
71
- errorCode: context.t(license_error_1.LicenseError.ERROR_CODES.VERIFICATION_ERROR)
72
- });
73
- }
74
- }
75
- else {
76
- throw new license_error_1.LicenseError({
77
- errorCode: context.t(license_error_1.LicenseError.ERROR_CODES.VERIFICATION_ERROR)
78
- });
79
- }
80
- }
81
- }
82
- }
83
- if (board) {
84
- // 1. check boardSecret is over limit quantity or not
85
- var count = (await (0, shell_1.getRepository)(board_secret_1.BoardSecret)
86
- .manager.createQueryBuilder()
87
- .select('board')
88
- .from(board_secret_1.BoardSecret, 'secret')
89
- .where('"domain_id" = :domainId', { domainId: domain.id })
90
- .getCount()) + 1;
91
- if (!(0, operato_license_checker_1.checkTarget)(count)) {
92
- throw new license_error_1.LicenseError({
93
- errorCode: context.t(license_error_1.LicenseError.ERROR_CODES.OVER_LIMIT)
94
- });
95
- }
96
- else {
97
- var boardSecret = await (0, shell_1.getRepository)(board_secret_1.BoardSecret).findOne({
98
- where: { targetId: id }
99
- });
100
- // 2. if there's no boardSecret then create it
101
- if (!boardSecret) {
102
- var boardSecret = new board_secret_1.BoardSecret();
103
- boardSecret.id = crypto.randomUUID();
104
- boardSecret.targetId = id;
105
- boardSecret.targetType = 'board';
106
- boardSecret.domain = domain;
107
- var hash = (0, operato_license_checker_1.doSomething)({ secId: boardSecret.id, id: id });
108
- boardSecret.secret = hash;
109
- await (0, shell_1.getRepository)(board_secret_1.BoardSecret).save(boardSecret);
110
- // 3. if there's boardSecret then check it
111
- }
112
- else {
113
- var repogitory = (0, shell_1.getRepository)(board_secret_1.BoardSecret);
114
- var boardSecret = await repogitory.findOne({
115
- where: { targetId: id }
116
- });
117
- if (boardSecret) {
118
- var hash = (0, operato_license_checker_1.doSomething)({ secId: boardSecret.id, id: id });
119
- if (boardSecret.secret !== hash) {
120
- throw new license_error_1.LicenseError({
121
- errorCode: context.t(license_error_1.LicenseError.ERROR_CODES.VERIFICATION_ERROR)
122
- });
123
- }
124
- }
125
- else {
126
- throw new license_error_1.LicenseError({
127
- errorCode: context.t(license_error_1.LicenseError.ERROR_CODES.VERIFICATION_ERROR)
128
- });
129
- }
130
- }
131
- }
132
- }
133
- return board;
134
- }
135
- };
136
- tslib_1.__decorate([
137
- (0, type_graphql_1.Query)(returns => [String], { description: 'Board Usage Permissions' }),
138
- tslib_1.__param(0, (0, type_graphql_1.Ctx)()),
139
- tslib_1.__metadata("design:type", Function),
140
- tslib_1.__metadata("design:paramtypes", [Object]),
141
- tslib_1.__metadata("design:returntype", Promise)
142
- ], BoardResolver.prototype, "boardPermissions", null);
143
- tslib_1.__decorate([
144
- (0, type_graphql_1.Directive)('@privilege(category: "board", privilege: "query", domainOwnerGranted: true)'),
145
- (0, type_graphql_1.Query)(returns => board_1.Board, { description: 'To fetch a board' }),
146
- tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
147
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
148
- tslib_1.__metadata("design:type", Function),
149
- tslib_1.__metadata("design:paramtypes", [String, Object]),
150
- tslib_1.__metadata("design:returntype", Promise)
151
- ], BoardResolver.prototype, "board", null);
152
- BoardResolver = tslib_1.__decorate([
153
- (0, type_graphql_1.Resolver)(board_1.Board)
154
- ], BoardResolver);
155
- exports.BoardResolver = BoardResolver;
156
- //# sourceMappingURL=board-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"board-resolver.js","sourceRoot":"","sources":["../../../server/service/board-secret/board-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\nimport { Arg, Ctx, Directive, Query, Resolver } from 'type-graphql'\n\nimport { checkTarget, doSomething, getPermission } from '@things-factory/operato-license-checker'\nimport { getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\nimport { LicenseError } from '../../errors/license-error'\nimport { Board } from '../board/board'\nimport { DomainSecret } from '../domain-secret/domain-secret'\nimport { BoardSecret } from './board-secret'\n\nconst crypto = require('crypto')\n\n@Resolver(Board)\nexport class BoardResolver {\n @Query(returns => [String], { description: 'Board Usage Permissions' })\n async boardPermissions(@Ctx() context: ResolverContext): Promise<string[]> {\n const { user, domain } = context.state\n\n const licensedPermissions = (getPermission('Permissions For Board Usage') || 'Modeller, Viewer')\n .split(',')\n .map(p => p.trim())\n\n var permissions = []\n\n licensedPermissions.includes('Modeller') &&\n (await User.hasPrivilege('mutation', 'board', domain, user)) &&\n permissions.push('Modeller')\n\n licensedPermissions.includes('Viewer') &&\n (await User.hasPrivilege('query', 'board', domain, user)) &&\n permissions.push('Viewer')\n\n return permissions\n }\n\n @Directive('@privilege(category: \"board\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Board, { description: 'To fetch a board' })\n async board(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Board> {\n const { domain } = context.state\n\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id }\n })\n if (domain) {\n // 1. check domainSecret is over limit quantity or not\n var count =\n (await getRepository(DomainSecret)\n .manager.createQueryBuilder()\n .select('board')\n .from(DomainSecret, 'secret')\n .where('\"id\" = :domainId', { domainId: domain.id })\n .getCount()) + 1\n\n if (!checkTarget(count)) {\n throw new LicenseError({\n errorCode: context.t(LicenseError.ERROR_CODES.OVER_LIMIT)\n })\n } else {\n var domainSecret: DomainSecret = await getRepository(DomainSecret).findOne({\n where: { domain: { id: domain.id } }\n })\n // 2. if there's no domainSecret then create it\n if (!domainSecret) {\n var domainSecret: DomainSecret = new DomainSecret()\n domainSecret.id = crypto.randomUUID()\n domainSecret.domain = domain\n var hash = doSomething({ secId: domainSecret.id, id: domain.id })\n domainSecret.secret = hash\n\n await getRepository(DomainSecret).save(domainSecret)\n // 3. if there's domainSecret then check it\n } else {\n var domainRepo = getRepository(DomainSecret)\n var domainSecret: DomainSecret = await domainRepo.findOne({\n where: { domain: { id: domain.id } }\n })\n if (domainSecret) {\n var hash = doSomething({ secId: domainSecret.id, id: domain.id })\n if (domainSecret.secret !== hash) {\n throw new LicenseError({\n errorCode: context.t(LicenseError.ERROR_CODES.VERIFICATION_ERROR)\n })\n }\n } else {\n throw new LicenseError({\n errorCode: context.t(LicenseError.ERROR_CODES.VERIFICATION_ERROR)\n })\n }\n }\n }\n }\n if (board) {\n // 1. check boardSecret is over limit quantity or not\n var count =\n (await getRepository(BoardSecret)\n .manager.createQueryBuilder()\n .select('board')\n .from(BoardSecret, 'secret')\n .where('\"domain_id\" = :domainId', { domainId: domain.id })\n .getCount()) + 1\n\n if (!checkTarget(count)) {\n throw new LicenseError({\n errorCode: context.t(LicenseError.ERROR_CODES.OVER_LIMIT)\n })\n } else {\n var boardSecret: BoardSecret = await getRepository(BoardSecret).findOne({\n where: { targetId: id }\n })\n // 2. if there's no boardSecret then create it\n if (!boardSecret) {\n var boardSecret: BoardSecret = new BoardSecret()\n boardSecret.id = crypto.randomUUID()\n boardSecret.targetId = id\n boardSecret.targetType = 'board'\n boardSecret.domain = domain\n\n var hash = doSomething({ secId: boardSecret.id, id: id })\n boardSecret.secret = hash\n\n await getRepository(BoardSecret).save(boardSecret)\n // 3. if there's boardSecret then check it\n } else {\n var repogitory = getRepository(BoardSecret)\n var boardSecret: BoardSecret = await repogitory.findOne({\n where: { targetId: id }\n })\n if (boardSecret) {\n var hash = doSomething({ secId: boardSecret.id, id: id })\n if (boardSecret.secret !== hash) {\n throw new LicenseError({\n errorCode: context.t(LicenseError.ERROR_CODES.VERIFICATION_ERROR)\n })\n }\n } else {\n throw new LicenseError({\n errorCode: context.t(LicenseError.ERROR_CODES.VERIFICATION_ERROR)\n })\n }\n }\n }\n }\n\n return board\n }\n}\n"]}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BoardSecret = void 0;
4
- const tslib_1 = require("tslib");
5
- const typeorm_1 = require("typeorm");
6
- const shell_1 = require("@things-factory/shell");
7
- const auth_base_1 = require("@things-factory/auth-base");
8
- let BoardSecret = class BoardSecret {
9
- };
10
- tslib_1.__decorate([
11
- (0, typeorm_1.PrimaryColumn)('uuid'),
12
- tslib_1.__metadata("design:type", String)
13
- ], BoardSecret.prototype, "id", void 0);
14
- tslib_1.__decorate([
15
- (0, typeorm_1.ManyToOne)(type => shell_1.Domain),
16
- tslib_1.__metadata("design:type", shell_1.Domain)
17
- ], BoardSecret.prototype, "domain", void 0);
18
- tslib_1.__decorate([
19
- (0, typeorm_1.Column)(),
20
- tslib_1.__metadata("design:type", String)
21
- ], BoardSecret.prototype, "secret", void 0);
22
- tslib_1.__decorate([
23
- (0, typeorm_1.Column)(),
24
- tslib_1.__metadata("design:type", String)
25
- ], BoardSecret.prototype, "targetType", void 0);
26
- tslib_1.__decorate([
27
- (0, typeorm_1.Column)('uuid'),
28
- tslib_1.__metadata("design:type", String)
29
- ], BoardSecret.prototype, "targetId", void 0);
30
- tslib_1.__decorate([
31
- (0, typeorm_1.CreateDateColumn)(),
32
- tslib_1.__metadata("design:type", Date)
33
- ], BoardSecret.prototype, "createdAt", void 0);
34
- tslib_1.__decorate([
35
- (0, typeorm_1.UpdateDateColumn)(),
36
- tslib_1.__metadata("design:type", Date)
37
- ], BoardSecret.prototype, "updatedAt", void 0);
38
- tslib_1.__decorate([
39
- (0, typeorm_1.ManyToOne)(type => auth_base_1.User, {
40
- nullable: true
41
- }),
42
- tslib_1.__metadata("design:type", auth_base_1.User)
43
- ], BoardSecret.prototype, "creator", void 0);
44
- tslib_1.__decorate([
45
- (0, typeorm_1.ManyToOne)(type => auth_base_1.User, {
46
- nullable: true
47
- }),
48
- tslib_1.__metadata("design:type", auth_base_1.User)
49
- ], BoardSecret.prototype, "updater", void 0);
50
- BoardSecret = tslib_1.__decorate([
51
- (0, typeorm_1.Entity)(),
52
- (0, typeorm_1.Index)('ix_board_secret_0', (boardSecret) => [boardSecret.domain, boardSecret.secret], { unique: true })
53
- ], BoardSecret);
54
- exports.BoardSecret = BoardSecret;
55
- //# sourceMappingURL=board-secret.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"board-secret.js","sourceRoot":"","sources":["../../../server/service/board-secret/board-secret.ts"],"names":[],"mappings":";;;;AAAA,qCAAwH;AACxH,iDAA8C;AAC9C,yDAAgD;AAIzC,IAAM,WAAW,GAAjB,MAAM,WAAW;CA+BvB,CAAA;AA9BC;IAAC,IAAA,uBAAa,EAAC,MAAM,CAAC;;uCACZ;AAEV;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;sCAClB,cAAM;2CAAA;AAEd;IAAC,IAAA,gBAAM,GAAE;;2CACK;AAEd;IAAC,IAAA,gBAAM,GAAE;;+CACS;AAElB;IAAC,IAAA,gBAAM,EAAC,MAAM,CAAC;;6CACC;AAEhB;IAAC,IAAA,0BAAgB,GAAE;sCACR,IAAI;8CAAA;AAEf;IAAC,IAAA,0BAAgB,GAAE;sCACR,IAAI;8CAAA;AAEf;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;sCACO,gBAAI;4CAAA;AAEb;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;sCACO,gBAAI;4CAAA;AA9BF,WAAW;IAFvB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,mBAAmB,EAAE,CAAC,WAAwB,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;GACxG,WAAW,CA+BvB;AA/BY,kCAAW","sourcesContent":["import { CreateDateColumn, UpdateDateColumn, Entity, Index, Column, OneToMany, ManyToOne, PrimaryColumn } from 'typeorm'\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\n@Entity()\n@Index('ix_board_secret_0', (boardSecret: BoardSecret) => [boardSecret.domain, boardSecret.secret], { unique: true })\nexport class BoardSecret {\n @PrimaryColumn('uuid')\n id: string\n\n @ManyToOne(type => Domain)\n domain: Domain\n\n @Column()\n secret: string\n\n @Column()\n targetType: string\n\n @Column('uuid')\n targetId: string\n\n @CreateDateColumn()\n createdAt: Date\n \n @UpdateDateColumn()\n updatedAt: Date\n \n @ManyToOne(type => User, {\n nullable: true\n })\n creator: User\n \n @ManyToOne(type => User, {\n nullable: true\n })\n updater: User \n}\n"]}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvers = exports.entities = void 0;
4
- const board_secret_1 = require("./board-secret");
5
- const board_resolver_1 = require("./board-resolver");
6
- exports.entities = [board_secret_1.BoardSecret];
7
- exports.resolvers = [board_resolver_1.BoardResolver];
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/board-secret/index.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAC5C,qDAAgD;AAEnC,QAAA,QAAQ,GAAG,CAAC,0BAAW,CAAC,CAAA;AACxB,QAAA,SAAS,GAAG,CAAC,8BAAa,CAAC,CAAA","sourcesContent":["import { BoardSecret } from './board-secret'\nimport { BoardResolver } from './board-resolver'\n\nexport const entities = [BoardSecret]\nexport const resolvers = [BoardResolver]\n"]}
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DomainResolver = void 0;
4
- const tslib_1 = require("tslib");
5
- const type_graphql_1 = require("type-graphql");
6
- const shell_1 = require("@things-factory/shell");
7
- const utils_1 = require("@things-factory/utils");
8
- let DomainResolver = class DomainResolver {
9
- async updateDomains(patches) {
10
- const domainRepo = (0, shell_1.getRepository)(shell_1.Domain);
11
- const _createRecords = patches.filter((patch) => !patch.id);
12
- const _updateRecords = patches.filter((patch) => patch.id);
13
- if (_createRecords.length > 0) {
14
- _createRecords.forEach(async (createRecord) => {
15
- const subdomain = (0, utils_1.slugger)(createRecord.name);
16
- await domainRepo.save(Object.assign(Object.assign({}, createRecord), { subdomain }));
17
- });
18
- }
19
- if (_updateRecords.length > 0) {
20
- _updateRecords.forEach(async (updateRecord) => {
21
- const domain = await domainRepo.findOne({ where: { id: updateRecord.id } });
22
- if (updateRecord.name) {
23
- updateRecord.subdomain = (0, utils_1.slugger)(updateRecord.name);
24
- }
25
- if (updateRecord.parent && updateRecord.parent.id == domain.id) {
26
- delete updateRecord.parent;
27
- }
28
- await domainRepo.save(Object.assign(Object.assign({}, domain), updateRecord));
29
- });
30
- }
31
- return true;
32
- }
33
- };
34
- tslib_1.__decorate([
35
- (0, type_graphql_1.Directive)('@privilege(category: "system", privilege: "mutation", superUserGranted: true)'),
36
- (0, type_graphql_1.Mutation)(returns => Boolean, { description: 'To update multiple domains' }),
37
- tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [shell_1.DomainPatch])),
38
- tslib_1.__metadata("design:type", Function),
39
- tslib_1.__metadata("design:paramtypes", [Array]),
40
- tslib_1.__metadata("design:returntype", Promise)
41
- ], DomainResolver.prototype, "updateDomains", null);
42
- DomainResolver = tslib_1.__decorate([
43
- (0, type_graphql_1.Resolver)(shell_1.Domain)
44
- ], DomainResolver);
45
- exports.DomainResolver = DomainResolver;
46
- //# sourceMappingURL=domain-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"domain-resolver.js","sourceRoot":"","sources":["../../../server/service/domain-secret/domain-resolver.ts"],"names":[],"mappings":";;;;AAAA,+CAAiE;AAGjE,iDAA0E;AAC1E,iDAA+C;AAGxC,IAAM,cAAc,GAApB,MAAM,cAAc;IAGnB,AAAN,KAAK,CAAC,aAAa,CAAwC,OAAsB;QAC/E,MAAM,UAAU,GAAuB,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAA;QAE5D,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAChE,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAE/D,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,cAAc,CAAC,OAAO,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;gBAC1C,MAAM,SAAS,GAAW,IAAA,eAAO,EAAC,YAAY,CAAC,IAAI,CAAC,CAAA;gBAEpD,MAAM,UAAU,CAAC,IAAI,CAAC,gCAAK,YAAY,KAAE,SAAS,GAAS,CAAC,CAAA;YAC9D,CAAC,CAAC,CAAA;SACH;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,cAAc,CAAC,OAAO,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;gBAC1C,MAAM,MAAM,GAAW,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gBAEnF,IAAI,YAAY,CAAC,IAAI,EAAE;oBACrB,YAAY,CAAC,SAAS,GAAG,IAAA,eAAO,EAAC,YAAY,CAAC,IAAI,CAAC,CAAA;iBACpD;gBAED,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,EAAE;oBAC9D,OAAO,YAAY,CAAC,MAAM,CAAA;iBAC3B;gBAED,MAAM,UAAU,CAAC,IAAI,CAAC,gCACjB,MAAM,GACN,YAAY,CACT,CAAC,CAAA;YACX,CAAC,CAAC,CAAA;SACH;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AAnCO;IAFL,IAAA,wBAAS,EAAC,+EAA+E,CAAC;IAC1F,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IACvD,mBAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,mBAAW,CAAC,CAAC,CAAA;;;;mDAkCzD;AArCU,cAAc;IAD1B,IAAA,uBAAQ,EAAC,cAAM,CAAC;GACJ,cAAc,CAsC1B;AAtCY,wCAAc","sourcesContent":["import { Arg, Directive, Mutation, Resolver } from 'type-graphql'\nimport { Repository } from 'typeorm'\n\nimport { Domain, DomainPatch, getRepository } from '@things-factory/shell'\nimport { slugger } from '@things-factory/utils'\n\n@Resolver(Domain)\nexport class DomainResolver {\n @Directive('@privilege(category: \"system\", privilege: \"mutation\", superUserGranted: true)')\n @Mutation(returns => Boolean, { description: 'To update multiple domains' })\n async updateDomains(@Arg('patches', type => [DomainPatch]) patches: DomainPatch[]): Promise<boolean> {\n const domainRepo: Repository<Domain> = getRepository(Domain)\n\n const _createRecords = patches.filter((patch: any) => !patch.id)\n const _updateRecords = patches.filter((patch: any) => patch.id)\n\n if (_createRecords.length > 0) {\n _createRecords.forEach(async createRecord => {\n const subdomain: string = slugger(createRecord.name)\n\n await domainRepo.save({ ...createRecord, subdomain } as any)\n })\n }\n\n if (_updateRecords.length > 0) {\n _updateRecords.forEach(async updateRecord => {\n const domain: Domain = await domainRepo.findOne({ where: { id: updateRecord.id } })\n\n if (updateRecord.name) {\n updateRecord.subdomain = slugger(updateRecord.name)\n }\n\n if (updateRecord.parent && updateRecord.parent.id == domain.id) {\n delete updateRecord.parent\n }\n\n await domainRepo.save({\n ...domain,\n ...updateRecord\n } as any)\n })\n }\n\n return true\n }\n}\n"]}