@tomei/sso 0.64.0-staging.2 → 0.64.0
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/.commitlintrc.json +22 -22
- package/.gitlab-ci.yml +16 -16
- package/.husky/commit-msg +15 -9
- 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/create-sso-user.sql +39 -39
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.d.ts +1 -0
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +71 -0
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +1 -0
- 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 +6 -0
- package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +1 -0
- package/dist/src/components/login-user/user.js +9 -3
- package/dist/src/components/login-user/user.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/eslint.config.mjs +58 -58
- 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 +76 -76
- package/migrations/20240528063003-create-group-privilege-table.js +76 -76
- package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
- package/migrations/20240528063107-create-user-object-privilege-table.js +84 -84
- package/migrations/20240528063108-create-api-key-table.js +85 -85
- package/migrations/20241104104802-create-building-table.js +95 -95
- package/migrations/20250108091132-add-area-manager-user-id-to-building-table.js +14 -14
- package/migrations/20250108091133-add-passcode-to-user-table.js +36 -36
- package/migrations/20250210115636-create-user-reporting-hierarchy.js +76 -76
- package/migrations/20250326043818-crate-user-password-history.js +42 -42
- package/migrations/20250610070720-added-MFBypassYN-to-sso-user.js +30 -30
- package/package.json +87 -87
- package/sampledotenv +7 -7
- package/sonar-project.properties +23 -0
- package/src/components/login-user/user.ts +9 -3
- package/tsconfig.build.json +5 -5
- package/tsconfig.json +23 -23
package/package.json
CHANGED
@@ -1,87 +1,87 @@
|
|
1
|
-
{
|
2
|
-
"name": "@tomei/sso",
|
3
|
-
"version": "0.64.0
|
4
|
-
"description": "Tomei SSO Package",
|
5
|
-
"main": "dist/index.js",
|
6
|
-
"scripts": {
|
7
|
-
"start:dev": "tsc -w",
|
8
|
-
"build": "tsc",
|
9
|
-
"prepare": "husky",
|
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": "^19.8.1",
|
30
|
-
"@commitlint/config-conventional": "^19.8.1",
|
31
|
-
"@eslint/js": "^9.35.0",
|
32
|
-
"@tsconfig/node18": "^18.2.4",
|
33
|
-
"@types/bcrypt": "^6.0.0",
|
34
|
-
"@types/jest": "^30.0.0",
|
35
|
-
"@types/node": "^24.3.1",
|
36
|
-
"@types/validator": "^13.15.3",
|
37
|
-
"@typescript-eslint/eslint-plugin": "^8.43.0",
|
38
|
-
"@typescript-eslint/parser": "^8.43.0",
|
39
|
-
"cls-hooked": "^4.2.2",
|
40
|
-
"dotenv": "^17.2.2",
|
41
|
-
"eslint": "^9.35.0",
|
42
|
-
"eslint-config-prettier": "^10.1.8",
|
43
|
-
"eslint-plugin-import": "^2.32.0",
|
44
|
-
"eslint-plugin-prettier": "^5.5.4",
|
45
|
-
"globals": "^16.4.0",
|
46
|
-
"husky": "^9.1.7",
|
47
|
-
"jest": "^30.1.3",
|
48
|
-
"jest-mock-extended": "^4.0.0",
|
49
|
-
"jest-sonar-reporter": "^2.0.0",
|
50
|
-
"lint-staged": "^16.1.6",
|
51
|
-
"prettier": "^3.6.2",
|
52
|
-
"redis-mock": "^0.56.3",
|
53
|
-
"ts-jest": "^29.4.1",
|
54
|
-
"ts-node": "^10.9.2",
|
55
|
-
"tsc-watch": "^7.1.1",
|
56
|
-
"tsconfig-paths": "^4.2.0",
|
57
|
-
"typescript": "^5.9.2"
|
58
|
-
},
|
59
|
-
"publishConfig": {
|
60
|
-
"access": "public"
|
61
|
-
},
|
62
|
-
"peerDependencies": {
|
63
|
-
"@tomei/activity-history": "^0.4.4",
|
64
|
-
"@tomei/config": "^0.3.22",
|
65
|
-
"@tomei/general": "^0.21.9",
|
66
|
-
"@tomei/mailer": "^0.6.0",
|
67
|
-
"argon2": "^0.44.0",
|
68
|
-
"redis": "^5.8.2",
|
69
|
-
"reflect-metadata": "^0.2.2",
|
70
|
-
"sequelize": "^6.37.7",
|
71
|
-
"sequelize-cli": "^6.6.3",
|
72
|
-
"sequelize-typescript": "^2.1.6",
|
73
|
-
"speakeasy": "^2.0.0",
|
74
|
-
"uuid": "^11.1.0"
|
75
|
-
},
|
76
|
-
"lint-staged": {
|
77
|
-
"*/**/*.{js,ts,tsx}": [
|
78
|
-
"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
79
|
-
"eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
80
|
-
]
|
81
|
-
},
|
82
|
-
"jestSonar": {
|
83
|
-
"reportPath": "coverage",
|
84
|
-
"reportFile": "test-report.xml",
|
85
|
-
"indent": 2
|
86
|
-
}
|
87
|
-
}
|
1
|
+
{
|
2
|
+
"name": "@tomei/sso",
|
3
|
+
"version": "0.64.0",
|
4
|
+
"description": "Tomei SSO Package",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"scripts": {
|
7
|
+
"start:dev": "tsc -w",
|
8
|
+
"build": "tsc",
|
9
|
+
"prepare": "husky",
|
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": "^19.8.1",
|
30
|
+
"@commitlint/config-conventional": "^19.8.1",
|
31
|
+
"@eslint/js": "^9.35.0",
|
32
|
+
"@tsconfig/node18": "^18.2.4",
|
33
|
+
"@types/bcrypt": "^6.0.0",
|
34
|
+
"@types/jest": "^30.0.0",
|
35
|
+
"@types/node": "^24.3.1",
|
36
|
+
"@types/validator": "^13.15.3",
|
37
|
+
"@typescript-eslint/eslint-plugin": "^8.43.0",
|
38
|
+
"@typescript-eslint/parser": "^8.43.0",
|
39
|
+
"cls-hooked": "^4.2.2",
|
40
|
+
"dotenv": "^17.2.2",
|
41
|
+
"eslint": "^9.35.0",
|
42
|
+
"eslint-config-prettier": "^10.1.8",
|
43
|
+
"eslint-plugin-import": "^2.32.0",
|
44
|
+
"eslint-plugin-prettier": "^5.5.4",
|
45
|
+
"globals": "^16.4.0",
|
46
|
+
"husky": "^9.1.7",
|
47
|
+
"jest": "^30.1.3",
|
48
|
+
"jest-mock-extended": "^4.0.0",
|
49
|
+
"jest-sonar-reporter": "^2.0.0",
|
50
|
+
"lint-staged": "^16.1.6",
|
51
|
+
"prettier": "^3.6.2",
|
52
|
+
"redis-mock": "^0.56.3",
|
53
|
+
"ts-jest": "^29.4.1",
|
54
|
+
"ts-node": "^10.9.2",
|
55
|
+
"tsc-watch": "^7.1.1",
|
56
|
+
"tsconfig-paths": "^4.2.0",
|
57
|
+
"typescript": "^5.9.2"
|
58
|
+
},
|
59
|
+
"publishConfig": {
|
60
|
+
"access": "public"
|
61
|
+
},
|
62
|
+
"peerDependencies": {
|
63
|
+
"@tomei/activity-history": "^0.4.4",
|
64
|
+
"@tomei/config": "^0.3.22",
|
65
|
+
"@tomei/general": "^0.21.9",
|
66
|
+
"@tomei/mailer": "^0.6.0",
|
67
|
+
"argon2": "^0.44.0",
|
68
|
+
"redis": "^5.8.2",
|
69
|
+
"reflect-metadata": "^0.2.2",
|
70
|
+
"sequelize": "^6.37.7",
|
71
|
+
"sequelize-cli": "^6.6.3",
|
72
|
+
"sequelize-typescript": "^2.1.6",
|
73
|
+
"speakeasy": "^2.0.0",
|
74
|
+
"uuid": "^11.1.0"
|
75
|
+
},
|
76
|
+
"lint-staged": {
|
77
|
+
"*/**/*.{js,ts,tsx}": [
|
78
|
+
"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
79
|
+
"eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
80
|
+
]
|
81
|
+
},
|
82
|
+
"jestSonar": {
|
83
|
+
"reportPath": "coverage",
|
84
|
+
"reportFile": "test-report.xml",
|
85
|
+
"indent": 2
|
86
|
+
}
|
87
|
+
}
|
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=
|
@@ -0,0 +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
|
23
|
+
#sonar.sourceEncoding=UTF-8
|
@@ -560,11 +560,13 @@ export class User extends UserBase {
|
|
560
560
|
this.UpdatedAt = userAttr.UpdatedAt;
|
561
561
|
this.staffs = userAttr.staffs;
|
562
562
|
} else {
|
563
|
+
console.error('User not found for email:', email);
|
563
564
|
throw new ClassError('User', 'UserErrMsg0X', 'Invalid Credentials');
|
564
565
|
}
|
565
566
|
}
|
566
567
|
|
567
568
|
if (this.ObjectId && this.Email !== email) {
|
569
|
+
console.error('Email mismatch:', this.Email, email);
|
568
570
|
throw new Error('Invalid credentials.');
|
569
571
|
}
|
570
572
|
|
@@ -596,6 +598,7 @@ export class User extends UserBase {
|
|
596
598
|
this.Password,
|
597
599
|
);
|
598
600
|
if (!isPasswordValid) {
|
601
|
+
console.error('Invalid password for user:', this.UserId);
|
599
602
|
throw new Error('Invalid credentials.');
|
600
603
|
}
|
601
604
|
|
@@ -676,6 +679,7 @@ export class User extends UserBase {
|
|
676
679
|
ApplicationConfig.getComponentConfigValue('sessionName');
|
677
680
|
|
678
681
|
if (!sessionName) {
|
682
|
+
console.error('Session name is not set in the configuration');
|
679
683
|
throw new Error('Session name is not set in the configuration');
|
680
684
|
}
|
681
685
|
|
@@ -767,6 +771,7 @@ export class User extends UserBase {
|
|
767
771
|
},
|
768
772
|
);
|
769
773
|
}
|
774
|
+
console.error('Login failed:', error);
|
770
775
|
throw error;
|
771
776
|
}
|
772
777
|
}
|
@@ -805,7 +810,7 @@ export class User extends UserBase {
|
|
805
810
|
dbTransaction,
|
806
811
|
});
|
807
812
|
|
808
|
-
for (const usergroup of userGroups) {
|
813
|
+
outer: for (const usergroup of userGroups) {
|
809
814
|
const group = usergroup.Group;
|
810
815
|
const groupSystemAccess = await User.getInheritedSystemAccess(
|
811
816
|
dbTransaction,
|
@@ -815,7 +820,7 @@ export class User extends UserBase {
|
|
815
820
|
for (const system of groupSystemAccess) {
|
816
821
|
if (system.SystemCode === systemCode) {
|
817
822
|
isUserHaveAccess = true;
|
818
|
-
break;
|
823
|
+
break outer;
|
819
824
|
}
|
820
825
|
}
|
821
826
|
}
|
@@ -825,6 +830,7 @@ export class User extends UserBase {
|
|
825
830
|
throw new Error("User don't have access to the system.");
|
826
831
|
}
|
827
832
|
} catch (error) {
|
833
|
+
console.error('Error checking system access:', error);
|
828
834
|
throw error;
|
829
835
|
}
|
830
836
|
}
|
@@ -1820,7 +1826,7 @@ export class User extends UserBase {
|
|
1820
1826
|
|
1821
1827
|
// Part 2: Retrieve Parent Group System Access If Applicable
|
1822
1828
|
// 2.1 Check if Params.group.InheritParentSystemAccessYN is "Y" and Params.group.ParentGroupCode is not empty
|
1823
|
-
if (group.
|
1829
|
+
if (group.InheritParentPrivilegeYN === 'Y' && group.ParentGroupCode) {
|
1824
1830
|
const GroupCode = group.ParentGroupCode;
|
1825
1831
|
const parentGroup = await User._GroupRepo.findByPk(
|
1826
1832
|
GroupCode,
|
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,24 +1,24 @@
|
|
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
|
-
"exclude": ["node_modules", "dist"]
|
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
|
+
"exclude": ["node_modules", "dist"]
|
24
24
|
}
|