diff --git a/README.md b/README.md
index 00740cd..ad0dcce 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,13 @@
# 🚀 Getting started with PomeloNote
+### **THIS REPOSITORY HAS DEPENDENCIES WITH SECURITY VULNERABILITIES. YOU MIGHT WANT TO UPDATE PACKAGES BEFORE USE.**
+## Setup
+- run `npm i`
+- get the .env file and save it to the root directory of the project
+- set up Strapi
+ - go to `localhost:1337/admin`
+ - register an admin user
+ - go to Settings => Users&Permissions Plugin => Roles => Authenticated => Note => Select all
+ - Save
### Starting the container with svelte and strapi:
``docker-compose up --build -d``
diff --git a/backend/strapi/src/api/note/controllers/note.js b/backend/strapi/src/api/note/controllers/note.js
index 9cf8879..84e7a8d 100644
--- a/backend/strapi/src/api/note/controllers/note.js
+++ b/backend/strapi/src/api/note/controllers/note.js
@@ -50,6 +50,9 @@ module.exports = createCoreController(noteUid, ({strapi}) => ({
lastViewed: Date.now()
}
})
+ entry = await strapi.entityService.findOne(noteUid, noteId, {
+ populate: ['owners'],
+ });
return JSON.stringify(entry);
} else {
ctx.response.status = 403;
@@ -63,22 +66,26 @@ module.exports = createCoreController(noteUid, ({strapi}) => ({
async update(ctx) {
const noteId = getNoteIdFromUrl(ctx.request.url)
const userId = ctx.state.user.id;
- const requestBody = ctx.request.body;
+ const requestBody = JSON.parse(ctx.request.body);
+ console.log(JSON.stringify(requestBody, null, 2))
const entry = await strapi.entityService.findOne(noteUid, noteId, {
populate: ['owners'],
});
const authorized = entry.owners.some(owner => owner.id === userId)
- let allPreviousOwnersKept = false;
+ let allPreviousOwnersKept = true;
if (requestBody.data.hasOwnProperty("owners")) {
allPreviousOwnersKept = entry.owners.every(owner => requestBody.data.owners.includes(owner));
}
+ console.log({
+ "auth": authorized,
+ "allprev": allPreviousOwnersKept,
+ })
if (!authorized) {
ctx.response.status = 403;
} else if (!allPreviousOwnersKept) {
ctx.response.status = 400;
- } else {
- return super.update(ctx);
}
+ return await strapi.entityService.update(noteUid, noteId, requestBody);
},
/**
* Creates a new note, automatically sets owners to the user making the request and lastViewed
diff --git a/backend/strapi/src/extensions/users-permissions/content-types/user/schema.json b/backend/strapi/src/extensions/users-permissions/content-types/user/schema.json
new file mode 100644
index 0000000..7413352
--- /dev/null
+++ b/backend/strapi/src/extensions/users-permissions/content-types/user/schema.json
@@ -0,0 +1,73 @@
+{
+ "kind": "collectionType",
+ "collectionName": "up_users",
+ "info": {
+ "name": "user",
+ "description": "",
+ "singularName": "user",
+ "pluralName": "users",
+ "displayName": "User"
+ },
+ "options": {
+ "draftAndPublish": false,
+ "timestamps": true
+ },
+ "attributes": {
+ "username": {
+ "type": "string",
+ "minLength": 3,
+ "unique": true,
+ "configurable": false,
+ "required": true
+ },
+ "email": {
+ "type": "email",
+ "minLength": 6,
+ "configurable": false,
+ "required": true
+ },
+ "provider": {
+ "type": "string",
+ "configurable": false
+ },
+ "password": {
+ "type": "password",
+ "minLength": 6,
+ "configurable": false,
+ "private": true
+ },
+ "resetPasswordToken": {
+ "type": "string",
+ "configurable": false,
+ "private": true
+ },
+ "confirmationToken": {
+ "type": "string",
+ "configurable": false,
+ "private": true
+ },
+ "confirmed": {
+ "type": "boolean",
+ "default": false,
+ "configurable": false
+ },
+ "blocked": {
+ "type": "boolean",
+ "default": false,
+ "configurable": false
+ },
+ "role": {
+ "type": "relation",
+ "relation": "manyToOne",
+ "target": "plugin::users-permissions.role",
+ "inversedBy": "users",
+ "configurable": false
+ },
+ "notes": {
+ "type": "relation",
+ "relation": "manyToMany",
+ "target": "api::note.note",
+ "inversedBy": "owners"
+ }
+ }
+}
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 0000000..2e92aba
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,3 @@
+remote_theme: pages-themes/leap-day@v0.2.0
+plugins:
+- jekyll-remote-theme
diff --git a/docs/_data/devs.csv b/docs/_data/devs.csv
new file mode 100644
index 0000000..5c60b6c
--- /dev/null
+++ b/docs/_data/devs.csv
@@ -0,0 +1,4 @@
+name,github,image
+Jonas Weissengruber,j-weissen,jowei
+Stefan Prechtler,s-prechtl,stef
+David Hain,d-hain,dave
\ No newline at end of file
diff --git a/docs/images/dave.jpg b/docs/images/dave.jpg
new file mode 100644
index 0000000..9fe6268
Binary files /dev/null and b/docs/images/dave.jpg differ
diff --git a/docs/images/delete.png b/docs/images/delete.png
new file mode 100644
index 0000000..39ae1b5
Binary files /dev/null and b/docs/images/delete.png differ
diff --git a/docs/images/editor.png b/docs/images/editor.png
new file mode 100644
index 0000000..690ef69
Binary files /dev/null and b/docs/images/editor.png differ
diff --git a/docs/images/jowei.jpg b/docs/images/jowei.jpg
new file mode 100644
index 0000000..6785c8d
Binary files /dev/null and b/docs/images/jowei.jpg differ
diff --git a/docs/images/listing.png b/docs/images/listing.png
new file mode 100644
index 0000000..8b1189b
Binary files /dev/null and b/docs/images/listing.png differ
diff --git a/docs/images/login.png b/docs/images/login.png
new file mode 100644
index 0000000..e9c1cbd
Binary files /dev/null and b/docs/images/login.png differ
diff --git a/docs/images/register.png b/docs/images/register.png
new file mode 100644
index 0000000..68336c8
Binary files /dev/null and b/docs/images/register.png differ
diff --git a/docs/images/stef.jpg b/docs/images/stef.jpg
new file mode 100644
index 0000000..231d3e3
Binary files /dev/null and b/docs/images/stef.jpg differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..7c87e05
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,31 @@
+# Pomelo Note
+
+This is the best open source note app you will ever find.
+
+## Login
+When first entering the app, you will need to login. If you haven't got an account you may consider [registering](#register), or just not using the app at all.
+
+
+## Register
+A username, an email and a password that's all you need. If you are missing one of those, just don't use the app at all.
+
+
+## Editor
+You can edit your notes with our minimalistic editor interface.
+
+
+## Listing
+Here you can see all your notes. Click on them to open the editor or hover and press the red "X" to delete them.
+
+
+## Delete
+Confirm the deletion.
+
+
+# The Team
+{% for dev in site.data.devs %}
+ {{ dev.name }}
+ [GitHub](https://github.com/{{ dev.github }})
+ 
+{% endfor %}
+
diff --git a/frontend/svelte/package-lock.json b/frontend/svelte/package-lock.json
index 63551ad..d5c5126 100644
--- a/frontend/svelte/package-lock.json
+++ b/frontend/svelte/package-lock.json
@@ -9,7 +9,9 @@
"version": "0.0.1",
"dependencies": {
"bootstrap-icons": "^1.9.1",
- "nookies": "^2.5.2"
+ "nookies": "^2.5.2",
+ "sv-popup": "^0.2.5",
+ "webworker": "^0.8.4"
},
"devDependencies": {
"@sveltejs/adapter-auto": "next",
@@ -2083,6 +2085,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/sv-popup": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/sv-popup/-/sv-popup-0.2.5.tgz",
+ "integrity": "sha512-JhBu4piXaauamT4vMEcFCydvxJ8e72G7c9F3caZVAPsiFqWPTYT3JDz99FlR+YCnbOp1emsZqqOPVvCwHgURog=="
+ },
"node_modules/svelte": {
"version": "3.50.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.50.1.tgz",
@@ -2358,6 +2365,14 @@
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"dev": true
},
+ "node_modules/webworker": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/webworker/-/webworker-0.8.4.tgz",
+ "integrity": "sha512-zzsVxtHf+mCn0WuYLarSWfRGmX7JiYKkKvso5FYC7rJ9G8svwGQA5a51Sjq9D2c/rKVU6U/kyBcaI7gUTVlsJg==",
+ "engines": {
+ "node": ">=0.4.3"
+ }
+ },
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
@@ -3824,6 +3839,11 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
+ "sv-popup": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/sv-popup/-/sv-popup-0.2.5.tgz",
+ "integrity": "sha512-JhBu4piXaauamT4vMEcFCydvxJ8e72G7c9F3caZVAPsiFqWPTYT3JDz99FlR+YCnbOp1emsZqqOPVvCwHgURog=="
+ },
"svelte": {
"version": "3.50.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.50.1.tgz",
@@ -3981,6 +4001,11 @@
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"dev": true
},
+ "webworker": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/webworker/-/webworker-0.8.4.tgz",
+ "integrity": "sha512-zzsVxtHf+mCn0WuYLarSWfRGmX7JiYKkKvso5FYC7rJ9G8svwGQA5a51Sjq9D2c/rKVU6U/kyBcaI7gUTVlsJg=="
+ },
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
diff --git a/frontend/svelte/package.json b/frontend/svelte/package.json
index 7ea33f8..81a0887 100644
--- a/frontend/svelte/package.json
+++ b/frontend/svelte/package.json
@@ -22,7 +22,9 @@
},
"type": "module",
"dependencies": {
+ "bootstrap-icons": "^1.9.1",
"nookies": "^2.5.2",
- "bootstrap-icons": "^1.9.1"
+ "sv-popup": "^0.2.5",
+ "webworker": "^0.8.4"
}
}
diff --git a/frontend/svelte/src/app.html b/frontend/svelte/src/app.html
index 07daf74..9d5ca24 100644
--- a/frontend/svelte/src/app.html
+++ b/frontend/svelte/src/app.html
@@ -1,5 +1,5 @@
-
+