diff --git a/.env b/.env index 67619905a..5c262406c 100644 --- a/.env +++ b/.env @@ -9,9 +9,8 @@ DATABASE_USER=zaken DATABASE_PASSWORD=insecure DATABASE_HOST=database DATABASE_PORT=5432 -SENTRY_DSN=https://foo@foo.data.amsterdam.nl/0 -LOCAL_DEVELOPMENT_AUTHENTICATION=False -LOGGING_LEVEL=WARNING # To prevent flooding the logging in local development. Default is DEBUG. +LOCAL_DEVELOPMENT_AUTHENTICATION=True +LOGGING_LEVEL=WARNING # To prevent flooding the logging in local development. Default is DEBUG. WARNING SECRET_KEY_TOP_ZAKEN=SECRET_KEY_TOP_ZAKEN SECRET_KEY_TON_ZAKEN=SECRET_KEY_TON_ZAKEN BELASTING_API_URL=https://api-acc.belastingen.centric.eu/bel/inn/afne/vora/v1/vorderingenidentificatienummer/ diff --git a/app/Dockerfile b/app/Dockerfile index dc109dbbb..bfeb7fe2a 100644 --- a/app/Dockerfile +++ b/app/Dockerfile @@ -1,5 +1,4 @@ -FROM amsterdam/python:3.9-buster -LABEL maintainer="datapunt@amsterdam.nl" +FROM python:3.10-bullseye ENV REQUESTS_CA_BUNDLE /etc/ssl/certs/ca-certificates.crt @@ -10,11 +9,16 @@ RUN chmod 644 /usr/local/share/ca-certificates/adp_rootca.crt \ ENV PYTHONUNBUFFERED 1 -RUN apt-get update && apt-get install -y +# Update and install necessary packages including GDAL +RUN apt-get update && apt-get install -y \ + gdal-bin \ + libgdal-dev \ + graphviz \ + graphviz-dev \ + postgresql-client + RUN pip install --upgrade pip RUN pip install uwsgi - -RUN apt-get install graphviz graphviz-dev -y RUN pip install pygraphviz RUN echo "10.240.5.72 acc.api.data.amsterdam.nl" >> /etc/hosts || echo "Could not write to /etc/hosts" @@ -30,6 +34,8 @@ RUN chmod +x /app/wait-for.sh RUN chmod +x /app/celery.sh RUN chmod +x /app/deploy/docker-entrypoint.sh +# Set the GDAL_LIBRARY_PATH environment variable +ENV GDAL_LIBRARY_PATH /usr/lib/libgdal.so ENTRYPOINT ["/app/deploy/docker-entrypoint.sh"] CMD ["uwsgi", "--ini", "/app/deploy/config.ini"] diff --git a/app/apps/openzaak/helpers.py b/app/apps/openzaak/helpers.py index c49afe008..acac5265c 100644 --- a/app/apps/openzaak/helpers.py +++ b/app/apps/openzaak/helpers.py @@ -16,7 +16,7 @@ from apps.cases.models import CaseDocument from django.conf import settings from django.utils import timezone -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from zgw_consumers.api_models.base import factory from zgw_consumers.api_models.catalogi import ZaakType from zgw_consumers.api_models.documenten import Document diff --git a/app/apps/workflow/admin.py b/app/apps/workflow/admin.py index cb6f7b0b2..5d05c4aa1 100644 --- a/app/apps/workflow/admin.py +++ b/app/apps/workflow/admin.py @@ -1,8 +1,7 @@ -from django.conf.urls import url from django.contrib import admin, messages from django.http import HttpResponseRedirect from django.template.response import TemplateResponse -from django.urls import reverse +from django.urls import re_path, reverse from django.utils.html import format_html, mark_safe from .forms import ResetSubworkflowsForm, UpdateDataForWorkflowsForm @@ -145,12 +144,12 @@ def update_data(self, obj): def get_urls(self): urls = super().get_urls() custom_urls = [ - url( + re_path( r"^(?P.+)/reset-subworkflows/$", self.admin_site.admin_view(self.admin_process_reset_subworkflows), name="reset-subworkflows", ), - url( + re_path( r"^(?P.+)/update-data-for-subworkflow/$", self.admin_site.admin_view(self.admin_update_data_for_workflow), name="update-data-for-subworkflow", diff --git a/app/config/settings.py b/app/config/settings.py index 2461afffa..53c6c959c 100644 --- a/app/config/settings.py +++ b/app/config/settings.py @@ -33,7 +33,7 @@ ZAKEN_CONTAINER_HOST = os.getenv("ZAKEN_CONTAINER_HOST") -ALLOWED_HOSTS = "*" +ALLOWED_HOSTS = ["*"] CORS_ORIGIN_WHITELIST = os.environ.get("CORS_ORIGIN_WHITELIST").split(",") CORS_ORIGIN_ALLOW_ALL = False @@ -339,11 +339,7 @@ def filter_traces(envelope): ) AXES_RESET_ON_SUCCESS = True -AXES_ONLY_USER_FAILURES = ( - True # Enabled because IP from user is always .amsterdam.nl gateway -) AXES_ENABLED = os.getenv("AXES_ENABLED", "True") == "True" -AXES_META_PRECEDENCE_ORDER = ["HTTP_X_FORWARDED_FOR", "REMOTE_ADDR"] # Simple JWT is used for local development authentication only. SIMPLE_JWT = { diff --git a/app/config/urls.py b/app/config/urls.py index f45e6ba07..ca98ebe38 100644 --- a/app/config/urls.py +++ b/app/config/urls.py @@ -36,11 +36,10 @@ from apps.visits.views import VisitViewSet from apps.workflow.views import CaseUserTaskViewSet, GenericCompletedTaskViewSet from django.conf import settings -from django.conf.urls import include, url from django.conf.urls.static import static from django.contrib import admin from django.http import JsonResponse -from django.urls import path +from django.urls import include, path, re_path from django.views.generic import View from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView from rest_framework.routers import DefaultRouter @@ -124,9 +123,9 @@ def get(self, request, *args, **kwargs): name="notification-callback", ), path("data-model/", include("django_spaghetti.urls")), - url("health/", include("health_check.urls")), - url("startup/", is_healthy), - url(regex=r"^$", view=MyView.as_view(), name="index"), + path("health/", include("health_check.urls")), + path("startup/", is_healthy), + re_path(r"^$", view=MyView.as_view(), name="index"), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) if settings.DEBUG: diff --git a/app/requirements.txt b/app/requirements.txt index 592e679a1..df6946da6 100644 --- a/app/requirements.txt +++ b/app/requirements.txt @@ -1,41 +1,41 @@ amqp<6.0.0 -asgiref==3.4.1 +asgiref==3.8.1 attrs==21.2.0 azure-identity beautifulsoup4==4.10.0 -billiard==3.6.4.0 +billiard==4.2.0 cached-property==1.5.2 -celery==5.2.6 +celery==5.4.0 certifi==2023.5.7 cffi==1.14.6 chardet==4.0.0 click==8.1.2 -click-didyoumean==0.0.3 +click-didyoumean==0.3.1 click-plugins==1.1.1 click-repl==0.2.0 cryptography==41.0.1 -datapunt-keycloak-oidc @ git+https://github.com/petercuret/keycloak_oidc.git@master +datapunt-keycloak-oidc @ git+https://github.com/remyvdwereld/keycloak_oidc_top.git@main debugpy==1.4.1 -Django==3.2.13 -django-axes==5.32.0 -django-celery-beat==2.2.1 -django-celery-results==2.2.0 -django-choices==1.7.2 -django-cors-headers==3.8.0 -django-csp==3.7 -django-extensions==3.1.3 -django-filter==2.4.0 -django-health-check==3.16.4 -django-ipware==4.0.2 -django-permissions-policy==4.1.0 -django-redis==5.0.0 -django-relativedelta==1.1.2 -django-solo==1.1.5 +Django==4.2.13 +django-axes==6.5.0 +django-celery-beat==2.6.0 +django-celery-results==2.5.1 +django-choices==2.0.0 +django-cors-headers==4.4.0 +django-csp==3.8 +django-extensions==3.2.3 +django-filter==24.2 +django-health-check==3.18.3 +django-ipware==7.0.1 +django-permissions-policy==4.20.0 +django-redis==5.4.0 +django-relativedelta==2.0.0 +django-solo==2.2.0 django-spaghetti-and-meatballs==0.4.2 -django-timezone-field==4.2.1 -djangorestframework==3.12.4 -djangorestframework-simplejwt==4.8.0 -drf-spectacular==0.17.2 +django-timezone-field==6.1.0 +djangorestframework==3.15.2 +djangorestframework-simplejwt==5.3.1 +drf-spectacular==0.27.2 drf-writable-nested==0.6.3 spiffworkflow==1.1.0 Faker==8.13.2 @@ -49,8 +49,8 @@ inflection==0.5.1 josepy==1.13.0 jsonschema==4.4.0 kombu<6.0 -model-bakery==1.3.2 -mozilla-django-oidc==1.2.4 +model-bakery==1.18.1 +mozilla-django-oidc==4.0.1 packaging prompt-toolkit==3.0.19 psycopg2==2.9.1 @@ -65,17 +65,16 @@ pytz==2022.1 redis==3.5.3 requests==2.26.0 requests-mock==1.9.3 -sentry-sdk==1.19.1 six==1.16.0 soupsieve==2.2.1 sqlparse==0.4.2 tenacity==8.0.1 text-unidecode==1.3 -typing-extensions==3.10.0.2 +typing-extensions==4.12.2 uritemplate==3.0.1 urllib3==1.26.15 -uWSGI==2.0.19.1 -vine==5.0.0 +uWSGI==2.0.26 +vine==5.1.0 wcwidth==0.2.5 zgw-consumers==0.18.0 zipp==3.5.0 diff --git a/docker-compose.local.yml b/docker-compose.local.yml index 15d8a1aab..d6a61e66e 100644 --- a/docker-compose.local.yml +++ b/docker-compose.local.yml @@ -14,7 +14,7 @@ services: - zaak-redis env_file: - .env - command: bash -c "/app/wait-for.sh zaak-redis:6379 && /app/wait-for.sh database:5432 && /app/deploy/docker-entrypoint.development.sh" + command: bash -c '/app/deploy/docker-entrypoint.development.sh' volumes: - ./app:/app stdin_open: true @@ -46,7 +46,7 @@ services: image: ${REGISTRY:-127.0.0.1:5001}/${REPOSITORY:-salmagundi/zaken-backend}:${VERSION:-latest} container_name: zaken_celery_worker hostname: zaken_celery_worker - command: bash -c "/app/wait-for.sh zaak-redis:6379 && /app/wait-for.sh zaak-gateway:8000 -- /app/celery.sh" + command: bash -c '/app/celery.sh' depends_on: - zaak-gateway - database @@ -61,7 +61,7 @@ services: image: ${REGISTRY:-127.0.0.1:5001}/${REPOSITORY:-salmagundi/zaken-backend}:${VERSION:-latest} container_name: zaken_celery_beat hostname: zaken_celery_beat - command: sh -c "/app/wait-for.sh zaak-redis:6379 && /app/wait-for.sh zaak-gateway:8000 -- celery -A config beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler" + command: sh -c 'celery -A config beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler' depends_on: - zaak-gateway - database diff --git a/open-zaak/open-notificaties/.env b/open-zaak/open-notificaties/.env index 82b7c5143..853446a56 100644 --- a/open-zaak/open-notificaties/.env +++ b/open-zaak/open-notificaties/.env @@ -1,6 +1,6 @@ SECRET_KEY=${SECRET_KEY:-7(h1r2hk)8z9+05edulo_3qzymwbo&c24=)qz7+_@3&2sp=u%i} IS_HTTPS=no -ALLOWED_HOSTS=* +ALLOWED_HOSTS=["*"] # SUBPATH=${SUBPATH:-/localhost} DEBUG=yes DJANGO_SETTINGS_MODULE=nrc.conf.docker