Ticket #43749: 43749.6.diff
File 43749.6.diff, 10.3 KB (added by , 7 years ago) |
---|
-
Gruntfile.js
6 6 module.exports = function(grunt) { 7 7 var path = require('path'), 8 8 fs = require( 'fs' ), 9 rot = require( 'rot' ); 10 esprima = require( 'esprima' ); 11 estraverse = require( 'estraverse' ); 12 escodegen = require( 'escodegen' ); 9 13 spawn = require( 'child_process' ).spawnSync, 10 14 SOURCE_DIR = 'src/', 11 15 BUILD_DIR = 'build/', … … 662 666 '!wp-admin/js/custom-header.js', // Why? We should minify this. 663 667 '!wp-admin/js/farbtastic.js', 664 668 '!wp-includes/js/swfobject.js', 665 '!wp-includes/js/wp-embed.js' // We have extra options for this, see uglify:embed 669 '!wp-includes/js/wp-embed.js', // We have extra options for this, see uglify:embed 670 671 // .min files that still need to be minified. 672 'wp-includes/js/zxcvbn.min.js' 666 673 ] 667 674 }, 668 675 embed: { … … 1047 1054 ] 1048 1055 } 1049 1056 }, 1057 rot13: { 1058 zxcvbn: { 1059 src: './node_modules/zxcvbn/dist/zxcvbn.js', 1060 dest: 'build/wp-includes/js/zxcvbn.min.js' 1061 }, 1062 }, 1050 1063 _watch: { 1051 1064 options: { 1052 1065 interval: 2000 … … 1305 1318 'clean:js', 1306 1319 'webpack:dev', 1307 1320 'copy:js', 1321 'rot13:zxcvbn', 1308 1322 'file_append', 1309 1323 'uglify:all', 1310 1324 'build:tinymce', … … 1324 1338 'clean:all', 1325 1339 'webpack:dev', 1326 1340 'copy:all', 1341 'rot13:zxcvbn', 1327 1342 'file_append', 1328 1343 'cssmin:core', 1329 1344 'colors', … … 1373 1388 // Default task. 1374 1389 grunt.registerTask('default', ['build']); 1375 1390 1391 grunt.registerMultiTask('rot13', 'ROT-13 zxcvbn passwords for PG-ness.', function() { 1392 this.files.forEach(function(f) { 1393 // Build AST from source code 1394 var code = grunt.file.read(f.src); 1395 var ast = esprima.parse(code); 1396 1397 ast = estraverse.replace(ast, { 1398 enter: function(node) { 1399 // Filter string 1400 let key_names = [ 1401 'passwords', 1402 'english_wikipedia', 1403 'female_names', 1404 'surnames', 1405 'us_tv_and_film', 1406 'male_names' 1407 ]; 1408 1409 if( node.type === 'Property' && key_names.includes( node.key.name ) ) { 1410 // Wrap encrypted string with decrypt function. 1411 var value = { 1412 type: 'CallExpression', 1413 callee: { 1414 type: 'Identifier', 1415 name: 'rot' 1416 }, 1417 arguments: [{ 1418 type: 'Literal', 1419 value: rot(node.value.callee.object.value, 13), 1420 raw: rot(node.value.callee.object.raw, 13) 1421 }, { 1422 type: 'Literal', 1423 value: 13, 1424 raw: 13 1425 }] 1426 }; 1427 node.value = value; 1428 return node; 1429 } 1430 } 1431 }); 1432 1433 // ROT-13 decode function 1434 var prependCode = 'var lowercase="abcdefghijklmnopqrstuvwxyz",uppercase="ABCDEFGHIJKLMNOPQRSTUVWXYZ",regexLowercase=/[a-z]/,regexUppercase=/[A-Z]/,rot=function(e,r){if(null==r&&(r=13),r=Number(r),e=String(e),0==r)return e;0>r&&(r+=26);for(var a,c,t,s=e.length,p=-1,n="";++p<s;)a=e.charAt(p),regexLowercase.test(a)?(c=lowercase.indexOf(a),t=(c+r)%26,n+=lowercase.charAt(t)):regexUppercase.test(a)?(c=uppercase.indexOf(a),t=(c+r)%26,n+=uppercase.charAt(t)):n+=a;return n};\n'; 1435 1436 // Generate new file from modified AST 1437 var modifiedCode = prependCode + escodegen.generate(ast); 1438 grunt.file.write(f.dest, modifiedCode); 1439 1440 grunt.log.writeln('File "' + f.dest + '" encrypted.'); 1441 }); 1442 }); 1443 1376 1444 /* 1377 1445 * Automatically updates the `:dynamic` configurations 1378 1446 * so that only the changed files are updated. -
package-lock.json
2318 2318 "is-plain-object": "^2.0.1" 2319 2319 } 2320 2320 }, 2321 "deep-is": { 2322 "version": "0.1.3", 2323 "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 2324 "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 2325 "dev": true 2326 }, 2321 2327 "define-properties": { 2322 2328 "version": "1.1.2", 2323 2329 "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", … … 2791 2797 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 2792 2798 "dev": true 2793 2799 }, 2800 "escodegen": { 2801 "version": "1.10.0", 2802 "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz", 2803 "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==", 2804 "dev": true, 2805 "requires": { 2806 "esprima": "^3.1.3", 2807 "estraverse": "^4.2.0", 2808 "esutils": "^2.0.2", 2809 "optionator": "^0.8.1", 2810 "source-map": "~0.6.1" 2811 }, 2812 "dependencies": { 2813 "esprima": { 2814 "version": "3.1.3", 2815 "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", 2816 "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", 2817 "dev": true 2818 }, 2819 "source-map": { 2820 "version": "0.6.1", 2821 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2822 "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2823 "dev": true, 2824 "optional": true 2825 } 2826 } 2827 }, 2794 2828 "escope": { 2795 2829 "version": "3.6.0", 2796 2830 "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", … … 2804 2838 } 2805 2839 }, 2806 2840 "esprima": { 2807 "version": " 1.0.4",2808 "resolved": "https://registry.npmjs.org/esprima/-/esprima- 1.0.4.tgz",2809 "integrity": "sha 1-n1V+CPw7TSbs6d00+Pv0drYlha0=",2841 "version": "4.0.0", 2842 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 2843 "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 2810 2844 "dev": true 2811 2845 }, 2812 2846 "esrecurse": { … … 2824 2858 "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 2825 2859 "dev": true 2826 2860 }, 2861 "esutils": { 2862 "version": "2.0.2", 2863 "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 2864 "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 2865 "dev": true 2866 }, 2827 2867 "etag": { 2828 2868 "version": "1.8.1", 2829 2869 "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", … … 3237 3277 "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 3238 3278 "dev": true 3239 3279 }, 3280 "fast-levenshtein": { 3281 "version": "2.0.6", 3282 "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 3283 "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 3284 "dev": true 3285 }, 3240 3286 "faye-websocket": { 3241 3287 "version": "0.10.0", 3242 3288 "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", … … 5045 5091 "dev": true, 5046 5092 "requires": { 5047 5093 "esprima": "~1.0.0" 5094 }, 5095 "dependencies": { 5096 "esprima": { 5097 "version": "1.0.4", 5098 "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", 5099 "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", 5100 "dev": true 5101 } 5048 5102 } 5049 5103 }, 5050 5104 "grunt-known-options": { … … 6815 6869 "invert-kv": "^1.0.0" 6816 6870 } 6817 6871 }, 6872 "levn": { 6873 "version": "0.3.0", 6874 "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 6875 "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 6876 "dev": true, 6877 "requires": { 6878 "prelude-ls": "~1.1.2", 6879 "type-check": "~0.3.2" 6880 } 6881 }, 6818 6882 "livereload-js": { 6819 6883 "version": "2.3.0", 6820 6884 "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", … … 8170 8234 "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", 8171 8235 "dev": true 8172 8236 }, 8237 "optionator": { 8238 "version": "0.8.2", 8239 "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 8240 "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 8241 "dev": true, 8242 "requires": { 8243 "deep-is": "~0.1.3", 8244 "fast-levenshtein": "~2.0.4", 8245 "levn": "~0.3.0", 8246 "prelude-ls": "~1.1.2", 8247 "type-check": "~0.3.2", 8248 "wordwrap": "~1.0.0" 8249 }, 8250 "dependencies": { 8251 "wordwrap": { 8252 "version": "1.0.0", 8253 "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 8254 "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 8255 "dev": true 8256 } 8257 } 8258 }, 8173 8259 "optipng-bin": { 8174 8260 "version": "3.1.4", 8175 8261 "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", … … 8583 8669 "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", 8584 8670 "dev": true 8585 8671 }, 8672 "prelude-ls": { 8673 "version": "1.1.2", 8674 "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 8675 "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 8676 "dev": true 8677 }, 8586 8678 "prepend-http": { 8587 8679 "version": "1.0.4", 8588 8680 "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", … … 9125 9217 "inherits": "^2.0.1" 9126 9218 } 9127 9219 }, 9220 "rot": { 9221 "version": "0.1.0", 9222 "resolved": "https://registry.npmjs.org/rot/-/rot-0.1.0.tgz", 9223 "integrity": "sha1-rPQEhNIAhC6LxIRDgmFuSGNdSN4=", 9224 "dev": true 9225 }, 9128 9226 "rtlcss": { 9129 9227 "version": "2.2.1", 9130 9228 "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz", … … 10700 10798 "resolved": "https://registry.npmjs.org/twemoji/-/twemoji-11.0.0.tgz", 10701 10799 "integrity": "sha1-fuxX0Sv9H//o1efwXaC2QipgeQ8=" 10702 10800 }, 10801 "type-check": { 10802 "version": "0.3.2", 10803 "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 10804 "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 10805 "dev": true, 10806 "requires": { 10807 "prelude-ls": "~1.1.2" 10808 } 10809 }, 10703 10810 "type-is": { 10704 10811 "version": "1.6.16", 10705 10812 "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", … … 11830 11937 "dev": true 11831 11938 } 11832 11939 } 11940 }, 11941 "zxcvbn": { 11942 "version": "4.4.2", 11943 "resolved": "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz", 11944 "integrity": "sha1-KOwXzwl0PtyrBW3dixsGJizHPDA=" 11833 11945 } 11834 11946 } 11835 11947 } -
package.json
15 15 "devDependencies": { 16 16 "autoprefixer": "^6.5.1", 17 17 "check-node-version": "3.2.0", 18 "escodegen": "1.10.0", 19 "esprima": "4.0.0", 20 "estraverse": "4.2.0", 18 21 "grunt": "1.0.2", 19 22 "grunt-banner": "^0.6.0", 20 23 "grunt-contrib-clean": "~1.0.0", … … 41 44 "ink-docstrap": "^1.3.0", 42 45 "jquery-migrate": "1.4.1", 43 46 "matchdep": "~1.0.0", 47 "rot": "0.1.0", 44 48 "webpack": "^3.6.0", 45 49 "webpack-dev-server": "^2.9.1" 46 50 }, … … 54 58 "jquery-ui": "github:jquery/jquery-ui#1.11.4", 55 59 "masonry-layout": "3.3.2", 56 60 "twemoji": "11.0.0", 57 "underscore": "1.8.3" 61 "underscore": "1.8.3", 62 "zxcvbn": "4.4.2" 58 63 } 59 64 }