Skip to content

Commit 9846513

Browse files
committed
add a encoding/decoding layer to protect the evernote token with a user-given password
1 parent 8a3cfb4 commit 9846513

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

anknotes/__main__.py

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import os
2-
2+
import base64
33
# from thrift.Thrift import *
44
from evernote.edam.notestore.ttypes import NoteFilter, NotesMetadataResultSpec
55
from evernote.edam.error.ttypes import EDAMSystemException, EDAMErrorCode
@@ -28,7 +28,7 @@
2828
GUID_FIELD_NAME = 'Evernote GUID'
2929

3030
SETTING_UPDATE_EXISTING_NOTES = 'evernoteUpdateExistingNotes'
31-
SETTING_TOKEN = 'evernoteToken'
31+
SETTING_TOKEN = 'evernoteToken_encoded'
3232
SETTING_KEEP_TAGS = 'evernoteKeepTags'
3333
SETTING_TAGS_TO_IMPORT = 'evernoteTagsToImport'
3434
SETTING_DEFAULT_TAG = 'evernoteDefaultTag'
@@ -191,13 +191,16 @@ def __init__(self):
191191
showInfo("We will open a Evernote Tab in your browser so you can allow access to your account")
192192
openLink(url)
193193
oauth_verifier = getText(prompt="Please copy the code that showed up, after allowing access, in here")[0]
194+
secret_key = getText(prompt="protect your value with a password, it will be asked each time you import your notes")[0]
194195
auth_token = client.get_access_token(
195196
request_token.get('oauth_token'),
196197
request_token.get('oauth_token_secret'),
197198
oauth_verifier)
198-
mw.col.conf[SETTING_TOKEN] = auth_token
199+
mw.col.conf[SETTING_TOKEN] = encode(secret_key, auth_token)
199200
else:
200-
auth_token = mw.col.conf.get(SETTING_TOKEN, False)
201+
secret_key = getText(prompt="password")[0]
202+
auth_token_encoded = mw.col.conf.get(SETTING_TOKEN, False)
203+
auth_token = decode(secret_key, auth_token_encoded)
201204
self.token = auth_token
202205
self.client = EvernoteClient(token=auth_token, sandbox=False)
203206
self.noteStore = self.client.get_note_store()
@@ -258,6 +261,8 @@ def __init__(self):
258261
self.evernote = Evernote()
259262

260263
def proceed(self):
264+
if self.evernoteTags=="":
265+
show_tooltip("Warning : No tag to import has been specified in the preferences, that may result into empty imports")
261266
anki_ids = self.anki.get_cards_id_from_tag(self.ankiTag)
262267
anki_guids = self.anki.get_guids_from_anki_id(anki_ids)
263268
evernote_guids = self.get_evernote_guids_from_tag(self.evernoteTags)
@@ -303,6 +308,25 @@ def get_evernote_guids_from_tag(self, tags):
303308
def show_tooltip(text, time_out=3000):
304309
aqt.utils.tooltip(text, time_out)
305310

311+
# Vigenere_cipher
312+
# ref : https://stackoverflow.com/questions/2490334/simple-way-to-encode-a-string-according-to-a-password
313+
def encode(key, clear):
314+
enc = []
315+
for i in range(len(clear)):
316+
key_c = key[i % len(key)]
317+
enc_c = chr((ord(clear[i]) + ord(key_c)) % 256)
318+
enc.append(enc_c)
319+
return base64.urlsafe_b64encode("".join(enc))
320+
321+
def decode(key, enc):
322+
dec = []
323+
enc = base64.urlsafe_b64decode(enc)
324+
for i in range(len(enc)):
325+
key_c = key[i % len(key)]
326+
dec_c = chr((256 + ord(enc[i]) - ord(key_c)) % 256)
327+
dec.append(dec_c)
328+
return "".join(dec)
329+
306330

307331
def main():
308332
controller = Controller()

0 commit comments

Comments
 (0)