From 0feb6637cf0d4e72eb5470734153c4c549c4fcce Mon Sep 17 00:00:00 2001 From: ccd0 Date: Tue, 20 Oct 2015 22:30:03 -0700 Subject: [PATCH] Drop support for long-broken noscript version of Recaptcha v1. #526 --- package.json | 3 +- src/General/Main.coffee | 3 - src/General/css/report.css | 3 - src/Posting/Captcha.noscript.coffee | 236 ---------------------------- src/Posting/QR.coffee | 6 +- 5 files changed, 2 insertions(+), 249 deletions(-) delete mode 100644 src/Posting/Captcha.noscript.coffee diff --git a/package.json b/package.json index 0758ea77c..19e6c7742 100644 --- a/package.json +++ b/package.json @@ -28,8 +28,7 @@ "*://www.4chan.org/feedback", "https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*", "https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*", - "*://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*", - "*://www.google.com/recaptcha/api/noscript?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*" + "*://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*" ], "suffix": { "stable": "", diff --git a/src/General/Main.coffee b/src/General/Main.coffee index 36e2fa2f1..3b7acd4d6 100755 --- a/src/General/Main.coffee +++ b/src/General/Main.coffee @@ -8,9 +8,6 @@ Main = window['<%= meta.name %> antidup'] = true if location.hostname is 'www.google.com' - if location.pathname is '/recaptcha/api/noscript' - $.ready -> Captcha.noscript.initFrame() - return if location.pathname is '/recaptcha/api/fallback' $.ready -> Captcha.v2.initFrame() $.get 'Captcha Fixes', true, ({'Captcha Fixes': enabled}) -> diff --git a/src/General/css/report.css b/src/General/css/report.css index 46a39ba0a..8e2ed1079 100644 --- a/src/General/css/report.css +++ b/src/General/css/report.css @@ -1,6 +1,3 @@ :root:not(.js-enabled) #captchaContainerAlt { height: auto; } -noscript > iframe, #recaptcha_challenge_field { - width: 500px; -} diff --git a/src/Posting/Captcha.noscript.coffee b/src/Posting/Captcha.noscript.coffee deleted file mode 100644 index 359181acc..000000000 --- a/src/Posting/Captcha.noscript.coffee +++ /dev/null @@ -1,236 +0,0 @@ -Captcha.noscript = - lifetime: 30 * $.MINUTE - - init: -> - return if d.cookie.indexOf('pass_enabled=1') >= 0 - return unless @isEnabled = !!$ '#g-recaptcha, #captchaContainerAlt' - - container = $.el 'div', - className: 'captcha-img' - title: 'Reload reCAPTCHA' - - input = $.el 'input', - className: 'captcha-input field' - title: 'Verification' - autocomplete: 'off' - spellcheck: false - @nodes = {container, input} - - $.on input, 'keydown', @keydown.bind @ - $.on @nodes.container, 'click', => - @reload() - @nodes.input.focus() - - @conn = new Connection null, "#{location.protocol}//www.google.com", - challenge: @load.bind @ - token: @save.bind @ - error: @error.bind @ - - $.addClass QR.nodes.el, 'has-captcha', 'captcha-v1', 'noscript-captcha' - $.after QR.nodes.com.parentNode, [container, input] - - @captchas = [] - $.get 'captchas', [], ({captchas}) -> - QR.captcha.sync captchas - QR.captcha.clear() - $.sync 'captchas', @sync - - @beforeSetup() - @setup() - - initFrame: -> - conn = new Connection window.parent, "#{location.protocol}//boards.4chan.org", - response: (response) -> - $.id('recaptcha_response_field').value = response - # The form has a field named 'submit' - HTMLFormElement.prototype.submit.call $('form') - if location.hash is '#response' - conn.send - token: $('textarea')?.value - error: $('.recaptcha_input_area')?.textContent.replace(/:$/, '') - return unless img = $ 'img' - $('form').action = '#response' - cb = -> - canvas = $.el 'canvas' - canvas.width = img.width - canvas.height = img.height - canvas.getContext('2d').drawImage(img, 0, 0) - conn.send {challenge: canvas.toDataURL()} - if img.complete - cb() - else - $.on img, 'load', cb - - timers: {} - - iframeURL: -> - url = '//www.google.com/recaptcha/api/noscript?k=<%= meta.recaptchaKey %>' - if lang = Conf['captchaLanguage'].trim() - url += "&hl=#{encodeURIComponent lang}" - url - - cb: - focus: -> QR.captcha.setup false, true - - beforeSetup: -> - {container, input} = @nodes - container.hidden = true - input.value = '' - input.placeholder = 'Focus to load reCAPTCHA' - @count() - $.on input, 'focus click', @cb.focus - - needed: -> - captchaCount = @captchas.length - captchaCount++ if QR.req - postsCount = QR.posts.length - postsCount = 0 if postsCount is 1 and !Conf['Auto-load captcha'] and !QR.posts[0].com and !QR.posts[0].file - captchaCount < postsCount - - onNewPost: -> - - onPostChange: -> - - setup: (focus, force) -> - return unless @isEnabled and (@needed() or force) - if !@nodes.iframe - @nodes.iframe = $.el 'iframe', - id: 'qr-captcha-iframe' - src: @iframeURL() - $.add QR.nodes.el, @nodes.iframe - @conn.target = @nodes.iframe - else if !@occupied or force - @nodes.iframe.src = @iframeURL() - @occupied = true - @nodes.input.focus() if focus - - afterSetup: -> - {container, input} = @nodes - container.hidden = false - input.placeholder = 'Verification' - @count() - $.off input, 'focus click', @cb.focus - - if QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight - QR.nodes.el.style.top = '' - QR.nodes.el.style.bottom = '0px' - - destroy: -> - return unless @isEnabled - $.rm @nodes.img - delete @nodes.img - $.rm @nodes.iframe - delete @nodes.iframe - delete @occupied - @beforeSetup() - - sync: (captchas=[]) -> - QR.captcha.captchas = captchas - QR.captcha.count() - - getOne: -> - @clear() - if captcha = @captchas.shift() - @count() - $.set 'captchas', @captchas - captcha - else if /\S/.test @nodes.input.value - (cb) => - @submitCB = cb - @sendResponse() - else - null - - sendResponse: -> - response = @nodes.input.value - if /\S/.test response - @conn.send {response} - - save: (token) -> - delete @occupied - @nodes.input.value = '' - captcha = - challenge: token - response: 'manual_challenge' - timeout: @timeout - if @submitCB - @submitCB captcha - delete @submitCB - if @needed() then @reload() else @destroy() - else - $.forceSync 'captchas' - @captchas.push captcha - @count() - $.set 'captchas', @captchas - @reload() - - error: (message) -> - @occupied = true - @nodes.input.value = '' - if @submitCB - @submitCB() - delete @submitCB - QR.error "Captcha Error: #{message}" - - clear: -> - return unless @captchas.length - $.forceSync 'captchas' - now = Date.now() - for captcha, i in @captchas - break if captcha.timeout > now - return unless i - @captchas = @captchas[i..] - @count() - $.set 'captchas', @captchas - - load: (src) -> - {container, input, img} = @nodes - @occupied = true - @timeout = Date.now() + @lifetime - unless img - img = @nodes.img = new Image() - $.one img, 'load', @afterSetup.bind @ - $.on img, 'load', -> @hidden = false - $.add container, img - img.src = src - input.value = '' - @clear() - clearTimeout @timers.expire - @timers.expire = setTimeout @expire.bind(@), @lifetime - - count: -> - count = if @captchas then @captchas.length else 0 - placeholder = @nodes.input.placeholder.replace /\ \(.*\)$/, '' - placeholder += switch count - when 0 - if placeholder is 'Verification' then ' (Shift + Enter to cache)' else '' - when 1 - ' (1 cached captcha)' - else - " (#{count} cached captchas)" - @nodes.input.placeholder = placeholder - @nodes.input.alt = count # For XTRM RICE. - clearTimeout @timers.clear - if @captchas.length - @timers.clear = setTimeout @clear.bind(@), @captchas[0].timeout - Date.now() - - expire: -> - return unless @nodes.iframe - if not d.hidden and (@needed() or d.activeElement is @nodes.input) - @reload() - else - @destroy() - - reload: -> - @nodes.iframe.src = @iframeURL() - @occupied = true - @nodes.img?.hidden = true - - keydown: (e) -> - if e.keyCode is 8 and not @nodes.input.value - if @nodes.iframe then @reload() else @setup() - else if e.keyCode is 13 and e.shiftKey - @sendResponse() - else - return - e.preventDefault() diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee index 9ac16480f..1ddc5bf67 100644 --- a/src/Posting/QR.coffee +++ b/src/Posting/QR.coffee @@ -20,11 +20,7 @@ QR = return if g.VIEW is 'archive' - version = if Conf['Use Recaptcha v1'] - noscript = Conf['Force Noscript Captcha'] or not $.hasClass doc, 'js-enabled' - if noscript then 'noscript' else 'v1' - else - 'v2' + version = if Conf['Use Recaptcha v1'] then 'v1' else 'v2' @captcha = Captcha[version] $.on d, '4chanXInitFinished', @initReady