From 4c0f0748e892c6d134589ebc0ce519d538b35b6a Mon Sep 17 00:00:00 2001 From: David Gatti <github@gatti.pl> Date: Fri, 12 Jan 2018 14:31:11 +0100 Subject: [PATCH] Added support for CSP --- gulpfile.js | 3 ++- src/csp.ts | 47 ++++++++++++++++++++++++++++++++++++++ src/monaco.contribution.ts | 7 ++++++ test/csp.test.ts | 10 ++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/csp.ts create mode 100644 test/csp.test.ts diff --git a/gulpfile.js b/gulpfile.js index eb068c65..12d7511e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -81,7 +81,8 @@ gulp.task('release', ['clean-release','compile'], function() { bundleOne('src/mysql'), bundleOne('src/redshift'), bundleOne('src/pgsql'), - bundleOne('src/redis') + bundleOne('src/redis'), + bundleOne('src/csp') ) .pipe(uglify({ output: { diff --git a/src/csp.ts b/src/csp.ts new file mode 100644 index 00000000..d20787a2 --- /dev/null +++ b/src/csp.ts @@ -0,0 +1,47 @@ +// Create your own language definition here +// You can safely look at other samples without losing modifications. +// Modifications are not saved on browser refresh/close though -- copy often! +return { + // Set defaultToken to invalid to see what you do not tokenize yet + // defaultToken: 'invalid', + keywords: [], + typeKeywords: [], + operators: [], + symbols: /[=><!~?:&|+\-*\/\^%]+/, + escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/, + tokenizer: { + root: [ + [/child-src/, 'string.quote'], + [/connect-src/, 'string.quote'], + [/default-src/, 'string.quote'], + [/font-src/, 'string.quote'], + [/frame-src/, 'string.quote'], + [/img-src/, 'string.quote'], + [/manifest-src/, 'string.quote'], + [/media-src/, 'string.quote'], + [/object-src/, 'string.quote'], + [/script-src/, 'string.quote'], + [/style-src/, 'string.quote'], + [/worker-src/, 'string.quote'], + [/base-uri/, 'string.quote'], + [/plugin-types/, 'string.quote'], + [/sandbox/, 'string.quote'], + [/disown-opener/, 'string.quote'], + [/form-action/, 'string.quote'], + [/frame-ancestors/, 'string.quote'], + [/report-uri/, 'string.quote'], + [/report-to/, 'string.quote'], + [/upgrade-insecure-requests/, 'string.quote'], + [/block-all-mixed-content/, 'string.quote'], + [/require-sri-for/, 'string.quote'], + [/reflected-xss/, 'string.quote'], + [/referrer/, 'string.quote'], + [/policy-uri/, 'string.quote'], + [/'self'/, 'string.quote'], + [/'unsafe-inline'/, 'string.quote'], + [/'unsafe-eval'/, 'string.quote'], + [/'strict-dynamic'/, 'string.quote'], + [/'unsafe-hashed-attributes'/, 'string.quote'] + ] + } +}; diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 8aafcc9a..a74e2e1f 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -300,3 +300,10 @@ registerLanguage({ aliases: ['redis'], module: './redis' }); + +registerLanguage({ + id: 'csp', + extensions: [], + aliases: ['CSP', 'csp'], + module: './csp' +}); \ No newline at end of file diff --git a/test/csp.test.ts b/test/csp.test.ts new file mode 100644 index 00000000..cfcd8219 --- /dev/null +++ b/test/csp.test.ts @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import { testTokenization } from './testRunner'; + +testTokenization('csp', []);