diff --git a/.gitignore b/.gitignore index dc69bec..23bfc0d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ database.db config.ini +config.ini.example diff --git a/README.md b/README.md index 5dd3196..3e1daa0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,18 @@ ## Burgernotes Burgernotes is a simple note-taking app with end-to-end encryption. +### Setup +To set up Burgernotes, simply run these commands: +``` +cp config.ini.example config.ini +python3 init_db +``` + +Edit config.ini to your liking, then to start the server run: +``` +python3 main +``` + ### Links [Go to the Burgernotes website](https://notes.hectabit.org) diff --git a/config.ini b/config.ini deleted file mode 100644 index 7af981e..0000000 --- a/config.ini +++ /dev/null @@ -1,5 +0,0 @@ -[config] -HOST = 0.0.0.0 -PORT = 8070 -SECRET_KEY = iadguhaoghioahegOLEHGELHIGOAHLhoewhgoiwh -MAX_STORAGE = 25000000 diff --git a/config.ini.example b/config.ini.example new file mode 100644 index 0000000..3caa559 --- /dev/null +++ b/config.ini.example @@ -0,0 +1,5 @@ +[config] +HOST = 0.0.0.0 +PORT = 8080 +SECRET_KEY = supersecretkey +MAX_STORAGE = 25000000 diff --git a/static/css/style.css b/static/css/style.css index 695dcbf..551f465 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -56,7 +56,7 @@ } .newNote img { - filter: invert(100%) + filter: invert(100%); } #errorDiv p { @@ -68,7 +68,7 @@ } .burgerSession img { - filter: invert(100%) !important + filter: invert(100%) !important; } .links a { @@ -85,16 +85,16 @@ .inoutdiv input { color: white; - background-color: #202124; + background-color: var(--editor); } .flathubLogo { - filter: invert(100%) + filter: invert(100%); } .feature { background-color: rgba(0, 0, 0, 0) !important; - color: var(--text-color) + color: var(--text-color); } .mainDiv .yellow { border-color: #e9e98d !important; @@ -363,13 +363,12 @@ body { left: 50%; top: 50%; transform: translate(-50%, -50%); - width: 300px; position: fixed; background-color: var(--option-background); padding: 10px; color: var(--text-color); border-radius: 8px; - min-width: 338.5px; + min-width: 300px; z-index: 3; } @@ -403,7 +402,7 @@ body { .optionsDiv input { width: calc(100% - 12px); height: 25px; - background-color: ffffff; + background-color: #ffffff; padding-left: 5px; padding-right: 5px; margin-bottom: 7px; @@ -520,6 +519,7 @@ body { padding: 30px; border-radius: 25px; border: solid 1px var(--border-color); + background-color: var(--bar); } .inoutdiv input { diff --git a/static/js/login.js b/static/js/login.js index 6820dd0..2b3f499 100644 --- a/static/js/login.js +++ b/static/js/login.js @@ -111,7 +111,7 @@ signupButton.addEventListener("click", (event) => { return key }; - fetch(remote + "/api/login", { + fetch(remote + "https://notes.hectabit.org/api/login", { method: "POST", body: JSON.stringify({ username: username, @@ -135,7 +135,7 @@ signupButton.addEventListener("click", (event) => { } else if (response.status == 401) { console.log("Trying oldhash") - fetch(remote + "/api/login", { + fetch(remote + "https://notes.hectabit.org/api/login", { method: "POST", body: JSON.stringify({ username: username, diff --git a/static/js/main.js b/static/js/main.js index 0269445..f2288d0 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -208,7 +208,7 @@ function truncateString(str, num) { function updateUserInfo() { - fetch(remote + "/api/userinfo", { + fetch(remote + "https://notes.hectabit.org/api/userinfo", { method: "POST", body: JSON.stringify({ secretKey: secretkey @@ -259,7 +259,7 @@ exitThing.addEventListener("click", (event) => { }); deleteMyAccountButton.addEventListener("click", (event) => { if (confirm("Are you REALLY sure that you want to delete your account? There's no going back!") == true) { - fetch(remote + "/api/deleteaccount", { + fetch(remote + "https://notes.hectabit.org/api/deleteaccount", { method: "POST", body: JSON.stringify({ secretKey: secretkey @@ -281,7 +281,7 @@ sessionManagerButton.addEventListener("click", (event) => { optionsDiv.classList.add("hidden") sessionManagerDiv.classList.remove("hidden") - fetch(remote + "/api/sessions/list", { + fetch(remote + "https://notes.hectabit.org/api/sessions/list", { method: "POST", body: JSON.stringify({ secretKey: secretkey @@ -320,7 +320,7 @@ sessionManagerButton.addEventListener("click", (event) => { } sessionRemoveButton.addEventListener("click", (event) => { - fetch(remote + "/api/sessions/remove", { + fetch(remote + "https://notes.hectabit.org/api/sessions/remove", { method: "POST", body: JSON.stringify({ secretKey: secretkey, @@ -370,7 +370,7 @@ function selectNote(nameithink) { let thingArray = Array.from(document.querySelectorAll(".noteButton")).find(el => el.id == nameithink); thingArray.classList.add("selected") - fetch(remote + "/api/readnote", { + fetch(remote + "https://notes.hectabit.org/api/readnote", { method: "POST", body: JSON.stringify({ secretKey: secretkey, @@ -404,9 +404,9 @@ function selectNote(nameithink) { updateWordCount() clearTimeout(timer); timer = setTimeout(() => { - let encryptedTitle = "empty note" - if (noteBox.value != "") { - let firstTitle = truncateString(noteBox.value.slice(0, noteBox.value.indexOf("\n")), 16) + let encryptedTitle = "New note" + if (noteBox.value.substring(0, noteBox.value.indexOf("\n")) != "") { + let firstTitle = noteBox.value.substring(0, noteBox.value.indexOf("\n")); document.getElementById(nameithink).innerText = firstTitle encryptedTitle = CryptoJS.AES.encrypt(firstTitle, password).toString(); @@ -414,7 +414,7 @@ function selectNote(nameithink) { let encryptedText = CryptoJS.AES.encrypt(noteBox.value, password).toString(); if (selectedNote == nameithink) { - fetch(remote + "/api/editnote", { + fetch(remote + "https://notes.hectabit.org/api/editnote", { method: "POST", body: JSON.stringify({ secretKey: secretkey, @@ -443,7 +443,7 @@ function selectNote(nameithink) { } function updateNotes() { - fetch(remote + "/api/listnotes", { + fetch(remote + "https://notes.hectabit.org/api/listnotes", { method: "POST", body: JSON.stringify({ secretKey: secretkey @@ -476,7 +476,7 @@ function updateNotes() { noteButton.addEventListener("click", (event) => { if (event.ctrlKey) { - fetch(remote + "/api/removenote", { + fetch(remote + "https://notes.hectabit.org/api/removenote", { method: "POST", body: JSON.stringify({ secretKey: secretkey, @@ -506,9 +506,9 @@ function updateNotes() { updateNotes() newNote.addEventListener("click", (event) => { - let noteName = "empty note" + let noteName = "New note" let encryptedName = CryptoJS.AES.encrypt(noteName, password).toString(); - fetch(remote + "/api/newnote", { + fetch(remote + "https://notes.hectabit.org/api/newnote", { method: "POST", body: JSON.stringify({ secretKey: secretkey, @@ -542,7 +542,7 @@ function downloadObjectAsJson(exportObj, exportName) { function exportNotes() { let noteExport = [] - fetch(remote + "/api/exportnotes", { + fetch(remote + "https://notes.hectabit.org/api/exportnotes", { method: "POST", body: JSON.stringify({ secretKey: secretkey @@ -590,6 +590,16 @@ function isFirstTimeVisitor() { } } +function firstNewVersion() { + if (document.cookie.indexOf("version=1.1") !== -1) { + return false; + } else { + var expirationDate = new Date(); + expirationDate.setFullYear(expirationDate.getFullYear() + 1); + document.cookie = "version=1.1; expires=" + expirationDate.toUTCString() + "; path=/; SameSite=strict"; + return true; + } +} exportNotesButton.addEventListener("click", (event) => { exportNotesButton.innerText = "Downloading..." @@ -600,7 +610,7 @@ removeBox.addEventListener("click", (event) => { if (selectedNote == 0) { displayError("You need to select a note first!") } else { - fetch(remote + "/api/removenote", { + fetch(remote + "https://notes.hectabit.org/api/removenote", { method: "POST", body: JSON.stringify({ secretKey: secretkey, @@ -622,3 +632,7 @@ removeBox.addEventListener("click", (event) => { if (isFirstTimeVisitor() && /Android|iPhone|iPod/i.test(navigator.userAgent)) { displayError("To use Burgernotes:\n Swipe Right on a note to open it\n Swipe left in the text boxes to return to notes\n Click on a note to highlight it") } + +if (firstNewVersion()) { + displayError("What's new in Burgernotes 1.1?\n\nNote titles are now the first line of a note \(will not break compatibility with older notes\)\nIntroduced improved login screen\nNote titles now scroll correctly") +} diff --git a/static/js/signup.js b/static/js/signup.js index 00b208e..51e1404 100644 --- a/static/js/signup.js +++ b/static/js/signup.js @@ -63,7 +63,7 @@ signupButton.addEventListener("click", (event) => { }; - fetch(remote + "/api/signup", { + fetch(remote + "https://notes.hectabit.org/api/signup", { method: "POST", body: JSON.stringify({ username: username, diff --git a/templates/login.html b/templates/login.html index bdf22ec..64d5322 100644 --- a/templates/login.html +++ b/templates/login.html @@ -15,11 +15,13 @@
@@ -30,11 +32,10 @@ background-color: #d9d9d9; background-image: url("/static/svg/grid.svg"); background-repeat: repeat; - background-size: 312px + background-size: 312px; } .inoutdiv { - background-color: #fff; border-radius: 8px; } -