Plugin Directory

Changeset 2276839


Ignore:
Timestamp:
04/06/2020 02:41:14 AM (6 years ago)
Author:
mihche
Message:

Version 3.1.39

Location:
goodbye-captcha/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • goodbye-captcha/trunk/assets/public/scripts/gdbc-client-new.js.php

    r1860144 r2276839  
    11<?php
    2 /*
    3  * Copyright (C) 2018 Mihai Chelaru
    4  *
    5  * This program is free software; you can redistribute it and/or
    6  * modify it under the terms of the GNU General Public License
    7  * as published by the Free Software Foundation; either version 2
    8  * of the License, or (at your option) any later version.
    9  *
    10  * This program is distributed in the hope that it will be useful,
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  * GNU General Public License for more details.
    14  *
    15  * You should have received a copy of the GNU General Public License
    16  * along with this program; if not, write to the Free Software
    17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    18  */
    192
    203defined( 'ABSPATH' ) || exit;
    214
    22 function gdbcRewriteNoCacheHeaders($arrHeaders)
    23 {
     5add_filter('nocache_headers', function($arrHeaders){
    246    $arrHeaders['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
    257    $arrHeaders['Content-Type']  = 'application/javascript; charset=utf-8';
    268   
    279    return $arrHeaders;
    28 }
    29 
    30 add_filter('nocache_headers', 'gdbcRewriteNoCacheHeaders', 1);
     10}, 1);
    3111
    3212nocache_headers();
     
    10282
    10383            requestObj.onreadystatechange = function () {
    104                 if (4 === requestObj.readyState && 200 === requestObj.status){
     84                if (4 === requestObj.readyState && 200 === requestObj.status)
     85                {
    10586                    try
    10687                    {
    10788                        var rs = JSON.parse(requestObj.responseText);
    108                         if(rs.data !== 'undefined')
    109                             for(var p in rs.data){
    110                                 if(p=='token'){
    111                                     formFieldElm.value = rs.data[p];
     89                        if(rs.data === 'undefined')
     90                            return;
     91                       
     92                        var tokens = {};
     93                       
     94                        for(var p in rs.data)
     95                        {
     96                            if(p=='token')
     97                            {
     98                                formFieldElm.value = rs.data[p];
     99                                tokens[formFieldElm.name] = null;
     100                            }
     101                            else
     102                            {
     103                                var value = '', arrValues = rs.data[p].split('|');
     104                                for (var i = 0; i < arrValues.length; ++i) {
     105                                    if (browserInfo.hasOwnProperty(arrValues[i]))
     106                                        value += browserInfo[arrValues[i]];
    112107                                }
    113                                 else {
    114                                     var value = '', arrValues = rs.data[p].split('|');
    115                                     for (var i = 0; i < arrValues.length; ++i) {
    116                                         if (browserInfo.hasOwnProperty(arrValues[i]))
    117                                             value += browserInfo[arrValues[i]];
    118                                     }
    119108
    120                                     var elm = document.createElement("input");elm.name = p;elm.value=value;elm.type='hidden';formElement.appendChild(elm);
    121 
    122                                     if((' ' + formElement.className + ' ').indexOf(' mailpoet_form ') > -1){
    123                                         elm.name = 'data[' + p + ']';formFieldElm.name = 'data[' + formFieldElm.name + ']';
    124                                     }
    125 
     109                                var elm = document.createElement("input");elm.name = p;elm.value=value;elm.type='hidden';formElement.appendChild(elm);
     110                                tokens[elm.name] = null;
     111                               
     112                                if((' ' + formElement.className + ' ').indexOf(' mailpoet_form ') > -1){
     113                                    elm.name = 'data[' + p + ']';formFieldElm.name = 'data[' + formFieldElm.name + ']';
    126114                                }
    127115                            }
     116                        }
    128117
     118                        window.jQuery && jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
     119
     120                            if( ! ('action' in originalOptions.data)  || originalOptions.data.action !== 'nf_ajax_submit')
     121                                return;
     122
     123                            for(var token in tokens){
     124                                tokens[token] = formElement.querySelector('input[name="'+token+'"]');
     125                                tokens[token] && (tokens[token] = tokens[token].value );
     126                            }
     127                           
     128                            options.data = jQuery.param(jQuery.extend(originalOptions.data||{}, tokens));
     129                           
     130                        });
     131                       
     132                       
     133                       
    129134                    }
    130135                    catch(e){console.log(e.message);}
  • goodbye-captcha/trunk/assets/public/scripts/gdbc-client.js.php

    r1593955 r2276839  
    11<?php
    2 /*
    3  * Copyright (C) 2014 Mihai Chelaru
    4  *
    5  * This program is free software; you can redistribute it and/or
    6  * modify it under the terms of the GNU General Public License
    7  * as published by the Free Software Foundation; either version 2
    8  * of the License, or (at your option) any later version.
    9  *
    10  * This program is distributed in the hope that it will be useful,
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  * GNU General Public License for more details.
    14  *
    15  * You should have received a copy of the GNU General Public License
    16  * along with this program; if not, write to the Free Software
    17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    18  */
    192
    203defined( 'ABSPATH' ) || exit;
    214
    22 function gdbcRewriteNoCacheHeaders($arrHeaders)
    23 {
     5add_filter('nocache_headers', function($arrHeaders){
    246    $arrHeaders['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
    257    $arrHeaders['Content-Type']  = 'application/javascript; charset=utf-8';
    26 
     8   
    279    return $arrHeaders;
    28 }
    29 
    30 add_filter('nocache_headers', 'gdbcRewriteNoCacheHeaders', 1);
     10}, 1);
    3111
    3212nocache_headers();
    3313
     14if(null === ($settingsModuleInstance = GdbcModulesController::getPublicModuleInstance(GdbcModulesController::MODULE_SETTINGS))){
     15    exit;
     16}
    3417
    35 ?>
     18$arrPlaceHolders = array(
     19    '__INPUT_NAME__'  => $settingsModuleInstance->getOption(GdbcSettingsAdminModule::OPTION_HIDDEN_INPUT_NAME),
     20    '__AJAX_URL__'    => MchGdbcWpUtils::getAjaxUrl(),
     21    '__AJAX_NONCE__'  => GdbcAjaxController::getAjaxNonce(),
     22    '__AJAX_ACTION__' => GdbcAjaxController::ACTION_RETRIEVE_TOKEN,
     23   
     24);
    3625
    37 (function($) {
    38     $.GdbcClient = function(el, options) {
    39         var gdbcClient = this, defaults = {};
    40         gdbcClient.settings = {};
    41         var init = function() {
    42             gdbcClient.settings = $.extend({}, defaults, options);
    43         };
     26//$scriptOutput = <<<Output
     27//(function() {'use strict';
     28//    if (!Array.isArray){Array.isArray = function(arg){return Object.prototype.toString.call(arg) === '[object Array]';};}
     29//    if (!String.prototype.trim){String.prototype.trim = function () {return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');};}
     30//
     31//    var WPBruiserClient = function(){
     32//        var browserInfo = new Array();
     33//        function init(){
     34//            var w=window,d=document,e=0,f=0;e|=w.ActiveXObject?1:0;e|=w.opera?2:0;e|=w.chrome?4:0;
     35//            e|='getBoxObjectFor' in d || 'mozInnerScreenX' in w?8:0;e|=('WebKitCSSMatrix' in w||'WebKitPoint' in w||'webkitStorageInfo' in w||'webkitURL' in w)?16:0;
     36//            e|=(e&16&&({}.toString).toString().indexOf("\\n")===-1)?32:0;f|='sandbox' in d.createElement('iframe')?1:0;f|='WebSocket' in w?2:0;
     37//            f|=w.Worker?4:0;f|=w.applicationCache?8:0;f|=w.history && history.pushState?16:0;f|=d.documentElement.webkitRequestFullScreen?32:0;f|='FileReader' in w?64:0;
     38//
     39//            var ua = navigator.userAgent.toLowerCase();
     40//            var regex = /compatible; ([\w.+]+)[ \/]([\w.+]*)|([\w .+]+)[: \/]([\w.+]+)|([\w.+]+)/g;
     41//            var match = regex.exec(ua);
     42//            browserInfo = {screenWidth:screen.width,screenHeight:screen.height,engine:e,features:f};
     43//            while (match !== null) {
     44//                var prop = {};
     45//                if (match[1]) {
     46//                    prop.type = match[1];
     47//                    prop.version = match[2];
     48//                } else if (match[3]) {
     49//                    prop.type = match[3];
     50//                    prop.version = match[4];
     51//                } else {
     52//                    prop.type = match[5];
     53//                }
     54//                prop.type = (prop.type).trim().replace('.','').replace(' ','_');
     55//                var value = prop.version ? prop.version : true;
     56//                if (browserInfo[prop.type]) {
     57//                    !Array.isArray(browserInfo[prop.type])?browserInfo[prop.type]=new Array(browserInfo[prop.type]):'';
     58//                    browserInfo[prop.type].push(value);
     59//                }
     60//                else browserInfo[prop.type] = value;
     61//                match = regex.exec(ua);
     62//            }
     63//        };
     64//
     65//
     66//        var requestTokens = function(){for(var i = 0; i < document.forms.length; ++i){retrieveToken(document.forms[i]);}};
     67//
     68//        function retrieveToken(formElement){
     69//
     70//            var requestObj = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
     71//
     72//            var formFieldElm = formElement.querySelector('input[name="__INPUT_NAME__"]');
     73//            if(!requestObj || !formFieldElm) return;
     74//            var ajaxData = [];
     75//
     76//            ajaxData['__INPUT_NAME__'] = '__AJAX_NONCE__';
     77//            ajaxData['action']      = '__AJAX_ACTION__';
     78//            ajaxData['requestTime'] = (new Date()).getTime();
     79//            ajaxData['browserInfo'] = JSON.stringify(browserInfo);
     80//
     81//            requestObj.open('POST', '__AJAX_URL__', true);
     82//            requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
     83//            requestObj.setRequestHeader("X-Requested-With", "XMLHttpRequest");
     84//            requestObj.setRequestHeader('Accept',"application/json, text/javascript, */*; q=0.01");
     85//            requestObj.send(serializeObject(ajaxData));
     86//
     87//            requestObj.onreadystatechange = function () {
     88//                if (4 === requestObj.readyState && 200 === requestObj.status)
     89//                {
     90//                    try
     91//                    {
     92//                        var rs = JSON.parse(requestObj.responseText);
     93//                        if(rs.data === 'undefined')
     94//                            return;
     95//
     96//                        var tokens = {};
     97//
     98//                        for(var p in rs.data)
     99//                        {
     100//                            if(p=='token')
     101//                            {
     102//                                formFieldElm.value = rs.data[p];
     103//                                tokens[formFieldElm.name] = null;
     104//                            }
     105//                            else
     106//                            {
     107//                                var value = '', arrValues = rs.data[p].split('|');
     108//                                for (var i = 0; i < arrValues.length; ++i) {
     109//                                    if (browserInfo.hasOwnProperty(arrValues[i]))
     110//                                        value += browserInfo[arrValues[i]];
     111//                                }
     112//
     113//                                var elm = document.createElement("input");elm.name = p;elm.value=value;elm.type='hidden';formElement.appendChild(elm);
     114//                                tokens[elm.name] = null;
     115//
     116//                                if((' ' + formElement.className + ' ').indexOf(' mailpoet_form ') > -1){
     117//                                    elm.name = 'data[' + p + ']';formFieldElm.name = 'data[' + formFieldElm.name + ']';
     118//                                }
     119//                            }
     120//                        }
     121//
     122//                        window.jQuery && jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
     123//
     124//                            if( ! ('action' in originalOptions.data)  || originalOptions.data.action !== 'nf_ajax_submit')
     125//                                return;
     126//
     127//                            for(var token in tokens){
     128//                                tokens[token] = formElement.querySelector('input[name="'+token+'"]');
     129//                                tokens[token] && (tokens[token] = tokens[token].value );
     130//                            }
     131//
     132//                            options.data = jQuery.param(jQuery.extend(originalOptions.data||{}, tokens));
     133//
     134//                        });
     135//
     136//
     137//
     138//                    }
     139//                    catch(e){console.log(e.message);}
     140//                }
     141//            }
     142//        }
     143//
     144//        init();
     145//
     146//        function serializeObject(obj) {
     147//            var str = [];
     148//            for(var p in obj)
     149//                if (obj.hasOwnProperty(p)) {
     150//                    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
     151//                }
     152//            return str.join("&");
     153//        }
     154//        return {requestTokens : requestTokens};
     155//    }
     156//
     157//    window.WPBruiserClient = new WPBruiserClient();window.WPBruiserClient.requestTokens();
     158//
     159//})();
     160//Output;
    44161
    45         gdbcClient.requestTokens = function() {
    46             $('form input[name=' + Gdbc.formFieldName + ']').each(function(){
    47                 requestTokenValue($(this));
    48             });
    49         };
    50162
    51         var requestTokenValue = function(elm) {
    52             var ajaxData = {};
     163/**
     164 * compressed javascript https://jscompress.com/
     165 */
     166$scriptOutput = <<<Output
     167!function(){"use strict";Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")});window.WPBruiserClient=new function(){var p=new Array;function t(s){var c=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),u=s.querySelector('input[name="__INPUT_NAME__"]');if(c&&u){var e=[];e['__INPUT_NAME__']="__AJAX_NONCE__",e.action="__AJAX_ACTION__",e.requestTime=(new Date).getTime(),e.browserInfo=JSON.stringify(p),c.open("POST","__AJAX_URL__",!0),c.setRequestHeader("Content-type","application/x-www-form-urlencoded; charset=UTF-8"),c.setRequestHeader("X-Requested-With","XMLHttpRequest"),c.setRequestHeader("Accept","application/json, text/javascript, */*; q=0.01"),c.send(function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}(e)),c.onreadystatechange=function(){if(4===c.readyState&&200===c.status)try{var e=JSON.parse(c.responseText);if("undefined"===e.data)return;var a={};for(var t in e.data)if("token"==t)u.value=e.data[t],a[u.name]=null;else{for(var n="",r=e.data[t].split("|"),i=0;i<r.length;++i)p.hasOwnProperty(r[i])&&(n+=p[r[i]]);var o=document.createElement("input");o.name=t,o.value=n,o.type="hidden",s.appendChild(o),a[o.name]=null,-1<(" "+s.className+" ").indexOf(" mailpoet_form ")&&(o.name="data["+t+"]",u.name="data["+u.name+"]")}window.jQuery&&jQuery.ajaxPrefilter(function(e,t,n){if("action"in t.data&&"nf_ajax_submit"===t.data.action){for(var r in a)a[r]=s.querySelector('input[name="'+r+'"]'),a[r]&&(a[r]=a[r].value);e.data=jQuery.param(jQuery.extend(t.data||{},a))}})}catch(e){console.log(e.message)}}}}return function(){var e=window,t=document,n=0,r=0;n|=e.ActiveXObject?1:0,n|=e.opera?2:0,n|=e.chrome?4:0,n|="getBoxObjectFor"in t||"mozInnerScreenX"in e?8:0,n|="WebKitCSSMatrix"in e||"WebKitPoint"in e||"webkitStorageInfo"in e||"webkitURL"in e?16:0,n|=16&n&&-1==={}.toString.toString().indexOf("\\n")?32:0,r|="sandbox"in t.createElement("iframe")?1:0,r|="WebSocket"in e?2:0,r|=e.Worker?4:0,r|=e.applicationCache?8:0,r|=e.history&&history.pushState?16:0,r|=t.documentElement.webkitRequestFullScreen?32:0,r|="FileReader"in e?64:0;var a=navigator.userAgent.toLowerCase(),i=/compatible; ([\w.+]+)[ \/]([\w.+]*)|([\w .+]+)[: \/]([\w.+]+)|([\w.+]+)/g,o=i.exec(a);for(p={screenWidth:screen.width,screenHeight:screen.height,engine:n,features:r};null!==o;){var s={};o[1]?(s.type=o[1],s.version=o[2]):o[3]?(s.type=o[3],s.version=o[4]):s.type=o[5],s.type=s.type.trim().replace(".","").replace(" ","_");var c=!s.version||s.version;p[s.type]?(Array.isArray(p[s.type])||(p[s.type]=new Array(p[s.type])),p[s.type].push(c)):p[s.type]=c,o=i.exec(a)}}(),{requestTokens:function(){for(var e=0;e<document.forms.length;++e)t(document.forms[e])}}},window.WPBruiserClient.requestTokens()}();
     168Output;
    53169
    54             ajaxData[Gdbc.formFieldName] = '<?php echo GdbcAjaxController::getAjaxNonce(); ?>';
    55             ajaxData['action']      = '<?php echo GdbcAjaxController::ACTION_RETRIEVE_TOKEN ?>';
    56             ajaxData['requestTime'] = (new Date()).getTime();
    57             ajaxData['browserInfo'] = JSON.stringify(Gdbc.browserInfo);
    58             $.ajax({
    59                 type : "post",
    60                 cache: false,
    61                 dataType : "json",
    62                 url : Gdbc.ajaxUrl + '?t=' + ajaxData['requestTime'],
    63                 data : ajaxData,
    64                 success: function(response){
    65                     $.each(response.data, function(prop, val){
    66                         if(prop === 'token'){
    67                             elm.val(val);return;
    68                         }
     170echo str_replace(array_keys($arrPlaceHolders), $arrPlaceHolders, $scriptOutput);
    69171
    70                         var value = '', arrValues = val.split('|');
    71                         for(var i=0; i<arrValues.length; ++i) {
    72                             if (Gdbc.browserInfo.hasOwnProperty(arrValues[i]))
    73                                 value += Gdbc.browserInfo[arrValues[i]];
    74                         }
    75                         $('<input>').prop({type:'hidden',name:prop,value:value}).appendTo(elm.closest('form'));
    76                     });
    77                 }
    78             });
    79         };
    80         init();
    81     }
    82 })(jQuery);
    83172
    84 jQuery(document).ready(function($){(new $.GdbcClient()).requestTokens();});
  • goodbye-captcha/trunk/goodbye-captcha.php

    r2262184 r2276839  
    1111 * Plugin URI: http://www.wpbruiser.com
    1212 * Description: An extremely powerful anti-spam plugin that blocks spambots without annoying captcha images.
    13  * Version: 3.1.38
     13 * Version: 3.1.39
    1414 * Author: Mihai Chelaru
    1515 * Author URI: http://www.wpbruiser.com
     
    1919
    2020
    21 
    2221if(!class_exists('GoodByeCaptcha', false))
    2322{
     
    2524    {
    2625       
    27         CONST PLUGIN_VERSION    = '3.1.38';
     26        CONST PLUGIN_VERSION    = '3.1.39';
    2827        CONST PLUGIN_SLUG       = 'wp-bruiser';
    2928        CONST PLUGIN_NAME       = 'WPBruiser';
     
    141140        GdbcIPUtils::getClientIpAddress();
    142141
    143         if (!empty($_GET['gdbc-client']) && file_exists($filePath = dirname(__FILE__) . '/assets/public/scripts/gdbc-client-new.js.php')) {
     142        if (!empty($_GET['gdbc-client']) && file_exists($filePath = dirname(__FILE__) . '/assets/public/scripts/gdbc-client.js.php')) {
    144143            require_once(ABSPATH . 'wp-includes/pluggable.php');
    145144            (!defined('LOGGED_IN_COOKIE') && function_exists('wp_cookie_constants')) ? wp_cookie_constants() : null;
  • goodbye-captcha/trunk/readme.txt

    r2262184 r2276839  
    55Requires at least: 4.0
    66Tested up to: 5.4
    7 Stable tag: 3.1.38
     7Stable tag: 3.1.39
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    223223== Changelog ==
    224224
     225= 3.1.39 =
     226- Refreshed Country IPs
     227- Refreshed WebAttackers IPs
     228- Refreshed Proxy IPs
     229- Refreshed Incapsula, Amazon and Cloudflare trusted IPs ranges
     230
    225231= 3.1.38 =
    226232**Fixes**
Note: See TracChangeset for help on using the changeset viewer.