We are soo back!

This commit is contained in:
Tracker-Friendly 2023-11-03 20:24:40 +00:00
parent c727216c02
commit a8a15cae64
15 changed files with 134 additions and 171 deletions

View File

@ -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)
[API documentation](APIDOCS.md)

View File

@ -1,5 +1,5 @@
[config]
HOST = 0.0.0.0
PORT = 8080
SECRET_KEY = placeholder
MAX_STORAGE = 25000000
PORT = 8070
SECRET_KEY = oligogoaihegokjdugielaguilUGLAGULUGELGouegalfgusl
MAX_STORAGE = 25000000

6
main
View File

@ -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():
@ -475,4 +471,4 @@ def burger(e):
if __name__ == "__main__":
print("[INFO] Server started")
serve(app, host=HOST, port=PORT)
print("[INFO] Server stopped")
print("[INFO] Server stopped")

View File

@ -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 {
@ -633,4 +644,4 @@ body {
.links a:hover {
text-decoration: dashed;
}
}

View File

@ -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)
}
@ -143,4 +143,4 @@ backButton.addEventListener("click", (event) => {
showInput(0)
});
showInput(0)
showInput(0)

View File

@ -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.")

View File

@ -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)
}
}
@ -100,4 +100,4 @@ signupButton.addEventListener("click", (event) => {
});
}
doStuff()
});
});

View File

@ -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>
@ -95,4 +79,4 @@
</script>
</body>
</html>
</html>

View File

@ -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">
@ -122,4 +122,4 @@
}
</style>
</html>
</html>

View File

@ -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 }}
@ -22,4 +20,4 @@
}
</style>
</html>
</html>

View File

@ -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,18 +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">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>
</body>
</body>

View File

@ -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>
@ -12,4 +12,4 @@ Logging out..
localStorage.removeItem("DONOTSHARE-password")
localStorage.removeItem("CACHE-username")
window.location.replace("/")
</script>
</script>

View File

@ -2,40 +2,38 @@
<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>
</html>
</html>

View File

@ -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>
@ -79,4 +77,4 @@
}
</style>
</html>
</html>

View File

@ -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,22 +11,17 @@
</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>
</body>
</body>