///|
fn main {
let header = @permscope.recommended_header()
let policy = @permscope.parse(header)
let report = @permscope.audit(
policy,
@permscope.catalog_baseline("https://app.example"),
)
let summary = @permscope.summarize(
policy,
@permscope.catalog_baseline("https://app.example"),
)
let relaxed = @permscope.parse(
@permscope.build([
@permscope.all_origins("camera"),
@permscope.self_only("fullscreen"),
]),
)
let header_block = "HTTP/2 200\nPermissions-Policy: " +
header +
"\nContent-Security-Policy: " +
@permscope.strict_csp_header() +
"\nStrict-Transport-Security: max-age=31536000; includeSubDomains; preload" +
"\nReferrer-Policy: strict-origin-when-cross-origin" +
"\nX-Frame-Options: DENY" +
"\nX-Content-Type-Options: nosniff" +
"\nCross-Origin-Opener-Policy: same-origin" +
"\nCross-Origin-Embedder-Policy: require-corp" +
"\nCross-Origin-Resource-Policy: same-origin"
let header_audit = @permscope.audit_header_block(
header_block,
@permscope.catalog_baseline("https://app.example"),
)
let security_audit = @permscope.audit_security_header_block(
header_block, "https://app.example",
)
let batch = @permscope.audit_response_samples([
@permscope.response_sample("home", "/", "https://app.example", header_block),
@permscope.response_sample_from_bundle(
"api",
"/api",
@permscope.api_service_security_bundle("https://api.example"),
),
])
let matrix = @permscope.access_matrix(
policy,
["camera", "fullscreen", "usb"],
"https://app.example",
["https://app.example", "https://video.example"],
)
let contract = @permscope.capability_contract(
"video-room",
"https://app.example",
[
@permscope.capability_need("camera", ["self"], "local preview"),
@permscope.capability_need(
"fullscreen",
["self", "https://video.example"],
"embedded player",
),
],
true,
)
let contract_policy = @permscope.parse(
@permscope.minimal_policy_for_contract(contract),
)
let contract_report = @permscope.audit_capability_contract(
contract_policy, contract,
)
println("permscope demo")
println("normalized=" + @permscope.render(policy))
println(@permscope.render_summary(summary))
println(@permscope.render_profile(@permscope.media_app_profile(), []))
println(
"fullscreen self=" +
@permscope.allows(
policy, "fullscreen", "https://app.example", "https://app.example",
).to_string(),
)
println(
"fullscreen partner=" +
@permscope.allows(
policy, "fullscreen", "https://app.example", "https://video.example",
).to_string(),
)
println(
"camera cross-site=" +
@permscope.allows(
policy, "camera", "https://app.example", "https://evil.example",
).to_string(),
)
println(@permscope.render_report(report))
println(
"legacy-migration=" +
@permscope.migrate_feature_policy(
"camera 'none'; fullscreen 'self' https://video.example",
),
)
println(@permscope.render_header_audit(header_audit))
println(@permscope.render_access_matrix(matrix))
println(@permscope.render_capability_contract_report(contract_report))
println(@permscope.render_security_score(security_audit.score))
println(
@permscope.render_security_finding_summary(
@permscope.summarize_security_findings(security_audit),
),
)
println(@permscope.render_batch_audit(batch))
println(@permscope.render_diffs(@permscope.diff(policy, relaxed)))
}