{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:01.415774Z","repo":{"ref":{"host":"github.com","owner":"PoweredBySalt","name":"Portfolio-Website"},"default_branch":"main","clone_url":"https://github.com/PoweredBySalt/Portfolio-Website.git","html_url":"https://github.com/PoweredBySalt/Portfolio-Website","description":null,"stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":22925,"primary_language":"PHP","license_spdx":null,"created_at":"2026-10-29T16:05:16Z","pushed_at":"2026-11-07T15:08:32Z","security_policy_url":null,"distribution":{"owner_created_at":"2019-10-16T11:33:13Z","owner_type":"User","release_assets":[]}},"commit_sha":"1f72c4fb8012dccb854e246399b0a38db731b060","profile":{"lines_by_language":{"PHP":9299,"JavaScript":1152},"files_by_category":{"other":36,"binary":25,"source":24,"config":7,"docs":3,"oversized":3,"vendored":1},"source_lines":10451,"test_lines":0},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.43,"coverage":1.0,"label":"none-detected","breakdown":{"attributed_share":0.0,"suspected_share":0.0,"estimated_share":0.0,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":null,"style_index":0.0},"summary":"No AI attribution or AI-consistent velocity signals detected."},"quality":{"score":48.4,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":58.8,"duplication":69.2,"lint":100.0,"testing":0.0,"docs":40.0,"type_safety":null,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 18% of function code in complex or long functions; 6% duplicated lines. Weakest area: testing."},"security":{"score":73.2,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":100.0,"sast":76.4,"dependencies":null,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is adequate: 7 high-severity SAST findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":13.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":11238.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2026-10":{"loc":10351,"attributed_loc":0},"2026-11":{"loc":887,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":5.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":983.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":120.5,"median_loc_per_hour":70.75,"pr_timed_units":0.0,"excluded_import_loc":10255.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":["3c20c405ea2e31e92c32bcd3d648189bebe4252d"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":10451.0,"index":0.0,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":14.0,"findings_high":7.0,"findings_medium":7.0,"findings_low":0.0,"weighted_findings":8.05,"scanned_lines":10451.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/php.lang.security.exec-use","severity":"high","message":"Executing non-constant commands. This can lead to command injection. [confidence low]","path":"PHPMailer/src/PHPMailer.php","line":1889,"fingerprint":"php.lang.security.exec-use:PHPMailer/src/PHPMailer.php:1889"},{"rule_id":"opengrep/php.lang.security.exec-use","severity":"high","message":"Executing non-constant commands. This can lead to command injection. [confidence low]","path":"PHPMailer/src/PHPMailer.php","line":1917,"fingerprint":"php.lang.security.exec-use:PHPMailer/src/PHPMailer.php:1917"},{"rule_id":"opengrep/php.lang.security.weak-crypto","severity":"high","message":"Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low]","path":"PHPMailer/src/SMTP.php","line":718,"fingerprint":"php.lang.security.weak-crypto:PHPMailer/src/SMTP.php:718"},{"rule_id":"opengrep/php.lang.security.weak-crypto","severity":"high","message":"Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low]","path":"PHPMailer/src/SMTP.php","line":726,"fingerprint":"php.lang.security.weak-crypto:PHPMailer/src/SMTP.php:726"},{"rule_id":"opengrep/php.lang.security.file-inclusion","severity":"high","message":"Detected non-constant file inclusion. This can lead to local file inclusion (LFI) or remote file inclusion (RFI) if user input reaches this statement. LFI and RFI could lead to sensitive files being obtained by attackers. Instead, explicitly specify what to include. If that is not a viable solution, [confidence low]","path":"dev-router.php","line":33,"fingerprint":"php.lang.security.file-inclusion:dev-router.php:33"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"javascript/popup.js","line":278,"fingerprint":"javascript.browser.security.insecure-document-method:javascript/popup.js:278"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `description_left.querySelector(\"p\").innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"javascript/popup.js","line":278,"fingerprint":"javascript.browser.security.insecure-innerhtml:javascript/popup.js:278"},{"rule_id":"opengrep/php.lang.security.unlink-use","severity":"medium","message":"Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low]","path":"PHPMailer/src/PHPMailer.php","line":3250,"fingerprint":"php.lang.security.unlink-use:PHPMailer/src/PHPMailer.php:3250"},{"rule_id":"opengrep/php.lang.security.unlink-use","severity":"medium","message":"Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low]","path":"PHPMailer/src/PHPMailer.php","line":3253,"fingerprint":"php.lang.security.unlink-use:PHPMailer/src/PHPMailer.php:3253"},{"rule_id":"opengrep/php.lang.security.unlink-use","severity":"medium","message":"Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low]","path":"PHPMailer/src/PHPMailer.php","line":3259,"fingerprint":"php.lang.security.unlink-use:PHPMailer/src/PHPMailer.php:3259"},{"rule_id":"opengrep/php.lang.security.injection.tainted-filename","severity":"medium","message":"File name based on user input risks server-side request forgery. [confidence medium]","path":"dev-router.php","line":21,"fingerprint":"php.lang.security.injection.tainted-filename:dev-router.php:21"},{"rule_id":"opengrep/php.lang.security.injection.tainted-filename","severity":"medium","message":"File name based on user input risks server-side request forgery. [confidence medium]","path":"dev-router.php","line":32,"fingerprint":"php.lang.security.injection.tainted-filename:dev-router.php:32"},{"rule_id":"opengrep/php.lang.security.injection.tainted-filename","severity":"medium","message":"File name based on user input risks server-side request forgery. [confidence medium]","path":"dev-router.php","line":38,"fingerprint":"php.lang.security.injection.tainted-filename:dev-router.php:38"},{"rule_id":"opengrep/php.lang.security.unlink-use","severity":"medium","message":"Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low]","path":"mailer.php","line":81,"fingerprint":"php.lang.security.unlink-use:mailer.php:81"}],"evidence":[],"data":{"rulesets":["php","javascript"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":222.0,"function_nloc":2543.0,"mean_ccn":2.86,"p90_ccn":6.0,"complex_functions":4.0,"long_functions":2.0,"many_param_functions":0.0,"risky_nloc_share":0.177},"findings":[],"evidence":[{"kind":"complex-function","description":"update in javascript/magneticEdges.js: complexity 33, 99 lines","ref":"javascript/magneticEdges.js","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/javascript/magneticEdges.js#L249","weight":0.55},{"kind":"complex-function","description":"SMTP::authenticate in PHPMailer/src/SMTP.php: complexity 32, 115 lines","ref":"PHPMailer/src/SMTP.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/PHPMailer/src/SMTP.php#L531","weight":0.5333333333333333},{"kind":"complex-function","description":"SMTP::get_lines in PHPMailer/src/SMTP.php: complexity 17, 73 lines","ref":"PHPMailer/src/SMTP.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/PHPMailer/src/SMTP.php#L1320","weight":0.2833333333333333},{"kind":"complex-function","description":"build in javascript/magneticEdges.js: complexity 16, 61 lines","ref":"javascript/magneticEdges.js","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/javascript/magneticEdges.js#L124","weight":0.26666666666666666},{"kind":"complex-function","description":"(anonymous) in javascript/magneticEdges.js: complexity 6, 102 lines","ref":"javascript/magneticEdges.js","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/javascript/magneticEdges.js#L1","weight":0.1}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":7036.0,"duplicated_lines":431.0,"duplicated_share":0.0613,"files":24.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: PHPMailer/src/DSNConfigurator.php:1 and PHPMailer/src/OAuth.php:1","ref":"PHPMailer/src/DSNConfigurator.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/PHPMailer/src/DSNConfigurator.php#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: PHPMailer/src/DSNConfigurator.php:5 and PHPMailer/src/Exception.php:5","ref":"PHPMailer/src/DSNConfigurator.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/PHPMailer/src/DSNConfigurator.php#L5","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: PHPMailer/src/Exception.php:7 and PHPMailer/src/OAuth.php:7","ref":"PHPMailer/src/Exception.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/PHPMailer/src/Exception.php#L7","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: PHPMailer/src/PHPMailer.php:421 and PHPMailer/src/SMTP.php:140","ref":"PHPMailer/src/PHPMailer.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/PHPMailer/src/PHPMailer.php#L421","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: PHPMailer/src/PHPMailer.php:1104 and PHPMailer/src/PHPMailer.php:1203","ref":"PHPMailer/src/PHPMailer.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/PHPMailer/src/PHPMailer.php#L1104","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: PHPMailer/src/POP3.php:164 and PHPMailer/src/POP3.php:191","ref":"PHPMailer/src/POP3.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/PHPMailer/src/POP3.php#L164","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: datenschutz.php:5 and impressum.php:5","ref":"datenschutz.php","url":"https://github.com/PoweredBySalt/Portfolio-Website/blob/1f72c4fb8012dccb854e246399b0a38db731b060/datenschutz.php#L5","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":0.0,"weighted_findings":0.0,"scanned_lines":10451.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":10451.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":9.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":0.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":61.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}