aboutsummaryrefslogtreecommitdiff
path: root/src/docs-google-com-fix-forms/google-forms-hacktcha.js
diff options
context:
space:
mode:
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.js63
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;
+ }
+ }
+})();