diff --git a/.env.template b/.env.template index 36c2357d..635e079c 100644 --- a/.env.template +++ b/.env.template @@ -7,7 +7,9 @@ SQL_DEBUG=0 ALLOWED_HOSTS=* # random secret key, use for example `base64 /dev/urandom | head -c50` to generate one +# ---------------------------- REQUIRED ------------------------- SECRET_KEY= +# --------------------------------------------------------------- # your default timezone See https://timezonedb.com/time-zones for a list of timezones TIMEZONE=Europe/Berlin @@ -18,7 +20,9 @@ DB_ENGINE=django.db.backends.postgresql POSTGRES_HOST=db_recipes POSTGRES_PORT=5432 POSTGRES_USER=djangouser +# ---------------------------- REQUIRED ------------------------- POSTGRES_PASSWORD= +# --------------------------------------------------------------- POSTGRES_DB=djangodb # database connection string, when used overrides other database settings. diff --git a/cookbook/admin.py b/cookbook/admin.py index 8d521c41..73e86ecf 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -259,7 +259,7 @@ admin.site.register(ViewLog, ViewLogAdmin) class InviteLinkAdmin(admin.ModelAdmin): list_display = ( - 'group', 'valid_until', + 'group', 'valid_until', 'space', 'created_by', 'created_at', 'used_by' ) diff --git a/cookbook/apps.py b/cookbook/apps.py index 5654684d..e551319d 100644 --- a/cookbook/apps.py +++ b/cookbook/apps.py @@ -14,24 +14,24 @@ class CookbookConfig(AppConfig): def ready(self): import cookbook.signals # noqa - if not settings.DISABLE_TREE_FIX_STARTUP: - # when starting up run fix_tree to: - # a) make sure that nodes are sorted when switching between sort modes - # b) fix problems, if any, with tree consistency - with scopes_disabled(): - try: - from cookbook.models import Food, Keyword - Keyword.fix_tree(fix_paths=True) - Food.fix_tree(fix_paths=True) - except OperationalError: - if DEBUG: - traceback.print_exc() - pass # if model does not exist there is no need to fix it - except ProgrammingError: - if DEBUG: - traceback.print_exc() - pass # if migration has not been run database cannot be fixed yet - except Exception: - if DEBUG: - traceback.print_exc() - pass # dont break startup just because fix could not run, need to investigate cases when this happens + # if not settings.DISABLE_TREE_FIX_STARTUP: + # # when starting up run fix_tree to: + # # a) make sure that nodes are sorted when switching between sort modes + # # b) fix problems, if any, with tree consistency + # with scopes_disabled(): + # try: + # from cookbook.models import Food, Keyword + # Keyword.fix_tree(fix_paths=True) + # Food.fix_tree(fix_paths=True) + # except OperationalError: + # if DEBUG: + # traceback.print_exc() + # pass # if model does not exist there is no need to fix it + # except ProgrammingError: + # if DEBUG: + # traceback.print_exc() + # pass # if migration has not been run database cannot be fixed yet + # except Exception: + # if DEBUG: + # traceback.print_exc() + # pass # dont break startup just because fix could not run, need to investigate cases when this happens diff --git a/cookbook/views/new.py b/cookbook/views/new.py index 09949be2..382ba2ab 100644 --- a/cookbook/views/new.py +++ b/cookbook/views/new.py @@ -201,7 +201,10 @@ class InviteLinkCreate(GroupRequiredMixin, CreateView): def form_valid(self, form): obj = form.save(commit=False) obj.created_by = self.request.user - obj.space = self.request.space + + # verify given space is actually owned by the user creating the link + if obj.space.created_by != self.request.user: + obj.space = self.request.space obj.save() if obj.email: try: diff --git a/docs/install/docker.md b/docs/install/docker.md index a5975e07..60fe1f70 100644 --- a/docs/install/docker.md +++ b/docs/install/docker.md @@ -51,7 +51,7 @@ That said **beta** should usually be working if you like frequent updates and ne The main, and also recommended, installation option is to install this application using Docker Compose. 1. Choose your `docker-compose.yml` from the examples below. -2. Download the `.env` configuration file with `wget`, then **edit it accordingly**. +2. Download the `.env` configuration file with `wget`, then **edit it accordingly** (you NEED to set `SECRET_KEY` and `POSTGRES_PASSWORD`). ```shell wget https://raw.githubusercontent.com/vabene1111/recipes/develop/.env.template -O .env ``` @@ -136,23 +136,23 @@ In both cases, also make sure to mount `/media/` in your swag container to point Please refer to the [appropriate documentation](https://github.com/linuxserver/docker-swag#usage) for the container setup. #### Nginx Swag by LinuxServer + [This container](https://github.com/linuxserver/docker-swag) is an all in one solution created by LinuxServer.io -It also contains templates for popular apps, including Tandoor Recipes, so you don't have to manually configure nginx and discard the template provided in Tandoor repo. Tandoor config is called `recipes.subdomain.conf.sample` which you can adapt for your instance +It also contains templates for popular apps, including Tandoor Recipes, so you don't have to manually configure nginx and discard the template provided in Tandoor repo. Tandoor config is called `recipes.subdomain.conf.sample` which you can adapt for your instance If you're running Swag on the default port, you'll just need to change the container name to yours. -If your running Swag on a custom port, some headers must be changed. To do this, +If your running Swag on a custom port, some headers must be changed. To do this, -- Create a copy of `proxy.conf` -- Replace `proxy_set_header X-Forwarded-Host $host;` and `proxy_set_header Host $host;` to - - `proxy_set_header X-Forwarded-Host $http_host;` and `proxy_set_header Host $http_host;` -- Update `recipes.subdomain.conf` to use the new file -- Restart the linuxserver/swag container and Recipes will work +- Create a copy of `proxy.conf` +- Replace `proxy_set_header X-Forwarded-Host $host;` and `proxy_set_header Host $host;` to + - `proxy_set_header X-Forwarded-Host $http_host;` and `proxy_set_header Host $http_host;` +- Update `recipes.subdomain.conf` to use the new file +- Restart the linuxserver/swag container and Recipes will work More information [here](https://github.com/TandoorRecipes/recipes/issues/959#issuecomment-962648627). - In both cases, also make sure to mount `/media/` in your swag container to point to your Tandoor Recipes Media directory. Please refer to the [appropriate documentation](https://github.com/linuxserver/docker-swag#usage) for the container setup. diff --git a/vue/src/apps/RecipeEditView/RecipeEditView.vue b/vue/src/apps/RecipeEditView/RecipeEditView.vue index 3b98745e..f4810026 100644 --- a/vue/src/apps/RecipeEditView/RecipeEditView.vue +++ b/vue/src/apps/RecipeEditView/RecipeEditView.vue @@ -49,13 +49,13 @@
- +
- +
- +
@@ -343,7 +343,7 @@
- @@ -623,9 +623,10 @@ export default { this.sortIngredients(s) } - if (this.recipe.waiting_time === ''){ this.recipe.waiting_time = 0} - if (this.recipe.working_time === ''){ this.recipe.working_time = 0} - if (this.recipe.servings === ''){ this.recipe.servings = 0} + if (this.recipe.waiting_time === '' || isNaN(this.recipe.waiting_time)){ this.recipe.waiting_time = 0} + if (this.recipe.working_time === ''|| isNaN(this.recipe.working_time)){ this.recipe.working_time = 0} + if (this.recipe.servings === ''|| isNaN(this.recipe.servings)){ this.recipe.servings = 0} + apiFactory.updateRecipe(this.recipe_id, this.recipe, {}).then((response) => { diff --git a/vue/src/components/StepComponent.vue b/vue/src/components/StepComponent.vue index e59f0a92..bb390fdc 100644 --- a/vue/src/components/StepComponent.vue +++ b/vue/src/components/StepComponent.vue @@ -11,11 +11,7 @@ {{ step.time }} {{ $t("min") }} - {{ - moment(start_time) - .add(step.time_offset, "minutes") - .format("HH:mm") - }} + {{ moment(start_time).add(step.time_offset, "minutes").format("HH:mm") }} @@ -57,11 +53,7 @@ {{ step.time }} {{ $t("min") }} - {{ - moment(start_time) - .add(step.time_offset, "minutes") - .format("HH:mm") - }} + {{ moment(start_time).add(step.time_offset, "minutes").format("HH:mm") }}
@@ -106,14 +98,14 @@ {{ step.step_recipe_data.name }}
- + >
@@ -128,7 +120,7 @@
- Cancel + Cancel Ok
@@ -172,16 +164,14 @@ export default { } }, mounted() { - this.set_time_input = moment(this.start_time) - .add(this.step.time_offset, "minutes") - .format("yyyy-MM-DDTHH:mm") + this.set_time_input = moment(this.start_time).add(this.step.time_offset, "minutes").format("yyyy-MM-DDTHH:mm") }, methods: { - calculateAmount: function(x) { + calculateAmount: function (x) { // used by the jinja2 template return calculateAmount(x, this.ingredient_factor) }, - updateTime: function() { + updateTime: function () { let new_start_time = moment(this.set_time_input) .add(this.step.time_offset * -1, "minutes") .format("yyyy-MM-DDTHH:mm") @@ -189,10 +179,10 @@ export default { this.$emit("update-start-time", new_start_time) this.closePopover() }, - closePopover: function() { + closePopover: function () { this.$refs[`id_reactive_popover_${this.step.id}`].$emit("close") }, - openPopover: function() { + openPopover: function () { this.$refs[`id_reactive_popover_${this.step.id}`].$emit("open") }, },