+
Your account
-
Cannot connect to the server
+
Username: arzumify
Device settings
-
Font size
-
-
-
+
Font size
+
+
16px
+
Storage
-
-
Cannot connect to the server
+
+
You've used 44.65 KB out of 25 MB
Account managment
@@ -85,7 +83,11 @@
-
+
What's new in Burgernotes 2.0?
+Restyled client
+Added changing passwords
+Migrated to OAuth2
+Added importing notes
@@ -93,8 +95,8 @@
-
-
+
+
@@ -104,6 +106,7 @@
}
loadingStuff.remove()
-
-
+
+
+
diff --git a/static/css/style.css b/static/css/style.css
index 2cc7bcf..3da73d7 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -221,8 +221,8 @@ body {
}
.topBar .modernToolbar {
- margin-left: auto;
- margin-right: 5px;
+ display: flex;
+ width: 100%
}
.topBar .modernToolbar .count {
@@ -230,7 +230,10 @@ body {
background-color: rgba(0, 0, 0, 0);
border: none;
font-size: 15px;
- transform: translateY(-5px);
+}
+
+.topBar .modernToolbar .settings {
+ margin-left: auto;
}
.topBar .modernToolbar .textmod {
@@ -291,10 +294,12 @@ body {
border-color: var(--border-color);
border-width: 0;
border-right-width: 1px;
+ display: flex;
+ flex-direction: column-reverse;
}
.notesDiv {
- height: calc(100% - 50px);
+ height: 100%;
overflow-y: auto;
}
@@ -309,7 +314,7 @@ body {
color: var(--unselected-note-button-text-color);
border-radius: 8px;
- border: none;
+ border: dashed;
border-color: var(--border-color);
border-width: 1px;
font-size: 15px;
@@ -347,7 +352,7 @@ body {
.notesBar .selected {
background-color: var(--note-theme-color) !important;
- border: none;
+ border-style: solid;
color: var(--note-button-text-color);
}
@@ -355,6 +360,11 @@ body {
background-color: var(--note-theme-color) !important;
}
+.notesBar .toolBar {
+ display: flex;
+ border-top: 1px var(--border-color) solid;
+}
+
.notesBar .newNote {
height: 41px;
width: 41px;
@@ -362,13 +372,16 @@ body {
text-align: left;
font-size: 16px;
cursor: pointer;
- margin-top: 5px;
background-color: var(--bar);
border-radius: 8px;
border: none;
transition: 0.125s;
}
+.notesBar .deleteNote {
+ margin-left: auto;
+}
+
.notesBar .newNote:hover {
background-color: var(--icon-button-hover);
}
@@ -387,7 +400,7 @@ body {
color: var(--text-color);
background-color: rgba(0, 0, 0, 0);
width: calc(100% - 200px);
- height: calc(100% - 50px - 30px);
+ height: calc(100% - 50px);
font-family: "Inter", sans-serif;
display: flex;
flex-direction: row;
@@ -555,11 +568,17 @@ iframe#markdown {
margin-bottom: 10px;
}
+.optionsDiv .fontManipulator {
+ display: flex;
+}
+
.optionsDiv .fontManipulator button {
width: 43.5px;
+ height: 43.5px;
background-color: var(--nonimporant-theme-color);
color: var(--nonimportant-text-color);
transition: 0.125s;
+ margin: 0;
}
.optionsDiv .fontManipulator button:hover {
@@ -567,7 +586,12 @@ iframe#markdown {
}
.optionsDiv .fontManipulator .textMinusBox {
- margin-left: 83.5px
+ margin-left: auto;
+}
+
+.optionsDiv .fontManipulator .textSizeBox {
+ margin-left: 5px;
+ margin-right: 5px;
}
.sessionDiv {
diff --git a/static/js/login.js.save b/static/js/login.js.save
new file mode 100644
index 0000000..9703f1b
--- /dev/null
+++ b/static/js/login.js.save
@@ -0,0 +1,198 @@
+if (localStorage.getItem("DONOTSHARE-secretkey") !== null) {
+ window.location.replace("/app/")
+ document.body.innerHTML = "Redirecting..."
+ throw new Error();
+}
+if (localStorage.getItem("DONOTSHARE-password") !== null) {
+ window.location.replace("/app/")
+ document.body.innerHTML = "Redirecting..."
+ throw new Error();
+}
+
+let remote = localStorage.getItem("homeserverURL")
+if (remote == null) {
+ localStorage.setItem("homeserverURL", "https://notes.hectabit.org")
+ remote = "https://notes.hectabit.org"
+}
+
+let usernameBox = document.getElementById("usernameBox")
+let passwordBox = document.getElementById("passwordBox")
+let statusBox = document.getElementById("statusBox")
+let signupButton = document.getElementById("signupButton")
+let inputNameBox = document.getElementById("inputNameBox")
+let backButton = document.getElementById("backButton")
+
+usernameBox.classList.remove("hidden")
+inputNameBox.innerText = "Username:"
+
+let currentInputType = 0
+
+function showInput(inputType) {
+ if (inputType === 0) {
+ usernameBox.classList.remove("hidden")
+ passwordBox.classList.add("hidden")
+ backButton.classList.add("hidden")
+ inputNameBox.innerText = "Username:"
+ statusBox.innerText = "Login to your Burgernotes account!"
+ currentInputType = 0
+ } else if (inputType === 1) {
+ usernameBox.classList.add("hidden")
+ passwordBox.classList.remove("hidden")
+ backButton.classList.remove("hidden")
+ inputNameBox.innerText = "Password:"
+ currentInputType = 1
+ } else if (inputType === 2) {
+ usernameBox.classList.add("hidden")
+ passwordBox.classList.add("hidden")
+ signupButton.classList.add("hidden")
+ backButton.classList.add("hidden")
+ inputNameBox.classList.add("hidden")
+ inputNameBox.innerText = "Password:"
+ currentInputType = 2
+ }
+}
+
+function showElements(yesorno) {
+ if (!yesorno) {
+ usernameBox.classList.add("hidden")
+ passwordBox.classList.add("hidden")
+ signupButton.classList.add("hidden")
+ backButton.classList.add("hidden")
+ inputNameBox.classList.add("hidden")
+ showInput(currentInputType)
+ }
+ else {
+ usernameBox.classList.remove("hidden")
+ passwordBox.classList.remove("hidden")
+ signupButton.classList.remove("hidden")
+ backButton.classList.remove("hidden")
+ inputNameBox.classList.remove("hidden")
+ showInput(currentInputType)
+ }
+}
+
+document.addEventListener('DOMContentLoaded', function() {
+ document.getElementById("homeserver").innerText = "Your homeserver is: " + remote + ". "
+});
+
+signupButton.addEventListener("click", () => {
+ if (passwordBox.classList.contains("hidden")) {
+ if (usernameBox.value === "") {
+ statusBox.innerText = "A username is required!"
+ return
+ } else {
+ statusBox.innerText = "Welcome back, " + usernameBox.value + "!"
+ }
+ showInput(1)
+ } else {
+ async function doStuff() {
+ let username = usernameBox.value
+ let password = passwordBox.value
+
+ if (password === "") {
+ statusBox.innerText = "A password is required!"
+ return
+ }
+
+ showInput(2)
+ showElements(true)
+ statusBox.innerText = "Signing in..."
+
+ async function hashpassold(pass) {
+ return await hashwasm.argon2id({
+ password: pass,
+ salt: await hashwasm.sha512(pass),
+ parallelism: 1,
+ iterations: 256,
+ memorySize: 512,
+ hashLength: 32,
+ outputType: "encoded"
+ })
+ }
+
+ async function hashpass(pass) {
+ let key = pass
+ for (let i = 0; i < 128; i++) {
+ key = await hashwasm.sha3(key)
+ }
+ return key
+ }
+
+ fetch(remote + "/api/login", {
+ method: "POST",
+ body: JSON.stringify({
+ username: username,
+ password: await hashpass(password),
+ passwordchange: "no",
+ newpass: "null"
+ }),
+ headers: {
+ "Content-Type": "application/json; charset=UTF-8"
+ }
+ })
+ .then((response) => response)
+ .then((response) => {
+ async function doStuff() {
+ let responseData = await response.json()
+ if (response.status === 200) {
+ localStorage.setItem("DONOTSHARE-secretkey", responseData["key"])
+ localStorage.setItem("DONOTSHARE-password", await hashwasm.sha512(password))
+
+ window.location.href = "/app/"
+ }
+ else if (response.status === 401) {
+ console.log("Trying oldhash")
+ fetch(remote + "/api/login", {
+ method: "POST",
+ body: JSON.stringify({
+ username: username,
+ password: await hashpassold(password),
+ passwordchange: "yes",
+ newpass: await hashpass(password)
+ }),
+ headers: {
+ "Content-Type": "application/json; charset=UTF-8"
+ }
+ })
+ .then((response) => response)
+ .then((response) => {
+ async function doStuff2() {
+ let responseData = await response.json()
+ if (response.status === 200) {
+ localStorage.setItem("DONOTSHARE-secretkey", responseData["key"])
+ localStorage.setItem("DONOTSHARE-password", await hashwasm.sha512(password))
+
+ window.location.href = "/app/"
+ }
+ else if (response.status === 401) {
+ statusBox.innerText = "Wrong username or password..."
+ showInput(1)
+ showElements(true)
+ }
+ else {
+ statusBox.innerText = "Something went wrong! (error code: " + response.status + ")"
+ showInput(1)
+ showElements(true)
+ }
+ }
+ doStuff2()
+ });
+ }
+ else {
+ statusBox.innerText = "Something went wrong! (error code: " + response.status + ")"
+ showInput(1)
+ showElements(true)
+ }
+ }
+ doStuff()
+ });
+ }
+ doStuff()
+ }
+});
+
+backButton.addEventListener("click", () => {
+ showInput(0)
+});
+
+showInput(0)