@things-factory/board-service 6.2.41 → 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.
- package/dist-server/service/board/board-query.js +53 -2
- package/dist-server/service/board/board-query.js.map +1 -1
- package/dist-server/service/index.js +2 -10
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/permission/board-permission-subscriber.js +14 -39
- package/dist-server/service/permission/board-permission-subscriber.js.map +1 -1
- package/dist-server/service/permission/domain-permission-subscriber.js +5 -35
- package/dist-server/service/permission/domain-permission-subscriber.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/server/service/board/board-query.ts +58 -2
- package/server/service/index.ts +2 -10
- package/server/service/permission/board-permission-subscriber.ts +18 -48
- package/server/service/permission/domain-permission-subscriber.ts +7 -40
- package/dist-server/service/board-secret/board-resolver.js +0 -156
- package/dist-server/service/board-secret/board-resolver.js.map +0 -1
- package/dist-server/service/board-secret/board-secret.js +0 -55
- package/dist-server/service/board-secret/board-secret.js.map +0 -1
- package/dist-server/service/board-secret/index.js +0 -8
- package/dist-server/service/board-secret/index.js.map +0 -1
- package/dist-server/service/domain-secret/domain-resolver.js +0 -46
- package/dist-server/service/domain-secret/domain-resolver.js.map +0 -1
- package/dist-server/service/domain-secret/domain-secret.js +0 -49
- package/dist-server/service/domain-secret/domain-secret.js.map +0 -1
- package/dist-server/service/domain-secret/index.js +0 -8
- package/dist-server/service/domain-secret/index.js.map +0 -1
- package/server/service/board-secret/board-resolver.ts +0 -148
- package/server/service/board-secret/board-secret.ts +0 -38
- package/server/service/board-secret/index.ts +0 -5
- package/server/service/domain-secret/domain-resolver.ts +0 -46
- package/server/service/domain-secret/domain-secret.ts +0 -34
- 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.
|
|
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.
|
|
27
|
+
"@things-factory/auth-base": "^6.2.42",
|
|
28
28
|
"@things-factory/env": "^6.2.33",
|
|
29
|
-
"@things-factory/fav-base": "^6.2.
|
|
30
|
-
"@things-factory/font-base": "^6.2.
|
|
31
|
-
"@things-factory/integration-base": "^6.2.
|
|
32
|
-
"@things-factory/operato-license-checker": "^
|
|
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": "
|
|
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 =>
|
|
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
|
-
|
|
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' })
|
package/server/service/index.ts
CHANGED
|
@@ -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
|
-
...
|
|
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
|
-
...
|
|
61
|
-
...BoardFavoriteResolvers,
|
|
62
|
-
...DomainSecretResolvers
|
|
54
|
+
...BoardFavoriteResolvers
|
|
63
55
|
]
|
|
64
56
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { EntitySubscriberInterface, EventSubscriber, InsertEvent
|
|
1
|
+
import { EntitySubscriberInterface, EventSubscriber, InsertEvent } from 'typeorm'
|
|
2
2
|
|
|
3
|
-
import { checkTarget
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
|
2
|
-
import { v4 as uuidv4 } from 'uuid'
|
|
1
|
+
import { EntitySubscriberInterface, EventSubscriber, InsertEvent } from 'typeorm'
|
|
3
2
|
|
|
4
|
-
import { checkDomain
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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"]}
|