Merge branch 'main' of hectabit.org:HectaBit/Burgernotes

This commit is contained in:
maaa 2024-03-11 21:45:24 +01:00
commit 9d0dbafdba
10 changed files with 78 additions and 39 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
database.db
config.ini
config.ini.example

View File

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

View File

@ -1,5 +0,0 @@
[config]
HOST = 0.0.0.0
PORT = 8070
SECRET_KEY = iadguhaoghioahegOLEHGELHIGOAHLhoewhgoiwh
MAX_STORAGE = 25000000

5
config.ini.example Normal file
View File

@ -0,0 +1,5 @@
[config]
HOST = 0.0.0.0
PORT = 8080
SECRET_KEY = supersecretkey
MAX_STORAGE = 25000000

View File

@ -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 {

View File

@ -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,

View File

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

View File

@ -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,

View File

@ -15,11 +15,13 @@
<div class="inoutdiv">
<h2 class="w300">Login</h2>
<p id="statusBox"></p>
<span id="inputNameBox" style="margin-right: 10px;color: var(--text-color);"></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>
<button id="backButton" class="hidden">Back</button>
<br>
<br>
<p>Don't have an account? If so, <a href="../signup/index.html">Create one here!</a></p>
<a href="../privacy/index.html">Privacy &amp; Terms</a>
</div>
@ -30,10 +32,9 @@
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;
}
</style>

View File

@ -20,9 +20,20 @@
<input id="passwordBox" type="password" placeholder="Password"><br>
<button id="signupButton">Signup</button><br><br>
<p>Please note that it's impossible to reset your password, do not forget it!</p>
By signing up, you agree to our <a href="../privacy/index.html">Privacy &amp; Terms</a>.<br><br>
<p>By signing up, you agree to our <a href="../privacy/index.html">Privacy &amp; Terms</a>.</p>
<br><br>
<p>Already have an account? If so, <a href="../login/index.html">Login</a> instead!</p><br>
</div>
<style>
body {
background-color: #d9d9d9;
background-image: url("/static/svg/grid.svg");
background-repeat: repeat;
background-size: 312px;
}
.inoutdiv {
border-radius: 8px;
}
</style>
<script type="text/javascript" src="../static/js/signup.js"></script>
</body>