@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
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DomainSecret = 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 DomainSecret = class DomainSecret {
9
- };
10
- tslib_1.__decorate([
11
- (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
12
- tslib_1.__metadata("design:type", String)
13
- ], DomainSecret.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
- ], DomainSecret.prototype, "domain", void 0);
18
- tslib_1.__decorate([
19
- (0, typeorm_1.Column)(),
20
- tslib_1.__metadata("design:type", String)
21
- ], DomainSecret.prototype, "secret", void 0);
22
- tslib_1.__decorate([
23
- (0, typeorm_1.CreateDateColumn)(),
24
- tslib_1.__metadata("design:type", Date)
25
- ], DomainSecret.prototype, "createdAt", void 0);
26
- tslib_1.__decorate([
27
- (0, typeorm_1.UpdateDateColumn)(),
28
- tslib_1.__metadata("design:type", Date)
29
- ], DomainSecret.prototype, "updatedAt", void 0);
30
- tslib_1.__decorate([
31
- (0, typeorm_1.ManyToOne)(type => auth_base_1.User, {
32
- nullable: true
33
- }),
34
- tslib_1.__metadata("design:type", auth_base_1.User)
35
- ], DomainSecret.prototype, "creator", void 0);
36
- tslib_1.__decorate([
37
- (0, typeorm_1.ManyToOne)(type => auth_base_1.User, {
38
- nullable: true
39
- }),
40
- tslib_1.__metadata("design:type", auth_base_1.User)
41
- ], DomainSecret.prototype, "updater", void 0);
42
- DomainSecret = tslib_1.__decorate([
43
- (0, typeorm_1.Entity)(),
44
- (0, typeorm_1.Index)('ix_domain_secret_0', (domainSecret) => [domainSecret.domain, domainSecret.secret], {
45
- unique: true
46
- })
47
- ], DomainSecret);
48
- exports.DomainSecret = DomainSecret;
49
- //# sourceMappingURL=domain-secret.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"domain-secret.js","sourceRoot":"","sources":["../../../server/service/domain-secret/domain-secret.ts"],"names":[],"mappings":";;;;AAAA,qCAAsH;AACtH,iDAA8C;AAC9C,yDAAgD;AAMzC,IAAM,YAAY,GAAlB,MAAM,YAAY;CAyBxB,CAAA;AAxBC;IAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC;sCAC3B,MAAM;wCAAA;AAEV;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;sCAClB,cAAM;4CAAA;AAEd;IAAC,IAAA,gBAAM,GAAE;sCACD,MAAM;4CAAA;AAEd;IAAC,IAAA,0BAAgB,GAAE;sCACR,IAAI;+CAAA;AAEf;IAAC,IAAA,0BAAgB,GAAE;sCACR,IAAI;+CAAA;AAEf;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;sCACO,gBAAI;6CAAA;AAEb;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC;sCACO,gBAAI;6CAAA;AAxBF,YAAY;IAJxB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,oBAAoB,EAAE,CAAC,YAA0B,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE;QACvG,MAAM,EAAE,IAAI;KACb,CAAC;GACW,YAAY,CAyBxB;AAzBY,oCAAY","sourcesContent":["import { CreateDateColumn, UpdateDateColumn, Entity, Index, Column, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\n\n@Entity()\n@Index('ix_domain_secret_0', (domainSecret: DomainSecret) => [domainSecret.domain, domainSecret.secret], {\n unique: true\n})\nexport class DomainSecret {\n @PrimaryGeneratedColumn('uuid')\n id: String\n\n @ManyToOne(type => Domain)\n domain: Domain\n\n @Column()\n secret: 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 domain_secret_1 = require("./domain-secret");
5
- const domain_resolver_1 = require("./domain-resolver");
6
- exports.entities = [domain_secret_1.DomainSecret];
7
- exports.resolvers = [domain_resolver_1.DomainResolver];
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/domain-secret/index.ts"],"names":[],"mappings":";;;AAAA,mDAA8C;AAC9C,uDAAkD;AAErC,QAAA,QAAQ,GAAG,CAAC,4BAAY,CAAC,CAAA;AACzB,QAAA,SAAS,GAAG,CAAC,gCAAc,CAAC,CAAA","sourcesContent":["import { DomainSecret } from './domain-secret'\nimport { DomainResolver } from './domain-resolver'\n\nexport const entities = [DomainSecret]\nexport const resolvers = [DomainResolver]\n"]}
@@ -1,148 +0,0 @@
1
- import { In } from 'typeorm'
2
- import { Arg, Ctx, Directive, Query, Resolver } from 'type-graphql'
3
-
4
- import { checkTarget, doSomething, getPermission } from '@things-factory/operato-license-checker'
5
- import { getRepository } from '@things-factory/shell'
6
- import { User } from '@things-factory/auth-base'
7
-
8
- import { LicenseError } from '../../errors/license-error'
9
- import { Board } from '../board/board'
10
- import { DomainSecret } from '../domain-secret/domain-secret'
11
- import { BoardSecret } from './board-secret'
12
-
13
- const crypto = require('crypto')
14
-
15
- @Resolver(Board)
16
- export class BoardResolver {
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
-
38
- @Directive('@privilege(category: "board", privilege: "query", domainOwnerGranted: true)')
39
- @Query(returns => Board, { description: 'To fetch a board' })
40
- async board(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Board> {
41
- const { domain } = context.state
42
-
43
- var board = await getRepository(Board).findOne({
44
- where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id }
45
- })
46
- if (domain) {
47
- // 1. check domainSecret is over limit quantity or not
48
- var count =
49
- (await getRepository(DomainSecret)
50
- .manager.createQueryBuilder()
51
- .select('board')
52
- .from(DomainSecret, 'secret')
53
- .where('"id" = :domainId', { domainId: domain.id })
54
- .getCount()) + 1
55
-
56
- if (!checkTarget(count)) {
57
- throw new LicenseError({
58
- errorCode: context.t(LicenseError.ERROR_CODES.OVER_LIMIT)
59
- })
60
- } else {
61
- var domainSecret: DomainSecret = await getRepository(DomainSecret).findOne({
62
- where: { domain: { id: domain.id } }
63
- })
64
- // 2. if there's no domainSecret then create it
65
- if (!domainSecret) {
66
- var domainSecret: DomainSecret = new DomainSecret()
67
- domainSecret.id = crypto.randomUUID()
68
- domainSecret.domain = domain
69
- var hash = doSomething({ secId: domainSecret.id, id: domain.id })
70
- domainSecret.secret = hash
71
-
72
- await getRepository(DomainSecret).save(domainSecret)
73
- // 3. if there's domainSecret then check it
74
- } else {
75
- var domainRepo = getRepository(DomainSecret)
76
- var domainSecret: DomainSecret = await domainRepo.findOne({
77
- where: { domain: { id: domain.id } }
78
- })
79
- if (domainSecret) {
80
- var hash = doSomething({ secId: domainSecret.id, id: domain.id })
81
- if (domainSecret.secret !== hash) {
82
- throw new LicenseError({
83
- errorCode: context.t(LicenseError.ERROR_CODES.VERIFICATION_ERROR)
84
- })
85
- }
86
- } else {
87
- throw new LicenseError({
88
- errorCode: context.t(LicenseError.ERROR_CODES.VERIFICATION_ERROR)
89
- })
90
- }
91
- }
92
- }
93
- }
94
- if (board) {
95
- // 1. check boardSecret is over limit quantity or not
96
- var count =
97
- (await getRepository(BoardSecret)
98
- .manager.createQueryBuilder()
99
- .select('board')
100
- .from(BoardSecret, 'secret')
101
- .where('"domain_id" = :domainId', { domainId: domain.id })
102
- .getCount()) + 1
103
-
104
- if (!checkTarget(count)) {
105
- throw new LicenseError({
106
- errorCode: context.t(LicenseError.ERROR_CODES.OVER_LIMIT)
107
- })
108
- } else {
109
- var boardSecret: BoardSecret = await getRepository(BoardSecret).findOne({
110
- where: { targetId: id }
111
- })
112
- // 2. if there's no boardSecret then create it
113
- if (!boardSecret) {
114
- var boardSecret: BoardSecret = new BoardSecret()
115
- boardSecret.id = crypto.randomUUID()
116
- boardSecret.targetId = id
117
- boardSecret.targetType = 'board'
118
- boardSecret.domain = domain
119
-
120
- var hash = doSomething({ secId: boardSecret.id, id: id })
121
- boardSecret.secret = hash
122
-
123
- await getRepository(BoardSecret).save(boardSecret)
124
- // 3. if there's boardSecret then check it
125
- } else {
126
- var repogitory = getRepository(BoardSecret)
127
- var boardSecret: BoardSecret = await repogitory.findOne({
128
- where: { targetId: id }
129
- })
130
- if (boardSecret) {
131
- var hash = doSomething({ secId: boardSecret.id, id: id })
132
- if (boardSecret.secret !== hash) {
133
- throw new LicenseError({
134
- errorCode: context.t(LicenseError.ERROR_CODES.VERIFICATION_ERROR)
135
- })
136
- }
137
- } else {
138
- throw new LicenseError({
139
- errorCode: context.t(LicenseError.ERROR_CODES.VERIFICATION_ERROR)
140
- })
141
- }
142
- }
143
- }
144
- }
145
-
146
- return board
147
- }
148
- }
@@ -1,38 +0,0 @@
1
- import { CreateDateColumn, UpdateDateColumn, Entity, Index, Column, OneToMany, ManyToOne, PrimaryColumn } from 'typeorm'
2
- import { Domain } from '@things-factory/shell'
3
- import { User } from '@things-factory/auth-base'
4
-
5
- @Entity()
6
- @Index('ix_board_secret_0', (boardSecret: BoardSecret) => [boardSecret.domain, boardSecret.secret], { unique: true })
7
- export class BoardSecret {
8
- @PrimaryColumn('uuid')
9
- id: string
10
-
11
- @ManyToOne(type => Domain)
12
- domain: Domain
13
-
14
- @Column()
15
- secret: string
16
-
17
- @Column()
18
- targetType: string
19
-
20
- @Column('uuid')
21
- targetId: string
22
-
23
- @CreateDateColumn()
24
- createdAt: Date
25
-
26
- @UpdateDateColumn()
27
- updatedAt: Date
28
-
29
- @ManyToOne(type => User, {
30
- nullable: true
31
- })
32
- creator: User
33
-
34
- @ManyToOne(type => User, {
35
- nullable: true
36
- })
37
- updater: User
38
- }
@@ -1,5 +0,0 @@
1
- import { BoardSecret } from './board-secret'
2
- import { BoardResolver } from './board-resolver'
3
-
4
- export const entities = [BoardSecret]
5
- export const resolvers = [BoardResolver]
@@ -1,46 +0,0 @@
1
- import { Arg, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { Repository } from 'typeorm'
3
-
4
- import { Domain, DomainPatch, getRepository } from '@things-factory/shell'
5
- import { slugger } from '@things-factory/utils'
6
-
7
- @Resolver(Domain)
8
- export class DomainResolver {
9
- @Directive('@privilege(category: "system", privilege: "mutation", superUserGranted: true)')
10
- @Mutation(returns => Boolean, { description: 'To update multiple domains' })
11
- async updateDomains(@Arg('patches', type => [DomainPatch]) patches: DomainPatch[]): Promise<boolean> {
12
- const domainRepo: Repository<Domain> = getRepository(Domain)
13
-
14
- const _createRecords = patches.filter((patch: any) => !patch.id)
15
- const _updateRecords = patches.filter((patch: any) => patch.id)
16
-
17
- if (_createRecords.length > 0) {
18
- _createRecords.forEach(async createRecord => {
19
- const subdomain: string = slugger(createRecord.name)
20
-
21
- await domainRepo.save({ ...createRecord, subdomain } as any)
22
- })
23
- }
24
-
25
- if (_updateRecords.length > 0) {
26
- _updateRecords.forEach(async updateRecord => {
27
- const domain: Domain = await domainRepo.findOne({ where: { id: updateRecord.id } })
28
-
29
- if (updateRecord.name) {
30
- updateRecord.subdomain = slugger(updateRecord.name)
31
- }
32
-
33
- if (updateRecord.parent && updateRecord.parent.id == domain.id) {
34
- delete updateRecord.parent
35
- }
36
-
37
- await domainRepo.save({
38
- ...domain,
39
- ...updateRecord
40
- } as any)
41
- })
42
- }
43
-
44
- return true
45
- }
46
- }
@@ -1,34 +0,0 @@
1
- import { CreateDateColumn, UpdateDateColumn, Entity, Index, Column, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'
2
- import { Domain } from '@things-factory/shell'
3
- import { User } from '@things-factory/auth-base'
4
-
5
- @Entity()
6
- @Index('ix_domain_secret_0', (domainSecret: DomainSecret) => [domainSecret.domain, domainSecret.secret], {
7
- unique: true
8
- })
9
- export class DomainSecret {
10
- @PrimaryGeneratedColumn('uuid')
11
- id: String
12
-
13
- @ManyToOne(type => Domain)
14
- domain: Domain
15
-
16
- @Column()
17
- secret: String
18
-
19
- @CreateDateColumn()
20
- createdAt: Date
21
-
22
- @UpdateDateColumn()
23
- updatedAt: Date
24
-
25
- @ManyToOne(type => User, {
26
- nullable: true
27
- })
28
- creator: User
29
-
30
- @ManyToOne(type => User, {
31
- nullable: true
32
- })
33
- updater: User
34
- }
@@ -1,5 +0,0 @@
1
- import { DomainSecret } from './domain-secret'
2
- import { DomainResolver } from './domain-resolver'
3
-
4
- export const entities = [DomainSecret]
5
- export const resolvers = [DomainResolver]