@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.
Files changed (63) hide show
  1. package/.commitlintrc.json +22 -22
  2. package/.gitlab-ci.yml +16 -16
  3. package/.husky/commit-msg +15 -9
  4. package/.husky/pre-commit +7 -7
  5. package/.prettierrc +4 -4
  6. package/Jenkinsfile +57 -57
  7. package/README.md +23 -23
  8. package/__tests__/unit/components/group/group.spec.ts +79 -79
  9. package/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.ts +88 -88
  10. package/__tests__/unit/components/group-privilege/group-privilege.spec.ts +68 -68
  11. package/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +66 -66
  12. package/__tests__/unit/components/group-system-access/group-system-access.spec.ts +83 -83
  13. package/__tests__/unit/components/login-user/l.spec.ts +746 -746
  14. package/__tests__/unit/components/login-user/login.spec.ts +1164 -1164
  15. package/__tests__/unit/components/password-hash/password-hash.service.spec.ts +31 -31
  16. package/__tests__/unit/components/system/system.spec.ts +254 -254
  17. package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +83 -83
  18. package/__tests__/unit/components/user-group/user-group.spec.ts +86 -86
  19. package/__tests__/unit/components/user-object-privilege/user-object-privilege.spec.ts +78 -78
  20. package/__tests__/unit/components/user-privilege/user-privilege.spec.ts +72 -72
  21. package/__tests__/unit/components/user-system-access/user-system-access.spec.ts +89 -89
  22. package/__tests__/unit/redis-client/redis.service.spec.ts +23 -23
  23. package/__tests__/unit/session/session.service.spec.ts +47 -47
  24. package/__tests__/unit/system-privilege/system-privilage.spec.ts +91 -91
  25. package/create-sso-user.sql +39 -39
  26. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.d.ts +1 -0
  27. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +71 -0
  28. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +1 -0
  29. package/dist/__tests__/unit/components/login-user/login-user.spec.d.ts +0 -0
  30. package/dist/__tests__/unit/components/login-user/login-user.spec.js +6 -0
  31. package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +1 -0
  32. package/dist/src/components/login-user/user.js +9 -3
  33. package/dist/src/components/login-user/user.js.map +1 -1
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. package/eslint.config.mjs +58 -58
  36. package/jest.config.js +14 -14
  37. package/migrations/20240314080602-create-user-table.js +124 -124
  38. package/migrations/20240314080603-create-user-group-table.js +85 -85
  39. package/migrations/20240314080604-create-user-user-group-table.js +55 -55
  40. package/migrations/20240314080605-create-login-history-table.js +53 -53
  41. package/migrations/20240527064925-create-system-table.js +78 -78
  42. package/migrations/20240527064926-create-system-privilege-table.js +71 -71
  43. package/migrations/20240527065342-create-group-table.js +93 -93
  44. package/migrations/20240527065633-create-group-reporting-user-table.js +76 -76
  45. package/migrations/20240528011551-create-group-system-access-table.js +72 -72
  46. package/migrations/20240528023018-user-system-access-table.js +75 -75
  47. package/migrations/20240528032229-user-privilege-table.js +76 -76
  48. package/migrations/20240528063003-create-group-privilege-table.js +76 -76
  49. package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
  50. package/migrations/20240528063107-create-user-object-privilege-table.js +84 -84
  51. package/migrations/20240528063108-create-api-key-table.js +85 -85
  52. package/migrations/20241104104802-create-building-table.js +95 -95
  53. package/migrations/20250108091132-add-area-manager-user-id-to-building-table.js +14 -14
  54. package/migrations/20250108091133-add-passcode-to-user-table.js +36 -36
  55. package/migrations/20250210115636-create-user-reporting-hierarchy.js +76 -76
  56. package/migrations/20250326043818-crate-user-password-history.js +42 -42
  57. package/migrations/20250610070720-added-MFBypassYN-to-sso-user.js +30 -30
  58. package/package.json +87 -87
  59. package/sampledotenv +7 -7
  60. package/sonar-project.properties +23 -0
  61. package/src/components/login-user/user.ts +9 -3
  62. package/tsconfig.build.json +5 -5
  63. package/tsconfig.json +23 -23
package/package.json CHANGED
@@ -1,87 +1,87 @@
1
- {
2
- "name": "@tomei/sso",
3
- "version": "0.64.0-staging.2",
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.InheritParentSystemAccessYN === 'Y' && group.ParentGroupCode) {
1829
+ if (group.InheritParentPrivilegeYN === 'Y' && group.ParentGroupCode) {
1824
1830
  const GroupCode = group.ParentGroupCode;
1825
1831
  const parentGroup = await User._GroupRepo.findByPk(
1826
1832
  GroupCode,
@@ -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
  }