@eurekadevsecops/radar 1.9.6 → 1.9.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.
@@ -22,6 +22,10 @@ const scopes = {
22
22
  // @tip: git branch name = feat/PE-123 => default issue = PE-123
23
23
  const issue = execSync('git rev-parse --abbrev-ref HEAD').toString().trim().split('/').at(-1)
24
24
 
25
+ const semver = String.raw`(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?`
26
+ const pr = String.raw`\(\#[1-9]\d*\)`
27
+ const pattern = new RegExp(`^v${semver} ${pr}`)
28
+
25
29
  const Configuration = {
26
30
  /*
27
31
  * Resolve and load @commitlint/config-conventional from node_modules.
@@ -32,7 +36,7 @@ const Configuration = {
32
36
  * Resolve and load conventional-changelog-atom from node_modules.
33
37
  * Referenced packages must be installed
34
38
  */
35
- parserPreset: 'conventional-changelog-atom',
39
+ parserPreset: 'conventional-changelog-conventionalcommits',
36
40
  /*
37
41
  * Resolve and load @commitlint/format from node_modules.
38
42
  * Referenced package must be installed
@@ -58,7 +62,7 @@ const Configuration = {
58
62
  * To see full list, check https://github.com/conventional-changelog/commitlint/blob/master/%40commitlint/is-ignored/src/defaults.ts.
59
63
  * To disable those ignores and run rules always, set `defaultIgnores: false` as shown below.
60
64
  */
61
- ignores: [(commit) => commit === ''],
65
+ ignores: [(commit) => commit === '', (commit) => pattern.test(commit)],
62
66
  /*
63
67
  * Whether commitlint uses the default ignore rules, see the description above.
64
68
  */
@@ -1,3 +1,3 @@
1
1
  {
2
- ".": "1.9.6"
2
+ ".": "1.9.8"
3
3
  }
@@ -12,8 +12,7 @@ jobs:
12
12
  name: Security Scan
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
- - uses: eurekadevsecops/scan-action@v1
15
+ - uses: eurekadevsecops/scan-action@v2
16
16
  with:
17
17
  scanners: gitleaks,opengrep,grype
18
18
  token: ${{ secrets.EUREKA_AGENT_TOKEN }}
19
- profile: ${{ vars.EUREKA_PROFILE }}
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.9.8](https://github.com/EurekaDevSecOps/radarctl/compare/v1.9.7...v1.9.8) (2026-02-19)
4
+
5
+
6
+ ### Fixes
7
+
8
+ * **scans:** Add handling for ADO git URLs ([#61](https://github.com/EurekaDevSecOps/radarctl/issues/61)) ([cad3c13](https://github.com/EurekaDevSecOps/radarctl/commit/cad3c13ad90d2866b7ad019d145882e0955a8243))
9
+ * **scans:** Update scan command to accept optional scan ID from args ([#60](https://github.com/EurekaDevSecOps/radarctl/issues/60)) ([3f7b2f9](https://github.com/EurekaDevSecOps/radarctl/commit/3f7b2f9881a201116f54752ce27bd5e36d652f23))
10
+
11
+
12
+ ### Code Refactoring
13
+
14
+ * **telemetry:** Add a reportScanFailure wrapper for telemetry send/receive ([#57](https://github.com/EurekaDevSecOps/radarctl/issues/57)) ([9b2b8aa](https://github.com/EurekaDevSecOps/radarctl/commit/9b2b8aad4a59e9312bb5713a4aaf5b154f6e390b))
15
+
16
+
17
+ ### CI/CD
18
+
19
+ * **commitlint:** Fix commitlint GHA errors ([#58](https://github.com/EurekaDevSecOps/radarctl/issues/58)) ([b27d64e](https://github.com/EurekaDevSecOps/radarctl/commit/b27d64e5ddab6fad389aa1489173c3a992633ff6))
20
+
21
+ ## [1.9.7](https://github.com/EurekaDevSecOps/radarctl/compare/v1.9.6...v1.9.7) (2026-01-29)
22
+
23
+
24
+ ### CI/CD
25
+
26
+ * Upgrade to scan-action@v2 ([#55](https://github.com/EurekaDevSecOps/radarctl/issues/55)) ([48a26a3](https://github.com/EurekaDevSecOps/radarctl/commit/48a26a3f8a5874cb9d2ea976a695ee53a8eb5940))
27
+
3
28
  ## [1.9.6](https://github.com/EurekaDevSecOps/radarctl/compare/v1.9.5...v1.9.6) (2026-01-23)
4
29
 
5
30
 
package/README.md CHANGED
@@ -256,16 +256,15 @@ radar scan -s opengrep,gitleaks,grype -o report.sarif
256
256
 
257
257
  ### Upload Findings to Eureka ASPM
258
258
 
259
- See all findings in one place with deduplication, trend tracking, and risk prioritization. To upload results to **Eureka ASPM**, provide your API credentials via two environment variables: `EUREKA_AGENT_TOKEN` (your API token) and `EUREKA_PROFILE` (your profile ID). When these are set, Radar CLI automatically uploads results after each scan — letting you view your full scan history and all findings in the **Eureka ASPM Dashboard**.
259
+ See all findings in one place with deduplication, trend tracking, and risk prioritization. To upload results to **Eureka ASPM**, provide your API credentials through the `EUREKA_AGENT_TOKEN` environment variable. When set, Radar CLI automatically uploads results after each scan — letting you view your full scan history and all findings in the **Eureka ASPM Dashboard**.
260
260
 
261
261
  ```bash
262
262
  export EUREKA_AGENT_TOKEN=<your token>
263
- export EUREKA_PROFILE=<your profile ID>
264
263
 
265
264
  radar scan -s opengrep,gitleaks,grype
266
265
  ```
267
266
 
268
- NOTE: To prevent Radar CLI from uploading scan findings even when you have `EUREKA_AGENT_TOKEN` and `EUREKA_PROFILE` set, you can pass the `-l/--local` option on the command line.
267
+ NOTE: To prevent Radar CLI from uploading scan findings even when you have `EUREKA_AGENT_TOKEN` set, you can pass the `-l/--local` option on the command line.
269
268
 
270
269
  ---
271
270
 
@@ -289,7 +288,6 @@ Telemetry is **off by default**.
289
288
  Radar does **not** send any data externally unless you explicitly provide:
290
289
 
291
290
  * `EUREKA_AGENT_TOKEN`
292
- * `EUREKA_PROFILE`
293
291
 
294
292
  When provided:
295
293
 
@@ -307,7 +305,7 @@ When omitted:
307
305
  | Issue | Cause | Solution |
308
306
  | --------------------------------------------- | ----------------------------------- | --------------------------------------------------------- |
309
307
  | ❌ `report.sarif` not found | Scan failed or invalid scanner list | Check scanner names and ensure Docker is running |
310
- | ⚠️ No findings uploaded | Missing or invalid token/profile | Set `EUREKA_AGENT_TOKEN` and `EUREKA_PROFILE` |
308
+ | ⚠️ No findings uploaded | Missing or invalid token | Set `EUREKA_AGENT_TOKEN` |
311
309
  | 🧱 `radar: command not found` | CLI not installed globally | Run `npm i -g @eurekadevsecops/radar` again |
312
310
 
313
311
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eurekadevsecops/radar",
3
- "version": "1.9.6",
3
+ "version": "1.9.8",
4
4
  "description": "Radar is an open-source orchestrator of security scanners.",
5
5
  "homepage": "https://www.eurekadevsecops.com/radar",
6
6
  "keywords": [
@@ -39,8 +39,8 @@
39
39
  "tiny-spinner": "^2.0.5"
40
40
  },
41
41
  "devDependencies": {
42
- "@commitlint/cli": "^20.1.0",
43
- "@commitlint/config-conventional": "^20.0.0",
42
+ "@commitlint/cli": "^20.4.1",
43
+ "@commitlint/config-conventional": "^20.4.1",
44
44
  "@commitlint/cz-commitlint": "^20.1.0",
45
45
  "commitizen": "^4.3.1",
46
46
  "commitlint-plugin-selective-scope": "^1.0.1",
@@ -25,7 +25,8 @@ module.exports = {
25
25
  { name: 'LOCAL', short: 'l', long: 'local', type: 'boolean', description: 'local scan (no upload of findings to Eureka)' },
26
26
  { name: 'OUTPUT', short: 'o', long: 'output', type: 'string', description: 'output SARIF file' },
27
27
  { name: 'QUIET', short: 'q', long: 'quiet', type: 'boolean', description: 'suppress stdout logging' },
28
- { name: 'SCANNERS', short: 's', long: 'scanners', type: 'string', description: 'list of scanners to use' }
28
+ { name: 'SCANNERS', short: 's', long: 'scanners', type: 'string', description: 'list of scanners to use' },
29
+ { name: 'SCAN_ID', short: 'sid', long: 'scan-id', type: 'string', description: 'existing scan ID to associate results with' }
29
30
  ],
30
31
  description: `
31
32
  Scans a target for vulnerabilities. Defaults to displaying findings on stdout.
@@ -65,12 +66,11 @@ module.exports = {
65
66
 
66
67
  Runs entirely on your machine — by default, Radar CLI doesn’t upload any findings.
67
68
  Your vulnerabilities stay local and private. To upload results to Eureka ASPM,
68
- provide your API credentials via two environment variables: 'EUREKA_AGENT_TOKEN'
69
- (your API token) and 'EUREKA_PROFILE' (your profile ID). When these are set, Radar CLI
70
- automatically uploads results after each scan letting you view your full scan
71
- history and all findings in the Eureka ASPM Dashboard. To prevent Radar CLI from
72
- uploading scan findings even when you have 'EUREKA_AGENT_TOKEN' and 'EUREKA_PROFILE'
73
- set, you can pass the LOCAL option on the command line.
69
+ provide your API credentials through the 'EUREKA_AGENT_TOKEN' environment variable.
70
+ When set, Radar CLI automatically uploads results after each scan letting you view
71
+ your full scan history and all findings in the Eureka ASPM Dashboard. To prevent
72
+ Radar CLI from uploading scan findings even when you have 'EUREKA_AGENT_TOKEN' set,
73
+ you can pass the LOCAL option on the command line.
74
74
 
75
75
  Exit codes:
76
76
  0 - Clean and successful scan. No errors, warnings, or notes.
@@ -166,13 +166,13 @@ module.exports = {
166
166
  if (metadata.type === 'error') throw new Error(`${metadata.error.code}: ${metadata.error.details}`)
167
167
 
168
168
  // Send telemetry: scan started.
169
- let scanID = undefined
169
+ let scanID = args.SCAN_ID ?? undefined
170
170
  const timestamp = DateTime.now().toISO()
171
171
 
172
172
  if (telemetry.enabled && !args.LOCAL) {
173
173
  // TODO: Should pass scanID to the server; not read it from the server.
174
174
  try {
175
- const res = await telemetry.send(`scans/started`, {}, { scanners: scanners.map((s) => s.name), metadata, timestamp })
175
+ const res = await telemetry.send(`scans/started`, {}, { scanners: scanners.map((s) => s.name), scanID, metadata, timestamp })
176
176
  if (!res.ok) throw new Error(`[${res.status}] ${res.statusText}: ${await res.text()}`)
177
177
  const data = await res.json()
178
178
  scanID = data.scan_id
@@ -6,28 +6,24 @@ class Telemetry {
6
6
  #EUREKA_AGENT_TOKEN = process.env.EUREKA_AGENT_TOKEN
7
7
  #USER_AGENT = `RadarCLI/${pkg.version} (${pkg.name}@${pkg.version}; ${process?.platform}-${process?.arch}; ${process?.release?.name}-${process?.version})`
8
8
  #EWA_URL
9
+ #failedScanID // ensure there that scan failure is reported only once
9
10
 
10
11
  constructor() {
11
12
  this.enabled = !!this.#EUREKA_AGENT_TOKEN
12
13
  this.#EWA_URL = this.#claims(this.#EUREKA_AGENT_TOKEN).aud?.replace(/\/$/, '')
14
+ this.#failedScanID = undefined
13
15
  }
14
16
 
15
17
  async send(path, params, body, token) {
16
- return fetch(this.#toPostURL(path, params, token), {
17
- method: 'POST',
18
- headers: {
19
- 'Authorization': `Bearer ${token ?? this.#EUREKA_AGENT_TOKEN}`,
20
- 'Content-Type': this.#toContentType(path),
21
- 'User-Agent': this.#USER_AGENT,
22
- 'Accept': 'application/json'
23
- },
24
- body: this.#toBody(path, body)
25
- })
26
- .then(async (res) => {
27
- //TODO: Display this on stdout only if --debug option is selected on the cmd line.
28
- //if (!res.ok) console.log(`POST ${this.#toPostURL(path, params, token)} [${res.status}] ${res.statusText}: ${await res.text()}`)
29
- return res
30
- })
18
+ let res
19
+ try {
20
+ res = await this.#sendRaw(path, params, body, token)
21
+ } catch (error) {
22
+ await this.#reportScanFailure(path, params)
23
+ throw error
24
+ }
25
+ if (!res.ok) await this.#reportScanFailure(path, params)
26
+ return res
31
27
  }
32
28
 
33
29
  async sendSensitive(path, params, body) {
@@ -35,18 +31,19 @@ class Telemetry {
35
31
  }
36
32
 
37
33
  async receive(path, params, token) {
38
- return fetch(this.#toReceiveURL(path, params, token), {
39
- method: 'GET',
40
- headers: {
41
- 'Authorization': `Bearer ${token ?? this.#EUREKA_AGENT_TOKEN}`,
42
- 'User-Agent': this.#USER_AGENT,
43
- 'Accept': 'application/json'
44
- }
45
- }).then(async (res) => {
46
- //TODO: Display this on stdout only if --debug option is selected on the cmd line.
47
- //if (!res.ok) console.log(`GET ${this.#toReceiveURL(path, params, token)} [${res.status}] ${res.statusText}`)
34
+ let res
35
+ try {
36
+ res = await this.#receiveRaw(path, params, token)
37
+ } catch (error) {
38
+ await this.#reportScanFailure(path, params)
39
+ throw error
40
+ }
41
+ if (!res.ok) await this.#reportScanFailure(path, params)
42
+ try {
48
43
  return await res.json()
49
- })
44
+ } catch (error) {
45
+ await this.#reportScanFailure(path, params)
46
+ }
50
47
  }
51
48
 
52
49
  async receiveSensitive(path, params) {
@@ -79,6 +76,56 @@ class Telemetry {
79
76
  return data.token
80
77
  }
81
78
 
79
+ async #sendRaw(path, params, body, token) {
80
+ return fetch(this.#toPostURL(path, params, token), {
81
+ method: 'POST',
82
+ headers: {
83
+ 'Authorization': `Bearer ${token ?? this.#EUREKA_AGENT_TOKEN}`,
84
+ 'Content-Type': this.#toContentType(path),
85
+ 'User-Agent': this.#USER_AGENT,
86
+ 'Accept': 'application/json'
87
+ },
88
+ body: this.#toBody(path, body)
89
+ })
90
+ .then(async (res) => {
91
+ //TODO: Display this on stdout only if --debug option is selected on the cmd line.
92
+ //if (!res.ok) console.log(`POST ${this.#toPostURL(path, params, token)} [${res.status}] ${res.statusText}: ${await res.text()}`)
93
+ return res
94
+ })
95
+ }
96
+
97
+ async #receiveRaw(path, params, token) {
98
+ return fetch(this.#toReceiveURL(path, params, token), {
99
+ method: 'GET',
100
+ headers: {
101
+ 'Authorization': `Bearer ${token ?? this.#EUREKA_AGENT_TOKEN}`,
102
+ 'User-Agent': this.#USER_AGENT,
103
+ 'Accept': 'application/json'
104
+ }
105
+ }).then(async (res) => {
106
+ //TODO: Display this on stdout only if --debug option is selected on the cmd line.
107
+ //if (!res.ok) console.log(`GET ${this.#toReceiveURL(path, params, token)} [${res.status}] ${res.statusText}`)
108
+ return res
109
+ })
110
+ }
111
+
112
+ async #reportScanFailure(path, params) {
113
+ if (!this.enabled) return
114
+ const scanID = params?.scanID
115
+ if (!scanID || path === `scans/:scanID/failed`) return
116
+ // if scan failure already reported, skip
117
+ if (this.#failedScanID === scanID) return
118
+
119
+ // mark scan failure as reported
120
+ this.#failedScanID = scanID
121
+
122
+ try {
123
+ // we could choose to pass the error and send it somewhere possibly
124
+ await this.#sendRaw(`scans/:scanID/failed`, { scanID }, {})
125
+ } catch (error) {
126
+ }
127
+ }
128
+
82
129
  #toPostURL(path, params, token) {
83
130
  const claims = this.#claims(token ?? this.#EUREKA_AGENT_TOKEN)
84
131
  const aud = claims.aud.replace(/\/$/, '')
@@ -1,6 +1,47 @@
1
1
  const { execSync } = require('node:child_process')
2
2
  const hostedGitInfo = require('hosted-git-info')
3
3
 
4
+
5
+ function isAzureDevOpsUrl(originUrl) {
6
+ const knownAzureDomains = ["dev.azure.com", "visualstudio.com"];
7
+
8
+ return knownAzureDomains.some((url) => originUrl.includes(url));
9
+ }
10
+
11
+ /**
12
+ * Azure DevOps formats:
13
+ * - `https://TOKEN@dev.azure.com/<org>/<project>/_git/<repo>`
14
+ * - `https://pat:TOKEN@dev.azure.com/<org>/<project>/_git/<repo>` (the "pat" here can be any arbitrary string)
15
+ */
16
+ function parseAzureDevOpsUrl(originUrl) {
17
+ // Strip credentials from URL
18
+ const cleanUrl = originUrl.replace(/https:\/\/([^@:]+:)?[^@]+@/, "https://");
19
+ const url = new URL(cleanUrl);
20
+
21
+ const pathParts = url.pathname.split("/").filter((p) => p);
22
+ if (pathParts.length < 4 || pathParts[2] !== "_git") {
23
+ throw new Error(`Invalid Azure DevOps URL format: ${originUrl}`);
24
+ }
25
+
26
+ return {
27
+ https: () => cleanUrl,
28
+ type: "azure",
29
+ domain: url.hostname,
30
+ // project name
31
+ user: pathParts[1],
32
+ // repo name
33
+ project: pathParts[3],
34
+ };
35
+ }
36
+
37
+ function parseGitInfoFromUrl(originUrl) {
38
+ if (isAzureDevOpsUrl(originUrl)) {
39
+ return parseAzureDevOpsUrl(originUrl);
40
+ }
41
+
42
+ return hostedGitInfo.fromUrl(originUrl, { noGitPlus: true });
43
+ }
44
+
4
45
  function metadata(folder) {
5
46
  try {
6
47
  // Determine if we're scanning a valid git repo.
@@ -11,7 +52,9 @@ function metadata(folder) {
11
52
 
12
53
  // Get the repo name and owner.
13
54
  const originUrl = execSync('git config --get remote.origin.url', { cwd: folder }).toString().trim()
14
- const info = hostedGitInfo.fromUrl(originUrl, { noGitPlus: true })
55
+
56
+ const info = parseGitInfoFromUrl(originUrl)
57
+
15
58
  const ownerPath = info.user.split('/')
16
59
 
17
60
  // Get the branch name.
@@ -1,61 +0,0 @@
1
- {
2
- "version": "2.1.0",
3
- "$schema": "https://json.schemastore.org/sarif-2.1.0.json",
4
- "runs": [
5
- {
6
- "tool": {
7
- "driver": {
8
- "name": "gitleaks",
9
- "semanticVersion": "v8.0.0",
10
- "informationUri": "https://github.com/gitleaks/gitleaks",
11
- "properties": {
12
- "officialName": "gitleaks"
13
- },
14
- "rules": [
15
- {
16
- "id": "bitbucket-client-id",
17
- "shortDescription": {
18
- "text": "Discovered a potential Bitbucket Client ID, risking unauthorized repository access and potential codebase exposure."
19
- }
20
- }
21
- ]
22
- }
23
- },
24
- "results": [
25
- {
26
- "message": {
27
- "text": "bitbucket-client-id has detected secret for file apps/backend/.env.local."
28
- },
29
- "ruleId": "bitbucket-client-id",
30
- "locations": [
31
- {
32
- "physicalLocation": {
33
- "artifactLocation": {
34
- "uri": "apps/backend/.env.local"
35
- },
36
- "region": {
37
- "startLine": 116,
38
- "startColumn": 2,
39
- "endLine": 116,
40
- "endColumn": 57,
41
- "snippet": {
42
- "text": "KbPZjucUXpxhqmKjP6wbtS5BfEERxdnb"
43
- }
44
- }
45
- }
46
- }
47
- ],
48
- "properties": {
49
- "tags": []
50
- }
51
- }
52
- ],
53
- "properties": {
54
- "repository": {
55
- "type": "git",
56
- "url": "https://github.com/EurekaDevSecOps/app.git"
57
- }
58
- }
59
- }
60
- ]
61
- }
package/ewa.sarif DELETED
@@ -1,274 +0,0 @@
1
- {
2
- "version": "2.1.0",
3
- "$schema": "https://json.schemastore.org/sarif-2.1.0.json",
4
- "runs": [
5
- {
6
- "tool": {
7
- "driver": {
8
- "name": "gitleaks",
9
- "semanticVersion": "v8.0.0",
10
- "informationUri": "https://github.com/gitleaks/gitleaks",
11
- "properties": {
12
- "officialName": "gitleaks"
13
- },
14
- "rules": [
15
- {
16
- "id": "bitbucket-client-id",
17
- "shortDescription": {
18
- "text": "Discovered a potential Bitbucket Client ID, risking unauthorized repository access and potential codebase exposure."
19
- }
20
- },
21
- {
22
- "id": "generic-api-key",
23
- "shortDescription": {
24
- "text": "Detected a Generic API Key, potentially exposing access to various services and sensitive operations."
25
- }
26
- },
27
- {
28
- "id": "gitlab-oauth-app-secret",
29
- "shortDescription": {
30
- "text": "Identified a GitLab OIDC Application Secret, risking access to apps using GitLab as authentication provider."
31
- }
32
- },
33
- {
34
- "id": "private-key",
35
- "shortDescription": {
36
- "text": "Identified a Private Key, which may compromise cryptographic security and sensitive data encryption."
37
- }
38
- },
39
- {
40
- "id": "stripe-access-token",
41
- "shortDescription": {
42
- "text": "Found a Stripe Access Token, posing a risk to payment processing services and sensitive financial data."
43
- }
44
- }
45
- ]
46
- }
47
- },
48
- "results": [
49
- {
50
- "message": {
51
- "text": "generic-api-key has detected secret for file apps/backend/.env.local."
52
- },
53
- "ruleId": "generic-api-key",
54
- "locations": [
55
- {
56
- "physicalLocation": {
57
- "artifactLocation": {
58
- "uri": "apps/backend/.env.local"
59
- },
60
- "region": {
61
- "startLine": 121,
62
- "startColumn": 2,
63
- "endLine": 121,
64
- "endColumn": 62,
65
- "snippet": {
66
- "text": "0231e56436d8862a967f583939d1d91e955c2bd3"
67
- }
68
- }
69
- }
70
- }
71
- ],
72
- "properties": {
73
- "tags": []
74
- }
75
- },
76
- {
77
- "message": {
78
- "text": "generic-api-key has detected secret for file apps/backend/.env.local."
79
- },
80
- "ruleId": "generic-api-key",
81
- "locations": [
82
- {
83
- "physicalLocation": {
84
- "artifactLocation": {
85
- "uri": "apps/backend/.env.local"
86
- },
87
- "region": {
88
- "startLine": 132,
89
- "startColumn": 2,
90
- "endLine": 132,
91
- "endColumn": 57,
92
- "snippet": {
93
- "text": "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"
94
- }
95
- }
96
- }
97
- }
98
- ],
99
- "properties": {
100
- "tags": []
101
- }
102
- },
103
- {
104
- "message": {
105
- "text": "generic-api-key has detected secret for file apps/backend/.env.local."
106
- },
107
- "ruleId": "generic-api-key",
108
- "locations": [
109
- {
110
- "physicalLocation": {
111
- "artifactLocation": {
112
- "uri": "apps/backend/.env.local"
113
- },
114
- "region": {
115
- "startLine": 146,
116
- "startColumn": 2,
117
- "endLine": 146,
118
- "endColumn": 54,
119
- "snippet": {
120
- "text": "00e3e61c-50ed-44f2-8901-ba56c166b4e5"
121
- }
122
- }
123
- }
124
- }
125
- ],
126
- "properties": {
127
- "tags": []
128
- }
129
- },
130
- {
131
- "message": {
132
- "text": "generic-api-key has detected secret for file apps/backend/.env.local."
133
- },
134
- "ruleId": "generic-api-key",
135
- "locations": [
136
- {
137
- "physicalLocation": {
138
- "artifactLocation": {
139
- "uri": "apps/backend/.env.local"
140
- },
141
- "region": {
142
- "startLine": 155,
143
- "startColumn": 2,
144
- "endLine": 155,
145
- "endColumn": 58,
146
- "snippet": {
147
- "text": "whsec_X92mgLcj9LACgQCfxlEazUtZ5Qb1MSN6"
148
- }
149
- }
150
- }
151
- }
152
- ],
153
- "properties": {
154
- "tags": []
155
- }
156
- },
157
- {
158
- "message": {
159
- "text": "gitlab-oauth-app-secret has detected secret for file apps/backend/.env.local."
160
- },
161
- "ruleId": "gitlab-oauth-app-secret",
162
- "locations": [
163
- {
164
- "physicalLocation": {
165
- "artifactLocation": {
166
- "uri": "apps/backend/.env.local"
167
- },
168
- "region": {
169
- "startLine": 126,
170
- "startColumn": 23,
171
- "endLine": 126,
172
- "endColumn": 92,
173
- "snippet": {
174
- "text": "gloas-776889e1488d83b207ac8a3e3230b71ee8f91ef6cfd6007aa4f5accb579eacd5"
175
- }
176
- }
177
- }
178
- }
179
- ],
180
- "properties": {
181
- "tags": []
182
- }
183
- },
184
- {
185
- "message": {
186
- "text": "private-key has detected secret for file apps/backend/.env.local."
187
- },
188
- "ruleId": "private-key",
189
- "locations": [
190
- {
191
- "physicalLocation": {
192
- "artifactLocation": {
193
- "uri": "apps/backend/.env.local"
194
- },
195
- "region": {
196
- "startLine": 81,
197
- "startColumn": 26,
198
- "endLine": 107,
199
- "endColumn": 30,
200
- "snippet": {
201
- "text": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAs1jrtHlMuqGnpah5PdGJ1Tzeoth+dWJ4hP1Nr8a50z0JCBHT\n7NZ0XW/DmNroKXqxmVW7U1iKw0g96+5xRuJiFDLs+qeJGXiog7gOETKI3gHum2h2\nj/VcGzMRfe7gH4le+69SFnCK9+9nB5H4oVXQ5JimUA74pmRxKWBY9+96BsMUVBp+\n2PYFtOsNHplx+UlzAQ3KnbDlE73aAZpPGW1GKrw8ZkrN22srDokp2ZbjWqbp54mc\nht0/7g2h+6naJonhNOKmadHOb9T2OcwKgmNrNINQq0R7X4fb7Wcs6Ecru8H+8H2h\nInViwTuI17gdrI8iBeNCNayKigdTu5BTFJurJwIDAQABAoIBAFMx330De81jacJV\nyZAcoGSTbO97oAXR3PhMDHqKo+7SdFsS8gz+WlJxovlIKsP7D2GCvHfoLc5yt463\nOELahwa5rOaFSvrO1tTrT1M47vaVTNs4dS9IcSaI5QdXBQ58CdyUsm6IXF6w5klD\ntGMazOEN0rB2kW+WTkwUTpEMvL1ff8BZEvYygv9a8hgPLfxyu4Lvkan7059UG766\nOW5eLQ8eaf+jjWw3YRsty8YK+w3kGOErIHZ7qw+JiQ6nbSxUKbqAGJCXwsvvLiKs\nNfhxeksHqod4CQMIrFDCwYw5pEW9Ji3AWj1XS8h0THYM6z5XPijHsvRVSLC1Fl45\nWFHC6cECgYEA5mFN+XixFLqXGb0N4jtZVC/WUJs+ER9sasMJrwd7moWAyZvjMdkA\nDKq2TeiuNRGcjP9VWM9EWDqNiyQEBxUcwwT3RD5KRykNkLYz51nJZcRmijQUb7ss\nmtLd+tGTaFDfMU3dRihzwYmfYiKJpqwa8mgeTZEXEEU8lEEh7JfrO8cCgYEAx0rD\niI6Lv/7MwoG+cH7eZR3ezyfiGFAbWOfMKtBxLsVyNSzl3JCnyaWf2tsrJSmYlVUa\nANNo9gXvSfrrFjnPOC9ZLEnB2xl1XoJagBFj5Qwf3Giy/i9eiRSu0SyT6WrSzfKa\nOaIFhwwsx1s6Qoeck4UqQFqUgk+FnN3BuCaeVaECgYB0AsfrOnWhxJxWX7dgFxbS\nqAw6JxLIOJS15mU3+IKru1KxM4jjDy1RM539+Y/QNYAqGGH4CNeXvlSMnqRQlLcZ\nFaUWfm+VCf1ExBu7AqHCV3ZzXep0oULC7DDQHz0lqKPcBiPJMpGoAg96sX2zqrMf\nIoMv+EIu9U6eMXZN1+qi/QKBgB0Mv93a8XIGITDFGs5pH9/bb8wAg0uJ+cKG31Lq\nWWU48MHhjowNJfgVxWxwgCSFoLE723N9XZJnIQ9GnRf7S0JkXHpBMhnO5zXkiG6c\nmlQb5VUKifTVUNFoi2cAOXtPz/SnRWXbQTUDSE+y85YZEHDMe3EwAu/PyakpBgDi\n2DehAoGBAKJtxule5t0JQpFzYtk7Ojxv8ppellrqevoX/z+xNG58AT97/JtQAD0D\nTwz1fuptQFe1Mq+cA561hZaTH9MqhTOCVxdP7tMGnGmIT+MXU24o4EhGN0EFtsvR\npKxf8/C9KgyrbfXXzb/LMQIZko0cAFI47EMo/Ad8wgyPDsTnTcJZ\n-----END RSA PRIVATE KEY-----"
202
- }
203
- }
204
- }
205
- }
206
- ],
207
- "properties": {
208
- "tags": []
209
- }
210
- },
211
- {
212
- "message": {
213
- "text": "bitbucket-client-id has detected secret for file apps/backend/.env.local."
214
- },
215
- "ruleId": "bitbucket-client-id",
216
- "locations": [
217
- {
218
- "physicalLocation": {
219
- "artifactLocation": {
220
- "uri": "apps/backend/.env.local"
221
- },
222
- "region": {
223
- "startLine": 116,
224
- "startColumn": 2,
225
- "endLine": 116,
226
- "endColumn": 57,
227
- "snippet": {
228
- "text": "KbPZjucUXpxhqmKjP6wbtS5BfEERxdnb"
229
- }
230
- }
231
- }
232
- }
233
- ],
234
- "properties": {
235
- "tags": []
236
- }
237
- },
238
- {
239
- "message": {
240
- "text": "stripe-access-token has detected secret for file apps/backend/.env.local."
241
- },
242
- "ruleId": "stripe-access-token",
243
- "locations": [
244
- {
245
- "physicalLocation": {
246
- "artifactLocation": {
247
- "uri": "apps/backend/.env.local"
248
- },
249
- "region": {
250
- "startLine": 154,
251
- "startColumn": 24,
252
- "endLine": 154,
253
- "endColumn": 130,
254
- "snippet": {
255
- "text": "sk_test_51RYvkf2YG6fO9qlhtYIIbnGSXSr6xpzqdqryyPk58EVMgZMjIviKEXde8r55HE4vbVgzKwNb7owr74qRMEHUKakC007aUEcU3n"
256
- }
257
- }
258
- }
259
- }
260
- ],
261
- "properties": {
262
- "tags": []
263
- }
264
- }
265
- ],
266
- "properties": {
267
- "repository": {
268
- "type": "git",
269
- "url": "https://github.com/EurekaDevSecOps/app.git"
270
- }
271
- }
272
- }
273
- ]
274
- }