diff options
Diffstat (limited to 'src/docs-google-com-fix-forms/google-forms-hacktcha.js')
-rw-r--r-- | src/docs-google-com-fix-forms/google-forms-hacktcha.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/docs-google-com-fix-forms/google-forms-hacktcha.js b/src/docs-google-com-fix-forms/google-forms-hacktcha.js new file mode 100644 index 0000000..e37f095 --- /dev/null +++ b/src/docs-google-com-fix-forms/google-forms-hacktcha.js @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: CC0-1.0 + * + * Code to run Hacktcha on Google forms. + * + * Copyright (C) 2022 Wojtek Kosior + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the CC0 1.0 Universal License as published by + * the Creative Commons Corporation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * CC0 1.0 Universal License for more details. + */ + +"use strict"; + +(async () => { + const recaptcha_div = document.getElementById("recaptcha"); + + if (recaptcha_div === null) + return; + + recaptcha_div.style.display = "block"; + + const site_key = recaptcha_div.getAttribute("data-sitekey"); + + const token_field = document.createElement("textarea"); + token_field.name = "g-recaptcha-response"; + token_field.style.display = "none"; + recaptcha_div.before(token_field); + + let authenticated = false; + + /* Function called from google_forms.js. */ + window.hacktcha_completed = function() { + return authenticated; + } + + const submit_buttons = [...document.querySelectorAll('[jsname=M2UYVd]')]; + + for (const button of submit_buttons) { + button._color_orig = getComputedStyle(button)["background-color"]; + button.style.backgroundColor = "lightgray"; + } + + for await (const token of HCHA.run(recaptcha_div, site_key)) { + if (token === null) { + authenticated = false; + + for (const button of submit_buttons) + button.style.backgroundColor = "lightgray"; + } else { + authenticated = true; + + for (const button of submit_buttons) + button.style.backgroundColor = button._color_orig; + + token_field.value = token; + } + } +})(); |