forked from Ailur/burgernotes-server
We are soo back!
This commit is contained in:
parent
c727216c02
commit
a8a15cae64
|
@ -1,7 +1,9 @@
|
|||
## burgernotes
|
||||
burgernotes is a simple note-taking app with end-to-end encryption
|
||||
## PageBurger
|
||||
PageBurger is a simple note-taking app with end-to-end encryption.
|
||||
|
||||
PageBurger is a community fork of the discontinued [BurgerNotes](https://codeberg.org/burger-software/burgernotes). Most of the credits go to BurgerSoftware.
|
||||
|
||||
### links
|
||||
[go to the burgernotes website](https://notes.ctaposter.xyz/)
|
||||
[Go to the PageBurger website](https://notes.hectabit.org)
|
||||
|
||||
[API documentation](APIDOCS.md)
|
|
@ -1,5 +1,5 @@
|
|||
[config]
|
||||
HOST = 0.0.0.0
|
||||
PORT = 8080
|
||||
SECRET_KEY = placeholder
|
||||
PORT = 8070
|
||||
SECRET_KEY = oligogoaihegokjdugielaguilUGLAGULUGELGouegalfgusl
|
||||
MAX_STORAGE = 25000000
|
4
main
4
main
|
@ -118,10 +118,6 @@ def login():
|
|||
def privacy():
|
||||
return render_template("privacy.html")
|
||||
|
||||
@app.route("/shutdownfaq")
|
||||
def shutdown():
|
||||
return send_from_directory("templates", "shutdown.html")
|
||||
|
||||
# API
|
||||
@app.route("/api/signup", methods=("GET", "POST"))
|
||||
def apisignup():
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap");
|
||||
|
||||
:root {
|
||||
--invertdm: 0%;
|
||||
--bar: #f4f4f4;
|
||||
--editor: #ffffff;
|
||||
--text-color: #000000;
|
||||
|
@ -21,6 +22,7 @@
|
|||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--invertdm: 100%;
|
||||
--bar: #2d2f31;
|
||||
--editor: #202124;
|
||||
--text-color: #ffffff;
|
||||
|
@ -65,11 +67,6 @@
|
|||
filter: invert(100%) !important
|
||||
}
|
||||
|
||||
.feature h3,
|
||||
p {
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.links a {
|
||||
color: white !important;
|
||||
}
|
||||
|
@ -89,6 +86,7 @@
|
|||
}
|
||||
|
||||
p,
|
||||
li,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
|
@ -98,6 +96,15 @@ h6 {
|
|||
color: var(--text-color);
|
||||
}
|
||||
|
||||
h7 {
|
||||
display: block;
|
||||
font-size: 20px;
|
||||
margin-top: 0.67em;
|
||||
margin-bottom: 0.67em;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
background-color: var(--editor);
|
||||
|
@ -143,6 +150,7 @@ body {
|
|||
}
|
||||
|
||||
.bottomBar .removeButton {
|
||||
filter: invert(var(--invertdm));
|
||||
padding-left: 17.5px;
|
||||
padding-right: 17.5px;
|
||||
transform: translateY(-5px);
|
||||
|
@ -343,6 +351,7 @@ body {
|
|||
.optionsDiv button {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
padding-bottom: 13px;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 7px;
|
||||
padding-left: 15px;
|
||||
|
@ -429,7 +438,8 @@ body {
|
|||
.optionsDiv img {
|
||||
height: 18px;
|
||||
padding-right: 5px;
|
||||
filter: invert(var(--invert))
|
||||
filter: invert(var(--invert));
|
||||
transform: translateY(3.25px);
|
||||
}
|
||||
|
||||
.optionsDiv .section {
|
||||
|
@ -604,6 +614,7 @@ body {
|
|||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
font-size: 17px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.mainDiv .green {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
if (localStorage.getItem("DONOTSHARE-secretkey") !== null) {
|
||||
window.location.replace("/app")
|
||||
document.body.innerHTML = "Redirecting.."
|
||||
document.body.innerHTML = "Redirecting..."
|
||||
throw new Error();
|
||||
}
|
||||
if (localStorage.getItem("DONOTSHARE-password") !== null) {
|
||||
window.location.replace("/app")
|
||||
document.body.innerHTML = "Redirecting.."
|
||||
document.body.innerHTML = "Redirecting..."
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@ let inputNameBox = document.getElementById("inputNameBox")
|
|||
let backButton = document.getElementById("backButton")
|
||||
|
||||
usernameBox.classList.remove("hidden")
|
||||
inputNameBox.innerText = "username:"
|
||||
inputNameBox.innerText = "Username:"
|
||||
|
||||
let currentInputType = 0
|
||||
|
||||
|
@ -26,14 +26,14 @@ function showInput(inputType) {
|
|||
usernameBox.classList.remove("hidden")
|
||||
passwordBox.classList.add("hidden")
|
||||
backButton.classList.add("hidden")
|
||||
inputNameBox.innerText = "username:"
|
||||
statusBox.innerText = "log in to your burgernotes account!"
|
||||
inputNameBox.innerText = "Username:"
|
||||
statusBox.innerText = "Login to your PageBurger account!"
|
||||
currentInputType = 0
|
||||
} else if (inputType == 1) {
|
||||
usernameBox.classList.add("hidden")
|
||||
passwordBox.classList.remove("hidden")
|
||||
backButton.classList.remove("hidden")
|
||||
inputNameBox.innerText = "password:"
|
||||
inputNameBox.innerText = "Password:"
|
||||
currentInputType = 1
|
||||
} else if (inputType == 2) {
|
||||
usernameBox.classList.add("hidden")
|
||||
|
@ -41,7 +41,7 @@ function showInput(inputType) {
|
|||
signupButton.classList.add("hidden")
|
||||
backButton.classList.add("hidden")
|
||||
inputNameBox.classList.add("hidden")
|
||||
inputNameBox.innerText = "password:"
|
||||
inputNameBox.innerText = "Password:"
|
||||
currentInputType = 2
|
||||
}
|
||||
}
|
||||
|
@ -68,10 +68,10 @@ function showElements(yesorno) {
|
|||
signupButton.addEventListener("click", (event) => {
|
||||
if (passwordBox.classList.contains("hidden")) {
|
||||
if (usernameBox.value == "") {
|
||||
statusBox.innerText = "username required"
|
||||
statusBox.innerText = "A username is required!"
|
||||
return
|
||||
} else {
|
||||
statusBox.innerText = "welcome back, " + usernameBox.value + "!"
|
||||
statusBox.innerText = "Welcome back, " + usernameBox.value + "!"
|
||||
}
|
||||
showInput(1)
|
||||
} else {
|
||||
|
@ -80,13 +80,13 @@ signupButton.addEventListener("click", (event) => {
|
|||
let password = passwordBox.value
|
||||
|
||||
if (password == "") {
|
||||
statusBox.innerText = "password required"
|
||||
statusBox.innerText = "A password is required!"
|
||||
return
|
||||
}
|
||||
|
||||
showInput(2)
|
||||
showElements(true)
|
||||
statusBox.innerText = "signing in.."
|
||||
statusBox.innerText = "Signing in..."
|
||||
|
||||
async function hashpass(pass) {
|
||||
const key = await hashwasm.argon2id({
|
||||
|
@ -122,12 +122,12 @@ signupButton.addEventListener("click", (event) => {
|
|||
window.location.href = "/app"
|
||||
}
|
||||
else if (response.status == 401) {
|
||||
statusBox.innerText = "wrong username or password :("
|
||||
statusBox.innerText = "Wrong username or password..."
|
||||
showInput(1)
|
||||
showElements(true)
|
||||
}
|
||||
else {
|
||||
statusBox.innerText = "something went wrong! (error code: " + response.status + ")"
|
||||
statusBox.innerText = "Something went wrong! (error code: " + response.status + ")"
|
||||
showInput(1)
|
||||
showElements(true)
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
if (localStorage.getItem("DONOTSHARE-secretkey") === null) {
|
||||
window.location.replace("/login")
|
||||
document.body.innerHTML = "Redirecting.."
|
||||
document.body.innerHTML = "Redirecting..."
|
||||
throw new Error();
|
||||
}
|
||||
if (localStorage.getItem("DONOTSHARE-password") === null) {
|
||||
window.location.replace("/login")
|
||||
document.body.innerHTML = "Redirecting.."
|
||||
document.body.innerHTML = "Redirecting..."
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
|
@ -36,17 +36,14 @@ let cancelErrorButton = document.getElementById("cancelErrorButton")
|
|||
let errorInput = document.getElementById("errorInput")
|
||||
let exitThing = document.getElementById("exitThing")
|
||||
let exitSessionsThing = document.getElementById("exitSessionsThing")
|
||||
let exitMfaThing = document.getElementById("exitMfaThing")
|
||||
let sessionManagerButton = document.getElementById("sessionManagerButton")
|
||||
let sessionManagerDiv = document.getElementById("sessionManagerDiv")
|
||||
let sessionDiv = document.getElementById("sessionDiv")
|
||||
let mfaDiv = document.getElementById("mfaDiv")
|
||||
let mfaCheckbox = document.getElementById("mfaCheckbox")
|
||||
let deleteMyAccountButton = document.getElementById("deleteMyAccountButton")
|
||||
let storageThing = document.getElementById("storageThing")
|
||||
let storageProgressThing = document.getElementById("storageProgressThing")
|
||||
let usernameThing = document.getElementById("usernameThing")
|
||||
let passwordThing = document.getElementById("passwordThing")
|
||||
let logOutButton = document.getElementById("logOutButton")
|
||||
let notesBar = document.getElementById("notesBar")
|
||||
let notesDiv = document.getElementById("notesDiv")
|
||||
|
@ -213,7 +210,7 @@ function updateUserInfo() {
|
|||
.then((response) => {
|
||||
async function doStuff() {
|
||||
if (response.status == 500) {
|
||||
displayError("Something went wrong. Signing you out..")
|
||||
displayError("Something went wrong! Signing you out..")
|
||||
closeErrorButton.classList.add("hidden")
|
||||
usernameBox.innerText = ""
|
||||
setTimeout(function () {
|
||||
|
@ -222,9 +219,8 @@ function updateUserInfo() {
|
|||
} else {
|
||||
let responseData = await response.json()
|
||||
usernameBox.innerText = responseData["username"]
|
||||
usernameThing.innerText = "username: " + responseData["username"]
|
||||
passwordThing.innerText = "password: *************"
|
||||
storageThing.innerText = "you've used " + formatBytes(responseData["storageused"]) + " out of " + formatBytes(responseData["storagemax"])
|
||||
usernameThing.innerText = "Username: " + responseData["username"]
|
||||
storageThing.innerText = "You've used " + formatBytes(responseData["storageused"]) + " out of " + formatBytes(responseData["storagemax"])
|
||||
storageProgressThing.value = responseData["storageused"]
|
||||
storageProgressThing.max = responseData["storagemax"]
|
||||
noteCount = responseData["notecount"]
|
||||
|
@ -247,7 +243,7 @@ exitThing.addEventListener("click", (event) => {
|
|||
optionsCoverDiv.classList.add("hidden")
|
||||
});
|
||||
deleteMyAccountButton.addEventListener("click", (event) => {
|
||||
if (confirm("are you REALLY sure that you want to delete your account? there's no going back.") == true) {
|
||||
if (confirm("Are you REALLY sure that you want to delete your account? There's no going back!") == true) {
|
||||
fetch("/api/deleteaccount", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
|
@ -262,7 +258,7 @@ deleteMyAccountButton.addEventListener("click", (event) => {
|
|||
if (response.status == 200) {
|
||||
window.location.href = "/api/logout"
|
||||
} else {
|
||||
displayError("failed to delete account (HTTP error code " + response.status + ")")
|
||||
displayError("Failed to delete account (HTTP error code " + response.status + ")")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -346,17 +342,6 @@ exitSessionsThing.addEventListener("click", (event) => {
|
|||
optionsDiv.classList.remove("hidden")
|
||||
sessionManagerDiv.classList.add("hidden")
|
||||
});
|
||||
mfaCheckbox.addEventListener("change", (event) => {
|
||||
if (mfaCheckbox.checked === true) {
|
||||
mfaCheckbox.checked = false
|
||||
optionsDiv.classList.add("hidden")
|
||||
mfaDiv.classList.remove("hidden")
|
||||
}
|
||||
})
|
||||
exitMfaThing.addEventListener("click", (event) => {
|
||||
optionsDiv.classList.remove("hidden")
|
||||
mfaDiv.classList.add("hidden")
|
||||
});
|
||||
|
||||
updateUserInfo()
|
||||
|
||||
|
@ -387,13 +372,13 @@ function selectNote(nameithink) {
|
|||
noteBox.readOnly = true
|
||||
noteBox.value = ""
|
||||
noteBox.placeholder = ""
|
||||
displayError("something went wrong, please try again later")
|
||||
displayError("Something went wrong... Please try again later!")
|
||||
})
|
||||
.then((response) => response)
|
||||
.then((response) => {
|
||||
selectedNote = nameithink
|
||||
noteBox.readOnly = false
|
||||
noteBox.placeholder = "type something.."
|
||||
noteBox.placeholder = "Type something!"
|
||||
|
||||
async function doStuff() {
|
||||
let responseData = await response.json()
|
||||
|
@ -425,11 +410,11 @@ function selectNote(nameithink) {
|
|||
.then((response) => response)
|
||||
.then((response) => {
|
||||
if (response.status == 418) {
|
||||
displayError("you've ran out of storage :3 changes will not be saved until you free up storage!!! owo")
|
||||
displayError("You've ran out of storage... Changes will not be saved until you free up storage!")
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
displayError("failed to save changes, please try again later")
|
||||
displayError("Failed to save changes, please try again later...")
|
||||
})
|
||||
}
|
||||
}, waitTime);
|
||||
|
@ -489,7 +474,7 @@ function updateNotes() {
|
|||
updateNotes()
|
||||
})
|
||||
.catch((error) => {
|
||||
displayError("something went wrong! please try again later")
|
||||
displayError("Something went wrong! Please try again later...")
|
||||
})
|
||||
} else {
|
||||
selectNote(responseData[i]["id"])
|
||||
|
@ -505,7 +490,7 @@ function updateNotes() {
|
|||
updateNotes()
|
||||
|
||||
newNote.addEventListener("click", (event) => {
|
||||
let noteName = displayPrompt("note name? :3", "e.g. shopping list", burgerFunction)
|
||||
let noteName = displayPrompt("Note name?", "E.G Shopping list", burgerFunction)
|
||||
function burgerFunction(noteName) {
|
||||
if (noteName != null) {
|
||||
let encryptedName = CryptoJS.AES.encrypt(noteName, password).toString();
|
||||
|
@ -520,12 +505,12 @@ newNote.addEventListener("click", (event) => {
|
|||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
displayError("failed to create new note, please try again later")
|
||||
displayError("Failed to create new note, please try again later...")
|
||||
})
|
||||
.then((response) => {
|
||||
if (response.status !== 200) {
|
||||
updateNotes()
|
||||
displayError("failed to create new note (HTTP error code " + response.status + ")")
|
||||
displayError("Failed to create new note (HTTP error code " + response.status + ")")
|
||||
} else {
|
||||
updateNotes()
|
||||
}
|
||||
|
@ -559,7 +544,7 @@ function exportNotes() {
|
|||
async function doStuff() {
|
||||
let responseData = await response.json()
|
||||
for (let i in responseData) {
|
||||
exportNotes.innerText = "decrypting " + i + "/" + noteCount
|
||||
exportNotes.innerText = "Decrypting " + i + "/" + noteCount
|
||||
|
||||
let bytes = CryptoJS.AES.decrypt(responseData[i]["title"], password);
|
||||
let originalTitle = bytes.toString(CryptoJS.enc.Utf8);
|
||||
|
@ -573,10 +558,10 @@ function exportNotes() {
|
|||
}
|
||||
let jsonString = JSON.parse(JSON.stringify(responseData))
|
||||
|
||||
exportNotesButton.innerText = "export notes"
|
||||
exportNotesButton.innerText = "Export notes"
|
||||
downloadObjectAsJson(jsonString, "data")
|
||||
optionsDiv.classList.add("hidden")
|
||||
displayError("exported notes!")
|
||||
displayError("Exported notes!")
|
||||
|
||||
}
|
||||
doStuff()
|
||||
|
@ -584,13 +569,13 @@ function exportNotes() {
|
|||
}
|
||||
|
||||
exportNotesButton.addEventListener("click", (event) => {
|
||||
exportNotesButton.innerText = "downloading.."
|
||||
exportNotesButton.innerText = "Downloading..."
|
||||
exportNotes()
|
||||
});
|
||||
|
||||
removeBox.addEventListener("click", (event) => {
|
||||
if (selectedNote == 0) {
|
||||
displayError("you need to select a note first!")
|
||||
displayError("You need to select a note first!")
|
||||
} else {
|
||||
fetch("/api/removenote", {
|
||||
method: "POST",
|
||||
|
@ -607,9 +592,7 @@ removeBox.addEventListener("click", (event) => {
|
|||
updateNotes()
|
||||
})
|
||||
.catch((error) => {
|
||||
displayError("something went wrong! please try again later")
|
||||
displayError("Something went wrong! Please try again later...")
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
displayError("Burgernotes is shutting down on November 12th, please refer to <a href='/shutdownfaq'>this FAQ</a> for more info.")
|
|
@ -1,11 +1,11 @@
|
|||
if (localStorage.getItem("DONOTSHARE-secretkey") !== null) {
|
||||
window.location.replace("/app")
|
||||
document.body.innerHTML = "Redirecting.."
|
||||
document.body.innerHTML = "Redirecting..."
|
||||
throw new Error();
|
||||
}
|
||||
if (localStorage.getItem("DONOTSHARE-password") !== null) {
|
||||
window.location.replace("/app")
|
||||
document.body.innerHTML = "Redirecting.."
|
||||
document.body.innerHTML = "Redirecting..."
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
|
@ -33,24 +33,24 @@ signupButton.addEventListener("click", (event) => {
|
|||
let password = passwordBox.value
|
||||
|
||||
if (username == "") {
|
||||
statusBox.innerText = "username required"
|
||||
statusBox.innerText = "A username is required!"
|
||||
return
|
||||
}
|
||||
if ((username).length > 20) {
|
||||
statusBox.innerText = "username cannot be more than 20 characters"
|
||||
statusBox.innerText = "Username cannot be more than 20 characters!"
|
||||
return
|
||||
}
|
||||
if (password == "") {
|
||||
statusBox.innerText = "password required"
|
||||
statusBox.innerText = "A password is required!"
|
||||
return
|
||||
}
|
||||
if ((password).length < 14) {
|
||||
statusBox.innerText = "14 characters required"
|
||||
if ((password).length < 8) {
|
||||
statusBox.innerText = "8 or more characters are required!"
|
||||
return
|
||||
}
|
||||
|
||||
showElements(false)
|
||||
statusBox.innerText = "creating account, please hold on.."
|
||||
statusBox.innerText = "Creating account, please hold on..."
|
||||
|
||||
async function hashpass(pass) {
|
||||
const key = await hashwasm.argon2id({
|
||||
|
@ -88,11 +88,11 @@ signupButton.addEventListener("click", (event) => {
|
|||
window.location.href = "/app"
|
||||
}
|
||||
else if (response.status == 409) {
|
||||
statusBox.innerText = "username already taken!"
|
||||
statusBox.innerText = "Username already taken!"
|
||||
showElements(true)
|
||||
}
|
||||
else {
|
||||
statusBox.innerText = "something went wrong! (error code: " + respStatus + ")"
|
||||
statusBox.innerText = "Something went wrong! (error code: " + respStatus + ")"
|
||||
showElements(true)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>burgernotes</title>
|
||||
<title>PageBurger</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
<body>
|
||||
<div class="topBar">
|
||||
<p tabindex="0" class="logo" id="burgerButton">burgernotes</p>
|
||||
<p tabindex="0" class="logo" id="burgerButton">PageBurger</p>
|
||||
<p tabindex="0" id="usernameBox" class="usernameBox"></p>
|
||||
</div>
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
|||
|
||||
<div id="notesBar" class="notesBar">
|
||||
<button id="newNote" class="newNote"><img id="newNoteImage" draggable="false" alt=""
|
||||
src="/static/svg/add.svg">new note</button>
|
||||
src="/static/svg/add.svg">New note</button>
|
||||
<div id="notesDiv" class="notesDiv">
|
||||
<button class="loadingStuff" id="loadingStuff"></button>
|
||||
</div>
|
||||
|
@ -37,49 +37,33 @@
|
|||
<div id="optionsCoverDiv" class="optionsCoverDiv hidden">
|
||||
<div id="optionsDiv" class="optionsDiv hidden">
|
||||
<button class="exit" id="exitThing">X</button>
|
||||
<h3 class="w300">your account</h3>
|
||||
<h3 class="w300">Your account</h3>
|
||||
<p id="usernameThing"></p>
|
||||
<p id="passwordThing"></p>
|
||||
<p style="display: inline">enable two-factor authentication: </p>
|
||||
<input type="checkbox" id="mfaCheckbox" class="mfacheckbox">
|
||||
<div class="section"></div>
|
||||
<p>storage</p>
|
||||
<p>Storage</p>
|
||||
<progress id="storageProgressThing" value="0" max="100"></progress><br>
|
||||
<p id="storageThing"></p>
|
||||
<div class="section"></div>
|
||||
<p>account managment</p>
|
||||
<button id="deleteMyAccountButton"><img src="/static/svg/delete_forever.svg">delete my account</button>
|
||||
<button id="exportNotesButton"><img src="/static/svg/download.svg">export notes</button>
|
||||
<button id="sessionManagerButton"><img src="/static/svg/list.svg">session manager</button>
|
||||
<button class="lastButton" id="logOutButton"><img src="/static/svg/logout.svg">log out</button>
|
||||
<p>Account managment</p>
|
||||
<button id="deleteMyAccountButton"><img src="/static/svg/delete_forever.svg">Delete my account</button>
|
||||
<button id="exportNotesButton"><img src="/static/svg/download.svg">Export notes</button>
|
||||
<button id="sessionManagerButton"><img src="/static/svg/list.svg">Session manager</button>
|
||||
<button class="lastButton" id="logOutButton"><img src="/static/svg/logout.svg">Log out</button>
|
||||
</div>
|
||||
<div id="sessionManagerDiv" class="optionsDiv hidden">
|
||||
<button class="exit" id="exitSessionsThing">X</button>
|
||||
<h3 class="w300">session manager</h3>
|
||||
<p>manage your sessions</p>
|
||||
<h3 class="w300">Session manager</h3>
|
||||
<p>Manage your sessions</p>
|
||||
<div class="section"></div>
|
||||
<div class="sessionDiv" id="sessionDiv">
|
||||
</div>
|
||||
</div>
|
||||
<div id="mfaDiv" class="optionsDiv hidden">
|
||||
<button class="exit" id="exitMfaThing">X</button>
|
||||
<h3 class="w300">enable 2FA</h3>
|
||||
<img style="filter: none; width: 100%; height: 60px;" src="/static/svg/phonelink_lock.svg">
|
||||
<br><br>
|
||||
Two-factor authentication is coming soon!
|
||||
<div class="hidden">
|
||||
<p>Two-factor authentication adds an extra layer of security to your account.</p>
|
||||
<p>Enter in this token in your authenticator app:</p>
|
||||
<code></code>
|
||||
<p>Enter in the 6 digit code from your authenticator app:</p>
|
||||
<input style="margin-bottom: 0;" inputmode="numeric" id="codeInput" type="text"
|
||||
placeholder="6-digit code"><br></input>
|
||||
</div>
|
||||
</div>
|
||||
<div id="errorDiv" class="optionsDiv hidden">
|
||||
<p id="errorMessageThing"></p>
|
||||
<input class="hidden" id="errorInput" type="text" placeholder=""><br></input>
|
||||
<button class="normalButton" id="closeErrorButton">OK</button>
|
||||
<button class="normalButton" id="closeErrorButton">Ok</button>
|
||||
<button class="normalButton hidden" id="cancelErrorButton">Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>burgernotes</title>
|
||||
<title>PageBurger</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
|
@ -10,8 +10,8 @@
|
|||
|
||||
<body>
|
||||
<div class="mainDiv">
|
||||
<h1>burgernotes is down</h1>
|
||||
<p>we're down for maintenance, please try again later!</p>
|
||||
<h1>PageBurger is down</h1>
|
||||
<p>We're down for maintenance, please try again later!</p>
|
||||
|
||||
<!-- please don't mind the spaghetti code :3 -->
|
||||
<img class="grid" src="/grid.svg">
|
||||
|
|
|
@ -2,15 +2,13 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>burgernotes</title>
|
||||
<title>PageBurger</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/style.css" />
|
||||
</head>
|
||||
|
||||
<p class="alertDiv">Burgernotes is shutting down on November 12th, read <a href="/shutdownfaq">this FAQ</a> for more info</p>
|
||||
|
||||
<body>
|
||||
<h2 class="w300">{{ errorMessage }}</h2>
|
||||
{{ errorCode }} | {{ errorMessage }}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>log in - burgernotes</title>
|
||||
<title>Login - PageBurger</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
|
@ -11,17 +11,15 @@
|
|||
|
||||
</head>
|
||||
|
||||
<p class="alertDiv">Burgernotes is shutting down on November 12th, read <a href="/shutdownfaq">this FAQ</a> for more info</p>
|
||||
|
||||
<body>
|
||||
<div class="inoutdiv">
|
||||
<h2 class="w300">log in</h2>
|
||||
<h2 class="w300">Login</h2>
|
||||
<p id="statusBox"></p>
|
||||
<span id="inputNameBox" style="margin-right: 10px;"></span><input id="usernameBox" class="hidden" type="text" placeholder="Enter your username">
|
||||
<span id="inputNameBox" style="margin-right: 10px;color: var(--text-color);"></span><input id="usernameBox" class="hidden" type="text" placeholder="Enter your username">
|
||||
<input id="passwordBox" class="hidden" type="password" placeholder="Enter your password">
|
||||
<button id="signupButton">next</button>
|
||||
<button id="backButton" class="hidden">back</button><br><br>
|
||||
<p>don't have an account? if so, <a href="/signup">create one here!</a></p>
|
||||
<button id="signupButton">Next</button>
|
||||
<button id="backButton" class="hidden">Back</button><br><br>
|
||||
<p>Don't have an account? If so, <a href="/signup">Create one here!</a></p>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/static/js/login.js"></script>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>burgernotes</title>
|
||||
<title>PageBurger</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<head>
|
||||
|
|
|
@ -2,39 +2,37 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>burgernotes</title>
|
||||
<title>PageBurger</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/style.css" />
|
||||
<meta content="burgernotes" property="og:title" />
|
||||
<meta content="simple note-taking app :3" property="og:description" />
|
||||
<meta content="Burgernotes" property="og:title" />
|
||||
<meta content="A simple note-taking app!" property="og:description" />
|
||||
</head>
|
||||
|
||||
<p class="alertDiv">Burgernotes is shutting down on November 12th, read <a href="/shutdownfaq">this FAQ</a> for more info</p>
|
||||
|
||||
<body>
|
||||
<div class="mainDiv">
|
||||
<div class="startDiv">
|
||||
<h1 class="w300">burgernotes</h1>
|
||||
<p>simple note-taking app</p>
|
||||
<h1 class="w300">PageBurger</h1>
|
||||
<p>A simple note-taking app!</p>
|
||||
<br>
|
||||
<a href="/app">open in your browser</a>
|
||||
<a href="/app">Open in your browser</a>
|
||||
<!--<a href="/download">download app</a>-->
|
||||
</div>
|
||||
<br><br><br>
|
||||
<div class="feature green">
|
||||
<h3 class="w300">secure</h4>
|
||||
<p>all your notes are fully end-to-end encrypted. only you can read your notes, not anyone else.</p>
|
||||
<h7 class="w300">Secure</h7>
|
||||
<p2>All your notes are fully end-to-end encrypted. Only you can read your notes, not anyone else.</p2>
|
||||
</div>
|
||||
<div class="feature yellow">
|
||||
<h3 class="w300">always up-to-date</h4>
|
||||
<p>your notes seamlessly sync across your devices.</p>
|
||||
<h7 class="w300">Always up-to-date</h7>
|
||||
<p2>Your notes seamlessly sync across your devices.</p2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="links">
|
||||
<a href="https://codeberg.org/burger-software/burgernotes">source code</a>
|
||||
<a href="/privacy">privacy policy</a>
|
||||
<a href="https://centrifuge.hectabit.org/hectabit/pageburger">Source code</a>
|
||||
<a href="/privacy">Privacy policy</a>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
|
|
@ -2,21 +2,19 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>burgernotes</title>
|
||||
<title>PageBurger</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/style.css" />
|
||||
</head>
|
||||
|
||||
<p class="alertDiv">Burgernotes is shutting down on November 12th, read <a href="/shutdownfaq">this FAQ</a> for more info</p>
|
||||
|
||||
<body>
|
||||
<h1 class="w300">burgernotes privacy policy</h1>
|
||||
<h1 class="w300">PageBurger Privacy Policy</h1>
|
||||
<h2 class="w300">Preamble</h2>
|
||||
<p><i>please note that i am not a lawyer, please don't expect too much of this policy :3</i></p>
|
||||
<p>Welcome to the Burgernotes privacy policy! burgernotes is <a
|
||||
href="https://codeberg.org/burger-software/burgernotes">free & open source</a> software licensed under <a
|
||||
<p><i>Please note that I am not a lawyer, please don't expect too much of this policy <3</i></p>
|
||||
<p>Welcome to the PageBurger privacy policy! PageBurger is <a
|
||||
href="https://centrifuge.hectabit.org/hectabit/pageburger">free & open source</a> software licensed under <a
|
||||
href="https://www.gnu.org/licenses/agpl-3.0.en.html">GNU AGPL-3.0</a>.</p>
|
||||
<h2 class="w300">Information collected when signing up</h2>
|
||||
<p>When signing up for an account, we collect and store the following information:</p>
|
||||
|
@ -54,14 +52,14 @@
|
|||
<li>Note last edited date</li>
|
||||
<li>Note creator</li>
|
||||
</ul>
|
||||
not note content or title.
|
||||
<p>Not note content or title.</p>
|
||||
<h2 class="w300">We don't sell your data</h2>
|
||||
<p>We don't sell or share your data to advertisers or third-parties.</p>
|
||||
<h2 class="w300">Liability</h2>
|
||||
<p>We take no responsibility for the use of burgernotes, or any external instances provided by third-parties. We
|
||||
refuse liability for any inappropriate or illegal use of burgernotes.</p>
|
||||
<p>We take no responsibility for the use of PageBurger, or any external instances provided by third-parties. We
|
||||
refuse liability for any inappropriate or illegal use of PageBurger.</p>
|
||||
<p>You may view the AGPL-3.0 license which this software is provided to you with. A copy of the section is below.</p>
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
|
@ -69,7 +67,7 @@
|
|||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
SUCH DAMAGES.</p>
|
||||
<br><br>
|
||||
</body>
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>sign up - burgernotes</title>
|
||||
<title>Signup - PageBurger</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
|
@ -11,21 +11,16 @@
|
|||
|
||||
</head>
|
||||
|
||||
<p class="alertDiv">Burgernotes is shutting down on November 12th, read <a href="/shutdownfaq">this FAQ</a> for more info</p>
|
||||
|
||||
<body>
|
||||
<div class="inoutdiv">
|
||||
<h2 class="w300">sign up</h2>
|
||||
<p>You may no longer sign up, read <a href="/shutdownfaq">this FAQ</a>.</p>
|
||||
<p>If you have an existing account, please <a href="/login">sign in</a>.</p>
|
||||
<!--<p>sign up for a burgernotes account</p>
|
||||
<h2 class="w300">Signup</h2>
|
||||
<p>Signup for a PageBurger account</p>
|
||||
<p id="statusBox"></p>
|
||||
<input id="usernameBox" type="text" placeholder="Username">
|
||||
<input id="passwordBox" type="password" placeholder="Password">
|
||||
<button id="signupButton">sign up</button><br><br>
|
||||
<p>please note that it's impossible to reset your password, do not forget it!</p>
|
||||
<p>already have an account? if so, <a href="/login">log in</a> instead</p>
|
||||
-->
|
||||
<button id="signupButton">Signup</button><br><br>
|
||||
<p>Please note that it's impossible to reset your password, do not forget it!</p>
|
||||
<p>Already have an account? If so, <a href="/login">Login</a> instead!</p>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="/static/js/signup.js"></script>
|
||||
|
|
Loading…
Reference in New Issue