@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/.commitlintrc.json
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
{
|
2
|
-
"extends": [
|
3
|
-
"@commitlint/config-conventional"
|
4
|
-
],
|
5
|
-
"rules": {
|
6
|
-
"header-max-length": [ 2, "always", 120 ],
|
7
|
-
"type-enum": [
|
8
|
-
2,
|
9
|
-
"always",
|
10
|
-
[
|
11
|
-
"breaking",
|
12
|
-
"feat",
|
13
|
-
"fix",
|
14
|
-
"refactor",
|
15
|
-
"config",
|
16
|
-
"test",
|
17
|
-
"docs",
|
18
|
-
"chore"
|
19
|
-
]
|
20
|
-
]
|
21
|
-
}
|
22
|
-
}
|
1
|
+
{
|
2
|
+
"extends": [
|
3
|
+
"@commitlint/config-conventional"
|
4
|
+
],
|
5
|
+
"rules": {
|
6
|
+
"header-max-length": [ 2, "always", 120 ],
|
7
|
+
"type-enum": [
|
8
|
+
2,
|
9
|
+
"always",
|
10
|
+
[
|
11
|
+
"breaking",
|
12
|
+
"feat",
|
13
|
+
"fix",
|
14
|
+
"refactor",
|
15
|
+
"config",
|
16
|
+
"test",
|
17
|
+
"docs",
|
18
|
+
"chore"
|
19
|
+
]
|
20
|
+
]
|
21
|
+
}
|
22
|
+
}
|
package/.eslintrc
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
{
|
2
|
-
"parser": "@typescript-eslint/parser",
|
3
|
-
"parserOptions": {
|
4
|
-
"ecmaVersion": "latest",
|
5
|
-
"sourceType": "module" // Allows for the use of imports
|
6
|
-
},
|
7
|
-
"extends": ["plugin:@typescript-eslint/recommended"],
|
8
|
-
"env": {
|
9
|
-
"node": true // Enable Node.js global variables
|
10
|
-
},
|
11
|
-
"rules": {
|
12
|
-
"no-console": "off",
|
13
|
-
"import/prefer-default-export": "off",
|
14
|
-
"@typescript-eslint/no-unused-vars": "warn"
|
15
|
-
}
|
16
|
-
}
|
1
|
+
{
|
2
|
+
"parser": "@typescript-eslint/parser",
|
3
|
+
"parserOptions": {
|
4
|
+
"ecmaVersion": "latest",
|
5
|
+
"sourceType": "module" // Allows for the use of imports
|
6
|
+
},
|
7
|
+
"extends": ["plugin:@typescript-eslint/recommended"],
|
8
|
+
"env": {
|
9
|
+
"node": true // Enable Node.js global variables
|
10
|
+
},
|
11
|
+
"rules": {
|
12
|
+
"no-console": "off",
|
13
|
+
"import/prefer-default-export": "off",
|
14
|
+
"@typescript-eslint/no-unused-vars": "warn"
|
15
|
+
}
|
16
|
+
}
|
package/.eslintrc.js
CHANGED
@@ -1,35 +1,35 @@
|
|
1
|
-
module.exports = {
|
2
|
-
parser: "@typescript-eslint/parser",
|
3
|
-
plugins: ["@typescript-eslint"],
|
4
|
-
|
5
|
-
parserOptions: {
|
6
|
-
ecmaVersion: "latest", // Allows the use of modern ECMAScript features
|
7
|
-
sourceType: "module", // Allows for the use of imports
|
8
|
-
},
|
9
|
-
|
10
|
-
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
|
11
|
-
env: {
|
12
|
-
node: true, // Enable Node.js global variables
|
13
|
-
},
|
14
|
-
rules: {
|
15
|
-
"no-console": "off",
|
16
|
-
"@typescript-eslint/no-explicit-any": "off",
|
17
|
-
"@typescript-eslint/no-var-requires": "off",
|
18
|
-
"@typescript-eslint/explicit-module-boundary-types": "off",
|
19
|
-
"import/prefer-default-export": "off",
|
20
|
-
"@typescript-eslint/no-unused-vars": "warn",
|
21
|
-
"no-useless-catch": "off",
|
22
|
-
"@typescript-eslint/no-non-null-assertion": "off",
|
23
|
-
"@typescript-eslint/no-empty-function": "off",
|
24
|
-
"@typescript-eslint/no-empty-interface": "off",
|
25
|
-
"@typescript-eslint/no-inferrable-types": "off",
|
26
|
-
"@typescript-eslint/no-namespace": "off",
|
27
|
-
"@typescript-eslint/no-use-before-define": "off",
|
28
|
-
"@typescript-eslint/no-unsafe-assignment": "off",
|
29
|
-
"@typescript-eslint/no-unsafe-call": "off",
|
30
|
-
"@typescript-eslint/no-unsafe-member-access": "off",
|
31
|
-
"@typescript-eslint/no-unsafe-return": "off",
|
32
|
-
"@typescript-eslint/restrict-template-expressions": "off",
|
33
|
-
"no-useless-escape": "off",
|
34
|
-
},
|
35
|
-
};
|
1
|
+
module.exports = {
|
2
|
+
parser: "@typescript-eslint/parser",
|
3
|
+
plugins: ["@typescript-eslint"],
|
4
|
+
|
5
|
+
parserOptions: {
|
6
|
+
ecmaVersion: "latest", // Allows the use of modern ECMAScript features
|
7
|
+
sourceType: "module", // Allows for the use of imports
|
8
|
+
},
|
9
|
+
|
10
|
+
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
|
11
|
+
env: {
|
12
|
+
node: true, // Enable Node.js global variables
|
13
|
+
},
|
14
|
+
rules: {
|
15
|
+
"no-console": "off",
|
16
|
+
"@typescript-eslint/no-explicit-any": "off",
|
17
|
+
"@typescript-eslint/no-var-requires": "off",
|
18
|
+
"@typescript-eslint/explicit-module-boundary-types": "off",
|
19
|
+
"import/prefer-default-export": "off",
|
20
|
+
"@typescript-eslint/no-unused-vars": "warn",
|
21
|
+
"no-useless-catch": "off",
|
22
|
+
"@typescript-eslint/no-non-null-assertion": "off",
|
23
|
+
"@typescript-eslint/no-empty-function": "off",
|
24
|
+
"@typescript-eslint/no-empty-interface": "off",
|
25
|
+
"@typescript-eslint/no-inferrable-types": "off",
|
26
|
+
"@typescript-eslint/no-namespace": "off",
|
27
|
+
"@typescript-eslint/no-use-before-define": "off",
|
28
|
+
"@typescript-eslint/no-unsafe-assignment": "off",
|
29
|
+
"@typescript-eslint/no-unsafe-call": "off",
|
30
|
+
"@typescript-eslint/no-unsafe-member-access": "off",
|
31
|
+
"@typescript-eslint/no-unsafe-return": "off",
|
32
|
+
"@typescript-eslint/restrict-template-expressions": "off",
|
33
|
+
"no-useless-escape": "off",
|
34
|
+
},
|
35
|
+
};
|
package/.gitlab-ci.yml
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
variables:
|
2
|
-
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
|
3
|
-
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
|
4
|
-
sonarcloud-check:
|
5
|
-
image:
|
6
|
-
name: sonarsource/sonar-scanner-cli:latest
|
7
|
-
entrypoint: [""]
|
8
|
-
cache:
|
9
|
-
key: "${CI_JOB_NAME}"
|
10
|
-
paths:
|
11
|
-
- .sonar/cache
|
12
|
-
script:
|
13
|
-
- sonar-scanner
|
14
|
-
only:
|
15
|
-
- merge_requests
|
16
|
-
- main
|
1
|
+
variables:
|
2
|
+
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
|
3
|
+
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
|
4
|
+
sonarcloud-check:
|
5
|
+
image:
|
6
|
+
name: sonarsource/sonar-scanner-cli:latest
|
7
|
+
entrypoint: [""]
|
8
|
+
cache:
|
9
|
+
key: "${CI_JOB_NAME}"
|
10
|
+
paths:
|
11
|
+
- .sonar/cache
|
12
|
+
script:
|
13
|
+
- sonar-scanner
|
14
|
+
only:
|
15
|
+
- merge_requests
|
16
|
+
- main
|
package/.husky/commit-msg
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
#!/usr/bin/env sh
|
2
|
-
. "$(dirname -- "$0")/_/husky.sh"
|
3
|
-
|
4
|
-
npx commitlint --edit $1
|
5
|
-
message="$(cat $1)"
|
6
|
-
echo "$message"
|
7
|
-
a=($(echo "$message" | tr ':' '\n'))
|
8
|
-
echo "${a[0]}"
|
9
|
-
if [ "${a[0]}" = "feat" ];
|
10
|
-
then
|
11
|
-
npm version --commit-hooks false --no-git-tag-version minor
|
12
|
-
else
|
13
|
-
npm version --commit-hooks false --no-git-tag-version patch
|
14
|
-
fi
|
15
|
-
git add .
|
1
|
+
#!/usr/bin/env sh
|
2
|
+
. "$(dirname -- "$0")/_/husky.sh"
|
3
|
+
|
4
|
+
npx commitlint --edit $1
|
5
|
+
message="$(cat $1)"
|
6
|
+
echo "$message"
|
7
|
+
a=($(echo "$message" | tr ':' '\n'))
|
8
|
+
echo "${a[0]}"
|
9
|
+
if [ "${a[0]}" = "feat" ];
|
10
|
+
then
|
11
|
+
npm version --commit-hooks false --no-git-tag-version minor
|
12
|
+
else
|
13
|
+
npm version --commit-hooks false --no-git-tag-version patch
|
14
|
+
fi
|
15
|
+
git add .
|
16
16
|
git commit -m "$message" --no-verify
|
package/.husky/pre-commit
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
#!/usr/bin/env sh
|
2
|
-
. "$(dirname -- "$0")/_/husky.sh"
|
3
|
-
|
4
|
-
npm run lint
|
5
|
-
npm run format
|
6
|
-
npm run build
|
7
|
-
git add .
|
1
|
+
#!/usr/bin/env sh
|
2
|
+
. "$(dirname -- "$0")/_/husky.sh"
|
3
|
+
|
4
|
+
npm run lint
|
5
|
+
npm run format
|
6
|
+
npm run build
|
7
|
+
git add .
|
package/.prettierrc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
{
|
2
|
-
"singleQuote": true,
|
3
|
-
"trailingComma": "all"
|
4
|
-
}
|
1
|
+
{
|
2
|
+
"singleQuote": true,
|
3
|
+
"trailingComma": "all"
|
4
|
+
}
|
package/Jenkinsfile
CHANGED
@@ -1,57 +1,57 @@
|
|
1
|
-
pipeline {
|
2
|
-
agent {
|
3
|
-
kubernetes {
|
4
|
-
label 'jenkins-agent'
|
5
|
-
namespace 'devops-tools'
|
6
|
-
}
|
7
|
-
}
|
8
|
-
tools {nodejs "node18"}
|
9
|
-
stages {
|
10
|
-
stage('Install') {
|
11
|
-
steps {
|
12
|
-
echo 'Install Dependencies..'
|
13
|
-
sh 'npm install'
|
14
|
-
}
|
15
|
-
}
|
16
|
-
stage('Test') {
|
17
|
-
steps {
|
18
|
-
echo 'Testing..'
|
19
|
-
sh 'npm run test'
|
20
|
-
}
|
21
|
-
}
|
22
|
-
stage('Build') {
|
23
|
-
steps {
|
24
|
-
echo 'Building..'
|
25
|
-
sh 'npm run build'
|
26
|
-
}
|
27
|
-
}
|
28
|
-
stage('Publish') {
|
29
|
-
steps {
|
30
|
-
echo 'Publish..'
|
31
|
-
withCredentials([
|
32
|
-
usernamePassword(credentialsId: 'npm-auth-token', usernameVariable: 'NPM_USERNAME', passwordVariable: 'AUTH_TOKEN')
|
33
|
-
]) {
|
34
|
-
sh "npm set //registry.npmjs.org/:_authToken=$AUTH_TOKEN"
|
35
|
-
sh "npm publish"
|
36
|
-
}
|
37
|
-
}
|
38
|
-
}
|
39
|
-
}
|
40
|
-
|
41
|
-
post {
|
42
|
-
success {
|
43
|
-
script {
|
44
|
-
def gitAuthor = sh(returnStdout: true, script: 'git log -1 --pretty=format:%an').trim()
|
45
|
-
discordSend description: "Git Commit: ${env.GIT_COMMIT}\nGit Branch: ${env.GIT_BRANCH}\nGit URL: ${env.GIT_URL}\nGit Author: ${gitAuthor}", footer: '', image: '', link: env.BUILD_URL, result: 'SUCCESS', scmWebUrl: '', thumbnail: '', title: "${env.JOB_NAME} Build #${env.BUILD_NUMBER} Success", webhookURL: 'https://discord.com/api/webhooks/1117705705466642434/UWgw32kQerM5HOr-fcCYD2aQxE1koeN_4CSCEzDZz1EAI3vNaysAw0YU7YUrb4TozOw0'
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
|
-
failure {
|
50
|
-
script {
|
51
|
-
def gitAuthor = sh(returnStdout: true, script: 'git log -1 --pretty=format:%an').trim()
|
52
|
-
discordSend description: "Git Commit: ${env.GIT_COMMIT}\nGit Branch: ${env.GIT_BRANCH}\nGit URL: ${env.GIT_URL}\nGit Author: ${gitAuthor}", footer: '', image: '', link: env.BUILD_URL, result: 'FAILURE', scmWebUrl: '', thumbnail: '', title: "${env.JOB_NAME} Build #${env.BUILD_NUMBER} Failed", webhookURL: 'https://discord.com/api/webhooks/1117705705466642434/UWgw32kQerM5HOr-fcCYD2aQxE1koeN_4CSCEzDZz1EAI3vNaysAw0YU7YUrb4TozOw0'
|
53
|
-
}
|
54
|
-
}
|
55
|
-
}
|
56
|
-
|
57
|
-
}
|
1
|
+
pipeline {
|
2
|
+
agent {
|
3
|
+
kubernetes {
|
4
|
+
label 'jenkins-agent'
|
5
|
+
namespace 'devops-tools'
|
6
|
+
}
|
7
|
+
}
|
8
|
+
tools {nodejs "node18"}
|
9
|
+
stages {
|
10
|
+
stage('Install') {
|
11
|
+
steps {
|
12
|
+
echo 'Install Dependencies..'
|
13
|
+
sh 'npm install'
|
14
|
+
}
|
15
|
+
}
|
16
|
+
stage('Test') {
|
17
|
+
steps {
|
18
|
+
echo 'Testing..'
|
19
|
+
sh 'npm run test'
|
20
|
+
}
|
21
|
+
}
|
22
|
+
stage('Build') {
|
23
|
+
steps {
|
24
|
+
echo 'Building..'
|
25
|
+
sh 'npm run build'
|
26
|
+
}
|
27
|
+
}
|
28
|
+
stage('Publish') {
|
29
|
+
steps {
|
30
|
+
echo 'Publish..'
|
31
|
+
withCredentials([
|
32
|
+
usernamePassword(credentialsId: 'npm-auth-token', usernameVariable: 'NPM_USERNAME', passwordVariable: 'AUTH_TOKEN')
|
33
|
+
]) {
|
34
|
+
sh "npm set //registry.npmjs.org/:_authToken=$AUTH_TOKEN"
|
35
|
+
sh "npm publish"
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
post {
|
42
|
+
success {
|
43
|
+
script {
|
44
|
+
def gitAuthor = sh(returnStdout: true, script: 'git log -1 --pretty=format:%an').trim()
|
45
|
+
discordSend description: "Git Commit: ${env.GIT_COMMIT}\nGit Branch: ${env.GIT_BRANCH}\nGit URL: ${env.GIT_URL}\nGit Author: ${gitAuthor}", footer: '', image: '', link: env.BUILD_URL, result: 'SUCCESS', scmWebUrl: '', thumbnail: '', title: "${env.JOB_NAME} Build #${env.BUILD_NUMBER} Success", webhookURL: 'https://discord.com/api/webhooks/1117705705466642434/UWgw32kQerM5HOr-fcCYD2aQxE1koeN_4CSCEzDZz1EAI3vNaysAw0YU7YUrb4TozOw0'
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
failure {
|
50
|
+
script {
|
51
|
+
def gitAuthor = sh(returnStdout: true, script: 'git log -1 --pretty=format:%an').trim()
|
52
|
+
discordSend description: "Git Commit: ${env.GIT_COMMIT}\nGit Branch: ${env.GIT_BRANCH}\nGit URL: ${env.GIT_URL}\nGit Author: ${gitAuthor}", footer: '', image: '', link: env.BUILD_URL, result: 'FAILURE', scmWebUrl: '', thumbnail: '', title: "${env.JOB_NAME} Build #${env.BUILD_NUMBER} Failed", webhookURL: 'https://discord.com/api/webhooks/1117705705466642434/UWgw32kQerM5HOr-fcCYD2aQxE1koeN_4CSCEzDZz1EAI3vNaysAw0YU7YUrb4TozOw0'
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
}
|
package/README.md
CHANGED
@@ -1,23 +1,23 @@
|
|
1
|
-
## SSO Package
|
2
|
-
|
3
|
-
### How to use
|
4
|
-
- run `npm i`
|
5
|
-
- Make sure you set the environment in .sampledotenv in your project `.env` file
|
6
|
-
- run `npm run start:dev`
|
7
|
-
|
8
|
-
### How create a new migration
|
9
|
-
- Make sure you have `DATABASE_URL` and `SHADOW_DATABASE_URL` in your project `.env` file
|
10
|
-
- create a new empty database. dont do migration on it and set the `SHADOW_DATABASE_URL` to it
|
11
|
-
- Create a database user
|
12
|
-
- Grant the above user privileges to alter sso tables and shadow database. The user should have access to the sso table and shadow database only. Use `create-sso-user.sql` as an example to create the user and grant privileges
|
13
|
-
- Make changes to the `schema.prisma` file
|
14
|
-
- Run `npx prisma migrate dev --name <migration-name> --preview-feature --create-only` to create the migration. The migration will be created in the `migrations` folder.
|
15
|
-
- open the newly created migration. review the migration and make changes if necessary.
|
16
|
-
|
17
|
-
notes:
|
18
|
-
- if you create a new table, after migration has been created, change the default character set to `latin1` from `utf8mb4` and remove COLLATE phrase.please also add it to the `create-sso-user.sql` file for references
|
19
|
-
|
20
|
-
### How to run migration
|
21
|
-
- run `npx prisma migrate deploy` to run the migration
|
22
|
-
- run `npx prisma generate` to generate the prisma client
|
23
|
-
|
1
|
+
## SSO Package
|
2
|
+
|
3
|
+
### How to use
|
4
|
+
- run `npm i`
|
5
|
+
- Make sure you set the environment in .sampledotenv in your project `.env` file
|
6
|
+
- run `npm run start:dev`
|
7
|
+
|
8
|
+
### How create a new migration
|
9
|
+
- Make sure you have `DATABASE_URL` and `SHADOW_DATABASE_URL` in your project `.env` file
|
10
|
+
- create a new empty database. dont do migration on it and set the `SHADOW_DATABASE_URL` to it
|
11
|
+
- Create a database user
|
12
|
+
- Grant the above user privileges to alter sso tables and shadow database. The user should have access to the sso table and shadow database only. Use `create-sso-user.sql` as an example to create the user and grant privileges
|
13
|
+
- Make changes to the `schema.prisma` file
|
14
|
+
- Run `npx prisma migrate dev --name <migration-name> --preview-feature --create-only` to create the migration. The migration will be created in the `migrations` folder.
|
15
|
+
- open the newly created migration. review the migration and make changes if necessary.
|
16
|
+
|
17
|
+
notes:
|
18
|
+
- if you create a new table, after migration has been created, change the default character set to `latin1` from `utf8mb4` and remove COLLATE phrase.please also add it to the `create-sso-user.sql` file for references
|
19
|
+
|
20
|
+
### How to run migration
|
21
|
+
- run `npx prisma migrate deploy` to run the migration
|
22
|
+
- run `npx prisma generate` to generate the prisma client
|
23
|
+
|
@@ -1,80 +1,80 @@
|
|
1
|
-
import { Group } from '../../../../src/components/group/group';
|
2
|
-
import { GroupRepository } from '../../../../src/components/group/group.repository';
|
3
|
-
import { ClassError } from '@tomei/general';
|
4
|
-
import { GroupTypeEnum } from '../../../../src/enum/group-type.enum';
|
5
|
-
|
6
|
-
|
7
|
-
describe('Group', () => {
|
8
|
-
afterEach(() => {
|
9
|
-
jest.clearAllMocks();
|
10
|
-
});
|
11
|
-
|
12
|
-
it('should initialize a group with valid GroupCode', async () => {
|
13
|
-
const groupAttr = {
|
14
|
-
GroupCode: 'group1',
|
15
|
-
Name: 'Group 1',
|
16
|
-
Description: 'This is Group 1',
|
17
|
-
Type: GroupTypeEnum.ROLE,
|
18
|
-
ParentGroupCode: 'parentGroup1',
|
19
|
-
InheritParentPrivilegeYN: 'Y',
|
20
|
-
InheritParentSystemAccessYN: 'N',
|
21
|
-
Status: 'Active',
|
22
|
-
CreatedById: 1,
|
23
|
-
CreatedAt: new Date(),
|
24
|
-
UpdatedById: 2,
|
25
|
-
UpdatedAt: new Date(),
|
26
|
-
};
|
27
|
-
|
28
|
-
const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockResolvedValueOnce({
|
29
|
-
...groupAttr,
|
30
|
-
get: () => groupAttr,
|
31
|
-
} as any);
|
32
|
-
|
33
|
-
const result = await Group.init(null, 'group1');
|
34
|
-
|
35
|
-
expect(result).toBeInstanceOf(Group);
|
36
|
-
expect(result.GroupCode).toBe(groupAttr.GroupCode);
|
37
|
-
expect(result.Name).toBe(groupAttr.Name);
|
38
|
-
expect(result.Description).toBe(groupAttr.Description);
|
39
|
-
expect(result.Type).toBe(groupAttr.Type);
|
40
|
-
expect(result.ParentGroupCode).toBe(groupAttr.ParentGroupCode);
|
41
|
-
expect(result.InheritParentPrivilegeYN).toBe(groupAttr.InheritParentPrivilegeYN);
|
42
|
-
expect(result.InheritParentSystemAccessYN).toBe(groupAttr.InheritParentSystemAccessYN);
|
43
|
-
expect(result.Status).toBe(groupAttr.Status);
|
44
|
-
expect(result.CreatedById).toBe(groupAttr.CreatedById);
|
45
|
-
expect(result.CreatedAt).toBe(groupAttr.CreatedAt);
|
46
|
-
expect(result.UpdatedById).toBe(groupAttr.UpdatedById);
|
47
|
-
expect(result.UpdatedAt).toBe(groupAttr.UpdatedAt);
|
48
|
-
|
49
|
-
expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
|
50
|
-
expect(groupRepositoryMock).toHaveBeenCalledWith('group1', {
|
51
|
-
transaction: null,
|
52
|
-
});
|
53
|
-
});
|
54
|
-
|
55
|
-
it('should throw an error when initializing a group with invalid GroupCode', async () => {
|
56
|
-
const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockResolvedValueOnce(null);
|
57
|
-
|
58
|
-
await expect(Group.init(null, 'invalidGroupCode')).rejects.toThrow(
|
59
|
-
new ClassError('Group', 'GroupErrMsg01', 'Failed To Initialize Group')
|
60
|
-
);
|
61
|
-
|
62
|
-
expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
|
63
|
-
expect(groupRepositoryMock).toHaveBeenCalledWith('invalidGroupCode', {
|
64
|
-
transaction: null,
|
65
|
-
});
|
66
|
-
});
|
67
|
-
|
68
|
-
it('should throw an error when initializing a group with an error', async () => {
|
69
|
-
const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockRejectedValueOnce(new Error('Database error'));
|
70
|
-
|
71
|
-
await expect(Group.init(null, 'group1')).rejects.toThrow(
|
72
|
-
new ClassError('Group', 'GroupErrMsg01', 'Failed To Initialize Group')
|
73
|
-
);
|
74
|
-
|
75
|
-
expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
|
76
|
-
expect(groupRepositoryMock).toHaveBeenCalledWith('group1', {
|
77
|
-
transaction: null,
|
78
|
-
});
|
79
|
-
});
|
1
|
+
import { Group } from '../../../../src/components/group/group';
|
2
|
+
import { GroupRepository } from '../../../../src/components/group/group.repository';
|
3
|
+
import { ClassError } from '@tomei/general';
|
4
|
+
import { GroupTypeEnum } from '../../../../src/enum/group-type.enum';
|
5
|
+
|
6
|
+
|
7
|
+
describe('Group', () => {
|
8
|
+
afterEach(() => {
|
9
|
+
jest.clearAllMocks();
|
10
|
+
});
|
11
|
+
|
12
|
+
it('should initialize a group with valid GroupCode', async () => {
|
13
|
+
const groupAttr = {
|
14
|
+
GroupCode: 'group1',
|
15
|
+
Name: 'Group 1',
|
16
|
+
Description: 'This is Group 1',
|
17
|
+
Type: GroupTypeEnum.ROLE,
|
18
|
+
ParentGroupCode: 'parentGroup1',
|
19
|
+
InheritParentPrivilegeYN: 'Y',
|
20
|
+
InheritParentSystemAccessYN: 'N',
|
21
|
+
Status: 'Active',
|
22
|
+
CreatedById: 1,
|
23
|
+
CreatedAt: new Date(),
|
24
|
+
UpdatedById: 2,
|
25
|
+
UpdatedAt: new Date(),
|
26
|
+
};
|
27
|
+
|
28
|
+
const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockResolvedValueOnce({
|
29
|
+
...groupAttr,
|
30
|
+
get: () => groupAttr,
|
31
|
+
} as any);
|
32
|
+
|
33
|
+
const result = await Group.init(null, 'group1');
|
34
|
+
|
35
|
+
expect(result).toBeInstanceOf(Group);
|
36
|
+
expect(result.GroupCode).toBe(groupAttr.GroupCode);
|
37
|
+
expect(result.Name).toBe(groupAttr.Name);
|
38
|
+
expect(result.Description).toBe(groupAttr.Description);
|
39
|
+
expect(result.Type).toBe(groupAttr.Type);
|
40
|
+
expect(result.ParentGroupCode).toBe(groupAttr.ParentGroupCode);
|
41
|
+
expect(result.InheritParentPrivilegeYN).toBe(groupAttr.InheritParentPrivilegeYN);
|
42
|
+
expect(result.InheritParentSystemAccessYN).toBe(groupAttr.InheritParentSystemAccessYN);
|
43
|
+
expect(result.Status).toBe(groupAttr.Status);
|
44
|
+
expect(result.CreatedById).toBe(groupAttr.CreatedById);
|
45
|
+
expect(result.CreatedAt).toBe(groupAttr.CreatedAt);
|
46
|
+
expect(result.UpdatedById).toBe(groupAttr.UpdatedById);
|
47
|
+
expect(result.UpdatedAt).toBe(groupAttr.UpdatedAt);
|
48
|
+
|
49
|
+
expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
|
50
|
+
expect(groupRepositoryMock).toHaveBeenCalledWith('group1', {
|
51
|
+
transaction: null,
|
52
|
+
});
|
53
|
+
});
|
54
|
+
|
55
|
+
it('should throw an error when initializing a group with invalid GroupCode', async () => {
|
56
|
+
const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockResolvedValueOnce(null);
|
57
|
+
|
58
|
+
await expect(Group.init(null, 'invalidGroupCode')).rejects.toThrow(
|
59
|
+
new ClassError('Group', 'GroupErrMsg01', 'Failed To Initialize Group')
|
60
|
+
);
|
61
|
+
|
62
|
+
expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
|
63
|
+
expect(groupRepositoryMock).toHaveBeenCalledWith('invalidGroupCode', {
|
64
|
+
transaction: null,
|
65
|
+
});
|
66
|
+
});
|
67
|
+
|
68
|
+
it('should throw an error when initializing a group with an error', async () => {
|
69
|
+
const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockRejectedValueOnce(new Error('Database error'));
|
70
|
+
|
71
|
+
await expect(Group.init(null, 'group1')).rejects.toThrow(
|
72
|
+
new ClassError('Group', 'GroupErrMsg01', 'Failed To Initialize Group')
|
73
|
+
);
|
74
|
+
|
75
|
+
expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
|
76
|
+
expect(groupRepositoryMock).toHaveBeenCalledWith('group1', {
|
77
|
+
transaction: null,
|
78
|
+
});
|
79
|
+
});
|
80
80
|
});
|