| 2 | | var badwords, intersect; |
| 3 | | badwords = [ |
| 4 | | 'sql', 'trojan', 'rce', 'permissions', 'exploit', 'exploits', 'csrf', 'xss', 'sqli', |
| 5 | | 'scripting', 'vulnerability', 'vulnerabilities', 'capability', 'capabilities', 'intrusion', |
| 6 | | 'intrusions', 'cve', 'disclosure', 'hash', 'security', 'leakage', 'privilege', 'privileges', |
| 7 | | 'compromise', 'escalation', 'injection', 'forgery', 'password', 'passwords' |
| 8 | | ]; |
| | 5 | var submit = $( 'input[type="submit"]' ); |
| | 6 | wp.trac_security = { |
| | 7 | badwords : [ |
| | 8 | 'sql', 'trojan', 'rce', 'permissions', 'exploit', 'exploits', 'csrf', 'xss', 'sqli', |
| | 9 | 'scripting', 'vulnerability', 'vulnerabilities', 'capability', 'capabilities', 'intrusion', |
| | 10 | 'intrusions', 'cve', 'disclosure', 'hash', 'security', 'leakage', 'privilege', 'privileges', |
| | 11 | 'compromise', 'escalation', 'injection', 'forgery', 'password', 'passwords' |
| | 12 | ], |
| 10 | | intersect = function(a, b) { |
| 11 | | return $.grep(a, function(i) { |
| 12 | | return $.inArray(i, b) > -1; |
| 13 | | }); |
| | 14 | intersect : function(a, b) { |
| | 15 | return $.grep(a, function(i) { |
| | 16 | return $.inArray(i, b) > -1; |
| | 17 | }); |
| | 18 | }, |
| | 19 | |
| | 20 | has_overlap : function(str, arr){ |
| | 21 | var words = str.toLowerCase().replace(/[^a-z|\s]/g, '').split(' '), |
| | 22 | overlap = this.intersect( words, arr); |
| | 23 | |
| | 24 | return ( overlap.length !== 0 ); |
| | 25 | } |
| 16 | | $(document).ready( function() { |
| 17 | | var submit = $( 'input[type="submit"]' ); |
| 18 | | $( '#field-summary, #field-description' ).on( 'keyup', function() { |
| 19 | | var words, overlap; |
| 20 | | words = $(this).val().toLowerCase().split( /[^a-z]/ ); |
| 21 | | overlap = intersect( badwords, words ); |
| 22 | | |
| 23 | | if ( overlap.length === 0 ) { |
| 24 | | submit.prop( 'disabled', false ); |
| 25 | | $( '#security-question' ).hide(); |
| 26 | | return; |
| 27 | | } |
| | 28 | function show_box(){ |
| | 29 | // We have a potential problem here |
| | 30 | submit.prop( 'disabled', true ); |
| | 31 | if ( $( '#security-question' ).length !== 0 ){ |
| | 32 | // We've already created the checkbox |
| | 33 | $( '#security-question' ).show(); |
| | 34 | } else { |
| | 35 | // We need to add the checkbox |
| | 36 | $( '.buttons' ).before( '<p id="security-question"><label><input type="checkbox" name="sec_question" />' + |
| | 37 | ' I am <strong>not</strong> reporting a security issue</label>' + |
| | 38 | ' — <a href="http://make.wordpress.org/core/handbook/reporting-security-vulnerabilities/">report security issues to security@wordpress.org</a></p>' ); |
| | 39 | } |
| 29 | | // We have a potential problem here |
| 30 | | submit.prop( 'disabled', true ); |
| 31 | | if ( $( '#security-question' ).length !== 0 ){ |
| 32 | | // We've already created the checkbox |
| 33 | | $( '#security-question' ).show(); |
| 34 | | } else { |
| 35 | | // We need to add the checkbox |
| 36 | | $( '.buttons' ).before( '<p id="security-question"><label><input type="checkbox" name="sec_question" />' + |
| 37 | | ' I am <strong>not</strong> reporting a security issue</label>' + |
| 38 | | ' — <a href="http://make.wordpress.org/core/handbook/reporting-security-vulnerabilities/">report security issues to security@wordpress.org</a></p>' ); |
| 39 | | } |
| 40 | | }); |
| 41 | | $( '#propertyform' ).on( 'change', '#security-question input', function() { |
| 42 | | submit.prop( 'disabled', ! $(this).is( ':checked' ) ); |
| 43 | | }); |
| | 41 | } |
| | 42 | |
| | 43 | function hide_box(){ |
| | 44 | $('input[name="submit"]').prop('disabled', false); |
| | 45 | $('#sec_question').hide(); |
| | 46 | } |
| | 47 | |
| | 48 | jQuery('#field-summary, #field-description, #field-keywords').on('keyup', function(){ |
| | 49 | var entry = $(this).val(); |
| | 50 | |
| | 51 | if ( wp.trac_security.has_overlap( entry, wp.trac_security.badwords ) ) { |
| | 52 | show_box(); |
| | 53 | } else { |
| | 54 | hide_box(); |
| | 55 | } |