MoonBit-native Content-Security-Policy parser, auditor, and diff toolkit.
ZYK-ai-nb/cspkitmoon add ZYK-ai-nb/cspkitimport {
"ZYK-ai-nb/cspkit" @cspkit
}let policy = @cspkit.parse_policy(
"default-src 'self'; script-src 'self' 'unsafe-inline'",
).unwrap()
let findings = policy.audit()
println(findings.length())
println(policy.blocking_findings().length())moon check
moon build
moon test
moon run cmd/maindirectives=3
blocking=1
added=2
changed=1
header=default-src 'self'; script-src 'self' 'nonce-demo'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'
score=100 grade=A penalty=0 bonus=13
templates=23 valid=23 clean=21 risky=2moon fmt --check
moon info
moon check
moon check --deny-warn
moon build
moon test
moon test --deny-warn
moon run cmd/main
moon login
moon publish --dry-runpub(all) struct AuditRuleSpec {
code : String
category : AuditRuleCategory
severity : Severity
directive : String?
trigger : String
remediation : String
rationale : String
} derive(Eq, Debug)pub(all) struct DirectiveSpec {
name : String
category : DirectiveCategory
fallback : String?
repeatable : Bool
level : String
description : String
} derive(Eq, Debug)pub(all) struct HardeningRecommendation {
code : String
priority : RecommendationPriority
directive : String?
summary : String
detail : String
} derive(Eq, Debug)pub(all) struct PolicyScore {
raw_score : Int
final_score : Int
penalty : Int
bonus : Int
grade : PolicyGrade
findings : SeverityCounts
directives : DirectiveCoverage
sources : SourceCounts
} derive(Eq, Debug)pub(all) struct SourceExpression {
raw : String
normalized : String
kind : SourceExpressionKind
trust : SourceTrust
scheme : String?
host : String?
port : String?
path : String?
description : String
} derive(Eq, Debug)pub(all) enum SourceExpressionKind {
SourceEmpty
SourceNone
SourceSelf
SourceUnsafeInline
SourceUnsafeEval
SourceWasmUnsafeEval
SourceStrictDynamic
SourceUnsafeHashes
SourceReportSample
SourceNonce
SourceSha256
SourceSha384
SourceSha512
SourceScheme
SourceHost
SourceWildcard
SourceData
SourceBlob
SourceFilesystem
SourceMediastream
SourceHttpsScheme
SourceHttpScheme
SourceUpgradeKeyword
SourceUnknownKeyword
SourceUnknown
} derive(Eq, Debug)fn recommendations_by_priority(items : Array[HardeningRecommendation], priority : RecommendationPriority) -> Array[HardeningRecommendation]MoonBit-native Content-Security-Policy parser, auditor, and diff toolkit.