ok
Direktori : /proc/thread-self/root/opt/imunify360-webshield/nginx/html/captcha/ |
Current File : //proc/thread-self/root/opt/imunify360-webshield/nginx/html/captcha/index.html |
<!DOCTYPE html> <html lang="{{ngx.var.captcha_lang or "en"}}"> <head> <meta charset="UTF-8"> <title>Captcha</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> <link href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" rel="icon" type="image/x-icon"/> <link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://www.google.com/recaptcha/api.js?hl={{ngx.var.captcha_lang or "en"}}" async defer> </script> <style> html, body { height: 100%; } .wraper { padding-bottom: 56px; position: relative; min-height: 100%; } .invisible_mode .wraper { display: none; } .header { height: 63px; background-color: white; } .middle { height: 186px; background-color: rgba(55, 171, 99, 0.75); } .bottom { background-color: #f2f2f2; position: absolute; bottom: 0px; top: 249px; width: 100%; } .captcha_absolute { margin-top: -153px; } .captcha_div { width: 485px; margin: 0 auto; box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.18), 0 0 8px 0 rgba(0, 0, 0, 0.12); background-color: white; padding: 47px 48px 18px 48px; position: relative; } .cap_head { border-bottom: 1px solid #d8d8d8; padding-bottom: 17px; margin: 0 10px 20px 10px; } .logo_shield { display: inline-block; } .logo_shield img { width: 54px; height: 72px; } .cap_side { width: 295px; } h4#text { font-size: 20px; line-height: 1.38; color: #000000; font-weight: bold; font-family: Noto Sans, sans-serif; margin: 6px 0 0 0; } .cap_text { font-family: Noto Sans, sans-serif; font-weight: normal; font-style: normal; font-stretch: normal; line-height: 1.65; color: #000000; } p.cap_note { font-size: 20px; margin: 0; } .captcha_passed h4#text, .captcha_passed p.cap_note { font-size: 18px } .cap_mess { font-size: 13px; } .powered_span { position: absolute; bottom: 15px; width: 100%; text-align: center; height: 18px; opacity: 0.45; font-family: Noto Sans; font-size: 13px; font-weight: normal; font-style: normal; font-stretch: normal; color: #1d1d1d; } /* A few hacks for re-captcha */ .invisible_mode .re-captcha-wrapper { /* shift reCAPTCHA below our text */ top: 350px !important; } .invisible_mode .re-captcha-wrapper > div:first-child { /* hide reCAPTCHA mask */ display: none !important; } .visible_mode #re-captcha { /* align to center */ width: 305px; margin: 0 auto; } /* Imunify360 preloader */ .big_loader { position: absolute; left: 0; right: 0; top: 50%; width: 90px; height: 90px; margin: -45px auto 0 auto; opacity: 0.55; } .visible_mode .big_loader { display: none; } .rot { -webkit-animation: spin 2s ease-in-out infinite; animation: spin 2s ease-in-out infinite } @keyframes spin { 0% { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); -moz-transform: rotate(360deg); -ms-transform: rotate(360deg); -o-transform: rotate(360deg); transform: rotate(360deg); } } </style> <!-- This whole tempalte goes to inside <head></head> tags Modify this file to add javascript or css files for your page from customize/static folder Jinja2 (which is index.html template engine) is not allowed to use here. Please, restart captcha server after your changes. service imunify360-captcha restart service imunify360-captchaserver-nginx restart Example: <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> Add your custom css from customize/static/ folder <link type="text/css" rel="stylesheet" href="static/my.css"> --> </head> {% if invisible == 'off' then %} <body class="visible_mode"> {% else %} <body class="invisible_mode"> {% end %} <div class="wraper"> <!-- You can add your css, javascript, images and other static files in /customize/static/ folder And add css, javascript into the end of `head` section of this template Please, restart webshield after your changes systemctl restart imunify360-webshield --> <div class="header"> <!-- Header of the index page --> </div> <div class="middle"> <!-- Body of the index page --> </div> <div class="bottom"> <!-- Footer of the index page --> <span class="powered_span">Powered by Imunify360</span> </div> <div class="captcha_absolute"> <div class="captcha_div"> <style> .dropdown { position: absolute; top: 10px; right: 0; } .dropdown .dropdown-toggle { background-color: #fff; border: none; outline: none; color: #858585; font-size: 13px; height: 32px; line-height: 1; transition: all 0.4s; font-family: 'Noto Sans', sans-serif; margin-right: 22px; } .dropdown .dropdown-toggle:hover { background-color: #e7e7e7; } .dropdown .dropdown-menu-content { background-color: #ffffff; box-shadow: 0 2px 14px 0 rgba(0, 0, 0, 0.24); border-width: 0px; border-radius: 0; padding: 11px 0 0; overflow-y: scroll; max-height: 365px; margin: 0; } .dropdown .glyphicon { margin-left: 6px; top: 2px; transition: 0.3s all; } .dropdown li { height: 35px; text-align: left; padding-left: 24px; font-size: 13px; color: #4d4d4e; line-height: 2.85; font-family: 'Noto Sans', sans-serif; } .dropdown li:last-child { margin-bottom: 14px; } .dropdown li.active { font-weight: bold; } .dropdown li:focus, .dropdown li:hover { color: #4d4d4e; background-color: rgba(56, 171, 99, 0.11); } .dropdown .dropdown-menu-content > li:hover { cursor: pointer; } .dropdown .dropdown-menu-container { max-height: 365px; overflow: hidden; width: 164px; padding: 0; border: 0; border-radius: 0; box-shadow: 0 2px 14px 0 rgba(0, 0, 0, 0.24); z-index: 5000000000; } .dropdown.open .glyphicon { transform: rotate(180deg); } </style> <div class="dropdown"> <button type="button" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="dropdown-title">English</span> <span class="glyphicon glyphicon-menu-down" aria-hidden="true"></span> </button> <div class="dropdown-menu dropdown-menu-container"> <ul class="dropdown-menu-content"></ul> </div> </div> <script> (function () { var items = { English: 'en', Dutch: 'nl', Ukrainian: 'uk', Arabic: 'ar', Italian: 'it', Chinese: 'zh', Polish: 'pl', Danish: 'da', Hungarian: 'hu', Russian: 'ru', French: 'fr', Spanish: 'es', Romanian: 'ro', Greek: 'el', Swedish: 'sv', Turkish: 'tr', Indonesian: 'id', Portuguese: 'pt', Hebrew: 'he', German: 'de', Malay: 'ms', Norwegian: 'no', Farsi: 'fa', }; var currentLocale = $('html').attr('lang'); var currentLocaleName = Object.keys(items).find(function (key) { return items[key] === currentLocale; }); $('.dropdown-title').text(currentLocaleName); $('.dropdown-menu-content') .append(Object.keys(items).sort().map(function (item) { return $('<li>').text(item); })) .on("click", function (e) { var nextLocaleName = e.target.innerText; if (nextLocaleName === currentLocaleName) { e.stopPropagation(); } else { document.cookie = 'locale=' + items[nextLocaleName] + ';path=/'; location.reload(true); } }); $([].find.call($('.dropdown-menu li'), function (item) { return item.innerText === currentLocaleName; })).addClass('active'); function insertParam(key, value) { key = encodeURIComponent(key); value = encodeURIComponent(value); var kvp = document.location.search.substr(1).split('&'); if (kvp == '') { document.location.search = '?' + key + '=' + value; } else { var i = kvp.length; var x; while (i--) { x = kvp[i].split('='); if (x[0] === key) { x[1] = value; kvp[i] = x.join('='); break; } } if (i < 0) { kvp[kvp.length] = [key, value].join('='); } //this will reload the page, it's likely better to store this until finished document.location.search = kvp.join('&'); } } })(); </script> <div class="cap_head clearfix"> <div class="logo_shield"> <img src="/a9bc224bd710f56d27affffddc764239b58c3faa0/shield.png"> </div> <div class="cap_side pull-right"> <h4 id="text">{{ngx.var.host or "Server"}}</h4> <p class="cap_note cap_text count_down"> {["locale/" .. (ngx.var.captcha_lang or "en") .. "/is_protected_by_imunify360.html"]} </p> </div> </div> <p class="cap_mess cap_text text-center"> {["locale/" .. (ngx.var.captcha_lang or "en") .. "/we_have_noticed_an_unusual_activity_from_your_ip_and_blocked_access_to_this_website.html"]} </p> <p class="cap_mess cap_text text-center"> <b>{["locale/" .. (ngx.var.captcha_lang or "en") .. "/please_confirm_that_you_are_not_a_robot.html"]}</b> </p> {% if invisible == 'off' then %} <form class="form-group form-captcha"> <div id="re-captcha" class="g-recaptcha" data-sitekey="{{ captcha_key }}" data-callback="check" ></div> </form> {% end %} </div> </div> </div> {% if invisible == 'on' then %} <form class="form-group form-captcha"> <div id="re-captcha" class="g-recaptcha" data-sitekey="{{ captcha_key }}" data-size="invisible" data-callback="check" ></div> </form> {% end %} <!-- imunify360 preloader --> <div class="big_loader"> <svg class="rot" width="90px" height="90px" viewBox="0 0 47 47" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Loader</title> <defs> <polygon id="path-1" points="0 0.375484146 0 15.7255695 15.7013244 15.7255695 15.7013244 0.375484146 0 0.375484146"></polygon> </defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="Logo" transform="translate(-5.000000, -2.000000)"> <g id="Group-2" transform="translate(5.000000, 2.000000)"> <path d="M22.6150244,4.52988293 C23.1538049,3.06256585 23.6031707,1.59582195 24.231939,0.158882927 C25.1902805,2.22459024 25.8190488,4.43989512 26.7768171,6.47579756 C29.1417195,7.40376098 31.7164024,7.7929439 34.1116829,8.69110244 C28.9623171,11.2663585 23.7229634,13.7510537 18.4836098,16.176139 C19.7709512,12.2545049 21.2382683,8.4217122 22.6150244,4.52988293 L22.6150244,4.52988293 Z" id="Fill-1" fill="#467C45"></path> <path d="M13.7718598,8.94461585 C16.1424939,7.68077439 18.4500793,6.28968902 20.8207134,5.02527439 C18.9240915,10.8412378 16.7747012,16.5614817 14.8465549,22.3774451 C12.7292622,18.3950549 10.895689,14.2544695 8.9044939,10.2090305 C8.27228659,8.85004268 7.5455061,7.55353049 7.00844512,6.16359146 C9.31545732,6.95342073 11.4648476,8.24935976 13.7718598,8.94461585" id="Fill-3" fill="#467C45"></path> <path d="M24.2134256,15.0745049 C29.4602305,12.4969561 34.7379866,9.91940732 40.0157427,7.4031878 C39.1565598,9.61276098 38.1747183,11.7300537 37.2232549,13.9086756 C38.4504134,16.2099561 39.9544134,18.388578 41.0898646,20.7511878 C35.4435598,18.9405415 29.8287793,17.0381878 24.2134256,15.0745049" id="Fill-5" fill="#467C45"></path> <g id="Group-9" transform="translate(0.000000, 11.919659)"> <mask id="mask-2" fill="white"> <use xlink:href="#path-1"></use> </mask> <g id="Clip-8"></g> <path d="M8.34869024,0.375484146 C9.93064146,3.33419146 11.2781659,6.43963049 12.7426171,9.45622805 C13.7387878,11.5362646 14.793422,13.5876427 15.7013244,15.7255695 C10.4579585,13.9091915 5.21401951,12.03435 -0.000114634146,10.0718134 C2.05069024,9.1341061 4.21842195,8.4898622 6.29845854,7.61119146 C6.97193415,5.17980122 7.67521463,2.77706951 8.34869024,0.375484146" id="Fill-7" fill="#467C45" mask="url(#mask-2)"></path> </g> <path d="M29.1793195,18.0496049 C33.5600634,19.4670561 37.9081366,21.0776659 42.2888805,22.5593122 C43.6742341,23.0745927 45.1558805,23.4609098 46.5085634,24.1372512 C44.2216122,25.039422 41.9025634,25.9100683 39.6477098,26.8110927 C38.8103073,29.4195927 38.2302585,32.1261049 37.3607585,34.7346049 C35.5890878,31.4497634 34.0432463,28.0353854 32.3684415,24.6852024 C31.3052098,22.4945439 30.1456854,20.3044585 29.1793195,18.0496049" id="Fill-10" fill="#467C45"></path> <path d="M28.9972232,29.3489207 C29.5789915,27.69475 30.0684793,26.0113476 30.7419549,24.3887012 C31.538089,25.7660305 32.1811866,27.2356402 32.9154183,28.6444939 C34.7220524,32.4709817 36.68115,36.205189 38.4568329,40.0316768 C36.2827963,39.1449817 34.1402841,38.1654329 31.9364427,37.2460671 C29.6403207,38.4709329 27.4662841,39.9405427 25.1094061,41.1035061 C26.3033207,37.1549329 27.7419793,33.2671159 28.9972232,29.3489207" id="Fill-12" fill="#467C45"></path> <path d="M4.97133902,25.64555 C9.93385122,27.1873793 14.7737049,29.036428 19.6748878,30.6705378 C20.4148512,30.9170012 21.1542415,31.1944159 21.8328756,31.5337329 C16.5304732,33.9685622 11.3214976,36.6498549 5.95776585,38.99355 C6.82096098,36.8355622 7.89966829,34.7698549 8.7319122,32.581489 C7.68358293,30.1764646 6.11194878,28.01905 4.97133902,25.64555" id="Fill-14" fill="#467C45"></path> <path d="M15.4549183,35.8770488 C19.4671134,33.9317073 23.4483573,31.8952317 27.4915037,30.0433171 C26.4110768,33.6542927 25.0222841,37.203939 23.8186256,40.8143415 C23.1090402,42.7275854 22.5530646,44.7033049 21.7511988,46.5855976 C20.7630524,44.4866463 20.0534671,42.2650366 19.1277963,40.1351341 C16.6276256,39.2094634 14.0042232,38.684439 11.4736744,37.9748537 C12.6773329,37.0801341 14.1584061,36.586061 15.4549183,35.8770488" id="Fill-16" fill="#467C45"></path> </g> </g> </g> </svg> </div> <script> $(document).ready(function () { {% if visible == 'on' then %} var visibleByDefault = true; {% else %} var visibleByDefault = false; {% end %} var captchaIsPassed = false; var captchaIsVisible = visibleByDefault; var reCaptchaWrapper; function do_reload() { location.reload(true); } window.check = function (value) { $.ajax({ type: 'POST', url: '/captchacheck', data: { 'captcha_value': value } }).done(function (data) { if (data['success']) { captchaIsPassed = true; $("#text").next("p").text(""); $("#text").text( "{["locale/" .. (ngx.var.captcha_lang or "en") .. "/ip_has_been_unblocked.html"]}" ); setTimeout(do_reload, 1000); } else { grecaptcha.reset(); } }).fail(function () { grecaptcha.reset(); }); }; function updateUI() { // change the size of our block to fit the captcha block var blockWithText = $('.captcha_div'); var captchaBlock = reCaptchaWrapper.find('> div:last-child'); var currentPadding; (function update () { var space = captchaBlock.offset().top + captchaBlock.height() - blockWithText.height() - 100; var padding = captchaIsPassed ? '' : space + 'px'; if (currentPadding !== padding) { blockWithText.css({'padding-bottom': padding}); } setTimeout(update, 500); })(); } function makeVisible() { $('.big_loader').hide(); // hide our preloader $('.wraper').show(); // show our text and stuff // add class to reCAPTCHA wrapper so our css would apply to it reCaptchaWrapper.addClass('re-captcha-wrapper'); captchaIsVisible = true; } function executeCaptcha() { try { grecaptcha.execute(); } catch (e) { setTimeout(executeCaptcha, 2000); // retry } } if (!visibleByDefault) { /** * Detecting captcha when css is changed to visible. * Invisible reCaptcha has no API calls when captcha will be visible, * (captcha is shown to user). * When captcha changed css "visibility" to the "visible", we should: * 1. hide the loader and captcha mask * 2. display some additional text * 3. display a dropdown so user can switch to a different language */ (function checkVisibility () { reCaptchaWrapper = reCaptchaWrapper && reCaptchaWrapper.length ? reCaptchaWrapper : $('body > div:has(> div > iframe[src^="https://www.google.com/recaptcha"])'); if (reCaptchaWrapper.css('visibility') === 'visible') { makeVisible(reCaptchaWrapper); updateUI(reCaptchaWrapper); } else { setTimeout(checkVisibility, 100); } })(); // start captcha challenge after loads all scripts setTimeout(executeCaptcha, 2000); } }); </script> </body> </html>