RepoTrust

Leaderboard github.com

MetrolistGroup/Metrolist

YouTube Music client for Android

  • View repository ↗
  • Kotlin
  • ★ 14,277
  • commit 7d98d60dd317
  • scored 2026-11-14
  • scoring prov-5+qual-2+sec-2

AI provenance

0%

explicit

Confidence
72%
Coverage
100%

Estimated share of AI-generated code. Explicit attribution is a lower bound.

Code quality

73/100

adequate

Confidence
90%
Coverage
100%

Complexity, duplication, lint density, tests, CI, docs and review process.

Security

56/100

weak

Confidence
85%
Coverage
100%

Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.

AI provenance

0% explicit

Explicit AI attribution on 0% of first-party code added; an estimated 0% including velocity signals.

How the score is built

  • Explicitly attributed share0%
  • Unattributed share in AI-pace bursts0%
  • Estimated AI-generated share0%
  • AI tool configuration files2
  • Work sessions at AI pace0
  • Releases at AI pace0
  • Coding-style index (1.0+ means possible)0.01

Attributed AI tools

ToolCommitsLines addedFirst seenLast seen
Claude Code312026-11-142026-11-14

Lines added per month all AI-attributed share

  1. 2026-11522,681 · 0% AI

Findings in AI-attributed lines vs the rest

From git blame: 1 lines trace to AI-attributed commits, 331,955 to others (sampled). Too few lines in one group for a fair comparison. Reported, not scored.

Findings per 1,000 linesAI-attributedOtherRatio
Code quality0.000.03—
Security0.000.11—

Evidence by analyzer

Explicit AI attributionok4 items
attributed_commit_share
30.0%
attributed_commits
3
attributed_loc
1
attributed_loc_share
0.0%
commits
10
effective_loc
522,681
tools_detected
1
AI tool configurationok2 items
artifacts
2
earliest_adoption
2026-11-14
tools_configured
2
workflow_agents
0
Commit velocityok
excluded_import_loc
522,593
flagged_loc
0
flagged_loc_share
0.0%
flagged_units
0
max_loc_per_hour
15
measured_loc
88
median_loc_per_hour
0
pr_timed_units
0
pre_ai_era_burst_loc
0
pre_ai_era_bursts
0
pre_ai_era_measured_loc
0
work_units
3
Release velocityok
flagged_releases
0
max_loc_per_day
0
releases
0
Coding styleok
count:assistant_voice
0
count:emoji_in_code
12
count:narrated_steps
0
count:placeholder
0
files:assistant_voice
0
files:emoji_in_code
6
files:narrated_steps
0
files:placeholder
0
index
0.01
lines_scanned
492,007
per_kloc:assistant_voice
0
per_kloc:emoji_in_code
0.02
per_kloc:narrated_steps
0
per_kloc:placeholder
0
Findings in AI-written linesok
ai_lines
1
blame_failures
0
files_blamed
1,500
other_lines
331,955
quality:ai_findings
0
quality:ai_per_kloc
0
quality:other_findings
11
quality:other_per_kloc
0.03
security:ai_findings
0
security:ai_per_kloc
0
security:other_findings
38
security:other_per_kloc
0.11

Code quality

73 adequate

Code quality is adequate: test-to-source ratio 0.06, CI runs tests; 18% of function code in complex or long functions; 8% duplicated lines. Weakest area: type safety.

How the score is built

  • Complexity58
  • Duplication60
  • Lint and smells98
  • Tests and CI78
  • Documentation85
  • Type safety40
  • Review processnot measured

Evidence by analyzer

Complexity (lizard)ok10 items
complex_functions
329
function_nloc
309,413
functions
18,980
long_functions
233
many_param_functions
222
mean_ccn
2.81
p90_ccn
6
risky_nloc_share
17.9%
Duplication (jscpd)ok10 items
compared_lines
338,439
duplicated_lines
28,507
duplicated_share
8.4%
files
2,248
Lintok
category:best-practice
13
category:correctness
18
findings
31
scanned_lines
491,842
weighted_findings
32.25
Tests and CIok12 items
  • CI config: .github/workflows/build-android.yml .github/workflows/build-android.yml
  • CI config: .github/workflows/build-desktop-native.yml .github/workflows/build-desktop-native.yml
  • CI config: .github/workflows/build-desktop.yml .github/workflows/build-desktop.yml
  • CI config: .github/workflows/build-ios.yml .github/workflows/build-ios.yml
  • CI config: .github/workflows/llm-triage.yml .github/workflows/llm-triage.yml
  • CI config: .github/workflows/release.yml .github/workflows/release.yml
  • CI config: .github/workflows/reporter-labels.yml .github/workflows/reporter-labels.yml
  • CI config: .github/workflows/reusable-android-build.yml .github/workflows/reusable-android-build.yml
  • CI config: .github/workflows/reusable-desktop-linux.yml .github/workflows/reusable-desktop-linux.yml
  • CI config: .github/workflows/reusable-desktop-macos.yml .github/workflows/reusable-desktop-macos.yml
  • CI runs tests (go test, unittest)
  • CI runs linters (go vet, ktlint, shellcheck)
check:ci_present
yes
check:ci_runs_lint
yes
check:ci_runs_tests
yes
check:has_tests
yes
check:test_ratio
no
check:tests_cochange
yes
ci_files
18
cochange_commits
4
cochange_share
25.0%
source_lines
492,007
test_lines
30,643
test_ratio
0.06
Documentationok3 items
  • README.md README.md
  • LICENSE LICENSE
  • docs/changelog.md docs/changelog.md
check:changelog
yes
check:contributing
no
check:license
yes
check:readme
yes
readme_lines
256
Type safetyok
check:low_escape_density
yes
check:strict_config
no
escapes
2
escapes_per_kloc
0.62

Security

56 weak

Security posture is weak: 2 possible secret(s) in the tree, 9 only in history; 36 high-severity SAST findings; 3 high-severity workflow issues. Weakest area: secrets.

How the score is built

  • Secrets6
  • Static analysis (SAST)96
  • Vulnerable dependencies100
  • CI workflows38
  • Security posture40
  • OpenSSF Scorecardnot measured

Evidence by analyzer

OpenSSF Scorecardskipped

no published OpenSSF Scorecard result for this repo

Package registriesok
checked
1
declared
1
lookup_errors
0
missing
0
recent
0
Secrets (gitleaks)ok
secrets_current
2
secrets_history
9
secrets_low_confidence
12
secrets_nonprod
0
Static analysis (opengrep)ok
findings
90
findings_high
36
findings_low
8
findings_medium
46
parse_errors
20
scanned_lines
491,842
weighted_findings
50.20
Dependencies (osv-scanner)ok
penalty
0
vulnerabilities
0
vulnerable_packages
0
vulns_critical
0
vulns_high
0
vulns_low
0
vulns_medium
0
vulns_unknown
0
CI workflows (zizmor)ok
findings
43
findings_high
3
findings_low
40
findings_medium
0
penalty
58
workflows
18
Security postureok1 item
  • Security policy: SECURITY.md SECURITY.md
check:dependency_updates
no
check:lockfiles
yes
check:security_policy
yes
check:signed_commits
no
signed_commit_share
0.0%
unpinned_manifests
0
Release downloadsok7 items
binary_assets
35
signals
2
suspicious
0

Findings

48 high62 medium77 low

SeverityRuleLocationMessageTool
high opengrep/python.lang.best-practice.arbitrary-sleep scripts/desktop-native-image/audio.py:31 time.sleep() call; did you mean to leave this in? Lint
high opengrep/python.lang.best-practice.arbitrary-sleep scripts/desktop-native-image/run.py:100 time.sleep() call; did you mean to leave this in? Lint
high opengrep/python.lang.best-practice.arbitrary-sleep scripts/desktop-native-image/run.py:242 time.sleep() call; did you mean to leave this in? Lint
high opengrep/python.lang.best-practice.arbitrary-sleep scripts/desktop-native-image/run.py:87 time.sleep() call; did you mean to leave this in? Lint
high opengrep/python.lang.best-practice.arbitrary-sleep scripts/verify_linux_credentials.py:189 time.sleep() call; did you mean to leave this in? Lint
high opengrep/python.lang.best-practice.arbitrary-sleep scripts/verify_linux_credentials.py:220 time.sleep() call; did you mean to leave this in? Lint
high opengrep/python.lang.best-practice.arbitrary-sleep scripts/verify_linux_credentials.py:73 time.sleep() call; did you mean to leave this in? Lint
high zizmor/github-env .github/actions/upload-desktop-sentry/action.yml:17 dangerous use of environment file [confidence low] CI workflows (zizmor)
high zizmor/dangerous-triggers .github/workflows/llm-triage.yml:5 use of fundamentally insecure workflow trigger [confidence medium] CI workflows (zizmor)
high zizmor/dangerous-triggers .github/workflows/reporter-labels.yml:3 use of fundamentally insecure workflow trigger [confidence medium] CI workflows (zizmor)
high opengrep/python.lang.security.use-defused-xml scripts/check_compose_resource_escapes.py:9 The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml-parse scripts/check_translation_mechanics.py:114 The native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. Do not use this library to parse untrusted input. Instead the... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml scripts/check_translation_mechanics.py:8 The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop-native-image/benchmark.py:54 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-tainted-env-args scripts/desktop-native-image/benchmark.py:54 Detected subprocess function 'run' with user controlled data. A malicious actor could leverage this to perform command injection. You may consider using 'shlex.quote()'. [confidence medium] Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop-native-image/measure-build.py:17 Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.subprocess-shell-true scripts/desktop-native-image/measure-build.py:17 Found 'subprocess' function 'Popen' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop-native-image/measure-build.py:19 Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop-native-image/native_image.py:151 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop-native-image/native_image.py:87 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop-native-image/native_image.py:93 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop-native-image/run.py:224 Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop_smoke.py:117 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop_smoke.py:142 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop_smoke.py:196 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop_smoke.py:264 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/desktop_smoke.py:313 Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml scripts/find_unused_strings.py:17 The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml scripts/find_unused_strings.py:18 The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml-parse scripts/find_unused_strings.py:30 The native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. Do not use this library to parse untrusted input. Instead the... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml scripts/generate_distribution.py:14 The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml-parse scripts/generate_distribution.py:88 The native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. Do not use this library to parse untrusted input. Instead the... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml scripts/generate_material_symbols.py:20 The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml scripts/propose_distribution.py:11 The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/propose_distribution.py:17 Detected subprocess function 'check_output' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an... Static analysis (opengrep)
high opengrep/python.lang.security.use-defused-xml-parse scripts/propose_distribution.py:36 The native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. Do not use this library to parse untrusted input. Instead the... Static analysis (opengrep)
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit scripts/verify_linux_credentials.py:32 Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external... Static analysis (opengrep)
high gitleaks/gcp-api-key shared/src/androidMain/kotlin/com/metrolist/shared/youtube/playback/BotGuardPoTokenMinter.kt:404 Possible gcp-api-key secret in the current tree Secrets (gitleaks)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonMain/kotlin/com/metrolist/shared/deviceconnect/DeviceConnectPeerPolicy.kt:68 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
high gitleaks/gcp-api-key shared/src/commonMain/kotlin/com/metrolist/shared/youtube/playback/PageBoundPoTokenMinter.kt:63 Possible gcp-api-key secret in the current tree Secrets (gitleaks)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonTest/kotlin/com/metrolist/shared/deviceconnect/DeviceConnectUrlTest.kt:41 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonTest/kotlin/com/metrolist/shared/deviceconnect/DeviceConnectUrlTest.kt:54 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonTest/kotlin/com/metrolist/shared/deviceconnect/DeviceConnectUrlTest.kt:59 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonTest/kotlin/com/metrolist/shared/deviceconnect/DeviceConnectUrlTest.kt:64 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonTest/kotlin/com/metrolist/shared/listentogether/network/ListenTogetherServerUrlPolicyTest.kt:16 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonTest/kotlin/com/metrolist/shared/listentogether/network/ListenTogetherServerUrlPolicyTest.kt:17 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonTest/kotlin/com/metrolist/shared/listentogether/network/ListenTogetherServerUrlPolicyTest.kt:18 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
high opengrep/javascript.lang.security.detect-insecure-websocket shared/src/commonTest/kotlin/com/metrolist/shared/listentogether/network/ListenTogetherServerUrlPolicyTest.kt:19 Insecure WebSocket Detected. WebSocket Secure (wss) should be used for all WebSocket connections. [confidence low] Static analysis (opengrep)
medium opengrep/python.lang.correctness.common-mistakes.string-concat-in-list scripts/desktop-native-image/audio.py:34 Detected strings that are implicitly concatenated inside a list. Python will implicitly concatenate strings when not explicitly delimited. Was this supposed to be individual elements of the list? Lint
medium opengrep/python.lang.best-practice.hardcoded-tmp-path scripts/desktop-native-image/benchmark.py:63 Detected hardcoded temp directory. Consider using 'tempfile.TemporaryFile' instead. Lint
medium opengrep/python.lang.best-practice.unspecified-open-encoding scripts/desktop-native-image/benchmark.py:63 Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). Lint
medium opengrep/python.lang.best-practice.hardcoded-tmp-path scripts/desktop-native-image/native_image.py:146 Detected hardcoded temp directory. Consider using 'tempfile.TemporaryFile' instead. Lint
medium opengrep/python.lang.best-practice.unspecified-open-encoding scripts/desktop-native-image/native_image.py:146 Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). Lint
medium opengrep/python.lang.best-practice.unspecified-open-encoding scripts/desktop-native-image/package.py:106 Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). Lint
medium opengrep/python.lang.best-practice.unspecified-open-encoding scripts/desktop-native-image/toolchain.py:84 Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding="utf-8"). Lint
medium opengrep/javascript.lang.security.audit.detect-non-literal-regexp .github/scripts/reporter-labels.cjs:15 RegExp() called with a `{ github, context }` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:101 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:229 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:247 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:265 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:283 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:301 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:319 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:337 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:355 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:373 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:391 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:409 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:427 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium opengrep/java.android.security.exported_activity androidApp/src/main/AndroidManifest.xml:579 The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data. Ensure that any exported activities do not have privileged access... Static analysis (opengrep)
medium gitleaks/gcp-api-key app/src/main/java/com/metrolist/music/utils/potoken/PoTokenWebView.kt:318 Possible gcp-api-key secret in history (commit aae4bd8fab); removed from the current tree but still retrievable Secrets (gitleaks)
medium gitleaks/gcp-api-key app/src/main/java/com/zionhuang/music/SearchResultFragment.java:126 Possible gcp-api-key secret in history (commit bc47e673cd); removed from the current tree but still retrievable Secrets (gitleaks)
medium gitleaks/gcp-api-key app/src/main/java/com/zionhuang/music/extractor/YouTubeExtractor.kt:486 Possible gcp-api-key secret in history (commit aea1d793df); removed from the current tree but still retrievable Secrets (gitleaks)
medium gitleaks/gcp-api-key app/src/main/java/com/zionhuang/music/extractor/ytextractors/YouTubeSearchExtractor.kt:45 Possible gcp-api-key secret in history (commit 43fe41e3c8); removed from the current tree but still retrievable Secrets (gitleaks)
medium gitleaks/gcp-api-key app/src/main/java/com/zionhuang/music/youtube/extractors/YouTubeSearchExtractor.kt:13 Possible gcp-api-key secret in history (commit 001945eccb); removed from the current tree but still retrievable Secrets (gitleaks)
medium gitleaks/gcp-api-key app/src/main/kotlin/com/metrolist/music/utils/potoken/PoTokenWebView.kt:325 Possible gcp-api-key secret in history (commit 9811666904); removed from the current tree but still retrievable Secrets (gitleaks)
medium gitleaks/gcp-api-key innertube/src/main/java/com/malopieds/innertube/models/YouTubeClient.kt:37 Possible gcp-api-key secret in history (commit f0c5fd1e8b); removed from the current tree but still retrievable Secrets (gitleaks)
medium gitleaks/gcp-api-key innertube/src/main/java/com/metrolist/innertube/models/YouTubeClient.kt:57 Possible gcp-api-key secret in history (commit 026a1a4a91); removed from the current tree but still retrievable Secrets (gitleaks)
medium gitleaks/gcp-api-key innertube/src/main/java/com/zionhuang/innertube/models/YouTubeClient.kt:61 Possible gcp-api-key secret in history (commit 8b67ac6221); removed from the current tree but still retrievable Secrets (gitleaks)
medium opengrep/bash.curl.security.curl-pipe-bash scripts/deps.sh:26 Data is being piped into `bash` from a `curl` command. An attacker with control of the server in the `curl` command could inject malicious code into the pipe, resulting in a system compromise. Avoid piping untrusted data into `bash` or... Static analysis (opengrep)
medium opengrep/python.lang.security.audit.dynamic-urllib-use-detected scripts/desktop-native-image/toolchain.py:42 Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control... Static analysis (opengrep)
medium opengrep/python.lang.security.audit.dynamic-urllib-use-detected scripts/generate_mandarin_table.py:23 Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control... Static analysis (opengrep)
medium opengrep/python.lang.security.audit.dynamic-urllib-use-detected scripts/generate_material_symbols.py:97 Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control... Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/CastProtocolTest.kt:166 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/CastProtocolTest.kt:174 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/CastProtocolTest.kt:225 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/CastProtocolTest.kt:226 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/CastProtocolTest.kt:426 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/DlnaSessionTest.kt:236 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/DlnaSessionTest.kt:240 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/FcastSessionTest.kt:27 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/cast/FcastSessionTest.kt:85 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/DeviceConnectManagerShutdownTest.kt:261 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/LocalDeviceServerTest.kt:101 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/LocalDeviceServerTest.kt:102 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/LocalDeviceServerTest.kt:109 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/LocalDeviceServerTest.kt:66 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/LocalDeviceServerTest.kt:71 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/LocalDeviceServerTest.kt:78 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/LocalDeviceServerTest.kt:83 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/desktopTest/kotlin/com/metrolist/shared/deviceconnect/LocalDeviceServerTest.kt:95 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method shared/src/iosMain/resources/kuromoji.js:2899 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method shared/src/iosMain/resources/kuromoji.js:482 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal shared/src/iosMain/resources/kuromoji.js:8197 Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal shared/src/iosMain/resources/kuromoji.js:8217 Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.path-traversal.path-join-resolve-traversal shared/src/iosMain/resources/kuromoji.js:8249 Detected possible user input going into a `path.join` or `path.resolve` function. This could possibly lead to a path traversal vulnerability, where the attacker can access arbitrary files stored in the file system. Instead, be sure to... Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/jvmSharedMain/kotlin/com/metrolist/shared/cast/CastProxyServer.kt:98 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/jvmSharedMain/kotlin/com/metrolist/shared/cast/CastProxyServer.kt:99 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/jvmSharedMain/kotlin/com/metrolist/shared/cast/DlnaSession.kt:407 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
medium opengrep/kotlin.lang.security.unencrypted-socket shared/src/jvmSharedMain/kotlin/com/metrolist/shared/cast/FcastSession.kt:59 This socket is not encrypted. The traffic could be read by an attacker intercepting the network traffic. Use an SSLSocket created by 'SSLSocketFactory' or 'SSLServerSocketFactory' instead [confidence low] Static analysis (opengrep)
low opengrep/javascript.lang.correctness.useless-assignment .github/scripts/flatpak-paths.cjs:1 `const` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:5651 `base.array` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:5899 `children_info[i++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:5907 `children_info[i++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:5909 `children_info[i++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:6294 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:6299 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:6300 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:6305 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:6306 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:6307 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:8346 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:8351 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:8352 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:8357 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:8358 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low opengrep/javascript.lang.correctness.useless-assignment shared/src/iosMain/resources/kuromoji.js:8359 `bytes[j++]` is assigned twice; the first assignment is useless Lint
low zizmor/self-repository .github/actions/prepare-linux-webview/action.yml:14 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-android.yml:39 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-android.yml:45 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-desktop-native.yml:25 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-desktop.yml:47 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-desktop.yml:52 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-desktop.yml:70 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-desktop.yml:87 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-desktop.yml:98 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-ios.yml:33 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/build-ios.yml:39 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/release.yml:107 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/release.yml:126 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/release.yml:145 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/release.yml:165 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/release.yml:185 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/release.yml:421 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/release.yml:82 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-android-build.yml:129 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-android-build.yml:149 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-linux.yml:107 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-linux.yml:71 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-linux.yml:80 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-linux.yml:85 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-macos.yml:105 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-macos.yml:169 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-macos.yml:96 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-native.yml:48 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-native.yml:55 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-native.yml:86 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-verify.yml:54 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-verify.yml:80 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-windows.yml:104 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-windows.yml:127 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-windows.yml:203 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-desktop-windows.yml:95 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-ios-build.yml:177 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/reusable-ios-build.yml:83 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/verify-aur-package.yml:32 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low zizmor/self-repository .github/workflows/verify-repository-checks.yml:32 use GitHub's dedicated self-repository syntax [confidence high] CI workflows (zizmor)
low gitleaks/generic-api-key app/src/main/cpp/coverart/bento4/Source/Python/utils/wv-request.py:13 Possible generic-api-key secret in history (commit 489b2a6b0c); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key app/src/main/java/com/metrolist/music/utils/potoken/PoTokenWebView.kt:319 Possible generic-api-key secret in history (commit aae4bd8fab); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key app/src/main/kotlin/com/metrolist/music/utils/potoken/PoTokenWebView.kt:326 Possible generic-api-key secret in history (commit 9811666904); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key innertube/src/main/java/com/malopieds/innertube/models/YouTubeClient.kt:53 Possible generic-api-key secret in history (commit f0c5fd1e8b); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key innertube/src/main/java/com/metrolist/innertube/InnerTube.kt:253 Possible generic-api-key secret in history (commit 1804fb0798); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key innertube/src/main/java/com/metrolist/innertube/models/YouTubeClient.kt:53 Possible generic-api-key secret in history (commit 1804fb0798); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key innertube/src/main/java/com/zionhuang/innertube/InnerTube.kt:210 Possible generic-api-key secret in history (commit dd00b3d03a); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key innertube/src/main/java/com/zionhuang/innertube/models/YouTubeClient.kt:46 Possible generic-api-key secret in history (commit dd00b3d03a); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key innertube/src/main/kotlin/com/metrolist/innertube/InnerTube.kt:787 Possible generic-api-key secret in history (commit bca805962f); removed from the current tree but still retrievable Secrets (gitleaks)
low opengrep/kotlin.lang.security.gcm-detection shared/src/androidMain/kotlin/com/metrolist/shared/discord/DiscordTokenStore.android.kt:152 GCM detected, please check that IV/nonce is not reused, an Initialization Vector (IV) is a nonce used to randomize the encryption, so that even if multiple messages with identical plaintext are encrypted, the generated corresponding... Static analysis (opengrep)
low opengrep/kotlin.lang.security.gcm-detection shared/src/androidMain/kotlin/com/metrolist/shared/discord/DiscordTokenStore.android.kt:172 GCM detected, please check that IV/nonce is not reused, an Initialization Vector (IV) is a nonce used to randomize the encryption, so that even if multiple messages with identical plaintext are encrypted, the generated corresponding... Static analysis (opengrep)
low opengrep/kotlin.lang.security.gcm-detection shared/src/androidMain/kotlin/com/metrolist/shared/discord/DiscordTokenStore.android.kt:173 GCM detected, please check that IV/nonce is not reused, an Initialization Vector (IV) is a nonce used to randomize the encryption, so that even if multiple messages with identical plaintext are encrypted, the generated corresponding... Static analysis (opengrep)
low opengrep/kotlin.lang.security.gcm-detection shared/src/androidMain/kotlin/com/metrolist/shared/settings/AndroidSecureSettings.kt:159 GCM detected, please check that IV/nonce is not reused, an Initialization Vector (IV) is a nonce used to randomize the encryption, so that even if multiple messages with identical plaintext are encrypted, the generated corresponding... Static analysis (opengrep)
low gitleaks/generic-api-key shared/src/androidMain/kotlin/com/metrolist/shared/youtube/playback/BotGuardPoTokenMinter.kt:401 Possible generic-api-key secret in the current tree Secrets (gitleaks)
low gitleaks/generic-api-key shared/src/commonMain/kotlin/com/metrolist/shared/youtube/playback/PageBoundPoTokenMinter.kt:62 Possible generic-api-key secret in the current tree Secrets (gitleaks)
low gitleaks/generic-api-key shared/src/commonTest/kotlin/com/metrolist/shared/api/lyrics/LyprioLyricsProviderTest.kt:967 Possible generic-api-key secret in the current tree Secrets (gitleaks)
low opengrep/kotlin.lang.security.gcm-detection shared/src/jvmSharedMain/kotlin/com/metrolist/shared/deviceconnect/DeviceCrypto.jvm.kt:67 GCM detected, please check that IV/nonce is not reused, an Initialization Vector (IV) is a nonce used to randomize the encryption, so that even if multiple messages with identical plaintext are encrypted, the generated corresponding... Static analysis (opengrep)
low opengrep/kotlin.lang.security.gcm-detection shared/src/jvmSharedMain/kotlin/com/metrolist/shared/deviceconnect/DeviceCrypto.jvm.kt:68 GCM detected, please check that IV/nonce is not reused, an Initialization Vector (IV) is a nonce used to randomize the encryption, so that even if multiple messages with identical plaintext are encrypted, the generated corresponding... Static analysis (opengrep)
low opengrep/kotlin.lang.security.gcm-detection shared/src/jvmSharedMain/kotlin/com/metrolist/shared/deviceconnect/DeviceCrypto.jvm.kt:82 GCM detected, please check that IV/nonce is not reused, an Initialization Vector (IV) is a nonce used to randomize the encryption, so that even if multiple messages with identical plaintext are encrypted, the generated corresponding... Static analysis (opengrep)
low opengrep/kotlin.lang.security.gcm-detection shared/src/jvmSharedMain/kotlin/com/metrolist/shared/deviceconnect/DeviceCrypto.jvm.kt:83 GCM detected, please check that IV/nonce is not reused, an Initialization Vector (IV) is a nonce used to randomize the encryption, so that even if multiple messages with identical plaintext are encrypted, the generated corresponding... Static analysis (opengrep)

Tools and coverage

Every analyzer that ran on this commit. A failed or skipped tool is a coverage gap: its share of the score is left out and the coverage figure drops.

AnalyzerPillarStatusVersionFindingsNote
AI tool configurationAI provenanceoksignatures-v10
Explicit AI attributionAI provenanceoksignatures-v10
Release velocityAI provenanceokprov-50
Coding styleAI provenanceok—0
Commit velocityAI provenanceokprov-50
Findings in AI-written linesAI provenanceokgit-blame0
Complexity (lizard)Code qualityoklizard 1.25.10
DocumentationCode qualityok—0
Duplication (jscpd)Code qualityokrepotrust-dup-w60
LintCode qualityokopengrep 1.33.1; rules f1d2b562b41431
Tests and CICode qualityok—0
Type safetyCode qualityok—0
CI workflows (zizmor)Securityokzizmor 1.32.043
Dependencies (osv-scanner)Securityokosv-scanner version: 2.7.10
Release downloadsSecurityok—0
Security postureSecurityok—0
Package registriesSecurityok—0
Static analysis (opengrep)Securityokopengrep 1.33.1; rules f1d2b562b41490
OpenSSF ScorecardSecurityskipped—0no published OpenSSF Scorecard result for this repo
Secrets (gitleaks)Securityokgitleaks 8.30.123

Score history

ScoredCommitScoringAI provenanceQualitySecurity
2026-11-147d98d60dd317prov-5+qual-2+sec-20%7356

Embed a badge

Maintainers can show these in a README. Badges update when the repository is re-scored.

[![RepoTrust ai](https://repotrust.synapticcyber.com/badge/github.com/MetrolistGroup/Metrolist/ai.svg)](https://repotrust.synapticcyber.com/r/github.com/MetrolistGroup/Metrolist/)
[![RepoTrust quality](https://repotrust.synapticcyber.com/badge/github.com/MetrolistGroup/Metrolist/quality.svg)](https://repotrust.synapticcyber.com/r/github.com/MetrolistGroup/Metrolist/)
[![RepoTrust security](https://repotrust.synapticcyber.com/badge/github.com/MetrolistGroup/Metrolist/security.svg)](https://repotrust.synapticcyber.com/r/github.com/MetrolistGroup/Metrolist/)
Full text report

Scores

Pillar Score Signal Confidence Coverage
AI provenance (estimated AI-generated share) 0 explicit 72% 100%
Code quality 73 adequate 90% 100%
Security 56 weak 85% 100%

AI provenance

Explicit AI attribution on 0% of first-party code added; an estimated 0% including velocity signals.

  • Explicitly attributed share (lower bound): 0.0%
  • Unattributed share in AI-consistent velocity bursts: 0.0%
  • Estimated AI-generated share: 0.0%
AI tool Attributed commits Lines added
Claude Code 3 1
  • AI tooling configured in repo: claude-code, generic-agent

Current source lines last changed by AI-attributed commits: 1 of 331,956 (sampled).

Too few lines in one group to compare finding densities.

  • Stylometry index: 0.01 per 1,000 lines (narrated steps 0, placeholders 0, assistant phrasing 0, emoji 12). Reported as a signal, not scored.
Month Lines added Attributed to AI
2026-11 522,681 0%

Evidence

AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.

Code quality

Code quality is adequate: test-to-source ratio 0.06, CI runs tests; 18% of function code in complex or long functions; 8% duplicated lines. Weakest area: type safety.

Area Score
Complexity (lizard) 58
Duplication 60
Code smells (Opengrep) 98
Tests and CI 78
Documentation 85
Type safety 40
Process (Scorecard review/maintenance) n/a
  • Functions: 18,980; mean complexity 2.8, 90th percentile 6; 329 complex and 233 long functions
  • Duplicated lines: 8.4% of 338,439 compared
  • Tests: 30,643 test lines for 492,007 source lines (ratio 0.06); CI test commands: go test, unittest; 25% of recent source commits also change tests
  • Docs missing or thin: contributing

Most complex functions:

Security

Security posture is weak: 2 possible secret(s) in the tree, 9 only in history; 36 high-severity SAST findings; 3 high-severity workflow issues. Weakest area: secrets.

Area Score
Secrets (gitleaks, tree + history) 6
Static analysis (Opengrep) 96
Vulnerable dependencies (OSV) 100
CI workflows (zizmor) 38
Posture (policy, updates, signing, lockfiles) 40
OpenSSF Scorecard n/a
  • Posture checks passed: security policy, lockfiles; missing: dependency updates, signed commits

Top findings

Severity Finding Location
high gitleaks/gcp-api-key: Possible gcp-api-key secret in the current tree shared/src/androidMain/kotlin/com/metrolist/shared/youtube/playback/BotGuardPoTokenMinter.kt:404
high gitleaks/gcp-api-key: Possible gcp-api-key secret in the current tree shared/src/commonMain/kotlin/com/metrolist/shared/youtube/playback/PageBoundPoTokenMinter.kt:63
high opengrep/python.lang.security.use-defused-xml: The Python documentation recommends using defusedxml instead of xml because the native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. [confidence low] scripts/check_compose_resource_escapes.py:9
high opengrep/python.lang.security.use-defused-xml: The Python documentation recommends using defusedxml instead of xml because the native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. [confidence low] scripts/check_translation_mechanics.py:8
high opengrep/python.lang.security.use-defused-xml-parse: The native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. Do not use this library to parse untrusted input. Instead the Python documentation recommends using defusedxml. [confidence medium] scripts/check_translation_mechanics.py:114
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop-native-image/benchmark.py:54
high opengrep/python.lang.security.audit.dangerous-subprocess-use-tainted-env-args: Detected subprocess function 'run' with user controlled data. A malicious actor could leverage this to perform command injection. You may consider using 'shlex.quote()'. [confidence medium] scripts/desktop-native-image/benchmark.py:54
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop-native-image/measure-build.py:17
high opengrep/python.lang.security.audit.subprocess-shell-true: Found 'subprocess' function 'Popen' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead. [confidence medium] scripts/desktop-native-image/measure-build.py:17
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop-native-image/measure-build.py:19
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop-native-image/native_image.py:87
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop-native-image/native_image.py:93
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop-native-image/native_image.py:151
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop-native-image/run.py:224
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop_smoke.py:117
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop_smoke.py:142
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop_smoke.py:196
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'run' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop_smoke.py:264
high opengrep/python.lang.security.audit.dangerous-subprocess-use-audit: Detected subprocess function 'Popen' without a static string. If this data can be controlled by a malicious actor, it may be an instance of command injection. Audit the use of this call to ensure it is not controllable by an external resource. You may consider using 'shlex.escape()'. [confidence low] scripts/desktop_smoke.py:313
high opengrep/python.lang.security.use-defused-xml: The Python documentation recommends using defusedxml instead of xml because the native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. [confidence low] scripts/find_unused_strings.py:17
high opengrep/python.lang.security.use-defused-xml: The Python documentation recommends using defusedxml instead of xml because the native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. [confidence low] scripts/find_unused_strings.py:18
high opengrep/python.lang.security.use-defused-xml-parse: The native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. Do not use this library to parse untrusted input. Instead the Python documentation recommends using defusedxml. [confidence medium] scripts/find_unused_strings.py:30
high opengrep/python.lang.security.use-defused-xml: The Python documentation recommends using defusedxml instead of xml because the native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. [confidence low] scripts/generate_distribution.py:14
high opengrep/python.lang.security.use-defused-xml-parse: The native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. Do not use this library to parse untrusted input. Instead the Python documentation recommends using defusedxml. [confidence medium] scripts/generate_distribution.py:88
high opengrep/python.lang.security.use-defused-xml: The Python documentation recommends using defusedxml instead of xml because the native Python xml library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and "XML bombs" can cause denial of service. [confidence low] scripts/generate_material_symbols.py:20

Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.

Distribution signals

Signals consistent with a repository that exists to distribute a download. They are heuristics, not a verdict; release files were not downloaded or inspected.

Repository profile

  • Source lines: 492,007; test lines: 30,643
Language Lines
Kotlin 503,351
JavaScript 10,173
Python 6,599
Java 975
Shell 537
C++ 362
C# 326
Swift 162
PowerShell 111
SQL 54