@continuoussecuritytooling/keycloak-reporter 1.2.1-3194 → 1.3.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.
@@ -0,0 +1,15 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm run:*)",
5
+ "Bash(npm install:*)",
6
+ "Bash(git -C /Users/mreinhardt/git/job/keycloak-reporter log --oneline -10)",
7
+ "Bash(git -C /Users/mreinhardt/git/job/keycloak-reporter log --oneline --all)",
8
+ "Bash(git -C /Users/mreinhardt/git/job/keycloak-reporter diff HEAD~5 HEAD -- e2e/fixtures/)",
9
+ "Bash(npm ls:*)",
10
+ "Bash(node -e \"const f=JSON.parse\\(require\\(''fs''\\).readFileSync\\(''/Users/mreinhardt/git/job/keycloak-reporter/e2e/fixtures/auth-utils/test-realm.json'',''utf8''\\)\\); console.log\\(Array.isArray\\(f\\), f.length, f.map\\(r=>r.realm||r.id\\)\\)\")",
11
+ "Bash(node -e \":*)",
12
+ "Bash(curl -s -X POST http://localhost:8080/realms/master/protocol/openid-connect/token -d 'grant_type=client_credentials' -d 'client_id=keycloak-reporter' -d 'client_secret=3UYhI2hryFwoVtcd7ljlaDuD9HXrGV5r')"
13
+ ]
14
+ }
15
+ }
@@ -94,7 +94,6 @@ jobs:
94
94
  path: dist
95
95
 
96
96
  end2end:
97
- # TODO: Docker End2End
98
97
  name: 'End2End Test on Node ${{ matrix.node_version }} and ${{ matrix.os }}'
99
98
  runs-on: '${{ matrix.os }}'
100
99
  strategy:
@@ -199,24 +198,3 @@ jobs:
199
198
  build-args: |
200
199
  BUILD_DATE=${{env.BUILD_DATE}}
201
200
  APP_VERSION=${{env.APP_VERSION}}
202
-
203
- - name: Push To NPM Registry
204
- id: push-to-npm-preview
205
- env:
206
- NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
207
- run: |
208
- echo "//registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN" >> ~/.npmrc
209
- npm version --no-git-tag-version ${{env.APP_VERSION}}-${{ github.run_number }}
210
- npm publish --tag next
211
- if: github.ref == 'refs/heads/develop'
212
-
213
- - name: Push To Docker Hub
214
- id: push-to-dockerhub-preview
215
- uses: redhat-actions/push-to-registry@v2
216
- with:
217
- image: ${{ steps.build-image.outputs.image }}
218
- tags: 'next ${{env.APP_VERSION}}_rc'
219
- registry: registry.hub.docker.com
220
- username: continuoussecuritytooling
221
- password: ${{ secrets.DOCKER_HUB_TOKEN }}
222
- if: github.ref == 'refs/heads/develop'
@@ -210,8 +210,6 @@ jobs:
210
210
  - name: Publish npm package
211
211
  run: |
212
212
  npm publish
213
- env:
214
- NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
215
213
 
216
214
  - name: Login to GitHub Container Registry
217
215
  run: |
@@ -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.4.12
18
+ version: 1.4.13
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
- # renovate: datasource=docker depName=ContinuousSecurityTooling/keycloak-reporter
25
- appVersion: 1.2.1
24
+ # renovate: datasource=docker depName=continuoussecuritytooling/keycloak-reporting-cli
25
+ appVersion: 1.3.0
26
26
  maintainers:
27
27
  # Martin Reinhardt
28
28
  - name: hypery2k
@@ -1,6 +1,6 @@
1
1
  # keycloak-reporter
2
2
 
3
- ![Version: 1.4.12](https://img.shields.io/badge/Version-1.4.12-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.2.1](https://img.shields.io/badge/AppVersion-1.2.1-informational?style=flat-square)
3
+ ![Version: 1.4.13](https://img.shields.io/badge/Version-1.4.13-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.3.0](https://img.shields.io/badge/AppVersion-1.3.0-informational?style=flat-square)
4
4
 
5
5
  Keycloak user and client reporting tool for automated regular access checks.
6
6
 
package/cli.ts CHANGED
@@ -12,7 +12,6 @@ yargs(hideBin(process.argv))
12
12
  .command(
13
13
  'listUsers [url] [clientId] [clientSecret]',
14
14
  'fetches all users in the realms.',
15
- // eslint-disable-next-line @typescript-eslint/no-empty-function
16
15
  () => {},
17
16
  async (argv) => {
18
17
  const users = await listUsers(getKeycloakConfig(config, argv));
@@ -22,7 +21,6 @@ yargs(hideBin(process.argv))
22
21
  .command(
23
22
  'listClients [url] [clientId] [clientSecret]',
24
23
  'fetches all clients in the realms.',
25
- // eslint-disable-next-line @typescript-eslint/no-empty-function
26
24
  () => {},
27
25
  async (argv) => {
28
26
  const clients = await listClients(getKeycloakConfig(config, argv));
@@ -77,7 +75,6 @@ yargs(hideBin(process.argv))
77
75
  .command(
78
76
  'configTest [url] [clientId] [clientSecret]',
79
77
  'validates keycloak configuration by reading data via REST API',
80
- // eslint-disable-next-line @typescript-eslint/no-empty-function
81
78
  () => {},
82
79
  async (argv) => configTest(getKeycloakConfig(config, argv))
83
80
  )
@@ -0,0 +1 @@
1
+ sha256:3fa0013844a332d40513603fa2692782c5c478ce519d41bf39e393100d4ef5fa
package/dist/cli.js CHANGED
@@ -7,15 +7,11 @@ import { configTest, listUsers, listClients } from './index.js';
7
7
  import config from './src/config.js';
8
8
  yargs(hideBin(process.argv))
9
9
  .env()
10
- .command('listUsers [url] [clientId] [clientSecret]', 'fetches all users in the realms.',
11
- // eslint-disable-next-line @typescript-eslint/no-empty-function
12
- () => { }, async (argv) => {
10
+ .command('listUsers [url] [clientId] [clientSecret]', 'fetches all users in the realms.', () => { }, async (argv) => {
13
11
  const users = await listUsers(getKeycloakConfig(config, argv));
14
12
  convert(getConvertConfig(config, argv, 'user_listing', 'User Listing', users));
15
13
  })
16
- .command('listClients [url] [clientId] [clientSecret]', 'fetches all clients in the realms.',
17
- // eslint-disable-next-line @typescript-eslint/no-empty-function
18
- () => { }, async (argv) => {
14
+ .command('listClients [url] [clientId] [clientSecret]', 'fetches all clients in the realms.', () => { }, async (argv) => {
19
15
  const clients = await listClients(getKeycloakConfig(config, argv));
20
16
  convert(getConvertConfig(config, argv, 'client_listing', 'Client Listing', clients));
21
17
  })
@@ -64,8 +60,6 @@ yargs(hideBin(process.argv))
64
60
  default: false,
65
61
  description: 'use JSON log format',
66
62
  })
67
- .command('configTest [url] [clientId] [clientSecret]', 'validates keycloak configuration by reading data via REST API',
68
- // eslint-disable-next-line @typescript-eslint/no-empty-function
69
- () => { }, async (argv) => configTest(getKeycloakConfig(config, argv)))
63
+ .command('configTest [url] [clientId] [clientSecret]', 'validates keycloak configuration by reading data via REST API', () => { }, async (argv) => configTest(getKeycloakConfig(config, argv)))
70
64
  .parse();
71
65
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB,GAAG,EAAE;KACL,OAAO,CACN,2CAA2C,EAC3C,kCAAkC;AAClC,gEAAgE;AAChE,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;AACjF,CAAC,CACF;KACA,OAAO,CACN,6CAA6C,EAC7C,oCAAoC;AACpC,gEAAgE;AAChE,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;AACvF,CAAC,CACF;KACA,MAAM,CAAC,QAAQ,EAAE;IAChB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,8BAA8B;CAC5C,CAAC;KACD,MAAM,CAAC,QAAQ,EAAE;IAChB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,gBAAgB;CAC9B,CAAC;KACD,MAAM,CAAC,aAAa,EAAE;IACrB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,cAAc;CAC5B,CAAC;KACD,MAAM,CAAC,gBAAgB,EAAE;IACxB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,iBAAiB;CAC/B,CAAC;KACD,MAAM,CAAC,YAAY,EAAE;IACpB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,aAAa;CAC3B,CAAC;KACD,MAAM,CAAC,SAAS,EAAE;IACjB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,mBAAmB;CACjC,CAAC;KACD,MAAM,CAAC,qBAAqB,EAAE;IAC7B,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,2BAA2B;CACzC,CAAC;KACD,MAAM,CAAC,eAAe,EAAE;IACvB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,qBAAqB;CACnC,CAAC;KACD,OAAO,CACN,4CAA4C,EAC5C,+DAA+D;AAC/D,gEAAgE;AAChE,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAC5D;KACA,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB,GAAG,EAAE;KACL,OAAO,CACN,2CAA2C,EAC3C,kCAAkC,EAClC,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;AACjF,CAAC,CACF;KACA,OAAO,CACN,6CAA6C,EAC7C,oCAAoC,EACpC,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;AACvF,CAAC,CACF;KACA,MAAM,CAAC,QAAQ,EAAE;IAChB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,8BAA8B;CAC5C,CAAC;KACD,MAAM,CAAC,QAAQ,EAAE;IAChB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,gBAAgB;CAC9B,CAAC;KACD,MAAM,CAAC,aAAa,EAAE;IACrB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,cAAc;CAC5B,CAAC;KACD,MAAM,CAAC,gBAAgB,EAAE;IACxB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,iBAAiB;CAC/B,CAAC;KACD,MAAM,CAAC,YAAY,EAAE;IACpB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,aAAa;CAC3B,CAAC;KACD,MAAM,CAAC,SAAS,EAAE;IACjB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,mBAAmB;CACjC,CAAC;KACD,MAAM,CAAC,qBAAqB,EAAE;IAC7B,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,2BAA2B;CACzC,CAAC;KACD,MAAM,CAAC,eAAe,EAAE;IACvB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,qBAAqB;CACnC,CAAC;KACD,OAAO,CACN,4CAA4C,EAC5C,+DAA+D,EAC/D,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAC5D;KACA,KAAK,EAAE,CAAC"}
@@ -2,6 +2,7 @@ import KcAdminClient from '@keycloak/keycloak-admin-client';
2
2
  import { AuditClient } from '@continuoussecuritytooling/keycloak-auditor';
3
3
  import logger from './logger.js';
4
4
  export async function createClient(options) {
5
+ var _a, _b;
5
6
  const kcAdminClient = options.useAuditingEndpoint
6
7
  ? new AuditClient(options.rootUrl, 'master')
7
8
  : new KcAdminClient({
@@ -17,8 +18,9 @@ export async function createClient(options) {
17
18
  });
18
19
  }
19
20
  catch (e) {
20
- logger.error('Check Client Config:', e.response ? e.responseData.error_description : e);
21
- return Promise.reject(e.response ? e.responseData.error_description : e);
21
+ const err = e;
22
+ logger.error('Check Client Config:', err.response ? (_a = err.responseData) === null || _a === void 0 ? void 0 : _a.error_description : e);
23
+ return Promise.reject(err.response ? (_b = err.responseData) === null || _b === void 0 ? void 0 : _b.error_description : e);
22
24
  }
23
25
  return Promise.resolve(kcAdminClient);
24
26
  }
@@ -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;AAC1E,OAAO,MAAM,MAAM,aAAa,CAAC;AASjC,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,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,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"}
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;AAC1E,OAAO,MAAM,MAAM,aAAa,CAAC;AASjC,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,MAAM,GAAG,GAAG,CAA0E,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAA,GAAG,CAAC,YAAY,0CAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAA,GAAG,CAAC,YAAY,0CAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACxC,CAAC"}
@@ -2,7 +2,7 @@ import winston from 'winston';
2
2
  import { ecsFormat } from '@elastic/ecs-winston-format';
3
3
  import config from '../src/config.js';
4
4
  import { getAppConfig } from './utils.js';
5
- const appConfig = getAppConfig(config, process.argv);
5
+ const appConfig = getAppConfig(config, {});
6
6
  const logger = appConfig.json
7
7
  ? winston.createLogger({
8
8
  format: ecsFormat( /* options */),
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAErD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI;IAC3B,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QACnB,MAAM,EAAE,SAAS,EAAC,aAAa,CAAC;QAChC,UAAU,EAAE,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;KAC/C,CAAC;IACJ,CAAC,CAAC,OAAO,CAAC;AAEZ,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI;IAC3B,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QACnB,MAAM,EAAE,SAAS,EAAC,aAAa,CAAC;QAChC,UAAU,EAAE,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;KAC/C,CAAC;IACJ,CAAC,CAAC,OAAO,CAAC;AAEZ,eAAe,MAAM,CAAC"}
@@ -29,7 +29,8 @@ export async function convert(cfg) {
29
29
  logger.info('Done sending.');
30
30
  }
31
31
  catch (e) {
32
- switch (e.code || e.message) {
32
+ const err = e;
33
+ switch (err.code || err.message) {
33
34
  case 'Request failed with status code 400':
34
35
  logger.error('Invalid Teams Webhook Payload. Check your params.');
35
36
  throw new Error('Invalid Teams Payload', { cause: e });
@@ -40,7 +41,7 @@ export async function convert(cfg) {
40
41
  logger.error('Generic Webhook request failed. Check your URL and params.');
41
42
  throw new Error('Invalid Generic Webhook request', { cause: e });
42
43
  default:
43
- logger.error(`Error during sending webhook.(${e === null || e === void 0 ? void 0 : e.code})`, e === null || e === void 0 ? void 0 : e.original);
44
+ logger.error(`Error during sending webhook.(${err.code})`, err.original);
44
45
  throw e;
45
46
  }
46
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../lib/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../lib/report.ts"],"names":[],"mappings":"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"}
package/dist/lib/user.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import KcAdminClient from '@keycloak/keycloak-admin-client';
2
2
  import logger from './logger.js';
3
3
  export async function clientListing(client) {
4
+ var _a;
4
5
  let allClients = new Array();
5
6
  if (client instanceof KcAdminClient) {
6
7
  const currentRealm = client.realmName;
@@ -10,7 +11,8 @@ export async function clientListing(client) {
10
11
  realms = await client.realms.find();
11
12
  }
12
13
  catch (e) {
13
- logger.error('Check Client role:', e.response.statusText);
14
+ const err = e;
15
+ logger.error('Check Client role:', (_a = err.response) === null || _a === void 0 ? void 0 : _a.statusText);
14
16
  return Promise.reject(new Error('Client Role Error'));
15
17
  }
16
18
  for (const realm of realms) {
@@ -55,6 +57,7 @@ export async function clientListing(client) {
55
57
  return Promise.resolve(allClients);
56
58
  }
57
59
  export async function userListing(client) {
60
+ var _a;
58
61
  let allUsers = new Array();
59
62
  if (client instanceof KcAdminClient) {
60
63
  const currentRealm = client.realmName;
@@ -64,7 +67,8 @@ export async function userListing(client) {
64
67
  realms = await client.realms.find();
65
68
  }
66
69
  catch (e) {
67
- logger.error('Check Client role:', e.response.statusText);
70
+ const err = e;
71
+ logger.error('Check Client role:', (_a = err.response) === null || _a === void 0 ? void 0 : _a.statusText);
68
72
  return Promise.reject(new Error('Client Role Error'));
69
73
  }
70
74
  for (const realm of realms) {
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../lib/user.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../lib/user.ts"],"names":[],"mappings":"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"}
package/dist/lib/utils.js CHANGED
@@ -28,10 +28,10 @@ export class AppConfig {
28
28
  }
29
29
  }
30
30
  export function getConvertConfig(config, argv, name, title, json) {
31
- return new ConvertConfig(config.format ? config.format : argv.format, config.output ? config.output : argv.output, {
31
+ return new ConvertConfig((config.format || argv.format), (config.output || argv.output), {
32
32
  name,
33
- directory: argv.reports ? argv.reports : config.reports,
34
- }, new WebhookConfig(config.webhookType ? config.webhookType : argv.webhookType, config.webhookUrl ? config.webhookUrl : argv.webhookUrl, title, config.webhookMessage ? config.webhookMessage : argv.webhookMessage), json);
33
+ directory: (argv.reports || config.reports),
34
+ }, new WebhookConfig((config.webhookType || argv.webhookType), (config.webhookUrl || argv.webhookUrl), title, (config.webhookMessage || argv.webhookMessage)), json);
35
35
  }
36
36
  export function getAppConfig(config, argv) {
37
37
  return new AppConfig(new LogConfig('jsonLogFormat' in argv
@@ -40,9 +40,9 @@ export function getAppConfig(config, argv) {
40
40
  }
41
41
  export function getKeycloakConfig(config, argv) {
42
42
  return {
43
- clientId: config.clientId ? config.clientId : argv === null || argv === void 0 ? void 0 : argv.clientId,
44
- clientSecret: config.clientSecret ? config.clientSecret : argv === null || argv === void 0 ? void 0 : argv.clientSecret,
45
- rootUrl: config.url ? config.url : argv === null || argv === void 0 ? void 0 : argv.url,
43
+ clientId: (config.clientId || argv.clientId),
44
+ clientSecret: (config.clientSecret || argv.clientSecret),
45
+ rootUrl: (config.url || argv.url),
46
46
  useAuditingEndpoint: 'useAuditingEndpoint' in argv
47
47
  ? String(argv.useAuditingEndpoint).toLowerCase() == 'true'
48
48
  : String(config.useAuditingEndpoint).toLowerCase() == 'true',
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils.ts"],"names":[],"mappings":"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"}
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;AACD,MAAM,OAAO,SAAS;IAEpB,YAAY,OAAgB,KAAK;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,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;AAED,MAAM,OAAO,SAAS;IAGpB,YAAY,SAAoB;QAC9B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;IACvB,CAAC;CACF;AACD,MAAM,UAAU,gBAAgB,CAAC,MAA+B,EAAE,IAA6B,EAAE,IAAY,EAAE,KAAa,EAAE,IAAY;IACxI,OAAO,IAAI,aAAa,CACtB,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAW,EACxC,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAW,EACxC;QACE,IAAI;QACJ,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAW;KACtD,EACD,IAAI,aAAa,CACf,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAW,EAClD,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAW,EAChD,KAAK,EACL,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAuB,CACrE,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA+B,EAAE,IAA6B;IACzF,OAAO,IAAI,SAAS,CAClB,IAAI,SAAS,CACX,eAAe,IAAI,IAAI;QACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM;QACpD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CACzD,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAA+B,EAAE,IAA6B;IAC9F,OAAO;QACL,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAW;QACtD,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAW;QAClE,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAW;QAC3C,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"}
@@ -15,7 +15,6 @@ export async function listUsers(options) {
15
15
  export async function listClients(options) {
16
16
  return clientListing(await kcClient(options));
17
17
  }
18
- /* eslint-disable @typescript-eslint/no-explicit-any */
19
18
  export async function configTest(options) {
20
19
  try {
21
20
  const users = await userListing(await kcClient(options));
@@ -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;AAC1E,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAEtC,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,MAAM,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,OAAO,oBAAoB,KAAK,CAAC,MAAM,eAAe,CAAC,CAAC;IAC/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,OAAO,qBAAqB,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;AACH,CAAC"}
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;AAC1E,OAAO,MAAM,MAAM,kBAAkB,CAAC;AAEtC,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,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,MAAM,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,OAAO,oBAAoB,KAAK,CAAC,MAAM,eAAe,CAAC,CAAC;IAC/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,OAAO,qBAAqB,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { assoc, pick, mergeAll, mergeDeepRight } from 'ramda';
1
+ import { assoc, pick, mergeAll } from 'ramda';
2
2
  import path from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
  import fs from 'fs';
@@ -17,10 +17,12 @@ function buildDefaults(schema, definitions) {
17
17
  return Object.keys(schema.properties).reduce((acc, prop) => {
18
18
  let spec = schema.properties[prop];
19
19
  if (spec.$ref) {
20
- spec = definitions[spec.$ref.replace('#/definitions/', '')];
21
- if (spec && spec.type === 'object') {
22
- return assoc(prop, buildDefaults(spec, definitions), acc);
20
+ const def = definitions[spec.$ref.replace('#/definitions/', '')];
21
+ if ((def === null || def === void 0 ? void 0 : def.type) === 'object') {
22
+ return assoc(prop, buildDefaults(def, definitions), acc);
23
23
  }
24
+ if (def)
25
+ spec = def;
24
26
  }
25
27
  return assoc(prop, spec.default, acc);
26
28
  }, {});
@@ -28,6 +30,7 @@ function buildDefaults(schema, definitions) {
28
30
  // build an object of config values taken from process.env
29
31
  function buildEnvironmentVariablesConfig(schema) {
30
32
  const trueRx = /^true$/i;
33
+ /* eslint-disable @typescript-eslint/no-explicit-any */
31
34
  const configKeys = Object.keys(schema.properties);
32
35
  const env = pick(configKeys, process.env);
33
36
  return Object.keys(env).reduce((acc, key) => {
@@ -43,6 +46,10 @@ function buildEnvironmentVariablesConfig(schema) {
43
46
  }, {});
44
47
  }
45
48
  // merge the environment variables, config file values, and defaults
46
- const config = mergeAll(mergeDeepRight(buildDefaults(schema, schema.definitions), buildConfigFromFile(process.env.CONFIG_FILE)), buildEnvironmentVariablesConfig(schema));
49
+ const config = mergeAll([
50
+ buildDefaults(schema, schema.definitions),
51
+ buildConfigFromFile(process.env.CONFIG_FILE),
52
+ buildEnvironmentVariablesConfig(schema),
53
+ ]);
47
54
  export default config;
48
55
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
package/jest.config.js CHANGED
@@ -19,6 +19,9 @@ export default {
19
19
  'node_modules/(?!(string-width|strip-ansi|ansi-regex|test-json-import)/)',
20
20
  ],
21
21
  'transform': {
22
- '^.+\\.(ts|tsx)$': 'ts-jest',
22
+ '^.+\\.(ts|tsx)$': ['ts-jest', {
23
+ tsconfig: './tsconfig.test.json',
24
+ diagnostics: { ignoreCodes: [151002] },
25
+ }],
23
26
  },
24
27
  };
Binary file
package/lib/client.ts CHANGED
@@ -24,8 +24,9 @@ export async function createClient(options: Options): Promise<KcAdminClient | Au
24
24
  grantType: 'client_credentials',
25
25
  });
26
26
  } catch (e) {
27
- logger.error('Check Client Config:', e.response ? e.responseData.error_description : e);
28
- return Promise.reject(e.response ? e.responseData.error_description : e);
27
+ const err = e as { response?: unknown; responseData?: { error_description?: string } };
28
+ logger.error('Check Client Config:', err.response ? err.responseData?.error_description : e);
29
+ return Promise.reject(err.response ? err.responseData?.error_description : e);
29
30
  }
30
31
  return Promise.resolve(kcAdminClient);
31
32
  }
package/lib/logger.ts CHANGED
@@ -3,7 +3,7 @@ import { ecsFormat } from '@elastic/ecs-winston-format';
3
3
  import config from '../src/config.js';
4
4
  import { getAppConfig } from './utils.js';
5
5
 
6
- const appConfig = getAppConfig(config, process.argv);
6
+ const appConfig = getAppConfig(config, {});
7
7
 
8
8
  const logger = appConfig.json
9
9
  ? winston.createLogger({
package/lib/report.ts CHANGED
@@ -36,7 +36,8 @@ export async function convert(cfg: ConvertConfig) {
36
36
  await post2Webhook(cfg.config.type, cfg.config.url, cfg.config.title, outputContent, cfg.config.message);
37
37
  logger.info('Done sending.');
38
38
  } catch (e) {
39
- switch (e.code || e.message) {
39
+ const err = e as { code?: string; message?: string; original?: unknown };
40
+ switch (err.code || err.message) {
40
41
  case 'Request failed with status code 400':
41
42
  logger.error('Invalid Teams Webhook Payload. Check your params.');
42
43
  throw new Error('Invalid Teams Payload', { cause: e });
@@ -47,7 +48,7 @@ export async function convert(cfg: ConvertConfig) {
47
48
  logger.error('Generic Webhook request failed. Check your URL and params.');
48
49
  throw new Error('Invalid Generic Webhook request', { cause: e });
49
50
  default:
50
- logger.error(`Error during sending webhook.(${e?.code})`, e?.original);
51
+ logger.error(`Error during sending webhook.(${err.code})`, err.original);
51
52
  throw e;
52
53
  }
53
54
  }
package/lib/user.ts CHANGED
@@ -37,7 +37,8 @@ export async function clientListing(
37
37
  // iterate over realms
38
38
  realms = await client.realms.find();
39
39
  } catch (e) {
40
- logger.error('Check Client role:', e.response.statusText);
40
+ const err = e as { response?: { statusText?: string } };
41
+ logger.error('Check Client role:', err.response?.statusText);
41
42
  return Promise.reject(new Error('Client Role Error'));
42
43
  }
43
44
  for (const realm of realms) {
@@ -48,12 +49,12 @@ export async function clientListing(
48
49
  const realmClients = new Array<Client>();
49
50
  for (const user of await client.clients.find()) {
50
51
  realmClients.push({
51
- client: user.clientId,
52
- id: user.id,
53
- description: user.description,
54
- realm: realm.realm,
55
- enabled: user.enabled,
56
- public: user.publicClient,
52
+ client: user.clientId!,
53
+ id: user.id!,
54
+ description: user.description!,
55
+ realm: realm.realm!,
56
+ enabled: user.enabled!,
57
+ public: user.publicClient!,
57
58
  allowedOrigins: JSON.stringify(user.webOrigins),
58
59
  });
59
60
  }
@@ -92,7 +93,8 @@ export async function userListing(
92
93
  try {
93
94
  realms = await client.realms.find();
94
95
  } catch (e) {
95
- logger.error('Check Client role:', e.response.statusText);
96
+ const err = e as { response?: { statusText?: string } };
97
+ logger.error('Check Client role:', err.response?.statusText);
96
98
  return Promise.reject(new Error('Client Role Error'));
97
99
  }
98
100
  for (const realm of realms) {
@@ -103,13 +105,13 @@ export async function userListing(
103
105
  const realmUsers = new Array<User>();
104
106
  for (const user of await client.users.find()) {
105
107
  realmUsers.push({
106
- username: user.username,
107
- id: user.id,
108
- firstName: user.firstName,
109
- lastName: user.lastName,
110
- email: user.email,
111
- realm: realm.realm,
112
- enabled: user.enabled,
108
+ username: user.username!,
109
+ id: user.id!,
110
+ firstName: user.firstName!,
111
+ lastName: user.lastName!,
112
+ email: user.email!,
113
+ realm: realm.realm!,
114
+ enabled: user.enabled!,
113
115
  });
114
116
  }
115
117
  allUsers = [...allUsers, ...realmUsers];
package/lib/utils.ts CHANGED
@@ -20,8 +20,8 @@ export class LogConfig {
20
20
  }
21
21
 
22
22
  class ReportConfig {
23
- name: string;
24
- directory: string;
23
+ name!: string;
24
+ directory!: string;
25
25
  }
26
26
 
27
27
  export class ConvertConfig {
@@ -41,30 +41,30 @@ export class ConvertConfig {
41
41
 
42
42
  export class AppConfig {
43
43
  log: LogConfig;
44
- json: object;
44
+ json?: object;
45
45
  constructor(logConfig: LogConfig) {
46
46
  this.log = logConfig;
47
47
  }
48
48
  }
49
- export function getConvertConfig(config, argv, name: string, title: string, json: object): ConvertConfig {
49
+ export function getConvertConfig(config: Record<string, unknown>, argv: Record<string, unknown>, name: string, title: string, json: object): ConvertConfig {
50
50
  return new ConvertConfig(
51
- config.format ? config.format : (argv.format as string),
52
- config.output ? config.output : (argv.output as string),
51
+ (config.format || argv.format) as string,
52
+ (config.output || argv.output) as string,
53
53
  {
54
54
  name,
55
- directory: argv.reports ? (argv.reports as string) : config.reports,
55
+ directory: (argv.reports || config.reports) as string,
56
56
  },
57
57
  new WebhookConfig(
58
- config.webhookType ? config.webhookType : (argv.webhookType as string),
59
- config.webhookUrl ? config.webhookUrl : (argv.webhookUrl as string),
58
+ (config.webhookType || argv.webhookType) as string,
59
+ (config.webhookUrl || argv.webhookUrl) as string,
60
60
  title,
61
- config.webhookMessage ? config.webhookMessage : (argv.webhookMessage as string)
61
+ (config.webhookMessage || argv.webhookMessage) as string | undefined
62
62
  ),
63
63
  json
64
64
  );
65
65
  }
66
66
 
67
- export function getAppConfig(config, argv): AppConfig {
67
+ export function getAppConfig(config: Record<string, unknown>, argv: Record<string, unknown>): AppConfig {
68
68
  return new AppConfig(
69
69
  new LogConfig(
70
70
  'jsonLogFormat' in argv
@@ -74,11 +74,11 @@ export function getAppConfig(config, argv): AppConfig {
74
74
  );
75
75
  }
76
76
 
77
- export function getKeycloakConfig(config, argv): Options {
77
+ export function getKeycloakConfig(config: Record<string, unknown>, argv: Record<string, unknown>): Options {
78
78
  return {
79
- clientId: config.clientId ? config.clientId : (argv?.clientId as string),
80
- clientSecret: config.clientSecret ? config.clientSecret : (argv?.clientSecret as string),
81
- rootUrl: config.url ? config.url : (argv?.url as string),
79
+ clientId: (config.clientId || argv.clientId) as string,
80
+ clientSecret: (config.clientSecret || argv.clientSecret) as string,
81
+ rootUrl: (config.url || argv.url) as string,
82
82
  useAuditingEndpoint:
83
83
  'useAuditingEndpoint' in argv
84
84
  ? String(argv.useAuditingEndpoint).toLowerCase() == 'true'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@continuoussecuritytooling/keycloak-reporter",
3
- "version": "1.2.1-3194",
3
+ "version": "1.3.0",
4
4
  "description": "Reporting Tools for Keycloak",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -51,6 +51,7 @@
51
51
  "@octokit/rest": "^22.0.0",
52
52
  "@types/jest": "^30.0.0",
53
53
  "@types/node": "^24.0.0",
54
+ "@types/ramda": "^0.31.1",
54
55
  "@types/yargs": "^17.0.24",
55
56
  "@typescript-eslint/eslint-plugin": "^8.0.0",
56
57
  "@typescript-eslint/parser": "^8.0.0",
@@ -67,6 +68,6 @@
67
68
  "tape": "^5.6.3",
68
69
  "tar-fs": "^3.0.0",
69
70
  "ts-jest": "^29.1.0",
70
- "typescript": "^5.0.4"
71
+ "typescript": "^6.0.0"
71
72
  }
72
73
  }
@@ -0,0 +1 @@
1
+ sonar.exclusions=e2e/**,dist/**,node_modules/**,src/**/*.spec.ts,src/**/*.test.ts
package/src/commands.ts CHANGED
@@ -24,7 +24,6 @@ export async function listUsers(options: Options): Promise<Array<User | AuditedU
24
24
  export async function listClients(options: Options): Promise<Array<Client | AuditedClientRepresentation>> {
25
25
  return clientListing(await kcClient(options));
26
26
  }
27
- /* eslint-disable @typescript-eslint/no-explicit-any */
28
27
  export async function configTest(options: Options) {
29
28
  try {
30
29
  const users = await userListing(await kcClient(options));
package/src/config.ts CHANGED
@@ -1,4 +1,12 @@
1
- import { assoc, pick, mergeAll, mergeDeepRight } from 'ramda';
1
+ import { assoc, pick, mergeAll } from 'ramda';
2
+
3
+ type SchemaSpec = {
4
+ type?: string;
5
+ $ref?: string;
6
+ default?: unknown;
7
+ properties?: Record<string, SchemaSpec>;
8
+ definitions?: Record<string, SchemaSpec>;
9
+ };
2
10
  import path from 'path';
3
11
  import { fileURLToPath } from 'url';
4
12
  import fs from 'fs';
@@ -8,7 +16,7 @@ const schema = JSON.parse(
8
16
  );
9
17
 
10
18
  // import the config file
11
- function buildConfigFromFile(filePath) {
19
+ function buildConfigFromFile(filePath: string | undefined) {
12
20
  if (!filePath) return {};
13
21
  const isAbsolutePath = filePath.charAt(0) === '/';
14
22
  return JSON.parse(
@@ -18,31 +26,33 @@ function buildConfigFromFile(filePath) {
18
26
  );
19
27
  }
20
28
  // build an object using the defaults in the schema
21
- function buildDefaults(schema, definitions) {
22
- return Object.keys(schema.properties).reduce((acc, prop) => {
23
- let spec = schema.properties[prop];
29
+ function buildDefaults(schema: SchemaSpec, definitions: Record<string, SchemaSpec>): Record<string, unknown> {
30
+ return Object.keys(schema.properties!).reduce((acc: Record<string, unknown>, prop) => {
31
+ let spec: SchemaSpec = schema.properties![prop];
24
32
  if (spec.$ref) {
25
- spec = definitions[spec.$ref.replace('#/definitions/', '')];
26
- if (spec && spec.type === 'object') {
27
- return assoc(prop, buildDefaults(spec, definitions), acc);
33
+ const def = definitions[spec.$ref.replace('#/definitions/', '')];
34
+ if (def?.type === 'object') {
35
+ return assoc(prop, buildDefaults(def, definitions), acc) as Record<string, unknown>;
28
36
  }
37
+ if (def) spec = def;
29
38
  }
30
- return assoc(prop, spec.default, acc);
39
+ return assoc(prop, spec.default, acc) as Record<string, unknown>;
31
40
  }, {});
32
41
  }
33
42
 
34
43
  // build an object of config values taken from process.env
35
- function buildEnvironmentVariablesConfig(schema) {
44
+ function buildEnvironmentVariablesConfig(schema: SchemaSpec): Record<string, unknown> {
36
45
  const trueRx = /^true$/i;
37
- const configKeys = Object.keys(schema.properties);
46
+ /* eslint-disable @typescript-eslint/no-explicit-any */
47
+ const configKeys = Object.keys(schema.properties as any);
38
48
  const env = pick(configKeys, process.env);
39
49
  return Object.keys(env).reduce((acc, key) => {
40
- const { type } = schema.properties[key];
50
+ const { type } = (schema.properties as any)[key];
41
51
  switch (type) {
42
52
  case 'integer':
43
- return assoc(key, parseInt(env[key], 10), acc);
53
+ return assoc(key, parseInt(env[key]!, 10), acc);
44
54
  case 'boolean':
45
- return assoc(key, trueRx.test(env[key]), acc);
55
+ return assoc(key, trueRx.test(env[key]!), acc);
46
56
  default:
47
57
  return assoc(key, env[key], acc);
48
58
  }
@@ -50,9 +60,10 @@ function buildEnvironmentVariablesConfig(schema) {
50
60
  }
51
61
 
52
62
  // merge the environment variables, config file values, and defaults
53
- const config = mergeAll(
54
- mergeDeepRight(buildDefaults(schema, schema.definitions), buildConfigFromFile(process.env.CONFIG_FILE)),
55
- buildEnvironmentVariablesConfig(schema)
56
- );
63
+ const config = mergeAll([
64
+ buildDefaults(schema, schema.definitions),
65
+ buildConfigFromFile(process.env.CONFIG_FILE),
66
+ buildEnvironmentVariablesConfig(schema),
67
+ ]);
57
68
 
58
69
  export default config;
@@ -1,6 +1,14 @@
1
1
  /// <reference types="jest-extended" />
2
2
  import { post2Webhook } from '../lib/output';
3
3
 
4
+ type Block = {
5
+ type: string;
6
+ text?: string;
7
+ elements?: Array<{ text: string }>;
8
+ fields?: Array<{ text: string }>;
9
+ facts?: Array<{ title: string; value: string }>;
10
+ };
11
+
4
12
  const mockSlackSend = jest.fn();
5
13
  jest.mock('@slack/webhook', () => ({
6
14
  IncomingWebhook: jest.fn().mockImplementation(() => ({
@@ -33,15 +41,15 @@ describe('post2Webhook - Slack', () => {
33
41
  await post2Webhook('slack', 'https://hooks.slack.com/test', 'Users Report', 'report content', 'Hello from CI');
34
42
  expect(mockSlackSend).toHaveBeenCalledTimes(1);
35
43
  const blocks = mockSlackSend.mock.calls[0][0].blocks;
36
- const contextBlock = blocks.find((b) => b.type === 'context' && b.elements?.[0]?.text === 'Hello from CI');
44
+ const contextBlock = (blocks as Block[]).find((b) => b.type === 'context' && b.elements?.[0]?.text === 'Hello from CI');
37
45
  expect(contextBlock).toBeDefined();
38
46
  });
39
47
 
40
48
  test('Slack payload includes title and date fields', async () => {
41
49
  await post2Webhook('slack', 'https://hooks.slack.com/test', 'My Title', 'content');
42
50
  const blocks = mockSlackSend.mock.calls[0][0].blocks;
43
- const sectionBlock = blocks.find((b) => b.type === 'section');
44
- expect(sectionBlock.fields[0].text).toContain('My Title');
51
+ const sectionBlock = (blocks as Block[]).find((b) => b.type === 'section');
52
+ expect(sectionBlock!.fields![0].text).toContain('My Title');
45
53
  });
46
54
  });
47
55
 
@@ -63,16 +71,16 @@ describe('post2Webhook - Teams', () => {
63
71
  await post2Webhook('teams', 'https://outlook.office.com/webhook/test', 'Clients Report', 'report content', 'Hello from CI');
64
72
  expect(mockTeamsSend).toHaveBeenCalledTimes(1);
65
73
  const attachment = mockTeamsSend.mock.calls[0][0].attachments[0];
66
- const textBlock = attachment.content.body.find((b) => b.type === 'TextBlock' && b.text === 'Hello from CI');
74
+ const textBlock = (attachment.content.body as Block[]).find((b) => b.type === 'TextBlock' && b.text === 'Hello from CI');
67
75
  expect(textBlock).toBeDefined();
68
76
  });
69
77
 
70
78
  test('Teams payload includes title in FactSet', async () => {
71
79
  await post2Webhook('teams', 'https://outlook.office.com/webhook/test', 'My Title', 'content');
72
80
  const attachment = mockTeamsSend.mock.calls[0][0].attachments[0];
73
- const factSet = attachment.content.body.find((b) => b.type === 'FactSet');
74
- const typeFact = factSet.facts.find((f) => f.title === 'Type');
75
- expect(typeFact.value).toBe('My Title');
81
+ const factSet = (attachment.content.body as Block[]).find((b) => b.type === 'FactSet');
82
+ const typeFact = factSet!.facts!.find((f) => f.title === 'Type');
83
+ expect(typeFact!.value).toBe('My Title');
76
84
  });
77
85
  });
78
86
 
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "types": ["jest", "node"]
5
+ },
6
+ "include": ["test/**/*", "lib/**/*", "src/**/*", "*.ts", "types/**/*"],
7
+ "exclude": ["dist", "node_modules"]
8
+ }
@@ -0,0 +1,5 @@
1
+ import type { Jest } from '@jest/environment';
2
+
3
+ declare global {
4
+ const jest: Jest;
5
+ }