From 19e776a772d07d4aa96386c1ab2c4467070672d0 Mon Sep 17 00:00:00 2001
From: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
Date: Wed, 31 Jan 2024 10:33:05 +0000
Subject: [PATCH 01/47] manage-data pages
---
frontend/middleware/admin-only.ts | 4 ++--
frontend/middleware/can-organize-only.ts | 12 ++++++++++++
frontend/pages/group/data/categories.vue | 1 +
frontend/pages/group/data/foods.vue | 2 +-
frontend/pages/group/data/labels.vue | 1 +
frontend/pages/group/data/recipes.vue | 1 +
frontend/pages/group/data/tags.vue | 1 +
frontend/pages/group/data/tools.vue | 1 +
frontend/pages/group/data/units.vue | 1 +
frontend/pages/user/profile/index.vue | 22 +++++++++++-----------
10 files changed, 32 insertions(+), 14 deletions(-)
create mode 100644 frontend/middleware/can-organize-only.ts
diff --git a/frontend/middleware/admin-only.ts b/frontend/middleware/admin-only.ts
index 66a4e00f3566..b55f603d5151 100644
--- a/frontend/middleware/admin-only.ts
+++ b/frontend/middleware/admin-only.ts
@@ -1,8 +1,8 @@
-interface AuthRedirectParams {
+interface AdminRedirectParams {
$auth: any
redirect: (path: string) => void
}
-export default function ({ $auth, redirect }: AuthRedirectParams) {
+export default function ({ $auth, redirect }: AdminRedirectParams) {
// If the user is not an admin redirect to the home page
if (!$auth.user.admin) {
return redirect("/")
diff --git a/frontend/middleware/can-organize-only.ts b/frontend/middleware/can-organize-only.ts
new file mode 100644
index 000000000000..9bb6b6603d75
--- /dev/null
+++ b/frontend/middleware/can-organize-only.ts
@@ -0,0 +1,12 @@
+interface CanOrganizeRedirectParams {
+ $auth: any
+ redirect: (path: string) => void
+}
+export default function ({ $auth, redirect }: CanOrganizeRedirectParams) {
+ console.log($auth.user);
+ // If the user is not allowed to organize redirect to the home page
+ if (!$auth.user.canOrganize) {
+ console.warn("User is not allowed to organize data");
+ return redirect("/")
+ }
+}
diff --git a/frontend/pages/group/data/categories.vue b/frontend/pages/group/data/categories.vue
index 290e4f79e083..038c716c0e43 100644
--- a/frontend/pages/group/data/categories.vue
+++ b/frontend/pages/group/data/categories.vue
@@ -73,6 +73,7 @@ import { useCategoryStore, useCategoryData } from "~/composables/store";
import { RecipeCategory } from "~/lib/api/types/admin";
export default defineComponent({
+ middleware: ["auth", "can-organize-only"],
setup() {
const { i18n } = useContext();
const tableConfig = {
diff --git a/frontend/pages/group/data/foods.vue b/frontend/pages/group/data/foods.vue
index 32eda4322b7d..aca6f2074fb5 100644
--- a/frontend/pages/group/data/foods.vue
+++ b/frontend/pages/group/data/foods.vue
@@ -201,8 +201,8 @@ import { useFoodStore, useLabelStore } from "~/composables/store";
import { VForm } from "~/types/vuetify";
export default defineComponent({
-
components: { MultiPurposeLabel, RecipeDataAliasManagerDialog },
+ middleware: ["auth", "can-organize-only"],
setup() {
const userApi = useUserApi();
const { i18n } = useContext();
diff --git a/frontend/pages/group/data/labels.vue b/frontend/pages/group/data/labels.vue
index 604135b05873..7d1e45ea85d0 100644
--- a/frontend/pages/group/data/labels.vue
+++ b/frontend/pages/group/data/labels.vue
@@ -122,6 +122,7 @@ import { useLabelData, useLabelStore } from "~/composables/store";
export default defineComponent({
components: { MultiPurposeLabel },
+ middleware: ["auth", "can-organize-only"],
setup() {
const userApi = useUserApi();
const { i18n } = useContext();
diff --git a/frontend/pages/group/data/recipes.vue b/frontend/pages/group/data/recipes.vue
index 0803f285badc..2cd55aad4ea9 100644
--- a/frontend/pages/group/data/recipes.vue
+++ b/frontend/pages/group/data/recipes.vue
@@ -176,6 +176,7 @@ enum MODES {
export default defineComponent({
components: { RecipeDataTable, RecipeOrganizerSelector, GroupExportData, RecipeSettingsSwitches },
+ middleware: ["auth", "can-organize-only"],
scrollToTop: true,
setup() {
const { getAllRecipes, refreshRecipes } = useRecipes(true, true);
diff --git a/frontend/pages/group/data/tags.vue b/frontend/pages/group/data/tags.vue
index 076a23f08b4d..b2440b4e5c0c 100644
--- a/frontend/pages/group/data/tags.vue
+++ b/frontend/pages/group/data/tags.vue
@@ -73,6 +73,7 @@ import { useTagStore, useTagData } from "~/composables/store";
import { RecipeTag } from "~/lib/api/types/admin";
export default defineComponent({
+ middleware: ["auth", "can-organize-only"],
setup() {
const { i18n } = useContext();
const tableConfig = {
diff --git a/frontend/pages/group/data/tools.vue b/frontend/pages/group/data/tools.vue
index 4ff3c547819b..49825faf2da1 100644
--- a/frontend/pages/group/data/tools.vue
+++ b/frontend/pages/group/data/tools.vue
@@ -80,6 +80,7 @@ import { useToolStore, useToolData } from "~/composables/store";
import { RecipeTool } from "~/lib/api/types/admin";
export default defineComponent({
+ middleware: ["auth", "can-organize-only"],
setup() {
const { i18n } = useContext();
const tableConfig = {
diff --git a/frontend/pages/group/data/units.vue b/frontend/pages/group/data/units.vue
index 9ce5fa991110..f1d42ba464f1 100644
--- a/frontend/pages/group/data/units.vue
+++ b/frontend/pages/group/data/units.vue
@@ -218,6 +218,7 @@ import { VForm } from "~/types/vuetify";
export default defineComponent({
components: { RecipeDataAliasManagerDialog },
+ middleware: ["auth", "can-organize-only"],
setup() {
const userApi = useUserApi();
const { i18n } = useContext();
diff --git a/frontend/pages/user/profile/index.vue b/frontend/pages/user/profile/index.vue
index ddb011550d1a..54a1e1b48708 100644
--- a/frontend/pages/user/profile/index.vue
+++ b/frontend/pages/user/profile/index.vue
@@ -162,17 +162,16 @@
-
-
-
- {{ $t('profile.manage-data') }}
- {{ $t('profile.manage-data-description') }}
-
-
-
+
+
+
+ {{ $t('profile.manage-data') }}
+ {{ $t('profile.manage-data-description') }}
+
+
Date: Wed, 31 Jan 2024 11:56:15 +0000
Subject: [PATCH 02/47] add avanced-only
---
frontend/middleware/advanced-only.ts | 11 +++++++++++
frontend/middleware/can-organize-only.ts | 1 -
2 files changed, 11 insertions(+), 1 deletion(-)
create mode 100644 frontend/middleware/advanced-only.ts
diff --git a/frontend/middleware/advanced-only.ts b/frontend/middleware/advanced-only.ts
new file mode 100644
index 000000000000..e9d69a2fd852
--- /dev/null
+++ b/frontend/middleware/advanced-only.ts
@@ -0,0 +1,11 @@
+interface AdvancedOnlyRedirectParams {
+ $auth: any
+ redirect: (path: string) => void
+}
+export default function ({ $auth, redirect }: AdvancedOnlyRedirectParams) {
+ // If the user is not allowed to organize redirect to the home page
+ if (!$auth.user.advanced) {
+ console.warn("User is not allowed to access advanced features");
+ return redirect("/")
+ }
+}
diff --git a/frontend/middleware/can-organize-only.ts b/frontend/middleware/can-organize-only.ts
index 9bb6b6603d75..93d6c5c5aabf 100644
--- a/frontend/middleware/can-organize-only.ts
+++ b/frontend/middleware/can-organize-only.ts
@@ -3,7 +3,6 @@ interface CanOrganizeRedirectParams {
redirect: (path: string) => void
}
export default function ({ $auth, redirect }: CanOrganizeRedirectParams) {
- console.log($auth.user);
// If the user is not allowed to organize redirect to the home page
if (!$auth.user.canOrganize) {
console.warn("User is not allowed to organize data");
From 7dafa6c7fe2e0d446de4de77b7924b74352ee817 Mon Sep 17 00:00:00 2001
From: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
Date: Wed, 31 Jan 2024 15:25:21 +0000
Subject: [PATCH 03/47] add access controll to user pages
---
frontend/pages/user/_id/favorites.vue | 1 +
frontend/pages/user/profile/api-tokens.vue | 1 +
frontend/pages/user/profile/edit.vue | 1 +
frontend/pages/user/profile/index.vue | 2 +-
4 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/frontend/pages/user/_id/favorites.vue b/frontend/pages/user/_id/favorites.vue
index ec4e5c8fd984..603428d428e7 100644
--- a/frontend/pages/user/_id/favorites.vue
+++ b/frontend/pages/user/_id/favorites.vue
@@ -14,6 +14,7 @@ import { useAsyncKey } from "~/composables/use-utils";
export default defineComponent({
components: { RecipeCardSection },
+ middleware: "auth",
setup() {
const api = useUserApi();
const route = useRoute();
diff --git a/frontend/pages/user/profile/api-tokens.vue b/frontend/pages/user/profile/api-tokens.vue
index 8e41c6216986..8b6d21b361b9 100644
--- a/frontend/pages/user/profile/api-tokens.vue
+++ b/frontend/pages/user/profile/api-tokens.vue
@@ -69,6 +69,7 @@ import { useUserApi } from "~/composables/api";
import { VForm } from "~/types/vuetify";
export default defineComponent({
+ middleware: ["auth", "advanced-only"],
setup() {
const nuxtContext = useContext();
diff --git a/frontend/pages/user/profile/edit.vue b/frontend/pages/user/profile/edit.vue
index 3eadc87ed1c9..2681e9c5df68 100644
--- a/frontend/pages/user/profile/edit.vue
+++ b/frontend/pages/user/profile/edit.vue
@@ -135,6 +135,7 @@ export default defineComponent({
UserAvatar,
UserPasswordStrength,
},
+ middleware: "auth",
setup() {
const { $auth } = useContext();
const user = computed(() => $auth.user as unknown as UserOut);
diff --git a/frontend/pages/user/profile/index.vue b/frontend/pages/user/profile/index.vue
index 54a1e1b48708..37041726747e 100644
--- a/frontend/pages/user/profile/index.vue
+++ b/frontend/pages/user/profile/index.vue
@@ -207,7 +207,7 @@ export default defineComponent({
UserAvatar,
StatsCards,
},
- middleware: ["auth"],
+ middleware: "auth",
scrollToTop: true,
setup() {
const { $auth, i18n } = useContext();
From 890b5d93a70b3072f0f26e177f06346b4816f0d6 Mon Sep 17 00:00:00 2001
From: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
Date: Thu, 1 Feb 2024 07:50:09 +0000
Subject: [PATCH 04/47] access controll coobook index page
---
frontend/pages/g/_groupSlug/cookbooks/index.vue | 13 +++----------
1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/frontend/pages/g/_groupSlug/cookbooks/index.vue b/frontend/pages/g/_groupSlug/cookbooks/index.vue
index db99713c3bcb..35ad12fa8111 100644
--- a/frontend/pages/g/_groupSlug/cookbooks/index.vue
+++ b/frontend/pages/g/_groupSlug/cookbooks/index.vue
@@ -90,24 +90,17 @@
diff --git a/frontend/pages/shopping-lists/_id.vue b/frontend/pages/shopping-lists/_id.vue
index 9dabc3ae1e42..c5bdd2cc8249 100644
--- a/frontend/pages/shopping-lists/_id.vue
+++ b/frontend/pages/shopping-lists/_id.vue
@@ -665,6 +665,11 @@ export default defineComponent({
return;
}
+ if (!createListItemData.value.foodId && !createListItemData.value.note) {
+ // don't create an empty item
+ return;
+ }
+
loadingCounter.value += 1;
// make sure it's inserted into the end of the list, which may have been updated
@@ -676,7 +681,6 @@ export default defineComponent({
if (data) {
createListItemData.value = listItemFactory(createListItemData.value.isFood || false);
- createEditorOpen.value = false;
refresh();
}
}
From 2c1185e1d40e29664b154bc9b99b072954c35e0b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 19 Feb 2024 15:37:07 -0600
Subject: [PATCH 47/47] fix(deps): update dependency pydantic-settings to
v2.2.1 (#3197)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
poetry.lock | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/poetry.lock b/poetry.lock
index 33514ebe8e80..034d05ce6eb9 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1813,13 +1813,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
[[package]]
name = "pydantic-settings"
-version = "2.2.0"
+version = "2.2.1"
description = "Settings management using Pydantic"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pydantic_settings-2.2.0-py3-none-any.whl", hash = "sha256:5f7bcaf9ad4419559dc5ac155c0324a9aeb2547c60471ee7c7d026f467a6b515"},
- {file = "pydantic_settings-2.2.0.tar.gz", hash = "sha256:648d0a76673e69c51278979cba2e83cf16a23d57519bfd7e553d1c3f37db5560"},
+ {file = "pydantic_settings-2.2.1-py3-none-any.whl", hash = "sha256:0235391d26db4d2190cb9b31051c4b46882d28a51533f97440867f012d4da091"},
+ {file = "pydantic_settings-2.2.1.tar.gz", hash = "sha256:00b9f6a5e95553590434c0fa01ead0b216c3e10bc54ae02e37f359948643c5ed"},
]
[package.dependencies]
@@ -1827,7 +1827,7 @@ pydantic = ">=2.3.0"
python-dotenv = ">=0.21.0"
[package.extras]
-toml = ["tomlkit (>=0.12)"]
+toml = ["tomli (>=2.0.1)"]
yaml = ["pyyaml (>=6.0.1)"]
[[package]]