@tomei/sso 0.44.0 → 0.44.2
Sign up to get free protection for your applications and to get access to all the features.
- package/.commitlintrc.json +22 -22
- package/.eslintrc +16 -16
- package/.eslintrc.js +35 -35
- package/.gitlab-ci.yml +16 -16
- package/.husky/commit-msg +15 -15
- package/.husky/pre-commit +7 -7
- package/.prettierrc +4 -4
- package/Jenkinsfile +57 -57
- package/README.md +23 -23
- package/__tests__/unit/components/group/group.spec.ts +79 -79
- package/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.ts +88 -88
- package/__tests__/unit/components/group-privilege/group-privilege.spec.ts +68 -68
- package/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +66 -66
- package/__tests__/unit/components/group-system-access/group-system-access.spec.ts +83 -83
- package/__tests__/unit/components/login-user/l.spec.ts +746 -746
- package/__tests__/unit/components/login-user/login.spec.ts +1164 -1164
- package/__tests__/unit/components/password-hash/password-hash.service.spec.ts +31 -31
- package/__tests__/unit/components/system/system.spec.ts +254 -254
- package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +83 -83
- package/__tests__/unit/components/user-group/user-group.spec.ts +86 -86
- package/__tests__/unit/components/user-object-privilege/user-object-privilege.spec.ts +78 -78
- package/__tests__/unit/components/user-privilege/user-privilege.spec.ts +72 -72
- package/__tests__/unit/components/user-system-access/user-system-access.spec.ts +89 -89
- package/__tests__/unit/redis-client/redis.service.spec.ts +23 -23
- package/__tests__/unit/session/session.service.spec.ts +47 -47
- package/__tests__/unit/system-privilege/system-privilage.spec.ts +91 -91
- package/coverage/clover.xml +1452 -1452
- package/coverage/coverage-final.json +47 -47
- package/coverage/lcov-report/base.css +224 -224
- package/coverage/lcov-report/block-navigation.js +87 -87
- package/coverage/lcov-report/components/group/group.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group/group.ts.html +327 -327
- package/coverage/lcov-report/components/group/index.html +130 -130
- package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +321 -321
- package/coverage/lcov-report/components/group-object-privilege/index.html +130 -130
- package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +303 -303
- package/coverage/lcov-report/components/group-privilege/index.html +130 -130
- package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.ts.html +327 -327
- package/coverage/lcov-report/components/group-reporting-user/index.html +130 -130
- package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +309 -309
- package/coverage/lcov-report/components/group-system-access/index.html +130 -130
- package/coverage/lcov-report/components/login-history/index.html +115 -115
- package/coverage/lcov-report/components/login-history/login-history.repository.ts.html +117 -117
- package/coverage/lcov-report/components/login-user/index.html +130 -130
- package/coverage/lcov-report/components/login-user/login-user.ts.html +5007 -5007
- package/coverage/lcov-report/components/login-user/user.repository.ts.html +117 -117
- package/coverage/lcov-report/components/password-hash/index.html +115 -115
- package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +126 -126
- package/coverage/lcov-report/components/system/index.html +130 -130
- package/coverage/lcov-report/components/system/system.repository.ts.html +117 -117
- package/coverage/lcov-report/components/system/system.ts.html +909 -909
- package/coverage/lcov-report/components/system-privilege/index.html +130 -130
- package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +120 -120
- package/coverage/lcov-report/components/system-privilege/system-privilege.ts.html +390 -390
- package/coverage/lcov-report/components/user-group/index.html +130 -130
- package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +117 -117
- package/coverage/lcov-report/components/user-group/user-group.ts.html +354 -354
- package/coverage/lcov-report/components/user-object-privilege/index.html +130 -130
- package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +117 -117
- package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +312 -312
- package/coverage/lcov-report/components/user-privilege/index.html +130 -130
- package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +117 -117
- package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +306 -306
- package/coverage/lcov-report/components/user-system-access/index.html +130 -130
- package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +117 -117
- package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +312 -312
- package/coverage/lcov-report/enum/group-type.enum.ts.html +108 -108
- package/coverage/lcov-report/enum/index.html +160 -160
- package/coverage/lcov-report/enum/index.ts.html +93 -93
- package/coverage/lcov-report/enum/user-status.enum.ts.html +105 -105
- package/coverage/lcov-report/enum/yn.enum.ts.html +96 -96
- package/coverage/lcov-report/index.html +370 -370
- package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +333 -333
- package/coverage/lcov-report/models/group-privilege.entity.ts.html +315 -315
- package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +339 -339
- package/coverage/lcov-report/models/group-system-access.entity.ts.html +324 -324
- package/coverage/lcov-report/models/group.entity.ts.html +435 -435
- package/coverage/lcov-report/models/index.html +310 -310
- package/coverage/lcov-report/models/login-history.entity.ts.html +252 -252
- package/coverage/lcov-report/models/staff.entity.ts.html +411 -411
- package/coverage/lcov-report/models/system-privilege.entity.ts.html +354 -354
- package/coverage/lcov-report/models/system.entity.ts.html +423 -423
- package/coverage/lcov-report/models/user-group.entity.ts.html +354 -354
- package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +330 -330
- package/coverage/lcov-report/models/user-privilege.entity.ts.html +315 -315
- package/coverage/lcov-report/models/user-system-access.entity.ts.html +315 -315
- package/coverage/lcov-report/models/user.entity.ts.html +522 -522
- package/coverage/lcov-report/prettify.css +1 -1
- package/coverage/lcov-report/prettify.js +2 -2
- package/coverage/lcov-report/redis-client/index.html +115 -115
- package/coverage/lcov-report/redis-client/redis.service.ts.html +240 -240
- package/coverage/lcov-report/session/index.html +115 -115
- package/coverage/lcov-report/session/session.service.ts.html +246 -246
- package/coverage/lcov-report/sorter.js +196 -196
- package/coverage/lcov.info +2490 -2490
- package/coverage/test-report.xml +128 -128
- package/create-sso-user.sql +39 -39
- package/dist/src/components/api-key/api-key.d.ts +4 -0
- package/dist/src/components/api-key/api-key.js +9 -0
- package/dist/src/components/api-key/api-key.js.map +1 -1
- package/dist/src/components/group-reporting-user/group-reporting-user.d.ts +1 -1
- package/dist/src/components/group-reporting-user/group-reporting-user.js +11 -10
- package/dist/src/components/group-reporting-user/group-reporting-user.js.map +1 -1
- package/dist/src/interfaces/api-key-attr.interface.d.ts +1 -0
- package/dist/src/models/api-key-entity.d.ts +3 -0
- package/dist/src/models/api-key-entity.js +13 -0
- package/dist/src/models/api-key-entity.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/jest.config.js +14 -14
- package/migrations/20240314080602-create-user-table.js +124 -124
- package/migrations/20240314080603-create-user-group-table.js +85 -85
- package/migrations/20240314080604-create-user-user-group-table.js +55 -55
- package/migrations/20240314080605-create-login-history-table.js +53 -53
- package/migrations/20240527064925-create-system-table.js +78 -78
- package/migrations/20240527064926-create-system-privilege-table.js +71 -71
- package/migrations/20240527065342-create-group-table.js +93 -93
- package/migrations/20240527065633-create-group-reporting-user-table.js +76 -76
- package/migrations/20240528011551-create-group-system-access-table.js +72 -72
- package/migrations/20240528023018-user-system-access-table.js +75 -75
- package/migrations/20240528032229-user-privilege-table.js +75 -75
- package/migrations/20240528063003-create-group-privilege-table.js +85 -85
- package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
- package/migrations/20240528063107-create-user-object-privilege-table.js +83 -83
- package/migrations/20240528063108-create-api-key-table.js +85 -78
- package/package.json +89 -89
- package/sampledotenv +7 -7
- package/sonar-project.properties +22 -22
- package/src/components/api-key/api-key.ts +16 -0
- package/src/components/group-reporting-user/group-reporting-user.ts +14 -14
- package/src/interfaces/api-key-attr.interface.ts +1 -0
- package/src/models/api-key-entity.ts +11 -0
- package/tsconfig.build.json +5 -5
- package/tsconfig.json +22 -22
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.d.ts +0 -1
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +0 -71
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +0 -1
- package/dist/__tests__/unit/components/login-user/login-user.spec.d.ts +0 -0
- package/dist/__tests__/unit/components/login-user/login-user.spec.js +0 -6
- package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +0 -1
package/package.json
CHANGED
@@ -1,89 +1,89 @@
|
|
1
|
-
{
|
2
|
-
"name": "@tomei/sso",
|
3
|
-
"version": "0.44.
|
4
|
-
"description": "Tomei SSO Package",
|
5
|
-
"main": "dist/index.js",
|
6
|
-
"scripts": {
|
7
|
-
"start:dev": "tsc -w",
|
8
|
-
"build": "tsc",
|
9
|
-
"prepare": "husky install",
|
10
|
-
"format": "prettier --write \"src/**/*.ts\"",
|
11
|
-
"lint": "npx eslint . --fix",
|
12
|
-
"test": "jest --forceExit --detectOpenHandles --coverage"
|
13
|
-
},
|
14
|
-
"repository": {
|
15
|
-
"type": "git",
|
16
|
-
"url": "git+ssh://git@gitlab.com/tomei-package/sso.git"
|
17
|
-
},
|
18
|
-
"keywords": [
|
19
|
-
"tomei",
|
20
|
-
"sso"
|
21
|
-
],
|
22
|
-
"author": "Tomei",
|
23
|
-
"license": "ISC",
|
24
|
-
"bugs": {
|
25
|
-
"url": "https://gitlab.com/tomei-package/sso/issues"
|
26
|
-
},
|
27
|
-
"homepage": "https://gitlab.com/tomei-package/sso#readme",
|
28
|
-
"devDependencies": {
|
29
|
-
"@commitlint/cli": "^17.6.3",
|
30
|
-
"@commitlint/config-conventional": "^17.6.3",
|
31
|
-
"@tsconfig/node18": "^2.0.1",
|
32
|
-
"@types/bcrypt": "^5.0.0",
|
33
|
-
"@types/jest": "^29.5.2",
|
34
|
-
"@types/node": "^18.17.5",
|
35
|
-
"@types/redis": "^4.0.11",
|
36
|
-
"@types/validator": "^13.11.1",
|
37
|
-
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
38
|
-
"@typescript-eslint/parser": "^5.0.0",
|
39
|
-
"dotenv": "^16.1.4",
|
40
|
-
"eslint": "^8.40.0",
|
41
|
-
"eslint-config-prettier": "^8.5.0",
|
42
|
-
"eslint-plugin-prettier": "^4.2.1",
|
43
|
-
"husky": "^8.0.3",
|
44
|
-
"jest": "^29.5.0",
|
45
|
-
"jest-mock-extended": "^3.0.4",
|
46
|
-
"jest-sonar-reporter": "^2.0.0",
|
47
|
-
"lint-staged": "^13.2.2",
|
48
|
-
"prettier": "^2.7.1",
|
49
|
-
"prisma": "^4.14.0",
|
50
|
-
"redis-mock": "^0.56.3",
|
51
|
-
"sequelize-cli": "^6.6.2",
|
52
|
-
"ts-jest": "^29.1.0",
|
53
|
-
"ts-node": "^10.9.1",
|
54
|
-
"tsc-watch": "^5.0.3",
|
55
|
-
"tsconfig-paths": "^4.0.0",
|
56
|
-
"tslint": "^6.1.3",
|
57
|
-
"typescript": "^4.7.4"
|
58
|
-
},
|
59
|
-
"publishConfig": {
|
60
|
-
"access": "public"
|
61
|
-
},
|
62
|
-
"peerDependencies": {
|
63
|
-
"@tomei/activity-history": "^0.2.
|
64
|
-
"@tomei/config": "^0.3.
|
65
|
-
"@tomei/general": "^0.
|
66
|
-
"@tomei/mailer": "^0.5.
|
67
|
-
"argon2": "^0.30.3",
|
68
|
-
"cls-hooked": "^4.2.2",
|
69
|
-
"cuid": "^3.0.0",
|
70
|
-
"nodemailer": "^6.9.3",
|
71
|
-
"redis": "^4.6.7",
|
72
|
-
"reflect-metadata": "^0.1.13",
|
73
|
-
"sequelize": "^6.37.3",
|
74
|
-
"sequelize-typescript": "^2.1.6",
|
75
|
-
"speakeasy": "^2.0.0",
|
76
|
-
"uuid": "^10.0.0"
|
77
|
-
},
|
78
|
-
"lint-staged": {
|
79
|
-
"*/**/*.{js,ts,tsx}": [
|
80
|
-
"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
81
|
-
"eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
82
|
-
]
|
83
|
-
},
|
84
|
-
"jestSonar": {
|
85
|
-
"reportPath": "coverage",
|
86
|
-
"reportFile": "test-report.xml",
|
87
|
-
"indent": 2
|
88
|
-
}
|
89
|
-
}
|
1
|
+
{
|
2
|
+
"name": "@tomei/sso",
|
3
|
+
"version": "0.44.2",
|
4
|
+
"description": "Tomei SSO Package",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"scripts": {
|
7
|
+
"start:dev": "tsc -w",
|
8
|
+
"build": "tsc",
|
9
|
+
"prepare": "husky install",
|
10
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
11
|
+
"lint": "npx eslint . --fix",
|
12
|
+
"test": "jest --forceExit --detectOpenHandles --coverage"
|
13
|
+
},
|
14
|
+
"repository": {
|
15
|
+
"type": "git",
|
16
|
+
"url": "git+ssh://git@gitlab.com/tomei-package/sso.git"
|
17
|
+
},
|
18
|
+
"keywords": [
|
19
|
+
"tomei",
|
20
|
+
"sso"
|
21
|
+
],
|
22
|
+
"author": "Tomei",
|
23
|
+
"license": "ISC",
|
24
|
+
"bugs": {
|
25
|
+
"url": "https://gitlab.com/tomei-package/sso/issues"
|
26
|
+
},
|
27
|
+
"homepage": "https://gitlab.com/tomei-package/sso#readme",
|
28
|
+
"devDependencies": {
|
29
|
+
"@commitlint/cli": "^17.6.3",
|
30
|
+
"@commitlint/config-conventional": "^17.6.3",
|
31
|
+
"@tsconfig/node18": "^2.0.1",
|
32
|
+
"@types/bcrypt": "^5.0.0",
|
33
|
+
"@types/jest": "^29.5.2",
|
34
|
+
"@types/node": "^18.17.5",
|
35
|
+
"@types/redis": "^4.0.11",
|
36
|
+
"@types/validator": "^13.11.1",
|
37
|
+
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
38
|
+
"@typescript-eslint/parser": "^5.0.0",
|
39
|
+
"dotenv": "^16.1.4",
|
40
|
+
"eslint": "^8.40.0",
|
41
|
+
"eslint-config-prettier": "^8.5.0",
|
42
|
+
"eslint-plugin-prettier": "^4.2.1",
|
43
|
+
"husky": "^8.0.3",
|
44
|
+
"jest": "^29.5.0",
|
45
|
+
"jest-mock-extended": "^3.0.4",
|
46
|
+
"jest-sonar-reporter": "^2.0.0",
|
47
|
+
"lint-staged": "^13.2.2",
|
48
|
+
"prettier": "^2.7.1",
|
49
|
+
"prisma": "^4.14.0",
|
50
|
+
"redis-mock": "^0.56.3",
|
51
|
+
"sequelize-cli": "^6.6.2",
|
52
|
+
"ts-jest": "^29.1.0",
|
53
|
+
"ts-node": "^10.9.1",
|
54
|
+
"tsc-watch": "^5.0.3",
|
55
|
+
"tsconfig-paths": "^4.0.0",
|
56
|
+
"tslint": "^6.1.3",
|
57
|
+
"typescript": "^4.7.4"
|
58
|
+
},
|
59
|
+
"publishConfig": {
|
60
|
+
"access": "public"
|
61
|
+
},
|
62
|
+
"peerDependencies": {
|
63
|
+
"@tomei/activity-history": "^0.2.19",
|
64
|
+
"@tomei/config": "^0.3.12",
|
65
|
+
"@tomei/general": "^0.15.2",
|
66
|
+
"@tomei/mailer": "^0.5.15",
|
67
|
+
"argon2": "^0.30.3",
|
68
|
+
"cls-hooked": "^4.2.2",
|
69
|
+
"cuid": "^3.0.0",
|
70
|
+
"nodemailer": "^6.9.3",
|
71
|
+
"redis": "^4.6.7",
|
72
|
+
"reflect-metadata": "^0.1.13",
|
73
|
+
"sequelize": "^6.37.3",
|
74
|
+
"sequelize-typescript": "^2.1.6",
|
75
|
+
"speakeasy": "^2.0.0",
|
76
|
+
"uuid": "^10.0.0"
|
77
|
+
},
|
78
|
+
"lint-staged": {
|
79
|
+
"*/**/*.{js,ts,tsx}": [
|
80
|
+
"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
81
|
+
"eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
82
|
+
]
|
83
|
+
},
|
84
|
+
"jestSonar": {
|
85
|
+
"reportPath": "coverage",
|
86
|
+
"reportFile": "test-report.xml",
|
87
|
+
"indent": 2
|
88
|
+
}
|
89
|
+
}
|
package/sampledotenv
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
DATABASE_URL=
|
2
|
-
SHADOW_DATABASE_URL=
|
3
|
-
REDIS_URL=
|
4
|
-
REDIS_PASSWORD=
|
5
|
-
SMTP_HOST=
|
6
|
-
SMTP_PORT=
|
7
|
-
EMAIL_SENDER=
|
1
|
+
DATABASE_URL=
|
2
|
+
SHADOW_DATABASE_URL=
|
3
|
+
REDIS_URL=
|
4
|
+
REDIS_PASSWORD=
|
5
|
+
SMTP_HOST=
|
6
|
+
SMTP_PORT=
|
7
|
+
EMAIL_SENDER=
|
8
8
|
EMAIL_PASSWORD=
|
package/sonar-project.properties
CHANGED
@@ -1,23 +1,23 @@
|
|
1
|
-
sonar.projectKey=all-tomei-projects_sso
|
2
|
-
sonar.organization=all-tomei-projects
|
3
|
-
sonar.exclusions=**/*.js,test-data,dist,coverage, node_modules, __tests__, **/*.spec.ts, __mocks__
|
4
|
-
sonar.scm.provider=git
|
5
|
-
|
6
|
-
sonar.sources=src
|
7
|
-
sonar.test=__tests__
|
8
|
-
sonar.test.inclusions=src/**/*.spec.ts
|
9
|
-
|
10
|
-
sonar.javascript.lcov.reportPaths=./coverage/lcov.info
|
11
|
-
sonar.testExecutionReportPaths=coverage/test-report.xml
|
12
|
-
sonar.sourceEnconding=UTF-8
|
13
|
-
|
14
|
-
# This is the name and version displayed in the SonarCloud UI.
|
15
|
-
#sonar.projectName=sso
|
16
|
-
#sonar.projectVersion=1.0
|
17
|
-
|
18
|
-
|
19
|
-
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
|
20
|
-
#sonar.sources=.
|
21
|
-
|
22
|
-
# Encoding of the source code. Default is default system encoding
|
1
|
+
sonar.projectKey=all-tomei-projects_sso
|
2
|
+
sonar.organization=all-tomei-projects
|
3
|
+
sonar.exclusions=**/*.js,test-data,dist,coverage, node_modules, __tests__, **/*.spec.ts, __mocks__
|
4
|
+
sonar.scm.provider=git
|
5
|
+
|
6
|
+
sonar.sources=src
|
7
|
+
sonar.test=__tests__
|
8
|
+
sonar.test.inclusions=src/**/*.spec.ts
|
9
|
+
|
10
|
+
sonar.javascript.lcov.reportPaths=./coverage/lcov.info
|
11
|
+
sonar.testExecutionReportPaths=coverage/test-report.xml
|
12
|
+
sonar.sourceEnconding=UTF-8
|
13
|
+
|
14
|
+
# This is the name and version displayed in the SonarCloud UI.
|
15
|
+
#sonar.projectName=sso
|
16
|
+
#sonar.projectVersion=1.0
|
17
|
+
|
18
|
+
|
19
|
+
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
|
20
|
+
#sonar.sources=.
|
21
|
+
|
22
|
+
# Encoding of the source code. Default is default system encoding
|
23
23
|
#sonar.sourceEncoding=UTF-8
|
@@ -7,6 +7,7 @@ import { ApplicationConfig } from '@tomei/config';
|
|
7
7
|
import { randomBytes } from 'crypto';
|
8
8
|
import { ActionEnum, Activity } from '@tomei/activity-history';
|
9
9
|
import { Op } from 'sequelize';
|
10
|
+
import { System } from '../system/system';
|
10
11
|
|
11
12
|
export class APIKey extends ObjectBase {
|
12
13
|
ObjectId: string;
|
@@ -16,6 +17,7 @@ export class APIKey extends ObjectBase {
|
|
16
17
|
|
17
18
|
ApiKey: string;
|
18
19
|
Name: string;
|
20
|
+
SystemCode: string;
|
19
21
|
Description: string;
|
20
22
|
Status: APIKeyStatusEnum;
|
21
23
|
ExpirationDate: Date;
|
@@ -57,6 +59,7 @@ export class APIKey extends ObjectBase {
|
|
57
59
|
this.APIKeyId = apiKeyAttr.APIKeyId;
|
58
60
|
this.ApiKey = apiKeyAttr.ApiKey;
|
59
61
|
this.Name = apiKeyAttr.Name;
|
62
|
+
this.SystemCode = apiKeyAttr.SystemCode;
|
60
63
|
this.Description = apiKeyAttr.Description;
|
61
64
|
this.Status = apiKeyAttr.Status;
|
62
65
|
this.ExpirationDate = apiKeyAttr.ExpirationDate;
|
@@ -114,6 +117,12 @@ export class APIKey extends ObjectBase {
|
|
114
117
|
);
|
115
118
|
}
|
116
119
|
|
120
|
+
// Part 3: System Existence Check
|
121
|
+
// Call System.init(dbTransaction, this.SystemCode) to verify the System exists.
|
122
|
+
// If the group does not exist, throw a NotFoundError.
|
123
|
+
|
124
|
+
await System.init(dbTransaction, this.SystemCode);
|
125
|
+
|
117
126
|
// Part 3: Generate API Key
|
118
127
|
// Populate the following attributes:
|
119
128
|
// CreatedById: Set to loginUser.UserId.
|
@@ -133,6 +142,7 @@ export class APIKey extends ObjectBase {
|
|
133
142
|
const EntityValueAfter: any = {
|
134
143
|
ApiKey: this.ApiKey,
|
135
144
|
Name: this.Name,
|
145
|
+
SystemCode: this.SystemCode,
|
136
146
|
Status: this.Status,
|
137
147
|
Description: this.Description,
|
138
148
|
ExpirationDate: this.ExpirationDate,
|
@@ -188,6 +198,7 @@ export class APIKey extends ObjectBase {
|
|
188
198
|
Name: this.Name,
|
189
199
|
Status: this.Status,
|
190
200
|
Description: this.Description,
|
201
|
+
SystemCode: this.SystemCode,
|
191
202
|
ExpirationDate: this.ExpirationDate,
|
192
203
|
CreatedAt: this.CreatedAt,
|
193
204
|
CreatedById: this.CreatedById,
|
@@ -205,6 +216,7 @@ export class APIKey extends ObjectBase {
|
|
205
216
|
loginUser: LoginUser,
|
206
217
|
dbTransaction: any,
|
207
218
|
whereOptions: {
|
219
|
+
SystemCode?: string;
|
208
220
|
Status?: APIKeyStatusEnum;
|
209
221
|
ExpirationDate?: {
|
210
222
|
FromDate: Date;
|
@@ -246,6 +258,9 @@ export class APIKey extends ObjectBase {
|
|
246
258
|
// CreatedById: Filter by the user who created the API key.
|
247
259
|
const where = {};
|
248
260
|
if (whereOptions) {
|
261
|
+
if (whereOptions.SystemCode) {
|
262
|
+
where['SystemCode'] = whereOptions.SystemCode;
|
263
|
+
}
|
249
264
|
if (whereOptions.Status) {
|
250
265
|
where['Status'] = whereOptions.Status;
|
251
266
|
}
|
@@ -311,6 +326,7 @@ export class APIKey extends ObjectBase {
|
|
311
326
|
ApiKeyId: row.APIKeyId,
|
312
327
|
ApiKey: row.ApiKey,
|
313
328
|
Name: row.Name,
|
329
|
+
SystemCode: row.SystemCode,
|
314
330
|
Description: row.Description,
|
315
331
|
Status: row.Status,
|
316
332
|
ExpirationDate: row.ExpirationDate,
|
@@ -2,6 +2,7 @@ import { ClassError, ObjectBase } from '@tomei/general';
|
|
2
2
|
import { GroupReportingUserRepository } from './group-reporting-user.repository';
|
3
3
|
import { IGroupReportingUserAttr } from '../../interfaces/group-reporting-user.interface';
|
4
4
|
import { User } from '../login-user/user';
|
5
|
+
import UserModel from '../../models/user.entity';
|
5
6
|
import { Group } from '../group/group';
|
6
7
|
import { ApplicationConfig } from '@tomei/config';
|
7
8
|
import { ActionEnum, Activity } from '@tomei/activity-history';
|
@@ -71,16 +72,14 @@ export class GroupReportingUser extends ObjectBase {
|
|
71
72
|
'GroupReportingUser',
|
72
73
|
'GroupReportingUserErrMsg00',
|
73
74
|
'GroupReportingUser Not Found',
|
75
|
+
'init',
|
76
|
+
404,
|
74
77
|
);
|
75
78
|
}
|
76
79
|
}
|
77
80
|
return new GroupReportingUser();
|
78
81
|
} catch (error) {
|
79
|
-
throw
|
80
|
-
'GroupReportingUser',
|
81
|
-
'GroupReportingUserErrMsg01',
|
82
|
-
'Failed To Initialize GroupReportingUser',
|
83
|
-
);
|
82
|
+
throw error;
|
84
83
|
}
|
85
84
|
}
|
86
85
|
|
@@ -258,6 +257,12 @@ export class GroupReportingUser extends ObjectBase {
|
|
258
257
|
where: {
|
259
258
|
GroupCode: groupCode,
|
260
259
|
},
|
260
|
+
include: [
|
261
|
+
{
|
262
|
+
model: UserModel,
|
263
|
+
as: 'User',
|
264
|
+
},
|
265
|
+
],
|
261
266
|
order: [
|
262
267
|
['Rank', 'ASC'], // or 'DESC' for descending order
|
263
268
|
],
|
@@ -266,15 +271,8 @@ export class GroupReportingUser extends ObjectBase {
|
|
266
271
|
|
267
272
|
// Part 4: Return Results
|
268
273
|
// Return the array of GroupReportingUser records found.
|
269
|
-
|
270
|
-
|
271
|
-
for (let i = 0; i < result.length; i++) {
|
272
|
-
reportingUser.push(
|
273
|
-
new GroupReportingUser(result[i].get({ plain: true })),
|
274
|
-
);
|
275
|
-
}
|
276
|
-
}
|
277
|
-
return reportingUser;
|
274
|
+
|
275
|
+
return result;
|
278
276
|
} catch (error) {
|
279
277
|
// Part 5: Handle Errors
|
280
278
|
// Catch and handle any errors during the execution. If an error occurs, ensure the transaction is rolled back.
|
@@ -304,6 +302,8 @@ export class GroupReportingUser extends ObjectBase {
|
|
304
302
|
'GroupReportingUser',
|
305
303
|
'GroupReportingUserErrMsg06',
|
306
304
|
'Insufficient privileges to remove a user from the group',
|
305
|
+
'removeGroupReportingUser',
|
306
|
+
403,
|
307
307
|
);
|
308
308
|
}
|
309
309
|
|
@@ -10,6 +10,7 @@ import {
|
|
10
10
|
} from 'sequelize-typescript';
|
11
11
|
import User from './user.entity';
|
12
12
|
import { APIKeyStatusEnum } from '../enum/api-key.enum';
|
13
|
+
import SystemModel from './system.entity';
|
13
14
|
|
14
15
|
@Table({
|
15
16
|
tableName: 'sso_ApiKey',
|
@@ -37,6 +38,13 @@ export default class APIKeyModel extends Model {
|
|
37
38
|
})
|
38
39
|
Name: string;
|
39
40
|
|
41
|
+
@ForeignKey(() => SystemModel)
|
42
|
+
@Column({
|
43
|
+
allowNull: false,
|
44
|
+
type: DataType.STRING(10),
|
45
|
+
})
|
46
|
+
SystemCode: string;
|
47
|
+
|
40
48
|
@Column({
|
41
49
|
type: DataType.TEXT,
|
42
50
|
allowNull: true,
|
@@ -87,4 +95,7 @@ export default class APIKeyModel extends Model {
|
|
87
95
|
|
88
96
|
@BelongsTo(() => User, 'RevokedById')
|
89
97
|
UpdatedByUser: User;
|
98
|
+
|
99
|
+
@BelongsTo(() => SystemModel, 'SystemCode')
|
100
|
+
System: SystemModel;
|
90
101
|
}
|
package/tsconfig.build.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
{
|
2
|
-
"extends": "./tsconfig.json",
|
3
|
-
"include": ["**/*.ts"],
|
4
|
-
"exclude": ["node_modules", "__tests__", "dist", "**/*spec.ts"]
|
5
|
-
}
|
1
|
+
{
|
2
|
+
"extends": "./tsconfig.json",
|
3
|
+
"include": ["**/*.ts"],
|
4
|
+
"exclude": ["node_modules", "__tests__", "dist", "**/*spec.ts"]
|
5
|
+
}
|
6
6
|
|
package/tsconfig.json
CHANGED
@@ -1,23 +1,23 @@
|
|
1
|
-
{
|
2
|
-
"compilerOptions": {
|
3
|
-
"module": "commonjs",
|
4
|
-
"declaration": true,
|
5
|
-
"removeComments": true,
|
6
|
-
"emitDecoratorMetadata": true,
|
7
|
-
"experimentalDecorators": true,
|
8
|
-
"allowSyntheticDefaultImports": true,
|
9
|
-
"moduleResolution": "node",
|
10
|
-
"target": "es6",
|
11
|
-
"sourceMap": true,
|
12
|
-
"outDir": "./dist",
|
13
|
-
"baseUrl": "./src",
|
14
|
-
"rootDir": "./",
|
15
|
-
"incremental": true,
|
16
|
-
"skipLibCheck": true,
|
17
|
-
"noImplicitAny": false,
|
18
|
-
"strictBindCallApply": false,
|
19
|
-
"forceConsistentCasingInFileNames": false,
|
20
|
-
"noFallthroughCasesInSwitch": false,
|
21
|
-
"strictNullChecks": false,
|
22
|
-
},
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"module": "commonjs",
|
4
|
+
"declaration": true,
|
5
|
+
"removeComments": true,
|
6
|
+
"emitDecoratorMetadata": true,
|
7
|
+
"experimentalDecorators": true,
|
8
|
+
"allowSyntheticDefaultImports": true,
|
9
|
+
"moduleResolution": "node",
|
10
|
+
"target": "es6",
|
11
|
+
"sourceMap": true,
|
12
|
+
"outDir": "./dist",
|
13
|
+
"baseUrl": "./src",
|
14
|
+
"rootDir": "./",
|
15
|
+
"incremental": true,
|
16
|
+
"skipLibCheck": true,
|
17
|
+
"noImplicitAny": false,
|
18
|
+
"strictBindCallApply": false,
|
19
|
+
"forceConsistentCasingInFileNames": false,
|
20
|
+
"noFallthroughCasesInSwitch": false,
|
21
|
+
"strictNullChecks": false,
|
22
|
+
},
|
23
23
|
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,71 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
-
});
|
10
|
-
};
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
const group_privilege_1 = require("../../../../src/components/group-privilege/group-privilege");
|
13
|
-
const group_privilege_repository_1 = require("../../../../src/components/group-privilege/group-privilege.repository");
|
14
|
-
const general_1 = require("@tomei/general");
|
15
|
-
describe('GroupPrivilege', () => {
|
16
|
-
afterEach(() => {
|
17
|
-
jest.restoreAllMocks();
|
18
|
-
});
|
19
|
-
it('should initialize with GroupPrivilegeAttr', () => __awaiter(void 0, void 0, void 0, function* () {
|
20
|
-
const mockGroupPrivilegeAttr = {
|
21
|
-
GroupPrivilegeId: 1,
|
22
|
-
GroupCode: 'group1',
|
23
|
-
PrivilegeCode: 'privilege1',
|
24
|
-
Status: 'active',
|
25
|
-
CreatedAt: new Date(),
|
26
|
-
UpdatedAt: new Date(),
|
27
|
-
CreatedById: 1,
|
28
|
-
UpdatedById: 1,
|
29
|
-
};
|
30
|
-
const findOneMock = jest
|
31
|
-
.spyOn(group_privilege_repository_1.GroupPrivilegeRepository.prototype, 'findOne')
|
32
|
-
.mockResolvedValueOnce({ get: jest.fn().mockReturnValue(mockGroupPrivilegeAttr) });
|
33
|
-
const groupPrivilege = yield group_privilege_1.GroupPrivilege.init(null, 1);
|
34
|
-
expect(findOneMock).toBeCalledWith({
|
35
|
-
where: { GroupPrivilegeId: 1 },
|
36
|
-
transaction: null,
|
37
|
-
});
|
38
|
-
expect(groupPrivilege).toBeInstanceOf(group_privilege_1.GroupPrivilege);
|
39
|
-
expect(groupPrivilege.GroupPrivilegeId).toEqual(mockGroupPrivilegeAttr.GroupPrivilegeId);
|
40
|
-
expect(groupPrivilege.GroupCode).toEqual(mockGroupPrivilegeAttr.GroupCode);
|
41
|
-
expect(groupPrivilege.PrivilegeCode).toEqual(mockGroupPrivilegeAttr.PrivilegeCode);
|
42
|
-
expect(groupPrivilege.Status).toEqual(mockGroupPrivilegeAttr.Status);
|
43
|
-
expect(groupPrivilege.CreatedAt).toEqual(mockGroupPrivilegeAttr.CreatedAt);
|
44
|
-
expect(groupPrivilege.UpdatedAt).toEqual(mockGroupPrivilegeAttr.UpdatedAt);
|
45
|
-
expect(groupPrivilege.CreatedById).toEqual(mockGroupPrivilegeAttr.CreatedById);
|
46
|
-
expect(groupPrivilege.UpdatedById).toEqual(mockGroupPrivilegeAttr.UpdatedById);
|
47
|
-
}));
|
48
|
-
it('should throw ClassError when GroupPrivilegeAttr is not found', () => __awaiter(void 0, void 0, void 0, function* () {
|
49
|
-
const findOneMock = jest
|
50
|
-
.spyOn(group_privilege_repository_1.GroupPrivilegeRepository.prototype, 'findOne')
|
51
|
-
.mockResolvedValueOnce(null);
|
52
|
-
yield expect(group_privilege_1.GroupPrivilege.init(null, 1)).rejects.toThrow(general_1.ClassError);
|
53
|
-
expect(findOneMock).toBeCalledWith({
|
54
|
-
where: { GroupPrivilegeId: 1 },
|
55
|
-
transaction: null,
|
56
|
-
});
|
57
|
-
}));
|
58
|
-
it('should initialize with default values', () => __awaiter(void 0, void 0, void 0, function* () {
|
59
|
-
const groupPrivilege = yield group_privilege_1.GroupPrivilege.init();
|
60
|
-
expect(groupPrivilege).toBeInstanceOf(group_privilege_1.GroupPrivilege);
|
61
|
-
expect(groupPrivilege.GroupPrivilegeId).toBeUndefined();
|
62
|
-
expect(groupPrivilege.GroupCode).toBeUndefined();
|
63
|
-
expect(groupPrivilege.PrivilegeCode).toBeUndefined();
|
64
|
-
expect(groupPrivilege.Status).toBeUndefined();
|
65
|
-
expect(groupPrivilege.CreatedAt).toBeUndefined();
|
66
|
-
expect(groupPrivilege.UpdatedAt).toBeUndefined();
|
67
|
-
expect(groupPrivilege.CreatedById).toBeUndefined();
|
68
|
-
expect(groupPrivilege.UpdatedById).toBeUndefined();
|
69
|
-
}));
|
70
|
-
});
|
71
|
-
//# sourceMappingURL=group-privilege.test.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"group-privilege.test.js","sourceRoot":"","sources":["../../../../../__tests__/unit/components/group-privilege/group-privilege.test.ts"],"names":[],"mappings":"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"}
|
File without changes
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"login-user.spec.js","sourceRoot":"","sources":["../../../../../__tests__/unit/components/login-user/login-user.spec.ts"],"names":[],"mappings":"AAuuBA,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|