@continuoussecuritytooling/keycloak-reporter 0.8.5 → 0.8.8
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/.ct.yaml +1 -1
- package/.github/workflows/pipeline.yml +9 -4
- package/CHANGELOG.md +37 -0
- package/Dockerfile +2 -2
- package/charts/keycloak-reporter/Chart.yaml +2 -2
- package/charts/keycloak-reporter/README.md +4 -3
- package/charts/keycloak-reporter/ci.values.yaml +5 -0
- package/charts/keycloak-reporter/templates/_helpers.tpl +13 -0
- package/charts/keycloak-reporter/templates/cronjob.yaml +8 -4
- package/charts/keycloak-reporter/templates/tests/test-connection.yaml +4 -0
- package/charts/keycloak-reporter/values.yaml +6 -2
- package/dist/lib/client.js +3 -3
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/output.js +1 -2
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/user.js +7 -4
- package/dist/lib/user.js.map +1 -1
- package/dist/lib/utils.js +3 -2
- package/dist/lib/utils.js.map +1 -1
- package/dist/src/commands.js +6 -8
- package/dist/src/commands.js.map +1 -1
- package/e2e/spec/config.js +16 -30
- package/lib/client.ts +3 -4
- package/lib/output.ts +1 -2
- package/lib/user.ts +7 -4
- package/lib/utils.ts +4 -1
- package/package.json +1 -1
- package/src/commands.ts +7 -9
- package/test/utils.spec.ts +20 -2
package/.ct.yaml
CHANGED
|
@@ -123,10 +123,15 @@ jobs:
|
|
|
123
123
|
- name: Wait for Keycloak server
|
|
124
124
|
run: .bin/wait-for-server.sh
|
|
125
125
|
|
|
126
|
-
- name: Run
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
- name: Run End2End Tests
|
|
127
|
+
uses: nick-fields/retry@v3
|
|
128
|
+
with:
|
|
129
|
+
max_attempts: 3
|
|
130
|
+
retry_on: error
|
|
131
|
+
timeout_minutes: 10
|
|
132
|
+
command: |
|
|
133
|
+
env
|
|
134
|
+
npm run end2end:test
|
|
130
135
|
env:
|
|
131
136
|
WEBHOOK_TESTING_TEAMS: ${{ secrets.WEBHOOK_TESTING_TEAMS }}
|
|
132
137
|
WEBHOOK_TESTING_SLACK: ${{ secrets.WEBHOOK_TESTING_SLACK }}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
## [0.8.8](https://github.com/ContinuousSecurityTooling/keycloak-reporter/compare/v0.8.7...v0.8.8) (2024-02-05)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **deps:** update dependency @keycloak/keycloak-admin-client to v23.0.5 ([d85eb6a](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/d85eb6a06607249c2f2cfa66268a19b9edc12d74))
|
|
7
|
+
* **deps:** update dependency @keycloak/keycloak-admin-client to v23.0.6 ([23b1248](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/23b1248d66272b53482ab228275c2b0c1f34f419))
|
|
8
|
+
* **deps:** update dependency npm to v10.4.0 ([1b6058d](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/1b6058ddcaba382ecd31bf470e1ee99f462ecd29))
|
|
9
|
+
* **Helm:** Correcting mapping issues for labels ([0fe2873](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/0fe2873594c91be59f435813174e4bacf7d1e59d))
|
|
10
|
+
* **Helm:** Correcting resource limits ([1cb51b9](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/1cb51b95f83aefd0fae2d9d6d02fb5a6d24a1a42))
|
|
11
|
+
* **Security:** Correcting chart security findings ([3a4bc67](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/3a4bc67bc8aaa0a1c2426a9baf58d32efca6937d))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **Chart:** Allowing labels and annotations to be added ([f0f350b](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/f0f350bcc6deecc098743af09ab7e840179b4259))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## [0.8.7](https://github.com/ContinuousSecurityTooling/keycloak-reporter/compare/v0.8.6...v0.8.7) (2024-01-29)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
* **Tests:** Correcting test assertions ([1619fb6](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/1619fb6663a68cbbe5daf07a6dcbb786eac77818))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## [0.8.6](https://github.com/ContinuousSecurityTooling/keycloak-reporter/compare/v0.8.5...v0.8.6) (2024-01-29)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Bug Fixes
|
|
33
|
+
|
|
34
|
+
* **Error-Handling:** Correcting error handling and improve error messages ([25f0ceb](https://github.com/ContinuousSecurityTooling/keycloak-reporter/commit/25f0ceb241446205939b606c4022dc286cc5a965)), closes [#184](https://github.com/ContinuousSecurityTooling/keycloak-reporter/issues/184)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
1
38
|
## [0.8.5](https://github.com/ContinuousSecurityTooling/keycloak-reporter/compare/v0.8.4...v0.8.5) (2024-01-29)
|
|
2
39
|
|
|
3
40
|
|
package/Dockerfile
CHANGED
|
@@ -17,7 +17,7 @@ COPY dist/ docker_entrypoint.sh package.json /app
|
|
|
17
17
|
|
|
18
18
|
WORKDIR /app
|
|
19
19
|
|
|
20
|
-
RUN
|
|
20
|
+
RUN npm install --omit=dev &&\
|
|
21
21
|
chown -R 1000:2000 /app
|
|
22
22
|
|
|
23
23
|
# apt update
|
|
@@ -27,4 +27,4 @@ RUN apt-get update && apt-get -y upgrade &&\
|
|
|
27
27
|
|
|
28
28
|
USER 1000
|
|
29
29
|
|
|
30
|
-
ENTRYPOINT ["/app/docker_entrypoint.sh"]
|
|
30
|
+
ENTRYPOINT ["/app/docker_entrypoint.sh"]
|
|
@@ -15,14 +15,14 @@ type: application
|
|
|
15
15
|
# This is the chart version. This version number should be incremented each time you make changes
|
|
16
16
|
# to the chart and its templates, including the app version.
|
|
17
17
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
|
18
|
-
version: 1.
|
|
18
|
+
version: 1.3.1
|
|
19
19
|
|
|
20
20
|
# This is the version number of the application being deployed. This version number should be
|
|
21
21
|
# incremented each time you make changes to the application. Versions are not expected to
|
|
22
22
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
|
23
23
|
# It is recommended to use it with quotes.
|
|
24
24
|
# renovate: datasource=docker depName=ContinuousSecurityTooling/keycloak-reporter
|
|
25
|
-
appVersion: '0.8.
|
|
25
|
+
appVersion: '0.8.8'
|
|
26
26
|
maintainers:
|
|
27
27
|
# Martin Reinhardt
|
|
28
28
|
- name: hypery2k
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# keycloak-reporter
|
|
2
2
|
|
|
3
|
-
  
|
|
4
4
|
|
|
5
5
|
Keycloak user and client reporting tool for automated regular access checks.
|
|
6
6
|
|
|
@@ -26,7 +26,8 @@ Keycloak user and client reporting tool for automated regular access checks.
|
|
|
26
26
|
| keycloak.config.webhookMessage | string | `""` | optional message for the webhook post |
|
|
27
27
|
| nameOverride | string | `""` | |
|
|
28
28
|
| nodeSelector | object | `{}` | |
|
|
29
|
-
| podAnnotations |
|
|
29
|
+
| podAnnotations | map | `{}` | labels to be added to job pod(s) |
|
|
30
|
+
| podLabels | map | `{}` | labels to be added to job pod(s) |
|
|
30
31
|
| replicaCount | int | `1` | |
|
|
31
32
|
| serviceAccount.annotations | object | `{}` | |
|
|
32
33
|
| serviceAccount.create | bool | `true` | |
|
|
@@ -34,4 +35,4 @@ Keycloak user and client reporting tool for automated regular access checks.
|
|
|
34
35
|
| tolerations | list | `[]` | |
|
|
35
36
|
|
|
36
37
|
----------------------------------------------
|
|
37
|
-
Autogenerated from chart metadata using [helm-docs v1.
|
|
38
|
+
Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0)
|
|
@@ -6,6 +6,11 @@ env:
|
|
|
6
6
|
secretKeyRef:
|
|
7
7
|
key: clientSecret
|
|
8
8
|
name: kc-reporter
|
|
9
|
+
podLabels:
|
|
10
|
+
a: "b"
|
|
11
|
+
podAnnotations:
|
|
12
|
+
# see https://www.elastic.co/guide/en/beats/filebeat/current/configuration-autodiscover-hints.html
|
|
13
|
+
co.elastic.logs/enabled: "true"
|
|
9
14
|
keycloak:
|
|
10
15
|
config:
|
|
11
16
|
url: http://localhost:8080
|
|
@@ -30,6 +30,16 @@ Create chart name and version as used by the chart label.
|
|
|
30
30
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
|
31
31
|
{{- end }}
|
|
32
32
|
|
|
33
|
+
{{/*
|
|
34
|
+
Common labels
|
|
35
|
+
*/}}
|
|
36
|
+
{{- define "keycloak-reporter.annotations" -}}
|
|
37
|
+
net.cst.kc-reporter/config-checksum: {{ include (print $.Template.BasePath "/secret.yaml") $ | sha256sum }}
|
|
38
|
+
{{- range $k, $v := .Values.podAnnotations }}
|
|
39
|
+
{{ $k }}: {{ $v | quote }}
|
|
40
|
+
{{- end }}
|
|
41
|
+
{{- end }}
|
|
42
|
+
|
|
33
43
|
{{/*
|
|
34
44
|
Common labels
|
|
35
45
|
*/}}
|
|
@@ -40,6 +50,9 @@ helm.sh/chart: {{ include "keycloak-reporter.chart" . }}
|
|
|
40
50
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
41
51
|
{{- end }}
|
|
42
52
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
53
|
+
{{- range $k, $v := .Values.podLabels }}
|
|
54
|
+
{{ $k }}: {{ $v | quote }}
|
|
55
|
+
{{- end }}
|
|
43
56
|
{{- end }}
|
|
44
57
|
|
|
45
58
|
{{/*
|
|
@@ -4,15 +4,19 @@ apiVersion: batch/v1
|
|
|
4
4
|
kind: CronJob
|
|
5
5
|
metadata:
|
|
6
6
|
name: {{ printf "%s-job-%s" $fullName $name }}
|
|
7
|
+
annotations:
|
|
8
|
+
{{- include "keycloak-reporter.annotations" $ | nindent 4 }}
|
|
9
|
+
labels:
|
|
10
|
+
{{- include "keycloak-reporter.labels" $ | nindent 4 }}
|
|
7
11
|
spec:
|
|
8
12
|
schedule: {{ $config.schedule }}
|
|
9
13
|
jobTemplate:
|
|
10
14
|
spec:
|
|
11
15
|
template:
|
|
12
|
-
{{- with $.Values.podAnnotations }}
|
|
13
16
|
annotations:
|
|
14
|
-
{{-
|
|
15
|
-
|
|
17
|
+
{{- include "keycloak-reporter.annotations" $ | nindent 8 }}
|
|
18
|
+
labels:
|
|
19
|
+
{{- include "keycloak-reporter.labels" $ | nindent 8 }}
|
|
16
20
|
spec:
|
|
17
21
|
{{- with $.Values.imagePullSecrets }}
|
|
18
22
|
imagePullSecrets:
|
|
@@ -69,4 +73,4 @@ spec:
|
|
|
69
73
|
claimName: {{ $fullName }}-reports
|
|
70
74
|
{{- end }}
|
|
71
75
|
---
|
|
72
|
-
{{- end -}}
|
|
76
|
+
{{- end -}}
|
|
@@ -7,7 +7,11 @@ metadata:
|
|
|
7
7
|
helm.sh/hook: test
|
|
8
8
|
helm.sh/hook-delete-policy: "hook-succeeded,before-hook-creation"
|
|
9
9
|
helm.sh/hook-weight: "5"
|
|
10
|
+
{{- include "keycloak-reporter.annotations" . | nindent 4 }}
|
|
11
|
+
labels:
|
|
12
|
+
{{- include "keycloak-reporter.labels" . | nindent 4 }}
|
|
10
13
|
spec:
|
|
14
|
+
automountServiceAccountToken: false
|
|
11
15
|
containers:
|
|
12
16
|
- name: config-test
|
|
13
17
|
image: "{{ $.Values.image.repository }}:{{ $.Values.image.tag | default $.Chart.AppVersion }}"
|
|
@@ -8,7 +8,7 @@ image:
|
|
|
8
8
|
repository: continuoussecuritytooling/keycloak-reporting-cli
|
|
9
9
|
pullPolicy: IfNotPresent
|
|
10
10
|
# Overrides the image tag whose default is the chart appVersion.
|
|
11
|
-
tag:
|
|
11
|
+
tag: ''
|
|
12
12
|
|
|
13
13
|
imagePullSecrets: []
|
|
14
14
|
nameOverride: ''
|
|
@@ -22,7 +22,9 @@ serviceAccount:
|
|
|
22
22
|
# The name of the service account to use.
|
|
23
23
|
# If not set and create is true, a name is generated using the fullname template
|
|
24
24
|
name: ''
|
|
25
|
-
|
|
25
|
+
# -- (map) labels to be added to job pod(s)
|
|
26
|
+
podLabels: {}
|
|
27
|
+
# -- (map) labels to be added to job pod(s)
|
|
26
28
|
podAnnotations: {}
|
|
27
29
|
# @ignore, Configure pod security context
|
|
28
30
|
podSecurityContext:
|
|
@@ -67,9 +69,11 @@ resources:
|
|
|
67
69
|
limits:
|
|
68
70
|
cpu: 200m
|
|
69
71
|
memory: 256Mi
|
|
72
|
+
ephemeral-storage: 200Mi
|
|
70
73
|
requests:
|
|
71
74
|
cpu: 100m
|
|
72
75
|
memory: 128Mi
|
|
76
|
+
ephemeral-storage: 100Mi
|
|
73
77
|
|
|
74
78
|
nodeSelector: {}
|
|
75
79
|
|
package/dist/lib/client.js
CHANGED
|
@@ -16,9 +16,9 @@ export async function createClient(options) {
|
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
catch (e) {
|
|
19
|
-
console.error('Check Client Config:', e.response ? e.
|
|
20
|
-
return Promise.reject();
|
|
19
|
+
console.error('Check Client Config:', e.response ? e.responseData.error_description : e);
|
|
20
|
+
return Promise.reject(e.response ? e.responseData.error_description : e);
|
|
21
21
|
}
|
|
22
|
-
return
|
|
22
|
+
return Promise.resolve(kcAdminClient);
|
|
23
23
|
}
|
|
24
24
|
//# sourceMappingURL=client.js.map
|
package/dist/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAS1E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgB;IACjD,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB;QAC/C,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5C,CAAC,CAAC,IAAI,aAAa,CAAC;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACP,IAAI,CAAC;QACH,eAAe;QACf,MAAM,aAAa,CAAC,IAAI,CAAC;YACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS,EAAE,oBAAoB;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAS1E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgB;IACjD,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB;QAC/C,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5C,CAAC,CAAC,IAAI,aAAa,CAAC;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACP,IAAI,CAAC;QACH,eAAe;QACf,MAAM,aAAa,CAAC,IAAI,CAAC;YACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,SAAS,EAAE,oBAAoB;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/lib/output.js
CHANGED
|
@@ -6,7 +6,6 @@ var WebhookType;
|
|
|
6
6
|
WebhookType["TEAMS"] = "teams";
|
|
7
7
|
})(WebhookType || (WebhookType = {}));
|
|
8
8
|
export async function post2Webhook(type, url, title, reportContent, text) {
|
|
9
|
-
//const title= 'Keycloak Reporting';
|
|
10
9
|
const date = new Date();
|
|
11
10
|
switch (type) {
|
|
12
11
|
case WebhookType.TEAMS.toString():
|
|
@@ -35,7 +34,7 @@ export async function post2Webhook(type, url, title, reportContent, text) {
|
|
|
35
34
|
},
|
|
36
35
|
{
|
|
37
36
|
type: 'TextBlock',
|
|
38
|
-
text: text
|
|
37
|
+
text: text !== null && text !== void 0 ? text : '',
|
|
39
38
|
wrap: true
|
|
40
39
|
}
|
|
41
40
|
],
|
package/dist/lib/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../lib/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjE,IAAK,WAGJ;AAHD,WAAK,WAAW;IACd,8BAAe,CAAA;IACf,8BAAe,CAAA;AACjB,CAAC,EAHI,WAAW,KAAX,WAAW,QAGf;AAOD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,GAAW,EACX,KAAa,EACb,aAAqB,EACrB,IAAa;IAEb,
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../lib/output.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/user.js
CHANGED
|
@@ -10,7 +10,7 @@ export async function clientListing(client) {
|
|
|
10
10
|
}
|
|
11
11
|
catch (e) {
|
|
12
12
|
console.error('Check Client role:', e.response.statusText);
|
|
13
|
-
return Promise.reject();
|
|
13
|
+
return Promise.reject(new Error('Client Role Error'));
|
|
14
14
|
}
|
|
15
15
|
for (const realm of realms) {
|
|
16
16
|
// switch realm
|
|
@@ -51,7 +51,7 @@ export async function clientListing(client) {
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
return
|
|
54
|
+
return Promise.resolve(allClients);
|
|
55
55
|
}
|
|
56
56
|
export async function userListing(client) {
|
|
57
57
|
let allUsers = new Array();
|
|
@@ -64,7 +64,7 @@ export async function userListing(client) {
|
|
|
64
64
|
}
|
|
65
65
|
catch (e) {
|
|
66
66
|
console.error('Check Client role:', e.response.statusText);
|
|
67
|
-
return Promise.reject();
|
|
67
|
+
return Promise.reject(new Error('Client Role Error'));
|
|
68
68
|
}
|
|
69
69
|
for (const realm of realms) {
|
|
70
70
|
// switch realm
|
|
@@ -92,6 +92,9 @@ export async function userListing(client) {
|
|
|
92
92
|
}
|
|
93
93
|
else {
|
|
94
94
|
const users = await client.userListing();
|
|
95
|
+
if ('error' in users) {
|
|
96
|
+
return Promise.reject(new Error('Auditing endpoint not reachable'));
|
|
97
|
+
}
|
|
95
98
|
for (const user of users) {
|
|
96
99
|
allUsers.push({
|
|
97
100
|
username: user.username,
|
|
@@ -105,6 +108,6 @@ export async function userListing(client) {
|
|
|
105
108
|
});
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
|
-
return
|
|
111
|
+
return Promise.resolve(allUsers);
|
|
109
112
|
}
|
|
110
113
|
//# sourceMappingURL=user.js.map
|
package/dist/lib/user.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../lib/user.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iCAAiC,CAAC;AA2B5D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAmC;IAEnC,IAAI,UAAU,GAAG,IAAI,KAAK,EAAwC,CAAC;IACnE,IAAI,MAAM,YAAY,aAAa,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC;QACtC,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC3D,OAAO,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../lib/user.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -24,12 +24,13 @@ export function getConvertConfig(config, argv, name, title, json) {
|
|
|
24
24
|
}, new WebhookConfig(config.webhookType ? config.webhookType : argv.webhookType, config.webhookUrl ? config.webhookUrl : argv.webhookUrl, title, config.webhookMessage ? config.webhookMessage : argv.webhookMessage), json);
|
|
25
25
|
}
|
|
26
26
|
export function getKeycloakConfig(config, argv) {
|
|
27
|
-
var _a;
|
|
28
27
|
return {
|
|
29
28
|
clientId: config.clientId ? config.clientId : argv === null || argv === void 0 ? void 0 : argv.clientId,
|
|
30
29
|
clientSecret: config.clientSecret ? config.clientSecret : argv === null || argv === void 0 ? void 0 : argv.clientSecret,
|
|
31
30
|
rootUrl: config.url ? config.url : argv === null || argv === void 0 ? void 0 : argv.url,
|
|
32
|
-
useAuditingEndpoint:
|
|
31
|
+
useAuditingEndpoint: 'useAuditingEndpoint' in argv
|
|
32
|
+
? String(argv.useAuditingEndpoint).toLowerCase() == 'true'
|
|
33
|
+
: String(config.useAuditingEndpoint).toLowerCase() == 'true',
|
|
33
34
|
};
|
|
34
35
|
}
|
|
35
36
|
//# sourceMappingURL=utils.js.map
|
package/dist/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAKxB,YAAY,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,OAAgB;QACpE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,YAAY;CAGjB;AAED,MAAM,OAAO,aAAa;IAMxB,YAAY,MAAc,EAAE,MAAc,EAAE,OAAqB,EAAE,MAAqB,EAAE,IAAY;QACpG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AACD,MAAM,UAAU,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY;IACtF,OAAO,IAAI,aAAa,CACtB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,MAAiB,EACvD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,MAAiB,EACvD;QACE,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,OAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;KACpE,EACD,IAAI,aAAa,CACf,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,IAAI,CAAC,WAAsB,EACtE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAE,IAAI,CAAC,UAAqB,EACnE,KAAK,EACL,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAE,IAAI,CAAC,cAAyB,CAChF,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAM,EAAE,IAAI
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAKxB,YAAY,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,OAAgB;QACpE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,YAAY;CAGjB;AAED,MAAM,OAAO,aAAa;IAMxB,YAAY,MAAc,EAAE,MAAc,EAAE,OAAqB,EAAE,MAAqB,EAAE,IAAY;QACpG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AACD,MAAM,UAAU,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY;IACtF,OAAO,IAAI,aAAa,CACtB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,MAAiB,EACvD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,MAAiB,EACvD;QACE,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,OAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;KACpE,EACD,IAAI,aAAa,CACf,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAE,IAAI,CAAC,WAAsB,EACtE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAE,IAAI,CAAC,UAAqB,EACnE,KAAK,EACL,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAE,IAAI,CAAC,cAAyB,CAChF,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAM,EAAE,IAAI;IAC5C,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAmB;QACxE,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAuB;QACxF,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAc;QACxD,mBAAmB,EACjB,qBAAqB,IAAI,IAAI;YAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM;YAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM;KACjE,CAAC;AACJ,CAAC"}
|
package/dist/src/commands.js
CHANGED
|
@@ -9,22 +9,20 @@ function kcClient(options) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
export async function listUsers(options) {
|
|
12
|
-
|
|
13
|
-
return new Promise((resolve) => resolve(users));
|
|
12
|
+
return userListing(await kcClient(options));
|
|
14
13
|
}
|
|
15
14
|
export async function listClients(options) {
|
|
16
|
-
|
|
17
|
-
return new Promise((resolve) => resolve(clients));
|
|
15
|
+
return clientListing(await kcClient(options));
|
|
18
16
|
}
|
|
19
17
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
20
18
|
export async function configTest(options) {
|
|
21
19
|
try {
|
|
22
|
-
await userListing(await kcClient(options));
|
|
23
|
-
console.log(`Connection to ${options.rootUrl} was successfull
|
|
20
|
+
const users = await userListing(await kcClient(options));
|
|
21
|
+
console.log(`Connection to ${options.rootUrl} was successfull: ${users.length} users found.`);
|
|
24
22
|
}
|
|
25
23
|
catch (e) {
|
|
26
|
-
console.error(`Connection to ${options.rootUrl} was not
|
|
27
|
-
return
|
|
24
|
+
console.error(`Connection to ${options.rootUrl} was not successfull`, e);
|
|
25
|
+
return;
|
|
28
26
|
}
|
|
29
27
|
}
|
|
30
28
|
//# sourceMappingURL=commands.js.map
|
package/dist/src/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AAMA,OAAO,EAAW,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAQ,WAAW,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAE1E,SAAS,QAAQ,CAAC,OAAgB;IAChC,OAAO,YAAY,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;KACjD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgB;IAC9C,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AAMA,OAAO,EAAW,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAQ,WAAW,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAE1E,SAAS,QAAQ,CAAC,OAAgB;IAChC,OAAO,YAAY,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;KACjD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgB;IAC9C,OAAO,WAAW,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAgB;IAChD,OAAO,aAAa,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC;AACD,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,OAAO,qBAAqB,KAAK,CAAC,MAAM,eAAe,CAAC,CAAC;IAChG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,OAAO,sBAAsB,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;AACH,CAAC"}
|
package/e2e/spec/config.js
CHANGED
|
@@ -5,49 +5,35 @@ import { spawn } from 'node:child_process';
|
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
|
|
7
7
|
test('Should use config file', { timeout: 3000 }, (t) => {
|
|
8
|
-
const cli = spawn(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
{
|
|
15
|
-
env: {
|
|
16
|
-
CONFIG_FILE: process.cwd() + '/e2e/fixtures/config.json',
|
|
17
|
-
...process.env,
|
|
18
|
-
},
|
|
19
|
-
}
|
|
20
|
-
);
|
|
8
|
+
const cli = spawn(path.join(path.dirname('.'), 'node'), ['dist/cli.js', 'listClients'], {
|
|
9
|
+
env: {
|
|
10
|
+
CONFIG_FILE: process.cwd() + '/e2e/fixtures/config.json',
|
|
11
|
+
...process.env,
|
|
12
|
+
},
|
|
13
|
+
});
|
|
21
14
|
cli.stdout.on('data', (chunk) => {
|
|
22
15
|
console.log('Response', JSON.parse(chunk.toString()));
|
|
23
16
|
t.equal(JSON.parse(chunk.toString()).length, 24);
|
|
24
17
|
t.end();
|
|
25
18
|
});
|
|
26
19
|
cli.stderr.on('data', (msg) => {
|
|
27
|
-
t.fail(msg)
|
|
20
|
+
t.fail(msg);
|
|
28
21
|
});
|
|
29
22
|
});
|
|
30
23
|
|
|
31
24
|
test('Should validate config', { timeout: 3000 }, (t) => {
|
|
32
|
-
const cli = spawn(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
{
|
|
39
|
-
env: {
|
|
40
|
-
CONFIG_FILE: process.cwd() + '/e2e/fixtures/config.json',
|
|
41
|
-
...process.env,
|
|
42
|
-
},
|
|
43
|
-
}
|
|
44
|
-
);
|
|
25
|
+
const cli = spawn(path.join(path.dirname('.'), 'node'), ['dist/cli.js', 'configTest'], {
|
|
26
|
+
env: {
|
|
27
|
+
CONFIG_FILE: process.cwd() + '/e2e/fixtures/config.json',
|
|
28
|
+
...process.env,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
45
31
|
cli.stdout.on('data', (chunk) => {
|
|
46
|
-
console.log(chunk.toString())
|
|
47
|
-
t.equal(chunk.toString(), 'Connection to http://localhost:8080 was successfull
|
|
32
|
+
console.log(chunk.toString());
|
|
33
|
+
t.equal(chunk.toString(), 'Connection to http://localhost:8080 was successfull: 3 users found.\n');
|
|
48
34
|
t.end();
|
|
49
35
|
});
|
|
50
36
|
cli.stderr.on('data', (msg) => {
|
|
51
|
-
t.fail(msg)
|
|
37
|
+
t.fail(msg);
|
|
52
38
|
});
|
|
53
39
|
});
|
package/lib/client.ts
CHANGED
|
@@ -23,9 +23,8 @@ export async function createClient(options: Options): Promise<KcAdminClient | Au
|
|
|
23
23
|
grantType: 'client_credentials',
|
|
24
24
|
});
|
|
25
25
|
} catch (e) {
|
|
26
|
-
console.error('Check Client Config:', e.response ? e.
|
|
27
|
-
return Promise.reject();
|
|
26
|
+
console.error('Check Client Config:', e.response ? e.responseData.error_description : e);
|
|
27
|
+
return Promise.reject(e.response ? e.responseData.error_description : e);
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
return new Promise((resolve) => resolve(kcAdminClient));
|
|
29
|
+
return Promise.resolve(kcAdminClient);
|
|
31
30
|
}
|
package/lib/output.ts
CHANGED
|
@@ -19,7 +19,6 @@ export async function post2Webhook(
|
|
|
19
19
|
reportContent: string,
|
|
20
20
|
text?: string
|
|
21
21
|
): Promise<unknown> {
|
|
22
|
-
//const title= 'Keycloak Reporting';
|
|
23
22
|
const date = new Date();
|
|
24
23
|
switch (type) {
|
|
25
24
|
case WebhookType.TEAMS.toString():
|
|
@@ -50,7 +49,7 @@ export async function post2Webhook(
|
|
|
50
49
|
},
|
|
51
50
|
{
|
|
52
51
|
type: 'TextBlock',
|
|
53
|
-
text: text
|
|
52
|
+
text: text ?? '',
|
|
54
53
|
wrap: true
|
|
55
54
|
}
|
|
56
55
|
],
|
package/lib/user.ts
CHANGED
|
@@ -37,7 +37,7 @@ export async function clientListing(
|
|
|
37
37
|
realms = await client.realms.find();
|
|
38
38
|
} catch (e) {
|
|
39
39
|
console.error('Check Client role:', e.response.statusText);
|
|
40
|
-
return Promise.reject();
|
|
40
|
+
return Promise.reject(new Error('Client Role Error'));
|
|
41
41
|
}
|
|
42
42
|
for (const realm of realms) {
|
|
43
43
|
// switch realm
|
|
@@ -77,7 +77,7 @@ export async function clientListing(
|
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
return
|
|
80
|
+
return Promise.resolve(allClients);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
export async function userListing(
|
|
@@ -92,7 +92,7 @@ export async function userListing(
|
|
|
92
92
|
realms = await client.realms.find();
|
|
93
93
|
} catch (e) {
|
|
94
94
|
console.error('Check Client role:', e.response.statusText);
|
|
95
|
-
return Promise.reject();
|
|
95
|
+
return Promise.reject(new Error('Client Role Error'));
|
|
96
96
|
}
|
|
97
97
|
for (const realm of realms) {
|
|
98
98
|
// switch realm
|
|
@@ -119,6 +119,9 @@ export async function userListing(
|
|
|
119
119
|
});
|
|
120
120
|
} else {
|
|
121
121
|
const users = await client.userListing();
|
|
122
|
+
if ('error' in users) {
|
|
123
|
+
return Promise.reject(new Error('Auditing endpoint not reachable'));
|
|
124
|
+
}
|
|
122
125
|
for (const user of users) {
|
|
123
126
|
allUsers.push({
|
|
124
127
|
username: user.username,
|
|
@@ -132,5 +135,5 @@ export async function userListing(
|
|
|
132
135
|
});
|
|
133
136
|
}
|
|
134
137
|
}
|
|
135
|
-
return
|
|
138
|
+
return Promise.resolve(allUsers);
|
|
136
139
|
}
|
package/lib/utils.ts
CHANGED
|
@@ -55,6 +55,9 @@ export function getKeycloakConfig(config, argv): Options {
|
|
|
55
55
|
clientId: config.clientId ? config.clientId : (argv?.clientId as string),
|
|
56
56
|
clientSecret: config.clientSecret ? config.clientSecret : (argv?.clientSecret as string),
|
|
57
57
|
rootUrl: config.url ? config.url : (argv?.url as string),
|
|
58
|
-
useAuditingEndpoint:
|
|
58
|
+
useAuditingEndpoint:
|
|
59
|
+
'useAuditingEndpoint' in argv
|
|
60
|
+
? String(argv.useAuditingEndpoint).toLowerCase() == 'true'
|
|
61
|
+
: String(config.useAuditingEndpoint).toLowerCase() == 'true',
|
|
59
62
|
};
|
|
60
63
|
}
|
package/package.json
CHANGED
package/src/commands.ts
CHANGED
|
@@ -17,21 +17,19 @@ function kcClient(options: Options): Promise<KcAdminClient | AuditClient> {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export async function listUsers(options: Options): Promise<Array<User | AuditedUserRepresentation>> {
|
|
20
|
-
|
|
21
|
-
return new Promise((resolve) => resolve(users));
|
|
20
|
+
return userListing(await kcClient(options));
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
export async function listClients(options: Options): Promise<Array<Client | AuditedClientRepresentation>> {
|
|
25
|
-
|
|
26
|
-
return new Promise((resolve) => resolve(clients));
|
|
24
|
+
return clientListing(await kcClient(options));
|
|
27
25
|
}
|
|
28
26
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
29
|
-
export async function configTest(options: Options)
|
|
27
|
+
export async function configTest(options: Options) {
|
|
30
28
|
try {
|
|
31
|
-
await userListing(await kcClient(options));
|
|
32
|
-
console.log(`Connection to ${options.rootUrl} was successfull
|
|
29
|
+
const users = await userListing(await kcClient(options));
|
|
30
|
+
console.log(`Connection to ${options.rootUrl} was successfull: ${users.length} users found.`);
|
|
33
31
|
} catch (e) {
|
|
34
|
-
console.error(`Connection to ${options.rootUrl} was not
|
|
35
|
-
return
|
|
32
|
+
console.error(`Connection to ${options.rootUrl} was not successfull`, e);
|
|
33
|
+
return;
|
|
36
34
|
}
|
|
37
35
|
}
|
package/test/utils.spec.ts
CHANGED
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
/// <reference types="jest-extended" />
|
|
2
2
|
import { getKeycloakConfig } from '../lib/utils';
|
|
3
|
-
test('no config',
|
|
4
|
-
expect(getKeycloakConfig({},
|
|
3
|
+
test('no config', () => {
|
|
4
|
+
expect(getKeycloakConfig({}, {})).toEqual({
|
|
5
5
|
clientId: undefined,
|
|
6
6
|
clientSecret: undefined,
|
|
7
7
|
rootUrl: undefined,
|
|
8
8
|
useAuditingEndpoint: false,
|
|
9
9
|
});
|
|
10
10
|
});
|
|
11
|
+
|
|
12
|
+
test('config with useAuditingEndpoint', () => {
|
|
13
|
+
expect(getKeycloakConfig({ useAuditingEndpoint: 'true' }, {})).toEqual({
|
|
14
|
+
clientId: undefined,
|
|
15
|
+
clientSecret: undefined,
|
|
16
|
+
rootUrl: undefined,
|
|
17
|
+
useAuditingEndpoint: true,
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test('argv with useAuditingEndpoint', () => {
|
|
22
|
+
expect(getKeycloakConfig({}, { useAuditingEndpoint: 'true' })).toEqual({
|
|
23
|
+
clientId: undefined,
|
|
24
|
+
clientSecret: undefined,
|
|
25
|
+
rootUrl: undefined,
|
|
26
|
+
useAuditingEndpoint: true,
|
|
27
|
+
});
|
|
28
|
+
});
|