From e82e80ad39b6b452a4cb0abad3f2ae3be3cf08ef Mon Sep 17 00:00:00 2001 From: Maxim Stewart Date: Mon, 11 May 2020 15:17:45 -0500 Subject: [PATCH] Fixed text encoding and decoding in edge cases --- src/dropper/routes.py | 26 ++++++++++++++++---------- src/dropper/static/js/ui-logic.js | 8 ++++++-- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/dropper/routes.py b/src/dropper/routes.py index 9a89ffc..6dcd8f7 100644 --- a/src/dropper/routes.py +++ b/src/dropper/routes.py @@ -1,6 +1,8 @@ # Python imports import os, hashlib, json, base64 +from urllib.parse import unquote # For Python 2 use: from urlparse import unquote + # Flask imports from flask import Flask, request, render_template, session, send_from_directory, url_for, redirect, escape from flask_uploads import UploadSet, configure_uploads, ALL @@ -30,8 +32,10 @@ with open(NOTES_PTH) as infile: notesJson = json.load(infile) for entry in notesJson: notesListEncoded.append(entry) - entryDecoded = str(base64.urlsafe_b64decode( entry.encode("utf-8") ), "utf-8") - notesListDecoded.append(escape(entryDecoded)) + + decodedStrPart = base64.urlsafe_b64decode(entry.encode('utf-8')).decode('utf-8') + entryDecoded = unquote(decodedStrPart) + notesListDecoded.append(entryDecoded) except Exception as e: print(repr(e)) @@ -146,12 +150,14 @@ def deleteFile(): def deleteText(): if request.method == 'POST': try: - decodedNote = request.values['noteStr'].strip() - encodedBytes = base64.urlsafe_b64encode(decodedNote.encode("utf-8")) - encodedNote = str(encodedBytes, "utf-8") + encodedStr = request.values['noteStr'].strip() + decodedStrPart = base64.urlsafe_b64decode(encodedStr.encode('utf-8')).decode('utf-8') + decodedStr = unquote(decodedStrPart) - notesListEncoded.remove(encodedNote) - notesListDecoded.remove(decodedNote) + print("Encoded String:\n\t" + encodedStr) + print("Decoded String:\n\t" + decodedStr) + notesListEncoded.remove(encodedStr) + notesListDecoded.remove(decodedStr) updateNotesFile() msg = "[Success] Deleted entry..." @@ -182,10 +188,10 @@ def addNote(): text = request.values['entryText'].strip() if request.method == 'POST' and text != '': try: - encodedBytes = base64.urlsafe_b64encode(text.encode("utf-8")) - encodedStr = str(encodedBytes, "utf-8") + encodedStr = text + decodedStr = base64.urlsafe_b64decode(encodedStr.encode('utf-8')).decode('utf-8') - notesListDecoded.append(text) + notesListDecoded.append(decodedStr) notesListEncoded.append(encodedStr) updateNotesFile() diff --git a/src/dropper/static/js/ui-logic.js b/src/dropper/static/js/ui-logic.js index 3be5d94..41095de 100644 --- a/src/dropper/static/js/ui-logic.js +++ b/src/dropper/static/js/ui-logic.js @@ -70,7 +70,9 @@ const deleteTextAction = (elm, note) => { const refElm = document.getElementsByClassName(classRef)[0]; refElm.parentElement.removeChild(refElm); - const params = new URLSearchParams('noteStr=' + note) + // Encoded special characters then encode to b64 + encodedStr = window.btoa(encodeURIComponent(note)) + const params = new URLSearchParams('noteStr=' + encodedStr) doAjax('delete-text', params, 'delete-text'); } @@ -82,7 +84,9 @@ const deleteAllTextAction = () => { const createFormData = (entry) => { let form = new FormData(); for (var i = 0; i < entry.length; i++) { - form.append("entryText", entry); + // Encoded special characters then encode to b64 + encodedStr = window.btoa(encodeURIComponent(note)) + form.append("entryText", encodedStr); } return form; }