From 14e59440fd5f03d046e4e329eec73560450f1467 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Tue, 24 May 2022 22:19:29 +0200 Subject: KB66 Add comment post form. Change-Id: Iac22d115f0d1c59eb273a26d720c07f6d1b11077 --- src/main/resources/META-INF/resources/lib.js | 1 + .../META-INF/resources/posts/commentBox.js | 51 ++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/main/resources/META-INF/resources/posts/commentBox.js (limited to 'src/main/resources/META-INF') diff --git a/src/main/resources/META-INF/resources/lib.js b/src/main/resources/META-INF/resources/lib.js index 9f54f5f..7a59751 100644 --- a/src/main/resources/META-INF/resources/lib.js +++ b/src/main/resources/META-INF/resources/lib.js @@ -2,6 +2,7 @@ import './bookmarks/MlkBookmarkSubmissionForm.js'; import './bookmarks/newBookmark.js'; import './lazychat/MlkLazychatSubmissionForm.js'; import './lazychat/newLazychatMessage.js'; +import './posts/commentBox.js'; import './posts/postList.js'; import './web_modules/elix/define/Button.js'; diff --git a/src/main/resources/META-INF/resources/posts/commentBox.js b/src/main/resources/META-INF/resources/posts/commentBox.js new file mode 100644 index 0000000..d802a63 --- /dev/null +++ b/src/main/resources/META-INF/resources/posts/commentBox.js @@ -0,0 +1,51 @@ +document.addEventListener('DOMContentLoaded', () => { + const messageEncoder = new TextEncoder(); + + const acceptableHash = (hash) => + hash[0] === 0 && + hash[1] === 0; + + const checkSalt = (message, salt, thenC, elseC) => { + const saltedMessage = `Hashcash-Salt: ${salt}\n\n${message}`; + const encodedSaltedMessage = messageEncoder.encode(saltedMessage); + + crypto.subtle.digest('SHA-256', encodedSaltedMessage).then((hashBuf) => { + if (acceptableHash(new Uint8Array(hashBuf))) { + thenC(); + } else { + elseC(); + } + }); + }; + + const commentForms = document.getElementsByClassName('comment-form'); + for (const commentForm of commentForms) { + const hashcashSaltInput = commentForm.querySelector('input[name=hashcash-salt]'); + const messageTextarea = commentForm.querySelector('textarea[name=message]'); + const submitButton = commentForm.querySelector('input[type=submit]'); + + let salt = 0; + const tryHashcash = () => { + checkSalt(messageTextarea.value, salt, () => { + hashcashSaltInput.value = salt; + console.log(`hashcash ok ${salt}`); + submitButton.toggleAttribute('disabled'); + commentForm.submit(); + }, () => { + ++salt; + if (salt % 1000 === 0) { + console.log(`hashcash fail ${salt}, retrying`) + } + setTimeout(tryHashcash, 0); + }); + }; + + commentForm.addEventListener( + 'submit', + (event) => { + event.preventDefault(); + submitButton.setAttribute('disabled', 'disabled'); + setTimeout(tryHashcash, 0); + }); + } +}); -- cgit v1.2.3