WordPress.org

Make WordPress Core

Changeset 44354


Ignore:
Timestamp:
12/20/2018 07:45:15 PM (9 months ago)
Author:
desrosj
Message:

External Libraries: Update zxcvbn to 4.2.2.

Version 4.2.2 of the zxcvbn password strength library has several bug fixes. A full list of changes can be seen here: https://github.com/dropbox/zxcvbn/compare/v4.4.1...v4.4.2.

This commit also adds the library as a project dependency, making it easier to update in the future. Because the dictionary within the library contains non-PG language, a rot13:zxcvbn task has been added to Grunt to perform a ROT-13 cipher on the library. This task has been added to grunt build and grunt build:js.

Props omarreiss, netweb, desrosj.
Fixes #43749.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Gruntfile.js

    r44282 r44354  
    66    var path = require('path'),
    77        fs = require( 'fs' ),
     8        rot = require( 'rot' );
     9        esprima = require( 'esprima' );
     10        estraverse = require( 'estraverse' );
     11        escodegen = require( 'escodegen' );
    812        spawn = require( 'child_process' ).spawnSync,
    913        SOURCE_DIR = 'src/',
     
    681685                    '!wp-admin/js/farbtastic.js',
    682686                    '!wp-includes/js/swfobject.js',
    683                     '!wp-includes/js/wp-embed.js' // We have extra options for this, see uglify:embed
     687                    '!wp-includes/js/wp-embed.js', // We have extra options for this, see uglify:embed
     688
     689                    // .min files that still need to be minified.
     690                    'wp-includes/js/zxcvbn.min.js'
    684691                ]
    685692            },
     
    10691076            }
    10701077        },
     1078        rot13: {
     1079            zxcvbn: {
     1080                src: './node_modules/zxcvbn/dist/zxcvbn.js',
     1081                dest: 'build/wp-includes/js/zxcvbn.min.js'
     1082            },
     1083        },
    10711084        _watch: {
    10721085            options: {
     
    13471360        'webpack:dev',
    13481361        'copy:js',
     1362        'rot13:zxcvbn',
    13491363        'file_append',
    13501364        'uglify:all',
     
    13651379        'clean:all',
    13661380        'copy:all',
     1381        'rot13:zxcvbn',
    13671382        'file_append',
    13681383        'cssmin:core',
     
    14371452    grunt.registerTask('default', ['build']);
    14381453
     1454    grunt.registerMultiTask('rot13', 'ROT-13 zxcvbn passwords for PG-ness.', function() {
     1455        this.files.forEach(function(f) {
     1456            // Build AST from source code
     1457            var code = grunt.file.read(f.src);
     1458            var ast = esprima.parse(code);
     1459
     1460            ast = estraverse.replace(ast, {
     1461                enter: function(node) {
     1462                    // Filter string
     1463                    let key_names = [
     1464                        'passwords',
     1465                        'english_wikipedia',
     1466                        'female_names',
     1467                        'surnames',
     1468                        'us_tv_and_film',
     1469                        'male_names'
     1470                    ];
     1471
     1472                    if( node.type === 'Property' && key_names.includes( node.key.name ) ) {
     1473                        // Wrap encrypted string with decrypt function.
     1474                        var value = {
     1475                            type: 'CallExpression',
     1476                            callee: {
     1477                                type: 'Identifier',
     1478                                name: 'rot'
     1479                            },
     1480                            arguments: [{
     1481                                type: 'Literal',
     1482                                value: rot(node.value.callee.object.value, 13),
     1483                                raw: rot(node.value.callee.object.raw, 13)
     1484                            }, {
     1485                                type: 'Literal',
     1486                                value: 13,
     1487                                raw: 13
     1488                            }]
     1489                        };
     1490                        node.value = value;
     1491                        return node;
     1492                    }
     1493                }
     1494            });
     1495
     1496            // ROT-13 decode function
     1497            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';
     1498
     1499            // Generate new file from modified AST
     1500            var modifiedCode = prependCode + escodegen.generate(ast);
     1501            grunt.file.write(f.dest, modifiedCode);
     1502
     1503            grunt.log.writeln('File "' + f.dest + '" encrypted.');
     1504        });
     1505    });
     1506
    14391507    /*
    14401508     * Automatically updates the `:dynamic` configurations
  • trunk/package-lock.json

    r44319 r44354  
    44294429            }
    44304430        },
     4431        "deep-is": {
     4432            "version": "0.1.3",
     4433            "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
     4434            "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
     4435        },
    44314436        "deepmerge": {
    44324437            "version": "1.5.2",
     
    49894994            "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
    49904995        },
     4996        "escodegen": {
     4997            "version": "1.10.0",
     4998            "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz",
     4999            "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==",
     5000            "requires": {
     5001                "esprima": "^3.1.3",
     5002                "estraverse": "^4.2.0",
     5003                "esutils": "^2.0.2",
     5004                "optionator": "^0.8.1",
     5005                "source-map": "~0.6.1"
     5006            },
     5007            "dependencies": {
     5008                "esprima": {
     5009                    "version": "3.1.3",
     5010                    "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
     5011                    "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
     5012                },
     5013                "source-map": {
     5014                    "version": "0.6.1",
     5015                    "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
     5016                    "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
     5017                    "optional": true
     5018                }
     5019            }
     5020        },
    49915021        "eslint-scope": {
    49925022            "version": "4.0.0",
     
    50005030        },
    50015031        "esprima": {
    5002             "version": "1.0.4",
    5003             "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
    5004             "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
    5005             "dev": true
     5032            "version": "4.0.0",
     5033            "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
     5034            "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
    50065035        },
    50075036        "esrecurse": {
     
    50175046            "version": "4.2.0",
    50185047            "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
    5019             "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
    5020             "dev": true
     5048            "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
    50215049        },
    50225050        "esutils": {
     
    53845412            "dev": true
    53855413        },
     5414        "fast-levenshtein": {
     5415            "version": "2.0.6",
     5416            "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
     5417            "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
     5418        },
    53865419        "faye-websocket": {
    53875420            "version": "0.10.0",
     
    70807113            "requires": {
    70817114                "esprima": "~1.0.0"
     7115            },
     7116            "dependencies": {
     7117                "esprima": {
     7118                    "version": "1.0.4",
     7119                    "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
     7120                    "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
     7121                    "dev": true
     7122                }
    70827123            }
    70837124        },
     
    92759316            }
    92769317        },
     9318        "levn": {
     9319            "version": "0.3.0",
     9320            "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
     9321            "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
     9322            "requires": {
     9323                "prelude-ls": "~1.1.2",
     9324                "type-check": "~0.3.2"
     9325            }
     9326        },
    92779327        "line-height": {
    92789328            "version": "0.3.1",
     
    1115011200            }
    1115111201        },
     11202        "optionator": {
     11203            "version": "0.8.2",
     11204            "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
     11205            "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
     11206            "requires": {
     11207                "deep-is": "~0.1.3",
     11208                "fast-levenshtein": "~2.0.4",
     11209                "levn": "~0.3.0",
     11210                "prelude-ls": "~1.1.2",
     11211                "type-check": "~0.3.2",
     11212                "wordwrap": "~1.0.0"
     11213            },
     11214            "dependencies": {
     11215                "wordwrap": {
     11216                    "version": "1.0.0",
     11217                    "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
     11218                    "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
     11219                }
     11220            }
     11221        },
    1115211222        "optipng-bin": {
    1115311223            "version": "3.1.4",
     
    1214612216                }
    1214712217            }
     12218        },
     12219        "prelude-ls": {
     12220            "version": "1.1.2",
     12221            "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
     12222            "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
    1214812223        },
    1214912224        "prepend-http": {
     
    1324313318            }
    1324413319        },
     13320        "rot": {
     13321            "version": "0.1.0",
     13322            "resolved": "https://registry.npmjs.org/rot/-/rot-0.1.0.tgz",
     13323            "integrity": "sha1-rPQEhNIAhC6LxIRDgmFuSGNdSN4="
     13324        },
    1324513325        "rtlcss": {
    1324613326            "version": "2.2.1",
     
    1530315383            "resolved": "https://registry.npmjs.org/twemoji/-/twemoji-11.0.0.tgz",
    1530415384            "integrity": "sha1-fuxX0Sv9H//o1efwXaC2QipgeQ8="
     15385        },
     15386        "type-check": {
     15387            "version": "0.3.2",
     15388            "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
     15389            "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
     15390            "requires": {
     15391                "prelude-ls": "~1.1.2"
     15392            }
    1530515393        },
    1530615394        "type-is": {
     
    1678616874                "readable-stream": "^2.0.0"
    1678716875            }
     16876        },
     16877        "zxcvbn": {
     16878            "version": "4.4.2",
     16879            "resolved": "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz",
     16880            "integrity": "sha1-KOwXzwl0PtyrBW3dixsGJizHPDA="
    1678816881        }
    1678916882    }
  • trunk/package.json

    r44319 r44354  
    9595        "backbone": "1.3.3",
    9696        "element-closest": "^2.0.2",
     97        "escodegen": "1.10.0",
     98        "esprima": "4.0.0",
     99        "estraverse": "4.2.0",
    97100        "formdata-polyfill": "^3.0.12",
    98101        "imagesloaded": "3.2.0",
     
    108111        "react": "^16.6.3",
    109112        "react-dom": "^16.6.3",
     113        "rot": "0.1.0",
    110114        "twemoji": "11.0.0",
    111115        "underscore": "1.8.3",
     116        "zxcvbn": "4.4.2",
    112117        "whatwg-fetch": "^3.0.0"
    113118    },
Note: See TracChangeset for help on using the changeset viewer.