diff options
| author | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2021-12-30 19:47:21 +0100 |
| commit | a98b5ea6fe8e8cc98a55e0fd793e6e8660ea31c1 (patch) | |
| tree | 542810ab5aef99150db228bb54fd58303dcb31c7 /public/prism/prism-csp.js | |
| parent | ab355897a12b7bda1089a44de326d41455a0f7a3 (diff) | |
chore: add prismjs for syntax highlighting
Diffstat (limited to 'public/prism/prism-csp.js')
| -rw-r--r-- | public/prism/prism-csp.js | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/public/prism/prism-csp.js b/public/prism/prism-csp.js new file mode 100644 index 0000000..ed8c852 --- /dev/null +++ b/public/prism/prism-csp.js @@ -0,0 +1,78 @@ +/** + * Original by Scott Helme. + * + * Reference: https://scotthelme.co.uk/csp-cheat-sheet/ + * + * Supports the following: + * - https://www.w3.org/TR/CSP1/ + * - https://www.w3.org/TR/CSP2/ + * - https://www.w3.org/TR/CSP3/ + */ + +(function (Prism) { + /** + * @param {string} source + * @returns {RegExp} + */ + function value(source) { + return RegExp( + /([ \t])/.source + '(?:' + source + ')' + /(?=[\s;]|$)/.source, + 'i' + ); + } + + Prism.languages.csp = { + directive: { + pattern: + /(^|[\s;])(?:base-uri|block-all-mixed-content|(?:child|connect|default|font|frame|img|manifest|media|object|prefetch|script|style|worker)-src|disown-opener|form-action|frame-(?:ancestors|options)|input-protection(?:-(?:clip|selectors))?|navigate-to|plugin-types|policy-uri|referrer|reflected-xss|report-(?:to|uri)|require-sri-for|sandbox|(?:script|style)-src-(?:attr|elem)|upgrade-insecure-requests)(?=[\s;]|$)/i, + lookbehind: true, + alias: 'property', + }, + scheme: { + pattern: value(/[a-z][a-z0-9.+-]*:/.source), + lookbehind: true, + }, + none: { + pattern: value(/'none'/.source), + lookbehind: true, + alias: 'keyword', + }, + nonce: { + pattern: value(/'nonce-[-+/\w=]+'/.source), + lookbehind: true, + alias: 'number', + }, + hash: { + pattern: value(/'sha(?:256|384|512)-[-+/\w=]+'/.source), + lookbehind: true, + alias: 'number', + }, + host: { + pattern: value( + /[a-z][a-z0-9.+-]*:\/\/[^\s;,']*/.source + + '|' + + /\*[^\s;,']*/.source + + '|' + + /[a-z0-9-]+(?:\.[a-z0-9-]+)+(?::[\d*]+)?(?:\/[^\s;,']*)?/.source + ), + lookbehind: true, + alias: 'url', + inside: { + important: /\*/, + }, + }, + keyword: [ + { + pattern: value(/'unsafe-[a-z-]+'/.source), + lookbehind: true, + alias: 'unsafe', + }, + { + pattern: value(/'[a-z-]+'/.source), + lookbehind: true, + alias: 'safe', + }, + ], + punctuation: /;/, + }; +})(Prism); |
