From c3a63f135e05dd0c522e5a06a24e63be94f044a5 Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Tue, 14 Oct 2025 11:06:40 +0200 Subject: [PATCH 1/9] :sparkles: [maykinmedia/open-api-framework#163] Integrate django-common --- requirements/base.in | 2 ++ requirements/base.txt | 15 ++++++++++++--- requirements/ci.txt | 5 +++++ requirements/dev.txt | 5 +++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/requirements/base.in b/requirements/base.in index 4f913c8d..4bf19852 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -11,6 +11,8 @@ notifications-api-common[setup-configuration] zgw-consumers[setup-configuration] mozilla-django-oidc-db[setup-configuration] commonground-api-common[oas] +maykin-common[axes,mfa] + # celery dependencies # TODO this should be moved to open-api-framework once it is verified that this fixes # maykinmedia/objects-api#541 diff --git a/requirements/base.txt b/requirements/base.txt index 16d02b29..0c911b79 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -104,17 +104,22 @@ django==5.2.7 # drf-spectacular # drf-spectacular-sidecar # maykin-2fa + # maykin-common # mozilla-django-oidc # mozilla-django-oidc-db # notifications-api-common # open-api-framework # zgw-consumers django-admin-index==3.1.0 - # via open-api-framework + # via + # maykin-common + # open-api-framework django-appconf==1.0.6 # via django-log-outgoing-requests django-axes==6.5.1 - # via open-api-framework + # via + # maykin-common + # open-api-framework django-cors-headers==4.4.0 # via open-api-framework django-csp==4.0 @@ -238,7 +243,11 @@ kombu==5.5.4 # -r requirements/base.in # celery maykin-2fa==1.0.1 - # via open-api-framework + # via + # maykin-common + # open-api-framework +maykin-common==0.11.0 + # via -r requirements/base.in mozilla-django-oidc==4.0.0 # via mozilla-django-oidc-db mozilla-django-oidc-db==0.22.0 diff --git a/requirements/ci.txt b/requirements/ci.txt index 1f40ab6b..b8d115c1 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -167,6 +167,7 @@ django==5.2.7 # drf-spectacular # drf-spectacular-sidecar # maykin-2fa + # maykin-common # mozilla-django-oidc # mozilla-django-oidc-db # notifications-api-common @@ -446,6 +447,10 @@ maykin-2fa==1.0.1 # -c requirements/base.txt # -r requirements/base.txt # open-api-framework +maykin-common==0.11.0 + # via + # -c requirements/base.txt + # -r requirements/base.txt mozilla-django-oidc==4.0.0 # via # -c requirements/base.txt diff --git a/requirements/dev.txt b/requirements/dev.txt index 12227b55..626bd56e 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -207,6 +207,7 @@ django==5.2.7 # drf-spectacular # drf-spectacular-sidecar # maykin-2fa + # maykin-common # mozilla-django-oidc # mozilla-django-oidc-db # notifications-api-common @@ -534,6 +535,10 @@ maykin-2fa==1.0.1 # -c requirements/ci.txt # -r requirements/ci.txt # open-api-framework +maykin-common==0.11.0 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt mdurl==0.1.2 # via markdown-it-py mozilla-django-oidc==4.0.0 From fae75adff6068aff6a186e14d7fa35554ccc3afb Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Wed, 10 Sep 2025 15:06:55 +0200 Subject: [PATCH 2/9] :fire: Remove obsolete files and commands - 500.html - checks.py - migration_operations.py - views.py -> server_error - admin_index.py -> should_display_dropdown_menu --- src/objects/templates/500.html | 210 ---------------------- src/objects/utils/admin_index.py | 12 -- src/objects/utils/apps.py | 1 - src/objects/utils/checks.py | 78 -------- src/objects/utils/migration_operations.py | 59 ------ src/objects/utils/views.py | 22 --- 6 files changed, 382 deletions(-) delete mode 100644 src/objects/templates/500.html delete mode 100644 src/objects/utils/admin_index.py delete mode 100644 src/objects/utils/checks.py delete mode 100644 src/objects/utils/migration_operations.py diff --git a/src/objects/templates/500.html b/src/objects/templates/500.html deleted file mode 100644 index 01c56825..00000000 --- a/src/objects/templates/500.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - Server Error - - - - - - - - - - - - - - - -
- -
- -
- -
-

Sorry, a server error has occurred (500)

-

We have been automatically notified about the problem and will investigate as soon as possible.

- {% if request.sentry.id %} -

If you need assistance, you may reference this error as - {{ request.sentry.id }}.

- {% endif %} -

- Back to home -

-
- -
- -
- -
- - - diff --git a/src/objects/utils/admin_index.py b/src/objects/utils/admin_index.py deleted file mode 100644 index bcb3b0fa..00000000 --- a/src/objects/utils/admin_index.py +++ /dev/null @@ -1,12 +0,0 @@ -from django_admin_index.conf import settings - - -def should_display_dropdown_menu(request): - # not showing for two_factor views - return ( - settings.SHOW_MENU - and request.user.is_authenticated - and request.user.is_staff - and request.user.is_verified() - and request.resolver_match.app_name != "admin:two_factor" - ) diff --git a/src/objects/utils/apps.py b/src/objects/utils/apps.py index 535ca346..db0c2933 100644 --- a/src/objects/utils/apps.py +++ b/src/objects/utils/apps.py @@ -23,7 +23,6 @@ class UtilsConfig(AppConfig): name = "objects.utils" def ready(self): - from . import checks # noqa from . import oas_extensions # noqa unregister_camelize_filter_extension() diff --git a/src/objects/utils/checks.py b/src/objects/utils/checks.py deleted file mode 100644 index 6b5f65fd..00000000 --- a/src/objects/utils/checks.py +++ /dev/null @@ -1,78 +0,0 @@ -import os - -from django.conf import settings -from django.core.checks import Error, Warning, register -from django.forms import ModelForm - - -def get_subclasses(cls): - for subclass in cls.__subclasses__(): - yield from get_subclasses(subclass) - yield subclass - - -@register() -def check_modelform_exclude(app_configs, **kwargs): - """ - Check that ModelForms use Meta.fields instead of Meta.exclude. - - ModelForm.Meta.exclude is dangerous because it doesn't protect against - fields that are added later. Explicit white-listing is safer and prevents - bugs such as IMA #645. - - This check piggy-backs on all form modules to be imported during Django - startup. It won't cover forms that are defined on the fly such as in - formset factories. - """ - errors = [] - - for form in get_subclasses(ModelForm): - # ok, fields is defined - if form._meta.fields or getattr(form.Meta, "fields", None): - continue - - # no `.fields` defined, so scream loud enough to prevent this - errors.append( - Error( - "ModelForm %s.%s with Meta.exclude detected, this is a bad practice" - % (form.__module__, form.__name__), - hint="Use ModelForm.Meta.fields instead", - obj=form, - id="utils.E001", - ) - ) - - return errors - - -@register -def check_missing_init_files(app_configs, **kwargs): - """ - Check that all packages have __init__.py files. - - If they don't, the code will still run, but tests aren't picked up by the - test runner, for example. - """ - errors = [] - - for dirpath, dirnames, filenames in os.walk(settings.DJANGO_PROJECT_DIR): - dirname = os.path.split(dirpath)[1] - if dirname == "__pycache__": - continue - - if "__init__.py" in filenames: - continue - - extensions = [os.path.splitext(fn)[1] for fn in filenames] - if ".py" not in extensions: - continue - - errors.append( - Warning( - "Directory %s does not contain an `__init__.py` file", - hint="Consider adding this module to make sure tests are picked up", - id="utils.W001", - ) - ) - - return errors diff --git a/src/objects/utils/migration_operations.py b/src/objects/utils/migration_operations.py deleted file mode 100644 index 595dcc3f..00000000 --- a/src/objects/utils/migration_operations.py +++ /dev/null @@ -1,59 +0,0 @@ -import os - -from django.conf import settings -from django.db import migrations, router - - -def _get_reset_sql() -> str: - INFILE = os.path.join(settings.BASE_DIR, "bin", "reset_sequences.sql") - - with open(INFILE) as infile: - SQL = infile.read() - - return SQL - - -class ResetSequences(migrations.RunSQL): - """ - Run the reset_sequences SQL. - - Resetting the Postgres sequences makes sure you don't get Integrity Errors - when creating objects because of failing unique constraints. This happens - when you create records explicitly with PKs, bypassing the database PK - generation. Resetting the sequences makes sure the sequences are aware of - the used PKs. - - .. note:: PostgreSQL only, or make sure to provide valid sql in - bin/reset_sequences - - Usage: - - >>> from objects.utils.migrations.operations import ResetSequences - >>> class Migration(migrations.Migration): - ... dependencies = (...) - ... operations = [ - ... ResetSequences(), - ... ] - """ - - reversible = True - - def __init__(self, *args, **kwargs): - super().__init__(None, *args, **kwargs) - - def database_forwards(self, app_label, schema_editor, from_state, to_state) -> None: - if router.allow_migrate( - schema_editor.connection.alias, app_label, **self.hints - ): - base_sql = _get_reset_sql() - - with schema_editor.connection.cursor() as cursor: - cursor.execute(base_sql) - rows = cursor.fetchall() - - sql = "\n".join(x[0] for x in rows) - - self._run_sql(schema_editor, sql) - - def database_backwards(self, *args, **kwargs) -> None: - pass diff --git a/src/objects/utils/views.py b/src/objects/utils/views.py index 8c3a4562..f49f180a 100644 --- a/src/objects/utils/views.py +++ b/src/objects/utils/views.py @@ -1,4 +1,3 @@ -from django import http from django.db.utils import DatabaseError from django.template import TemplateDoesNotExist, loader from django.utils.translation import gettext_lazy as _ @@ -17,27 +16,6 @@ DEFAULT_DETAIL = _("Invalid input.") -@requires_csrf_token -def server_error(request, template_name=ERROR_500_TEMPLATE_NAME): - """ - 500 error handler. - - Templates: :template:`500.html` - Context: None - """ - try: - template = loader.get_template(template_name) - except TemplateDoesNotExist: - if template_name != ERROR_500_TEMPLATE_NAME: - # Reraise if it's a missing custom template. - raise - return http.HttpResponseServerError( - "

Server Error (500)

", content_type="text/html" - ) - context = {"request": request} - return http.HttpResponseServerError(template.render(context)) - - def exception_handler(exc, context): """ Transform 5xx errors into DSO-compliant shape. From 69b73ba94b6fcf3cd40f04f33716027346ba38d9 Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Wed, 10 Sep 2025 15:08:59 +0200 Subject: [PATCH 3/9] :construction: Fix settings --- src/objects/conf/api.py | 1 + src/objects/conf/base.py | 3 ++- src/objects/urls.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/objects/conf/api.py b/src/objects/conf/api.py index 997cefa3..02301ce9 100644 --- a/src/objects/conf/api.py +++ b/src/objects/conf/api.py @@ -105,6 +105,7 @@ "COMPONENT_NO_READ_ONLY_REQUIRED": True, "POSTPROCESSING_HOOKS": [ "drf_spectacular.hooks.postprocess_schema_enums", + "maykin_common.drf_spectacular.hooks.remove_invalid_url_defaults", ], "TAGS": [{"name": "objects"}, {"name": "permissions"}], "SERVERS": [{"url": "/api/v2"}], diff --git a/src/objects/conf/base.py b/src/objects/conf/base.py index 766df05d..001d0d4a 100644 --- a/src/objects/conf/base.py +++ b/src/objects/conf/base.py @@ -26,6 +26,7 @@ # Application definition INSTALLED_APPS = INSTALLED_APPS + [ + "maykin_common", # Optional applications. "django.contrib.gis", # `django.contrib.sites` added at the project level because it has been removed at the packages level. @@ -87,7 +88,7 @@ # Django-Admin-Index ADMIN_INDEX_DISPLAY_DROP_DOWN_MENU_CONDITION_FUNCTION = ( - "objects.utils.admin_index.should_display_dropdown_menu" + "maykin_common.django_two_factor_auth.should_display_dropdown_menu" ) # diff --git a/src/objects/urls.py b/src/objects/urls.py index 20c80b78..0ef5edb7 100644 --- a/src/objects/urls.py +++ b/src/objects/urls.py @@ -14,7 +14,7 @@ from objects.accounts.views import QRGeneratorView -handler500 = "objects.utils.views.server_error" +handler500 = "maykin_common.views.server_error" admin.site.site_header = "objects admin" admin.site.site_title = "objects admin" admin.site.index_title = "Welcome to the objects admin" From 386df32246c3aa952ab6903d0cf661e5f8b13dad Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Tue, 7 Oct 2025 15:35:07 +0200 Subject: [PATCH 4/9] :construction: Fix templates and remove favicons --- requirements/base.in | 3 + requirements/base.txt | 2 + requirements/ci.txt | 4 + requirements/dev.txt | 4 + src/objects/conf/base.py | 1 + src/objects/static/ico/favicon.png | Bin 457 -> 0 bytes src/objects/templates/admin/base_site.html | 51 ++++++--- src/objects/templates/includes/footer.html | 34 ++++++ src/objects/templates/includes/header.html | 3 + src/objects/templates/index.html | 124 ++++++++++----------- src/objects/templates/master.html | 101 +++++------------ 11 files changed, 174 insertions(+), 153 deletions(-) delete mode 100644 src/objects/static/ico/favicon.png create mode 100644 src/objects/templates/includes/footer.html create mode 100644 src/objects/templates/includes/header.html diff --git a/requirements/base.in b/requirements/base.in index 4bf19852..734400cd 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -5,6 +5,9 @@ glom # data represenation based on spec jsonschema furl +# Django libraries +django-capture-tag + # Common ground libraries django-setup-configuration>=0.5.0 notifications-api-common[setup-configuration] diff --git a/requirements/base.txt b/requirements/base.txt index 0c911b79..2e46a654 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -120,6 +120,8 @@ django-axes==6.5.1 # via # maykin-common # open-api-framework +django-capture-tag==1.0 + # via -r requirements/base.in django-cors-headers==4.4.0 # via open-api-framework django-csp==4.0 diff --git a/requirements/ci.txt b/requirements/ci.txt index b8d115c1..d5400c9c 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -188,6 +188,10 @@ django-axes==6.5.1 # -c requirements/base.txt # -r requirements/base.txt # open-api-framework +django-capture-tag==1.0 + # via + # -c requirements/base.txt + # -r requirements/base.txt django-cors-headers==4.4.0 # via # -c requirements/base.txt diff --git a/requirements/dev.txt b/requirements/dev.txt index 626bd56e..4d0286fe 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -228,6 +228,10 @@ django-axes==6.5.1 # -c requirements/ci.txt # -r requirements/ci.txt # open-api-framework +django-capture-tag==1.0 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt django-cors-headers==4.4.0 # via # -c requirements/ci.txt diff --git a/src/objects/conf/base.py b/src/objects/conf/base.py index 001d0d4a..640e7db1 100644 --- a/src/objects/conf/base.py +++ b/src/objects/conf/base.py @@ -27,6 +27,7 @@ INSTALLED_APPS = INSTALLED_APPS + [ "maykin_common", + "capture_tag", # Optional applications. "django.contrib.gis", # `django.contrib.sites` added at the project level because it has been removed at the packages level. diff --git a/src/objects/static/ico/favicon.png b/src/objects/static/ico/favicon.png deleted file mode 100644 index 3c97c10a076abea686d96452b9e31e07d7ab3ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmV;)0XF`LP)uY1iMpP>+i6q}i{Az4|?!U8K>MHV(}W9aYaV#}&Vo zvlJlBKCmWWnGW0eCAA^MpgU8r@PT7J4>Qg#9!h0}*fig*XaHDzR8;X^lZ^3{QMs+s zWH=cBl`@{^xM~+!BYTGrd==n60VO|uVi?u0I;6Ytf_j`F4?JrKFa3sHbfQvN57N4g z2;K9BIRE`*nEPtrMOxO^ykwiVjd + - + + + + + {% endblock %} {% block branding %} -

{{ settings.PROJECT_NAME }} {% trans 'Administration' %}

- +

+ + {{ site_header|default:_('Administration') }} + +

+ {% show_environment_info %} {% if user.is_anonymous %} {% include "admin/color_theme_toggle.html" %} {% endif %} {% endblock %} -{% block welcome-msg %} - {% trans 'Logged in as' %} - {% firstof user.get_short_name user.get_username %}. -{% endblock %} - {% block userlinks %} {% if site_url %} - {{ settings.SITE_TITLE }} / + + {% if settings.SITE_TITLE %} + {{ settings.SITE_TITLE }} + {% else %} + {% trans 'View site' %} + {% endif %} + / {% endif %} {% url 'maykin_2fa:account_security' as 2fa_account_security_url %} {% if 2fa_account_security_url %} @@ -35,19 +47,28 @@

{{ settings.PROJECT_NAME }} {% if user.has_usable_password %} {% trans 'Change password' %} / {% endif %} +
{% csrf_token %} - +
{% include "admin/color_theme_toggle.html" %} + {% endblock %} -{% block nav-global %}{% endblock %} +{% block nav-global %} +{% endblock %} +{# Override footer block to display version information if you're a logged in staff user #} {% block footer %} - {{ block.super }} {# Load the custom JS #} + + {% endblock %} diff --git a/src/objects/templates/includes/footer.html b/src/objects/templates/includes/footer.html new file mode 100644 index 00000000..78868ea8 --- /dev/null +++ b/src/objects/templates/includes/footer.html @@ -0,0 +1,34 @@ +{% extends "maykin_common/api/includes/footer.html" %} +{% load static i18n capture_tags %} + +{% block footer %} + {% capture as issues_link silent %}issues{% endcapture %} + + {% with issues_link=issues_link client_link='Municipality of Utrecht' %} + {{ block.super }} + {% endwith %} + +{% endblock %} + +{% block links %} +
  • + + {% trans "Documentation" %} + +
  • +
  • + + {% trans "Community on CommonGround.nl" %} + +
  • +
  • + + {% trans "Docker image" %} + +
  • +
  • + + {% trans "Code on Github" %} + +
  • +{% endblock %} diff --git a/src/objects/templates/includes/header.html b/src/objects/templates/includes/header.html new file mode 100644 index 00000000..58dda1cd --- /dev/null +++ b/src/objects/templates/includes/header.html @@ -0,0 +1,3 @@ +
    + +
    diff --git a/src/objects/templates/index.html b/src/objects/templates/index.html index d8d44c44..519c2613 100644 --- a/src/objects/templates/index.html +++ b/src/objects/templates/index.html @@ -1,70 +1,60 @@ -{% extends "master.html" %} - -{% block content %} - -
    -

    {{ settings.PROJECT_NAME }} API

    -

    {{ settings.SITE_TITLE }}

    -
    - -
    - - -

    - Licensed under the - European Union Public License (EUPL) 1.2 -

    - - {% with schema_view=version|add:":schema-redoc" api_root_view=version|add:":api-root" %} -

    - Open API specification - API root - Notifications -

    +{% extends "maykin_common/api/index_base.html" %} +{% load i18n %} + + +{% block page_title %}{{ settings.PROJECT_NAME }} API{% endblock %} +{% block page_subtitle %}{{ settings.SITE_TITLE }}{% endblock page_subtitle %} + + +{% block content_nl %} +

    + De Objecten API heeft als doel om uiteenlopende objecten eenvoudig te kunnen + registreren en ontsluiten in een gestandaardiseerd formaat. De Objecten API kan + door elke organisatie ingezet worden om de voor haar interessante objecten te + beheren. Ook kan een organisatie er voor kiezen een Objecten API in te zetten + voor Open Data, waarbij de geregistreerde objecten publiekelijk toegankelijk + zijn. +

    +

    + Om het formaat van objecten, de zogenoemde objecttypen, vast te leggen wordt + gebruik gemaakt van de landelijke en/of een lokale + Objecttypen API. +

    +{% endblock content_nl %} + +{% block content_en %} +

    + The Objects API aims to easily store various objects and make them available in + standardized format. The Objects API can be used by any organization to manage + relevant objects. An organization can also choose to use the Objects API to + expose objects to the public, as Open Data. +

    +

    + To define the format of objects, so called object types, organizations can use + a national and/or local + Objecttypes API. +

    +{% endblock content_en %} + + +{% block license_link %}https://github.com/maykinmedia/objects-api/blob/master/LICENSE.md{% endblock %} + + +{% block api_links %} + {% url version|add:":schema-redoc" as api_docs_link %} + {% url version|add:":api-root" as api_schema_link %} + + {% with api_docs_link=api_docs_link api_schema_link=api_schema_link %} + {{ block.super }} {% endwith %} +{% endblock %} -

    - Administration -

    - -
    - +{% block extra_buttons %} + {% endblock %} + diff --git a/src/objects/templates/master.html b/src/objects/templates/master.html index 4b034e18..d448d774 100644 --- a/src/objects/templates/master.html +++ b/src/objects/templates/master.html @@ -1,72 +1,31 @@ -{% load static vng_api_common %} - - - - - - - - - - - {% block extra_style %}{% endblock %} - - {% block title %}{% if title %}{{ title }}{% else %}{{ settings.SITE_TITLE }}{% endif %} | {{ settings.PROJECT_NAME }}{% endblock %} - - - - {% if not settings.SITE_TITLE or not settings.PROJECT_NAME %} -
    - Please add the variables SITE_TITLE and PROJECT_NAME to your settings.py and make - sure they are available via context processors. -
    - {% endif %} - - {% block content %} - Override {% verbatim %}{% block content %}{% endverbatim %} - to get some actual content. - {% endblock %} - - - - - {% block extra_scripts %}{% endblock %} - +{% load static %} + + + + {% block title %}{% if title %}{{ title }}{% else %}{{ settings.SITE_TITLE }}{% endif %} | {{ settings.PROJECT_NAME }}{% endblock %} + + + + + + + + {% block extra_css %}{% endblock %} + + + + {% include "includes/header.html" %} + +
    + {% block content %} + Override {% verbatim %}{% block content %}{% endverbatim %} + to get some actual content. + {% endblock %} +
    + + {% include "includes/footer.html" %} + {% block scripts %} + + {% endblock scripts %} + From 188fb2f51030afe7c1e622482a26e83f9e09043b Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Wed, 10 Sep 2025 16:18:40 +0200 Subject: [PATCH 5/9] :art: Add fontawesome-free webfonts --- Dockerfile | 1 + package-lock.json | 9 +++++++++ package.json | 3 ++- src/objects/static/webfonts | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) create mode 120000 src/objects/static/webfonts diff --git a/Dockerfile b/Dockerfile index 948f1dd5..7e2cdef0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -70,6 +70,7 @@ RUN mkdir /app/log /app/config /app/tmp # copy frontend build statics COPY --from=frontend-build /app/src/objects/static /app/src/objects/static +COPY --from=frontend-build /app/node_modules/@fortawesome/fontawesome-free/webfonts /app/node_modules/@fortawesome/fontawesome-free/webfonts # copy source code COPY ./src /app/src diff --git a/package-lock.json b/package-lock.json index 97607176..4c50172f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "3.3.0", "license": "UNLICENSED", "dependencies": { + "@fortawesome/fontawesome-free": "^7.0.0", "microscope-sass": "latest", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -1605,6 +1606,14 @@ "node": ">=14.17.0" } }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-7.0.1.tgz", + "integrity": "sha512-RLmb9U6H2rJDnGxEqXxzy7ANPrQz7WK2/eTjdZqyU9uRU5W+FkAec9uU5gTYzFBH7aoXIw2WTJSCJR4KPlReQw==", + "engines": { + "node": ">=6" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", diff --git a/package.json b/package.json index cea69ba8..ce14fba5 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "homepage": "https://maykinmedia.nl", "dependencies": { "microscope-sass": "latest", + "@fortawesome/fontawesome-free": "^7.0.0", "react": "^17.0.2", "react-dom": "^17.0.2", "tough-cookie": "^4.1.4" @@ -58,4 +59,4 @@ "webpack-stream": "latest", "yargs": "latest" } -} \ No newline at end of file +} diff --git a/src/objects/static/webfonts b/src/objects/static/webfonts new file mode 120000 index 00000000..9accee5d --- /dev/null +++ b/src/objects/static/webfonts @@ -0,0 +1 @@ +../../../node_modules/@fortawesome/fontawesome-free/webfonts \ No newline at end of file From 2677deae813e0f8b1038dfdb204abfddc5382144 Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Tue, 7 Oct 2025 15:03:35 +0200 Subject: [PATCH 6/9] :construction: Fix css --- src/objects/scss/_app.scss | 21 ++++++------- src/objects/scss/_settings.scss | 41 ++++++++++++++----------- src/objects/scss/components/_index.scss | 13 ++++---- src/objects/scss/components/_view.scss | 21 +++++++++++++ src/objects/scss/screen.scss | 12 +++++--- src/objects/scss/vendor/_fa.scss | 2 ++ src/objects/scss/vendor/_index.scss | 1 + 7 files changed, 71 insertions(+), 40 deletions(-) create mode 100644 src/objects/scss/components/_view.scss create mode 100644 src/objects/scss/vendor/_fa.scss create mode 100644 src/objects/scss/vendor/_index.scss diff --git a/src/objects/scss/_app.scss b/src/objects/scss/_app.scss index 463712ab..259ad33a 100644 --- a/src/objects/scss/_app.scss +++ b/src/objects/scss/_app.scss @@ -3,31 +3,28 @@ h2, h3, h4, h5 { - margin-top: 0; - margin-bottom: 0; - line-height: 1.2; + line-height: 1.5; } h1 { - font-weight: 300; + font-weight: 300; } h2, h3, h4, h5 { - font-weight: 500; + font-weight: 500; } p { - margin-top: 0; - margin-bottom: 1rem; + margin-bottom: 1rem; } body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - "Helvetica Neue", Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - color: var(--color-text); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + color: var(--color-text); } diff --git a/src/objects/scss/_settings.scss b/src/objects/scss/_settings.scss index d2b2ffd5..85b1c377 100644 --- a/src/objects/scss/_settings.scss +++ b/src/objects/scss/_settings.scss @@ -23,23 +23,28 @@ $color-border: $color_secondary_dark; // css vars :root { - --color_primary: #{$color_primary}; - --color_primary_dark: #{$color_primary_dark}; - - --color_secondary: #{$color_secondary}; - --color_secondary_dark: #{$color_secondary_dark}; - --color_secondary_light: #{$color_secondary_light}; - - --color_alert: #{$color_alert}; - --color_alert_dark: #{$color_alert_dark}; - - --color-darkest: #{$color-darkest}; - --color_dark: #{$color_dark}; - --color_lightest: #{$color_lightest}; - --color_muted: #{$color_muted}; + // Link component + --link-color: #017092; + --link-color-hover: var(--link-color); + --link-color-muted: #6c757d; + + // footer component + --footer-border-color: #dee2e6; + + // tabs component + --tabs-border-color: #dee2e6; + --tabs-item-hover-border-color: #f3f3f3; + + // Button component + --button-color: #ffffff; + --button-background-color: #04a5bb; + --button-hover-background-color: #017092; + --button-alert-background-color: #dc3545; + --button-alert-hover-background-color: #bd2130; +} - --color_link: #{$color_link}; - --color_link_hover: #{$color_link_hover}; - --color-text: #{$color-text}; - --color-border: #{$color-border}; +.content { + &#{&}--align-right { + text-align: right; + } } diff --git a/src/objects/scss/components/_index.scss b/src/objects/scss/components/_index.scss index 1209ba8b..1248e170 100644 --- a/src/objects/scss/components/_index.scss +++ b/src/objects/scss/components/_index.scss @@ -1,7 +1,8 @@ // Use this file to include individual components. -@import "button.scss"; -@import "container.scss"; -@import "footer.scss"; -@import "link.scss"; -@import "nav.scss"; -@import "title.scss"; +@use "button"; +@use "container"; +@use "footer"; +@use "link"; +@use "nav"; +@use "title"; +@use "view"; \ No newline at end of file diff --git a/src/objects/scss/components/_view.scss b/src/objects/scss/components/_view.scss new file mode 100644 index 00000000..223cbe72 --- /dev/null +++ b/src/objects/scss/components/_view.scss @@ -0,0 +1,21 @@ +.view { + + &__body { + display: flex; + flex-direction: column; + row-gap: 3rem; + min-block-size: 100dvh; + margin: 0; + padding: 0; + } + + &__main { + flex-grow: 1; + inline-size: clamp(20rem, 100%, 960px); + margin-inline: auto; + + display: flex; + flex-direction: column; + row-gap: 2rem; + } +} \ No newline at end of file diff --git a/src/objects/scss/screen.scss b/src/objects/scss/screen.scss index 1af7dfed..bb2c64ef 100644 --- a/src/objects/scss/screen.scss +++ b/src/objects/scss/screen.scss @@ -1,4 +1,8 @@ -@import 'settings'; -@import 'app'; -@import 'components'; -@import 'views'; +// vendor +@use "vendor"; + +// own styles +@use 'settings'; +@use 'components'; +@use 'app'; +@use 'views'; \ No newline at end of file diff --git a/src/objects/scss/vendor/_fa.scss b/src/objects/scss/vendor/_fa.scss new file mode 100644 index 00000000..207a9bcb --- /dev/null +++ b/src/objects/scss/vendor/_fa.scss @@ -0,0 +1,2 @@ +@use "@fortawesome/fontawesome-free/scss/fontawesome"; +@use "@fortawesome/fontawesome-free/scss/solid"; diff --git a/src/objects/scss/vendor/_index.scss b/src/objects/scss/vendor/_index.scss new file mode 100644 index 00000000..1cd5a1b9 --- /dev/null +++ b/src/objects/scss/vendor/_index.scss @@ -0,0 +1 @@ +@use "fa"; From 6cd0aecc0351da90418011beaa8f1dbde89c2580 Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Thu, 11 Sep 2025 09:48:57 +0200 Subject: [PATCH 7/9] :hammer: Fix VCR test and regenerate files --- ...ate_email_unique_constraint_violated.yaml} | 62 ++++++------ .../OIDCFLowTests/test_happy_flow.yaml} | 62 ++++++------ .../test_happy_flow_existing_user.yaml} | 62 ++++++------ src/objects/accounts/tests/test_oidc.py | 11 +-- ...inTests.test_with_object_types_api_v1.yaml | 96 ------------------- ...inTests.test_with_object_types_api_v2.yaml | 96 ------------------- .../test_with_object_types_api_v2.yaml | 58 +++++++++++ src/objects/token/tests/test_admin.py | 40 +------- 8 files changed, 154 insertions(+), 333 deletions(-) rename src/objects/accounts/tests/{keycloak_cassets/happy_flow.yaml => files/vcr_cassettes/OIDCFLowTests/test_duplicate_email_unique_constraint_violated.yaml} (78%) rename src/objects/accounts/tests/{keycloak_cassets/duplicate_email.yaml => files/vcr_cassettes/OIDCFLowTests/test_happy_flow.yaml} (79%) rename src/objects/accounts/tests/{keycloak_cassets/happy_flow_existing_user.yaml => files/vcr_cassettes/OIDCFLowTests/test_happy_flow_existing_user.yaml} (79%) delete mode 100644 src/objects/token/tests/cassettes/PermissionAdminTests.test_with_object_types_api_v1.yaml delete mode 100644 src/objects/token/tests/cassettes/PermissionAdminTests.test_with_object_types_api_v2.yaml create mode 100644 src/objects/token/tests/files/vcr_cassettes/PermissionAdminTests/test_with_object_types_api_v2.yaml diff --git a/src/objects/accounts/tests/keycloak_cassets/happy_flow.yaml b/src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_duplicate_email_unique_constraint_violated.yaml similarity index 78% rename from src/objects/accounts/tests/keycloak_cassets/happy_flow.yaml rename to src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_duplicate_email_unique_constraint_violated.yaml index d748a607..d01040c0 100644 --- a/src/objects/accounts/tests/keycloak_cassets/happy_flow.yaml +++ b/src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_duplicate_email_unique_constraint_violated.yaml @@ -9,7 +9,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/auth?response_type=code&scope=openid&client_id=testid&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F&state=not-a-random-string&nonce=not-a-random-string response: @@ -18,16 +18,16 @@ interactions: \ \n \n\n \n Sign - in to test\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n
    \n \
    \n
    test
    \n
    \n
    \n @@ -35,7 +35,7 @@ interactions: \ Sign in to your account\n\n

    \n \n
    \n \
    \n\n\n
    \n \
    \n
    \n
    \n \n\n \n
    \n \
    \n
    \n
    \n \n\n\n\n\n\n + type=\"module\" src=\"/resources/4lpu3/login/keycloak/js/passwordVisibility.js\">\n\n\n\n\n\n \
    \n
    \n\n \n \n\n\n" headers: Cache-Control: @@ -75,9 +75,9 @@ interactions: Referrer-Policy: - no-referrer Set-Cookie: - - AUTH_SESSION_ID=deb831a3-3338-4d32-8d8a-3c9ef74c246f; Version=1; Path=/realms/test/; + - AUTH_SESSION_ID=f0823219-f3f6-4c24-a406-175f24d8024e; Version=1; Path=/realms/test/; SameSite=None; Secure; HttpOnly - - AUTH_SESSION_ID_LEGACY=deb831a3-3338-4d32-8d8a-3c9ef74c246f; Version=1; Path=/realms/test/; + - AUTH_SESSION_ID_LEGACY=f0823219-f3f6-4c24-a406-175f24d8024e; Version=1; Path=/realms/test/; HttpOnly - KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI; Version=1; Path=/realms/test/; HttpOnly @@ -110,11 +110,11 @@ interactions: Content-Type: - application/x-www-form-urlencoded Cookie: - - AUTH_SESSION_ID_LEGACY=deb831a3-3338-4d32-8d8a-3c9ef74c246f; KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI + - AUTH_SESSION_ID_LEGACY=f0823219-f3f6-4c24-a406-175f24d8024e; KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: POST - uri: http://localhost:8080/realms/test/login-actions/authenticate?session_code=pdtcFJfZrjAJKls5sSGX3K6lSlkRq0XiiVACVcmc3l0&execution=b29f5dd7-8ad1-412a-8026-f37f60fa4bc5&client_id=testid&tab_id=907AcvLHmCo + uri: http://localhost:8080/realms/test/login-actions/authenticate?session_code=nLIAtFEFpRhWspjtrknGcBMW3NXtdYwIN8l7B-NHsnw&execution=665c596b-1c9d-47c8-975a-c0de120b2622&client_id=testid&tab_id=m1mQPwrbWDw response: body: string: '' @@ -124,7 +124,7 @@ interactions: Content-Security-Policy: - frame-src 'self'; frame-ancestors 'self'; object-src 'none'; Location: - - http://testserver/oidc/callback/?state=not-a-random-string&session_state=deb831a3-3338-4d32-8d8a-3c9ef74c246f&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Ftest&code=ae60a86a-9dc0-48a1-b4e9-3562e3e2ea92.deb831a3-3338-4d32-8d8a-3c9ef74c246f.adf4ad83-4550-4619-9231-73bd8d700f45 + - http://testserver/oidc/callback/?state=not-a-random-string&session_state=f0823219-f3f6-4c24-a406-175f24d8024e&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Ftest&code=9c792f59-1600-4f65-bc73-7eaec693365e.f0823219-f3f6-4c24-a406-175f24d8024e.adf4ad83-4550-4619-9231-73bd8d700f45 Referrer-Policy: - no-referrer Set-Cookie: @@ -134,15 +134,15 @@ interactions: Path=/realms/test/; HttpOnly - KC_AUTH_STATE=; Version=1; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/realms/test/ - - KEYCLOAK_IDENTITY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyNTAzMjgsImlhdCI6MTcyMzIxNDMyOCwianRpIjoiN2Y1YWM5OTgtNzI0NC00YTRkLTk5M2ItODVhOWVhZmYyYmQwIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiJkZWI4MzFhMy0zMzM4LTRkMzItOGQ4YS0zYzllZjc0YzI0NmYiLCJzaWQiOiJkZWI4MzFhMy0zMzM4LTRkMzItOGQ4YS0zYzllZjc0YzI0NmYiLCJzdGF0ZV9jaGVja2VyIjoiUDl0NmlKbnp0QTBERmptWkR4LXBYd3drdEdfNkY1dlpqZDJPWmZNajlhNCJ9.N8DOiIpRb6feWa5yKohNqr09Z4cfe3H_xyK3jzwo5cQ; + - KEYCLOAK_IDENTITY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1NTA3MTQsImlhdCI6MTc1NzUxNDcxNCwianRpIjoiZDAxMzJhYWQtYThjNC00NWJmLWIyMTYtNjFmMGI4MDdjNWM1IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiJmMDgyMzIxOS1mM2Y2LTRjMjQtYTQwNi0xNzVmMjRkODAyNGUiLCJzaWQiOiJmMDgyMzIxOS1mM2Y2LTRjMjQtYTQwNi0xNzVmMjRkODAyNGUiLCJzdGF0ZV9jaGVja2VyIjoiWjJadU9hOVJPTEZiTUNCSlNEcU1CY2ZrQ0l1ZUFtc2c4N21QNENhNkloYyJ9.7IS-w4j3lId9lDuKQ6hz-dqQKxkTV9Xp8GJqlMtg4KM; Version=1; Path=/realms/test/; SameSite=None; Secure; HttpOnly - - KEYCLOAK_IDENTITY_LEGACY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyNTAzMjgsImlhdCI6MTcyMzIxNDMyOCwianRpIjoiN2Y1YWM5OTgtNzI0NC00YTRkLTk5M2ItODVhOWVhZmYyYmQwIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiJkZWI4MzFhMy0zMzM4LTRkMzItOGQ4YS0zYzllZjc0YzI0NmYiLCJzaWQiOiJkZWI4MzFhMy0zMzM4LTRkMzItOGQ4YS0zYzllZjc0YzI0NmYiLCJzdGF0ZV9jaGVja2VyIjoiUDl0NmlKbnp0QTBERmptWkR4LXBYd3drdEdfNkY1dlpqZDJPWmZNajlhNCJ9.N8DOiIpRb6feWa5yKohNqr09Z4cfe3H_xyK3jzwo5cQ; + - KEYCLOAK_IDENTITY_LEGACY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1NTA3MTQsImlhdCI6MTc1NzUxNDcxNCwianRpIjoiZDAxMzJhYWQtYThjNC00NWJmLWIyMTYtNjFmMGI4MDdjNWM1IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiJmMDgyMzIxOS1mM2Y2LTRjMjQtYTQwNi0xNzVmMjRkODAyNGUiLCJzaWQiOiJmMDgyMzIxOS1mM2Y2LTRjMjQtYTQwNi0xNzVmMjRkODAyNGUiLCJzdGF0ZV9jaGVja2VyIjoiWjJadU9hOVJPTEZiTUNCSlNEcU1CY2ZrQ0l1ZUFtc2c4N21QNENhNkloYyJ9.7IS-w4j3lId9lDuKQ6hz-dqQKxkTV9Xp8GJqlMtg4KM; Version=1; Path=/realms/test/; HttpOnly - - KEYCLOAK_SESSION=test/6db2db87-de31-4e30-9f25-cefe5da8b154/deb831a3-3338-4d32-8d8a-3c9ef74c246f; - Version=1; Expires=Sat, 10-Aug-2024 00:38:48 GMT; Max-Age=36000; Path=/realms/test/; + - KEYCLOAK_SESSION=test/6db2db87-de31-4e30-9f25-cefe5da8b154/f0823219-f3f6-4c24-a406-175f24d8024e; + Version=1; Expires=Thu, 11-Sep-2025 00:31:54 GMT; Max-Age=36000; Path=/realms/test/; SameSite=None; Secure - - KEYCLOAK_SESSION_LEGACY=test/6db2db87-de31-4e30-9f25-cefe5da8b154/deb831a3-3338-4d32-8d8a-3c9ef74c246f; - Version=1; Expires=Sat, 10-Aug-2024 00:38:48 GMT; Max-Age=36000; Path=/realms/test/ + - KEYCLOAK_SESSION_LEGACY=test/6db2db87-de31-4e30-9f25-cefe5da8b154/f0823219-f3f6-4c24-a406-175f24d8024e; + Version=1; Expires=Thu, 11-Sep-2025 00:31:54 GMT; Max-Age=36000; Path=/realms/test/ - KEYCLOAK_REMEMBER_ME=; Version=1; Comment=Expiring cookie; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/realms/test/; HttpOnly Strict-Transport-Security: @@ -161,7 +161,7 @@ interactions: code: 302 message: Found - request: - body: client_id=testid&client_secret=7DB3KUAAizYCcmZufpHRVOcD0TOkNO3I&grant_type=authorization_code&code=ae60a86a-9dc0-48a1-b4e9-3562e3e2ea92.deb831a3-3338-4d32-8d8a-3c9ef74c246f.adf4ad83-4550-4619-9231-73bd8d700f45&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F + body: client_id=testid&client_secret=7DB3KUAAizYCcmZufpHRVOcD0TOkNO3I&grant_type=authorization_code&code=9c792f59-1600-4f65-bc73-7eaec693365e.f0823219-f3f6-4c24-a406-175f24d8024e.adf4ad83-4550-4619-9231-73bd8d700f45&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F headers: Accept: - '*/*' @@ -174,12 +174,12 @@ interactions: Content-Type: - application/x-www-form-urlencoded User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: POST uri: http://localhost:8080/realms/test/protocol/openid-connect/token response: body: - string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjksImlhdCI6MTcyMzIxNDMyOSwiYXV0aF90aW1lIjoxNzIzMjE0MzI4LCJqdGkiOiJiYTI4MjY5MC1hZDQwLTQzYTQtYmNiZS1iZWRmMDNkYWFjZWYiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6ImRlYjgzMWEzLTMzMzgtNGQzMi04ZDhhLTNjOWVmNzRjMjQ2ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6ImRlYjgzMWEzLTMzMzgtNGQzMi04ZDhhLTNjOWVmNzRjMjQ2ZiIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.1GquRLpb9qkWW6VXI8R4wkG9hQvnbKnbCZaNWXpChRL6OSgO-qTtBXNG96VqN24_BDj9VkXBiRlc1M867aN2yJYdKtdlg0P7qS-CwgfNDnDTkTZwxGgYvumnP5iLb9aX_nq_1kuSB_Din2e6HR4KpSUslUa7IK4tjbyts4gz4KEOhgYn0pkv_MhdljumFIaRgcY8pKQTZ9uJH0S--Cu_P2z135f_9p45RkB-F7Zx8pmcHEyx2v3EKhnsI1y_N0S6OqLCDN9s2U65CgAM4BOpY0SZrZqwXy0J6jYuoM5c5HKlhEHpIltMxY_ShooQ-Tqgucbb5p-x_L9INldgQnE2Dw","expires_in":300,"refresh_expires_in":1799,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyMTYxMjgsImlhdCI6MTcyMzIxNDMyOSwianRpIjoiZmU3YmUzNjAtODdlMy00NmVkLWJmOTAtOTBmMzU5MDE1NDJhIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiJkZWI4MzFhMy0zMzM4LTRkMzItOGQ4YS0zYzllZjc0YzI0NmYiLCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIGt2ayBncm91cHMgYnNuIiwic2lkIjoiZGViODMxYTMtMzMzOC00ZDMyLThkOGEtM2M5ZWY3NGMyNDZmIn0.wGP_SexEm3EskBgKbYaigT7VTrx-tXRJfRc4wFQQev0","token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjksImlhdCI6MTcyMzIxNDMyOSwiYXV0aF90aW1lIjoxNzIzMjE0MzI4LCJqdGkiOiI2OTg5MDIzZS1iNDgwLTQ5NWUtOTc3ZC1hMDc1OGVhNTQ3OTQiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJ0ZXN0aWQiLCJzdWIiOiI2ZGIyZGI4Ny1kZTMxLTRlMzAtOWYyNS1jZWZlNWRhOGIxNTQiLCJ0eXAiOiJJRCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiJkZWI4MzFhMy0zMzM4LTRkMzItOGQ4YS0zYzllZjc0YzI0NmYiLCJhdF9oYXNoIjoibkZ2bWNRV21zSFJoYU9ncUdrMVRDUSIsImFjciI6IjEiLCJzaWQiOiJkZWI4MzFhMy0zMzM4LTRkMzItOGQ4YS0zYzllZjc0YzI0NmYiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZ3JvdXBzIjpbIlJlZ2lzdHJlZXJkZXJzIiwiZGVmYXVsdC1yb2xlcy10ZXN0Iiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AZXhhbXBsZS5jb20ifQ.adtoUqYLr3_chQbuarVP13TmUdm0qRupoS-0_mq3ldrNGJ7tZzuRiqzF1QIHNWdugsumU-xstxvjpitKfR2xUuvlOcr3RJlVnkwuihhx96ykU0xkn2WXbsO_Hwe8BrXLiATavcecgWsQqnh3-gG_Dt72qB4jNuvITx5256zyrsT5rmq2NW8_H6uEMwYu_eaIiWNRrHxWOoKKsVcaz3UXu0pG_pfMGVktL9KhzwVth2Or-r_4YeIlNFPqJGE4wzRSL5AgtFz-V7eEjSXU2O1gA4WQu0i0b5RcA2e5lAzx1Rfcn5RKwzJIs7BCa1Ae5UUc24PEQ682CfMIBgpGibKhqg","not-before-policy":0,"session_state":"deb831a3-3338-4d32-8d8a-3c9ef74c246f","scope":"openid + string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTQsImlhdCI6MTc1NzUxNDcxNCwiYXV0aF90aW1lIjoxNzU3NTE0NzE0LCJqdGkiOiI0ZjBiMzY0NS01MzIxLTRjN2ItOTlkOS0xM2M3ZDIzZGIwNWIiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6ImYwODIzMjE5LWYzZjYtNGMyNC1hNDA2LTE3NWYyNGQ4MDI0ZSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6ImYwODIzMjE5LWYzZjYtNGMyNC1hNDA2LTE3NWYyNGQ4MDI0ZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.MUjaBS-Byx00FrKZwARjNGHCES6UR8LvwyhPmmGaWX2lfZMHx-Tc-kIu6GDEz3nk4cM1kSl-1h4CFSCWwugQi33eVEWVB1KQRD2FeS5qEC6yEYBzI72_2LoG9UTUH6slJ5bmJ67YdePy4C0HypxfPtIHkqexNIKpG5LfliLrv89E2MLB2VIqweNouYGYh1w8sNnJoLR4GKSmsHrE7PjvBFAPYu31DoQT6aP_h5jlIznUgyOYVx37hXe13hqbI264BlxMHlI-UbceIa6mURwtONfhxw9VR1E6tmASb4nAZZZVAYRivs6dIEV3qP1DfkKRp8095JxQi8Oia2_W4QIV6A","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1MTY1MTQsImlhdCI6MTc1NzUxNDcxNCwianRpIjoiOGQyMWZiOGUtNjg5My00NWY0LTlhYzYtY2QzYjhjMDMxYzlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiJmMDgyMzIxOS1mM2Y2LTRjMjQtYTQwNi0xNzVmMjRkODAyNGUiLCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIGt2ayBncm91cHMgYnNuIiwic2lkIjoiZjA4MjMyMTktZjNmNi00YzI0LWE0MDYtMTc1ZjI0ZDgwMjRlIn0.BHTJOaasnnT-MQU-wUJ5u3rT26asHxC4H6Xe-CZufGI","token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTQsImlhdCI6MTc1NzUxNDcxNCwiYXV0aF90aW1lIjoxNzU3NTE0NzE0LCJqdGkiOiI2YTBkZTNjYS03ZjI3LTQ1OTQtYjg1MS1lOGU4Y2Y3ZjZlMDAiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJ0ZXN0aWQiLCJzdWIiOiI2ZGIyZGI4Ny1kZTMxLTRlMzAtOWYyNS1jZWZlNWRhOGIxNTQiLCJ0eXAiOiJJRCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiJmMDgyMzIxOS1mM2Y2LTRjMjQtYTQwNi0xNzVmMjRkODAyNGUiLCJhdF9oYXNoIjoid21seTkzb0JNU3NnaXNnQXpQVExxQSIsImFjciI6IjEiLCJzaWQiOiJmMDgyMzIxOS1mM2Y2LTRjMjQtYTQwNi0xNzVmMjRkODAyNGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZ3JvdXBzIjpbIlJlZ2lzdHJlZXJkZXJzIiwiZGVmYXVsdC1yb2xlcy10ZXN0Iiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AZXhhbXBsZS5jb20ifQ.jdzpNLDK03Pp8tbv5856nbEtZKAdLTGSt6isDNsZ1i-LwGO8aWwXG50v6tGIa26Vb6Y1n9ex8nOIzWFBJLE-77iuImGyiwU4ODDLcMniDexMmtSz6Qt6SulE-yGhn8Bhiqqhhic_68qgp09Uvx8j0rcA2EgnoMwO-LEcJpdzzZO-dtpvXrojreU1DCdTwc7H4wAhjomfbwF-C1zSZHTIyfYB7fZOrmu6ja3ceqeD7NVS4K5OsMIOkAJHpVqf5LRwi4Qo4MniK2qMTrAhFtnYVdNsALovGa9b5LsFPUWkgKCNGh88QnbMbyQn6ed2ZkZgvC6BATQbh84IILguqMz3Jg","not-before-policy":0,"session_state":"f0823219-f3f6-4c24-a406-175f24d8024e","scope":"openid email profile kvk groups bsn"}' headers: Cache-Control: @@ -213,7 +213,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/certs response: @@ -247,11 +247,11 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjksImlhdCI6MTcyMzIxNDMyOSwiYXV0aF90aW1lIjoxNzIzMjE0MzI4LCJqdGkiOiJiYTI4MjY5MC1hZDQwLTQzYTQtYmNiZS1iZWRmMDNkYWFjZWYiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6ImRlYjgzMWEzLTMzMzgtNGQzMi04ZDhhLTNjOWVmNzRjMjQ2ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6ImRlYjgzMWEzLTMzMzgtNGQzMi04ZDhhLTNjOWVmNzRjMjQ2ZiIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.1GquRLpb9qkWW6VXI8R4wkG9hQvnbKnbCZaNWXpChRL6OSgO-qTtBXNG96VqN24_BDj9VkXBiRlc1M867aN2yJYdKtdlg0P7qS-CwgfNDnDTkTZwxGgYvumnP5iLb9aX_nq_1kuSB_Din2e6HR4KpSUslUa7IK4tjbyts4gz4KEOhgYn0pkv_MhdljumFIaRgcY8pKQTZ9uJH0S--Cu_P2z135f_9p45RkB-F7Zx8pmcHEyx2v3EKhnsI1y_N0S6OqLCDN9s2U65CgAM4BOpY0SZrZqwXy0J6jYuoM5c5HKlhEHpIltMxY_ShooQ-Tqgucbb5p-x_L9INldgQnE2Dw + - Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTQsImlhdCI6MTc1NzUxNDcxNCwiYXV0aF90aW1lIjoxNzU3NTE0NzE0LCJqdGkiOiI0ZjBiMzY0NS01MzIxLTRjN2ItOTlkOS0xM2M3ZDIzZGIwNWIiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6ImYwODIzMjE5LWYzZjYtNGMyNC1hNDA2LTE3NWYyNGQ4MDI0ZSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6ImYwODIzMjE5LWYzZjYtNGMyNC1hNDA2LTE3NWYyNGQ4MDI0ZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.MUjaBS-Byx00FrKZwARjNGHCES6UR8LvwyhPmmGaWX2lfZMHx-Tc-kIu6GDEz3nk4cM1kSl-1h4CFSCWwugQi33eVEWVB1KQRD2FeS5qEC6yEYBzI72_2LoG9UTUH6slJ5bmJ67YdePy4C0HypxfPtIHkqexNIKpG5LfliLrv89E2MLB2VIqweNouYGYh1w8sNnJoLR4GKSmsHrE7PjvBFAPYu31DoQT6aP_h5jlIznUgyOYVx37hXe13hqbI264BlxMHlI-UbceIa6mURwtONfhxw9VR1E6tmASb4nAZZZVAYRivs6dIEV3qP1DfkKRp8095JxQi8Oia2_W4QIV6A Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/userinfo response: @@ -285,7 +285,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/certs response: diff --git a/src/objects/accounts/tests/keycloak_cassets/duplicate_email.yaml b/src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_happy_flow.yaml similarity index 79% rename from src/objects/accounts/tests/keycloak_cassets/duplicate_email.yaml rename to src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_happy_flow.yaml index a96dbc44..5a17e2f7 100644 --- a/src/objects/accounts/tests/keycloak_cassets/duplicate_email.yaml +++ b/src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_happy_flow.yaml @@ -9,7 +9,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/auth?response_type=code&scope=openid&client_id=testid&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F&state=not-a-random-string&nonce=not-a-random-string response: @@ -18,16 +18,16 @@ interactions: \ \n \n\n \n Sign - in to test\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n
    \n \
    \n
    test
    \n
    \n
    \n @@ -35,7 +35,7 @@ interactions: \ Sign in to your account\n\n\n \n
    \n \
    \n\n\n
    \n \
    \n
    \n
    \n \n\n \n
    \n \
    \n
    \n
    \n \n\n\n\n\n\n + type=\"module\" src=\"/resources/4lpu3/login/keycloak/js/passwordVisibility.js\">\n\n\n\n\n\n \
    \n
    \n\n
    \n
    \n\n\n" headers: Cache-Control: @@ -75,9 +75,9 @@ interactions: Referrer-Policy: - no-referrer Set-Cookie: - - AUTH_SESSION_ID=27b136e6-b724-4aa4-98ad-bd87c311ea49; Version=1; Path=/realms/test/; + - AUTH_SESSION_ID=befa4b65-599a-4d6f-853b-efb529e6b9d8; Version=1; Path=/realms/test/; SameSite=None; Secure; HttpOnly - - AUTH_SESSION_ID_LEGACY=27b136e6-b724-4aa4-98ad-bd87c311ea49; Version=1; Path=/realms/test/; + - AUTH_SESSION_ID_LEGACY=befa4b65-599a-4d6f-853b-efb529e6b9d8; Version=1; Path=/realms/test/; HttpOnly - KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI; Version=1; Path=/realms/test/; HttpOnly @@ -110,11 +110,11 @@ interactions: Content-Type: - application/x-www-form-urlencoded Cookie: - - AUTH_SESSION_ID_LEGACY=27b136e6-b724-4aa4-98ad-bd87c311ea49; KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI + - AUTH_SESSION_ID_LEGACY=befa4b65-599a-4d6f-853b-efb529e6b9d8; KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: POST - uri: http://localhost:8080/realms/test/login-actions/authenticate?session_code=EcKoQAvb9_URRFfxUE3VM0d5MovzoPEtv39_igRTN3c&execution=b29f5dd7-8ad1-412a-8026-f37f60fa4bc5&client_id=testid&tab_id=70a2_sn6uUo + uri: http://localhost:8080/realms/test/login-actions/authenticate?session_code=fdSGh0_mqVLikTGBAwAqUQqQktWEvsHX-x8dTvC1v9s&execution=665c596b-1c9d-47c8-975a-c0de120b2622&client_id=testid&tab_id=EmBUIcmqJvc response: body: string: '' @@ -124,7 +124,7 @@ interactions: Content-Security-Policy: - frame-src 'self'; frame-ancestors 'self'; object-src 'none'; Location: - - http://testserver/oidc/callback/?state=not-a-random-string&session_state=27b136e6-b724-4aa4-98ad-bd87c311ea49&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Ftest&code=822a2a28-23ee-459f-8cf4-f277c152ee74.27b136e6-b724-4aa4-98ad-bd87c311ea49.adf4ad83-4550-4619-9231-73bd8d700f45 + - http://testserver/oidc/callback/?state=not-a-random-string&session_state=befa4b65-599a-4d6f-853b-efb529e6b9d8&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Ftest&code=12cbf915-d4d9-42f1-9a78-6d9306bce18d.befa4b65-599a-4d6f-853b-efb529e6b9d8.adf4ad83-4550-4619-9231-73bd8d700f45 Referrer-Policy: - no-referrer Set-Cookie: @@ -134,15 +134,15 @@ interactions: Path=/realms/test/; HttpOnly - KC_AUTH_STATE=; Version=1; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/realms/test/ - - KEYCLOAK_IDENTITY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyNTAzMjgsImlhdCI6MTcyMzIxNDMyOCwianRpIjoiZTgwYWM1ZWMtOGU2Ny00NzI1LThmOGYtNzVmNzM0MGMyNWE1IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiIyN2IxMzZlNi1iNzI0LTRhYTQtOThhZC1iZDg3YzMxMWVhNDkiLCJzaWQiOiIyN2IxMzZlNi1iNzI0LTRhYTQtOThhZC1iZDg3YzMxMWVhNDkiLCJzdGF0ZV9jaGVja2VyIjoidmRiRXdoVzNWRFZNMTVIbVg4bnVxNjZ4eXpCWUZaNk9rcFlhZ2Z4VGo3dyJ9.X535OlODkas3T89AuYG4FPigeqd7wRtIwwPRX6SucY0; + - KEYCLOAK_IDENTITY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1NTA3MTUsImlhdCI6MTc1NzUxNDcxNSwianRpIjoiNzA2ZGEwNDUtN2ZmZC00MTVmLThjY2ItYzc5YTQyMmVlNDU2IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiJiZWZhNGI2NS01OTlhLTRkNmYtODUzYi1lZmI1MjllNmI5ZDgiLCJzaWQiOiJiZWZhNGI2NS01OTlhLTRkNmYtODUzYi1lZmI1MjllNmI5ZDgiLCJzdGF0ZV9jaGVja2VyIjoiT25hdzlqLWJwY0hlSHdQSk9XQmFzRl8wbGZkZzVUSDhBeVJaeXpQX2w5ZyJ9.AlCcP4LASoIIUBRTA_JApxtlTku8DEgwYwEURSAAbK0; Version=1; Path=/realms/test/; SameSite=None; Secure; HttpOnly - - KEYCLOAK_IDENTITY_LEGACY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyNTAzMjgsImlhdCI6MTcyMzIxNDMyOCwianRpIjoiZTgwYWM1ZWMtOGU2Ny00NzI1LThmOGYtNzVmNzM0MGMyNWE1IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiIyN2IxMzZlNi1iNzI0LTRhYTQtOThhZC1iZDg3YzMxMWVhNDkiLCJzaWQiOiIyN2IxMzZlNi1iNzI0LTRhYTQtOThhZC1iZDg3YzMxMWVhNDkiLCJzdGF0ZV9jaGVja2VyIjoidmRiRXdoVzNWRFZNMTVIbVg4bnVxNjZ4eXpCWUZaNk9rcFlhZ2Z4VGo3dyJ9.X535OlODkas3T89AuYG4FPigeqd7wRtIwwPRX6SucY0; + - KEYCLOAK_IDENTITY_LEGACY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1NTA3MTUsImlhdCI6MTc1NzUxNDcxNSwianRpIjoiNzA2ZGEwNDUtN2ZmZC00MTVmLThjY2ItYzc5YTQyMmVlNDU2IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiJiZWZhNGI2NS01OTlhLTRkNmYtODUzYi1lZmI1MjllNmI5ZDgiLCJzaWQiOiJiZWZhNGI2NS01OTlhLTRkNmYtODUzYi1lZmI1MjllNmI5ZDgiLCJzdGF0ZV9jaGVja2VyIjoiT25hdzlqLWJwY0hlSHdQSk9XQmFzRl8wbGZkZzVUSDhBeVJaeXpQX2w5ZyJ9.AlCcP4LASoIIUBRTA_JApxtlTku8DEgwYwEURSAAbK0; Version=1; Path=/realms/test/; HttpOnly - - KEYCLOAK_SESSION=test/6db2db87-de31-4e30-9f25-cefe5da8b154/27b136e6-b724-4aa4-98ad-bd87c311ea49; - Version=1; Expires=Sat, 10-Aug-2024 00:38:48 GMT; Max-Age=36000; Path=/realms/test/; + - KEYCLOAK_SESSION=test/6db2db87-de31-4e30-9f25-cefe5da8b154/befa4b65-599a-4d6f-853b-efb529e6b9d8; + Version=1; Expires=Thu, 11-Sep-2025 00:31:55 GMT; Max-Age=36000; Path=/realms/test/; SameSite=None; Secure - - KEYCLOAK_SESSION_LEGACY=test/6db2db87-de31-4e30-9f25-cefe5da8b154/27b136e6-b724-4aa4-98ad-bd87c311ea49; - Version=1; Expires=Sat, 10-Aug-2024 00:38:48 GMT; Max-Age=36000; Path=/realms/test/ + - KEYCLOAK_SESSION_LEGACY=test/6db2db87-de31-4e30-9f25-cefe5da8b154/befa4b65-599a-4d6f-853b-efb529e6b9d8; + Version=1; Expires=Thu, 11-Sep-2025 00:31:55 GMT; Max-Age=36000; Path=/realms/test/ - KEYCLOAK_REMEMBER_ME=; Version=1; Comment=Expiring cookie; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/realms/test/; HttpOnly Strict-Transport-Security: @@ -161,7 +161,7 @@ interactions: code: 302 message: Found - request: - body: client_id=testid&client_secret=7DB3KUAAizYCcmZufpHRVOcD0TOkNO3I&grant_type=authorization_code&code=822a2a28-23ee-459f-8cf4-f277c152ee74.27b136e6-b724-4aa4-98ad-bd87c311ea49.adf4ad83-4550-4619-9231-73bd8d700f45&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F + body: client_id=testid&client_secret=7DB3KUAAizYCcmZufpHRVOcD0TOkNO3I&grant_type=authorization_code&code=12cbf915-d4d9-42f1-9a78-6d9306bce18d.befa4b65-599a-4d6f-853b-efb529e6b9d8.adf4ad83-4550-4619-9231-73bd8d700f45&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F headers: Accept: - '*/*' @@ -174,12 +174,12 @@ interactions: Content-Type: - application/x-www-form-urlencoded User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: POST uri: http://localhost:8080/realms/test/protocol/openid-connect/token response: body: - string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjgsImlhdCI6MTcyMzIxNDMyOCwiYXV0aF90aW1lIjoxNzIzMjE0MzI4LCJqdGkiOiI0NDI5NWYzZS03YzM0LTQ0ZmUtOWEyMi05ZWIzNjgzMWI2NWQiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6IjI3YjEzNmU2LWI3MjQtNGFhNC05OGFkLWJkODdjMzExZWE0OSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6IjI3YjEzNmU2LWI3MjQtNGFhNC05OGFkLWJkODdjMzExZWE0OSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.FOJ2lKA6rW9CAdBnT31TkWJmtORtwDm7YJxLeYEPeOUM6zbQBJTH9ha-9WDFNOHFvLa3_iyM2OPsuO5jkUMPhxOK1bzYvbhoYfzSv2OV1MQ4xrXOX3G2rmctyTeVJSn_glDCU5T2Uin6wWQULlfL-p6tZEBV4t0O83yh975X9LE9olL_Pl4JKt0_axl_I1jivKWw4u9blN_jfjNZHUppUENSKr4bz4j5OziP7ivQ-TbK27381gh-lbwkYC-ONxY-xp6z-SxnrEKf5rhypCOaD3lJ471F4gjdKbYFMQOqKtBdH8gqoham8rNZgjQKOepKtEkSvbVhVwloT55VrAULnQ","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyMTYxMjgsImlhdCI6MTcyMzIxNDMyOCwianRpIjoiNzlhMWVlMGQtN2Y4Yy00OGUyLWFlNDMtN2JhMTRhZjIzZmFlIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiIyN2IxMzZlNi1iNzI0LTRhYTQtOThhZC1iZDg3YzMxMWVhNDkiLCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIGt2ayBncm91cHMgYnNuIiwic2lkIjoiMjdiMTM2ZTYtYjcyNC00YWE0LTk4YWQtYmQ4N2MzMTFlYTQ5In0.50p-PnvW0f7UvA7-f8dF4G7fx3HA1Xfwe6ce2Lmxin8","token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjgsImlhdCI6MTcyMzIxNDMyOCwiYXV0aF90aW1lIjoxNzIzMjE0MzI4LCJqdGkiOiJmNmE2YTVlYy01NDJlLTQ0ZTMtYmVkOS1hZWFkODk2M2MwZjUiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJ0ZXN0aWQiLCJzdWIiOiI2ZGIyZGI4Ny1kZTMxLTRlMzAtOWYyNS1jZWZlNWRhOGIxNTQiLCJ0eXAiOiJJRCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiIyN2IxMzZlNi1iNzI0LTRhYTQtOThhZC1iZDg3YzMxMWVhNDkiLCJhdF9oYXNoIjoiSnEzclh1UU9LUmktWkQwZWdsczhudyIsImFjciI6IjEiLCJzaWQiOiIyN2IxMzZlNi1iNzI0LTRhYTQtOThhZC1iZDg3YzMxMWVhNDkiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZ3JvdXBzIjpbIlJlZ2lzdHJlZXJkZXJzIiwiZGVmYXVsdC1yb2xlcy10ZXN0Iiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AZXhhbXBsZS5jb20ifQ.egzD-aTo5dQfsRRyH9GqT_BEP0teK3OLAdVpnZVCkpOXQ8qWquP35E_zB1EXRmRN26Cyrc6rfQKnrCsvGop03V7ctleMRTbCOvvbrtWZ910MCt4SCW9VmUg2dfdlLKhcGYa6E9b2j-srE5_T8PsKZ-7tA3ylXZq_gd9WNaoLs9h1tp0OVZj9E7xCeD936C68be0mTuVelqDydH3_V4MNpvj1TkPIpS4hN8u8cwFOMLbKt1SIE6zRUpxPfV7_2s843m9oOw5F_5VA2i2UxjRJzup2AmrikBtfhFiefJKBmofMfiRvCkii9e5qA9Y8FNMKGZ8A7d_4KEd-_qVOhPDzOA","not-before-policy":0,"session_state":"27b136e6-b724-4aa4-98ad-bd87c311ea49","scope":"openid + string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTUsImlhdCI6MTc1NzUxNDcxNSwiYXV0aF90aW1lIjoxNzU3NTE0NzE1LCJqdGkiOiI2MmVjZmFmZS03MDUyLTQxMTgtYWY0Mi1jZWRlN2IxOTBlY2QiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6ImJlZmE0YjY1LTU5OWEtNGQ2Zi04NTNiLWVmYjUyOWU2YjlkOCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6ImJlZmE0YjY1LTU5OWEtNGQ2Zi04NTNiLWVmYjUyOWU2YjlkOCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.EpNsoH_um6MvQQKVINfUPC0ZCl_xDvebgOUrCzDh5Mrir5xPIDnOcDDvk_tpGWbKzKj2n_jgYTX8IUpCpMjI2e15nv6oCMQXSoSyTEF1BgK8Xe3j2-UCZoCi6rjPr2XBz2TUkDueHLcFAc9Ox77stG5_63AIOCsxguw9cPQcncI4CEiBjnM5TrhvAbNu_tMIL-6YAIijWBkt9Nzkj0ozC7gT0271xXG5Ys8n9up61645VpPH_Goa0bskIoSqXdAdHhjDeM8bsCqGKwI8bUlAOwx-D119h7g9r_M-70CB1pwpyEovYek1xKvfu2HKACi1g9GTF0yu_2vSZTpOTOqiiQ","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1MTY1MTUsImlhdCI6MTc1NzUxNDcxNSwianRpIjoiOWQwZmQxNzItNTRlMC00MjhhLTliMTAtYzkwN2RhYTQ0MmJhIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiJiZWZhNGI2NS01OTlhLTRkNmYtODUzYi1lZmI1MjllNmI5ZDgiLCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIGt2ayBncm91cHMgYnNuIiwic2lkIjoiYmVmYTRiNjUtNTk5YS00ZDZmLTg1M2ItZWZiNTI5ZTZiOWQ4In0.o5C6tLSisNLcUtnKzl1QGmTzRRXT-HUS-zTrck0Kdv4","token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTUsImlhdCI6MTc1NzUxNDcxNSwiYXV0aF90aW1lIjoxNzU3NTE0NzE1LCJqdGkiOiI3OWRiNGExMC03OWZmLTRjODctYTg4ZC1hYTIyMjljNGVmOTAiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJ0ZXN0aWQiLCJzdWIiOiI2ZGIyZGI4Ny1kZTMxLTRlMzAtOWYyNS1jZWZlNWRhOGIxNTQiLCJ0eXAiOiJJRCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiJiZWZhNGI2NS01OTlhLTRkNmYtODUzYi1lZmI1MjllNmI5ZDgiLCJhdF9oYXNoIjoiZi05anM1X010eUJ1V2Q3Q25pYTBwZyIsImFjciI6IjEiLCJzaWQiOiJiZWZhNGI2NS01OTlhLTRkNmYtODUzYi1lZmI1MjllNmI5ZDgiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZ3JvdXBzIjpbIlJlZ2lzdHJlZXJkZXJzIiwiZGVmYXVsdC1yb2xlcy10ZXN0Iiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AZXhhbXBsZS5jb20ifQ.uGPRL1RW_LdRliai8Bht1Ap6x6N77gTZ39eLbWPwXx83tEqNems8PJlRyBiYJ5ABLUgTnW6r6KEpuYyo_nKtEWVIBKVIIYqqmJDXYB8oAy8KGvUAHkIBkf_KAmfN3WWLi5gpU5db_InlmhT6fJHAhEKrMuOjerz1EFrRhWGw6sl1kazmZ0ps0vmAt85gjliSjc0JEOQnG8EkGac8SIk_1mdzhi9y8GlldQU_yjw9Wk_PaczDRdc22P_CvYACas8JfoVP1dr03t27fnxYxnDyQSkXYWMbUT67KR4IVaDjO5KbPhfu4OQFnHoMIG1YIN9VckghvVY3Lat6IDNoFiNkSQ","not-before-policy":0,"session_state":"befa4b65-599a-4d6f-853b-efb529e6b9d8","scope":"openid email profile kvk groups bsn"}' headers: Cache-Control: @@ -213,7 +213,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/certs response: @@ -247,11 +247,11 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjgsImlhdCI6MTcyMzIxNDMyOCwiYXV0aF90aW1lIjoxNzIzMjE0MzI4LCJqdGkiOiI0NDI5NWYzZS03YzM0LTQ0ZmUtOWEyMi05ZWIzNjgzMWI2NWQiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6IjI3YjEzNmU2LWI3MjQtNGFhNC05OGFkLWJkODdjMzExZWE0OSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6IjI3YjEzNmU2LWI3MjQtNGFhNC05OGFkLWJkODdjMzExZWE0OSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.FOJ2lKA6rW9CAdBnT31TkWJmtORtwDm7YJxLeYEPeOUM6zbQBJTH9ha-9WDFNOHFvLa3_iyM2OPsuO5jkUMPhxOK1bzYvbhoYfzSv2OV1MQ4xrXOX3G2rmctyTeVJSn_glDCU5T2Uin6wWQULlfL-p6tZEBV4t0O83yh975X9LE9olL_Pl4JKt0_axl_I1jivKWw4u9blN_jfjNZHUppUENSKr4bz4j5OziP7ivQ-TbK27381gh-lbwkYC-ONxY-xp6z-SxnrEKf5rhypCOaD3lJ471F4gjdKbYFMQOqKtBdH8gqoham8rNZgjQKOepKtEkSvbVhVwloT55VrAULnQ + - Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTUsImlhdCI6MTc1NzUxNDcxNSwiYXV0aF90aW1lIjoxNzU3NTE0NzE1LCJqdGkiOiI2MmVjZmFmZS03MDUyLTQxMTgtYWY0Mi1jZWRlN2IxOTBlY2QiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6ImJlZmE0YjY1LTU5OWEtNGQ2Zi04NTNiLWVmYjUyOWU2YjlkOCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6ImJlZmE0YjY1LTU5OWEtNGQ2Zi04NTNiLWVmYjUyOWU2YjlkOCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.EpNsoH_um6MvQQKVINfUPC0ZCl_xDvebgOUrCzDh5Mrir5xPIDnOcDDvk_tpGWbKzKj2n_jgYTX8IUpCpMjI2e15nv6oCMQXSoSyTEF1BgK8Xe3j2-UCZoCi6rjPr2XBz2TUkDueHLcFAc9Ox77stG5_63AIOCsxguw9cPQcncI4CEiBjnM5TrhvAbNu_tMIL-6YAIijWBkt9Nzkj0ozC7gT0271xXG5Ys8n9up61645VpPH_Goa0bskIoSqXdAdHhjDeM8bsCqGKwI8bUlAOwx-D119h7g9r_M-70CB1pwpyEovYek1xKvfu2HKACi1g9GTF0yu_2vSZTpOTOqiiQ Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/userinfo response: @@ -285,7 +285,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/certs response: diff --git a/src/objects/accounts/tests/keycloak_cassets/happy_flow_existing_user.yaml b/src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_happy_flow_existing_user.yaml similarity index 79% rename from src/objects/accounts/tests/keycloak_cassets/happy_flow_existing_user.yaml rename to src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_happy_flow_existing_user.yaml index 71fe183a..734cdf69 100644 --- a/src/objects/accounts/tests/keycloak_cassets/happy_flow_existing_user.yaml +++ b/src/objects/accounts/tests/files/vcr_cassettes/OIDCFLowTests/test_happy_flow_existing_user.yaml @@ -9,7 +9,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/auth?response_type=code&scope=openid&client_id=testid&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F&state=not-a-random-string&nonce=not-a-random-string response: @@ -18,16 +18,16 @@ interactions: \ \n \n\n \n Sign - in to test\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n
    \n \
    \n
    test
    \n
    \n
    \n @@ -35,7 +35,7 @@ interactions: \ Sign in to your account\n\n\n \n
    \n \
    \n\n\n
    \n \
    \n
    \n
    \n \n\n \n
    \n \
    \n
    \n
    \n \n\n\n\n\n\n + type=\"module\" src=\"/resources/4lpu3/login/keycloak/js/passwordVisibility.js\">\n\n\n\n\n\n \
    \n
    \n\n
    \n
    \n\n\n" headers: Cache-Control: @@ -75,9 +75,9 @@ interactions: Referrer-Policy: - no-referrer Set-Cookie: - - AUTH_SESSION_ID=7f0abf13-cea9-405a-a50d-fd395b443218; Version=1; Path=/realms/test/; + - AUTH_SESSION_ID=7f19ddf6-3b95-416b-989c-2e1b38a87dda; Version=1; Path=/realms/test/; SameSite=None; Secure; HttpOnly - - AUTH_SESSION_ID_LEGACY=7f0abf13-cea9-405a-a50d-fd395b443218; Version=1; Path=/realms/test/; + - AUTH_SESSION_ID_LEGACY=7f19ddf6-3b95-416b-989c-2e1b38a87dda; Version=1; Path=/realms/test/; HttpOnly - KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI; Version=1; Path=/realms/test/; HttpOnly @@ -110,11 +110,11 @@ interactions: Content-Type: - application/x-www-form-urlencoded Cookie: - - AUTH_SESSION_ID_LEGACY=7f0abf13-cea9-405a-a50d-fd395b443218; KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI + - AUTH_SESSION_ID_LEGACY=7f19ddf6-3b95-416b-989c-2e1b38a87dda; KC_RESTART=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJjaWQiOiJ0ZXN0aWQiLCJwdHkiOiJvcGVuaWQtY29ubmVjdCIsInJ1cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsImFjdCI6IkFVVEhFTlRJQ0FURSIsIm5vdGVzIjp7InNjb3BlIjoib3BlbmlkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwicmVzcG9uc2VfdHlwZSI6ImNvZGUiLCJyZWRpcmVjdF91cmkiOiJodHRwOi8vdGVzdHNlcnZlci9vaWRjL2NhbGxiYWNrLyIsInN0YXRlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyJ9fQ.f7ZABGR0O48xm61gDKLOR_LjWH9a59wtTbGXUfm78sI User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: POST - uri: http://localhost:8080/realms/test/login-actions/authenticate?session_code=caDvxOGVJp-PrUkU4rZT9OD6SIdO6Cs7J8ybFZaQ2qQ&execution=b29f5dd7-8ad1-412a-8026-f37f60fa4bc5&client_id=testid&tab_id=P27-52WztMI + uri: http://localhost:8080/realms/test/login-actions/authenticate?session_code=26AmeTpkqJVM9pQ8Qb5c8K6PmsFqLEc_wOvBvybh5Hg&execution=665c596b-1c9d-47c8-975a-c0de120b2622&client_id=testid&tab_id=Z0L6N5SxTTc response: body: string: '' @@ -124,7 +124,7 @@ interactions: Content-Security-Policy: - frame-src 'self'; frame-ancestors 'self'; object-src 'none'; Location: - - http://testserver/oidc/callback/?state=not-a-random-string&session_state=7f0abf13-cea9-405a-a50d-fd395b443218&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Ftest&code=257f97ce-9bd4-45c9-a993-cd78fb143917.7f0abf13-cea9-405a-a50d-fd395b443218.adf4ad83-4550-4619-9231-73bd8d700f45 + - http://testserver/oidc/callback/?state=not-a-random-string&session_state=7f19ddf6-3b95-416b-989c-2e1b38a87dda&iss=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Ftest&code=010d0abd-9fa6-45f9-9d10-31549e3559c8.7f19ddf6-3b95-416b-989c-2e1b38a87dda.adf4ad83-4550-4619-9231-73bd8d700f45 Referrer-Policy: - no-referrer Set-Cookie: @@ -134,15 +134,15 @@ interactions: Path=/realms/test/; HttpOnly - KC_AUTH_STATE=; Version=1; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/realms/test/ - - KEYCLOAK_IDENTITY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyNTAzMjksImlhdCI6MTcyMzIxNDMyOSwianRpIjoiZjViMTQ2MTYtZjE4OC00MTZmLTk3OGEtM2U5ZGQ1N2E5YTJiIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiI3ZjBhYmYxMy1jZWE5LTQwNWEtYTUwZC1mZDM5NWI0NDMyMTgiLCJzaWQiOiI3ZjBhYmYxMy1jZWE5LTQwNWEtYTUwZC1mZDM5NWI0NDMyMTgiLCJzdGF0ZV9jaGVja2VyIjoiU2ZFcVBQcTBTQXNVM0VwT2tRaUpydmdBVHZGX0N2aVR5RFNtTW9FdnJTSSJ9.CVanGRl3av9oFTE8Pu_e3Wmm0fNUbtZA51J2nCB7MIA; + - KEYCLOAK_IDENTITY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1NTA3MTUsImlhdCI6MTc1NzUxNDcxNSwianRpIjoiMGQ5YzRiNjktMjFiOS00NjZhLWIwODktZTBhZGYwYTQ3Y2QwIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiI3ZjE5ZGRmNi0zYjk1LTQxNmItOTg5Yy0yZTFiMzhhODdkZGEiLCJzaWQiOiI3ZjE5ZGRmNi0zYjk1LTQxNmItOTg5Yy0yZTFiMzhhODdkZGEiLCJzdGF0ZV9jaGVja2VyIjoiREdiSG9sS0M0cnF5UWJIS0lnYk9fV3VHcFVabGpKVmlrV2pqZ05ZN2FzayJ9.hc5q1DfumTFg6RpcCyldTzKwJA3eOWt4Tc6VxRogMEU; Version=1; Path=/realms/test/; SameSite=None; Secure; HttpOnly - - KEYCLOAK_IDENTITY_LEGACY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyNTAzMjksImlhdCI6MTcyMzIxNDMyOSwianRpIjoiZjViMTQ2MTYtZjE4OC00MTZmLTk3OGEtM2U5ZGQ1N2E5YTJiIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiI3ZjBhYmYxMy1jZWE5LTQwNWEtYTUwZC1mZDM5NWI0NDMyMTgiLCJzaWQiOiI3ZjBhYmYxMy1jZWE5LTQwNWEtYTUwZC1mZDM5NWI0NDMyMTgiLCJzdGF0ZV9jaGVja2VyIjoiU2ZFcVBQcTBTQXNVM0VwT2tRaUpydmdBVHZGX0N2aVR5RFNtTW9FdnJTSSJ9.CVanGRl3av9oFTE8Pu_e3Wmm0fNUbtZA51J2nCB7MIA; + - KEYCLOAK_IDENTITY_LEGACY=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1NTA3MTUsImlhdCI6MTc1NzUxNDcxNSwianRpIjoiMGQ5YzRiNjktMjFiOS00NjZhLWIwODktZTBhZGYwYTQ3Y2QwIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNlc3Npb25fc3RhdGUiOiI3ZjE5ZGRmNi0zYjk1LTQxNmItOTg5Yy0yZTFiMzhhODdkZGEiLCJzaWQiOiI3ZjE5ZGRmNi0zYjk1LTQxNmItOTg5Yy0yZTFiMzhhODdkZGEiLCJzdGF0ZV9jaGVja2VyIjoiREdiSG9sS0M0cnF5UWJIS0lnYk9fV3VHcFVabGpKVmlrV2pqZ05ZN2FzayJ9.hc5q1DfumTFg6RpcCyldTzKwJA3eOWt4Tc6VxRogMEU; Version=1; Path=/realms/test/; HttpOnly - - KEYCLOAK_SESSION=test/6db2db87-de31-4e30-9f25-cefe5da8b154/7f0abf13-cea9-405a-a50d-fd395b443218; - Version=1; Expires=Sat, 10-Aug-2024 00:38:49 GMT; Max-Age=36000; Path=/realms/test/; + - KEYCLOAK_SESSION=test/6db2db87-de31-4e30-9f25-cefe5da8b154/7f19ddf6-3b95-416b-989c-2e1b38a87dda; + Version=1; Expires=Thu, 11-Sep-2025 00:31:55 GMT; Max-Age=36000; Path=/realms/test/; SameSite=None; Secure - - KEYCLOAK_SESSION_LEGACY=test/6db2db87-de31-4e30-9f25-cefe5da8b154/7f0abf13-cea9-405a-a50d-fd395b443218; - Version=1; Expires=Sat, 10-Aug-2024 00:38:49 GMT; Max-Age=36000; Path=/realms/test/ + - KEYCLOAK_SESSION_LEGACY=test/6db2db87-de31-4e30-9f25-cefe5da8b154/7f19ddf6-3b95-416b-989c-2e1b38a87dda; + Version=1; Expires=Thu, 11-Sep-2025 00:31:55 GMT; Max-Age=36000; Path=/realms/test/ - KEYCLOAK_REMEMBER_ME=; Version=1; Comment=Expiring cookie; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/realms/test/; HttpOnly Strict-Transport-Security: @@ -161,7 +161,7 @@ interactions: code: 302 message: Found - request: - body: client_id=testid&client_secret=7DB3KUAAizYCcmZufpHRVOcD0TOkNO3I&grant_type=authorization_code&code=257f97ce-9bd4-45c9-a993-cd78fb143917.7f0abf13-cea9-405a-a50d-fd395b443218.adf4ad83-4550-4619-9231-73bd8d700f45&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F + body: client_id=testid&client_secret=7DB3KUAAizYCcmZufpHRVOcD0TOkNO3I&grant_type=authorization_code&code=010d0abd-9fa6-45f9-9d10-31549e3559c8.7f19ddf6-3b95-416b-989c-2e1b38a87dda.adf4ad83-4550-4619-9231-73bd8d700f45&redirect_uri=http%3A%2F%2Ftestserver%2Foidc%2Fcallback%2F headers: Accept: - '*/*' @@ -174,12 +174,12 @@ interactions: Content-Type: - application/x-www-form-urlencoded User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: POST uri: http://localhost:8080/realms/test/protocol/openid-connect/token response: body: - string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjksImlhdCI6MTcyMzIxNDMyOSwiYXV0aF90aW1lIjoxNzIzMjE0MzI5LCJqdGkiOiIzYzAyMGVkMC0yNDgyLTRmZDMtODhjYy04ZjA0OGZkYWJkYjUiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6IjdmMGFiZjEzLWNlYTktNDA1YS1hNTBkLWZkMzk1YjQ0MzIxOCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6IjdmMGFiZjEzLWNlYTktNDA1YS1hNTBkLWZkMzk1YjQ0MzIxOCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.u5Zou9g6d_x33URvC3_St1Ce4ph7pXo13T7SHVmaAZWTGfE9nwBDmnO-vtdM85FBWYLeBugh0I3JaYGXSVYqNOiW8HJ18XQLQ8HV8X5pspsa6MIb4mRfMuGtnrAyjH9dFe44Al96Z7r4uqXH2n2AfgzAWQCfzirfX4lSh7mPaPkAy1y_1Zp5f8MqtF1gVdsPJ_sD6bA2VPXfUo5KsgAbFsuQUIlkBXhxkJ8SMMJfAXTP2WrF20KLcNraB8-hK1lkrG-4zRjYAEHZ6ZGkC0wWABvNh4EFqcXJtOACn0Jy7lNMjFj3_Qc4lz4o1IRBkmSUapJi_rp7LgIvK23-EOeEBw","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3MjMyMTYxMjksImlhdCI6MTcyMzIxNDMyOSwianRpIjoiMTc4ZDMwZDItNDkxNy00YmVmLWJiNTgtMTE2ZjljMWEyNmI4IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiI3ZjBhYmYxMy1jZWE5LTQwNWEtYTUwZC1mZDM5NWI0NDMyMTgiLCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIGt2ayBncm91cHMgYnNuIiwic2lkIjoiN2YwYWJmMTMtY2VhOS00MDVhLWE1MGQtZmQzOTViNDQzMjE4In0.M24aDgm8ws11Jv6kigAW56qou6WOydUEL2p4xz-Dbxw","token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjksImlhdCI6MTcyMzIxNDMyOSwiYXV0aF90aW1lIjoxNzIzMjE0MzI5LCJqdGkiOiJlMWY3Mzc5Zi00NTA2LTQ1ZTItODUwNC0wZTVlNmY3Mzg1MWMiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJ0ZXN0aWQiLCJzdWIiOiI2ZGIyZGI4Ny1kZTMxLTRlMzAtOWYyNS1jZWZlNWRhOGIxNTQiLCJ0eXAiOiJJRCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiI3ZjBhYmYxMy1jZWE5LTQwNWEtYTUwZC1mZDM5NWI0NDMyMTgiLCJhdF9oYXNoIjoiNXdzOVVObWpHLTBuWjlKbXR2TWRiUSIsImFjciI6IjEiLCJzaWQiOiI3ZjBhYmYxMy1jZWE5LTQwNWEtYTUwZC1mZDM5NWI0NDMyMTgiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZ3JvdXBzIjpbIlJlZ2lzdHJlZXJkZXJzIiwiZGVmYXVsdC1yb2xlcy10ZXN0Iiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AZXhhbXBsZS5jb20ifQ.UatjXK5ScjxNkKHrsciSmhQ3lIjPnV_QsNoulwiHXr079v48HkNhZ6Lv8y9Op8LmOLPbxxFLvK1ssikDBAVwD4k2ifPlpEdpp7NH2hkFAVsyNNUelyn2PFbdwxs84qp6TWBaY8hxO1uvsInYtDzMBLdZk2UbUESRftV_dw-F08QumXqN5OMekqGqhgAVv0m9JkImAdjns0g3D_Pg0ZQu30EAbsgNsMF00-VwJNUebCBAqLmAkfXrKHRCgQiQvKfGTMCMX71X23qOp4mzl2AEFOi4sKXV9qjwM1JbhQlM3mF164AsG7tfibhFU96B0nLg2k_0vga1E18kJjNJfSdCuA","not-before-policy":0,"session_state":"7f0abf13-cea9-405a-a50d-fd395b443218","scope":"openid + string: '{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTUsImlhdCI6MTc1NzUxNDcxNSwiYXV0aF90aW1lIjoxNzU3NTE0NzE1LCJqdGkiOiI0YzlmNGQzZi1iODE1LTQ1ZDctYTdhNC03ZTc3MGEwZDg0MjQiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6IjdmMTlkZGY2LTNiOTUtNDE2Yi05ODljLTJlMWIzOGE4N2RkYSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6IjdmMTlkZGY2LTNiOTUtNDE2Yi05ODljLTJlMWIzOGE4N2RkYSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.0qYhair64_q3ePWMv6IGiQPNJGXDvAFBBCz540jwKm0RnPDdLB4j0hPPpKhaqNSxCwlE1UIM63XgzJDYsc4YEc6yb-KxOnVdl85ybuUMk6I_idYPtmKDDlClwX8PGI6wzauaZrSuvMUK1_ToiweuU3o7Dte9isvdKOyKjBqTxRGEBslsQ6XoIX1wqooNgm2XE2lmtajvIoYzNxPgUugyWwp3ORKbGvhFpC0kJ-wZ2yMLoyIxuHFB-DlrUFsMUtxCqsGRnQRdAjAaszuFiqbnncShprpq00AaGISQa1X3g3tgxD5-U5amHAeP_1n4_18WNFxFpTyt3SP36BYNZLjnZw","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJlNzE1ZTA1MS02Y2RiLTQ4Y2MtYjRmNC1mMDcyMmM4MWY5ZDMifQ.eyJleHAiOjE3NTc1MTY1MTUsImlhdCI6MTc1NzUxNDcxNSwianRpIjoiM2U2ZWI3MWEtYWZhNy00NTM5LWE4OTQtYTQzMGU4MjBiZjgxIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiUmVmcmVzaCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiI3ZjE5ZGRmNi0zYjk1LTQxNmItOTg5Yy0yZTFiMzhhODdkZGEiLCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIGt2ayBncm91cHMgYnNuIiwic2lkIjoiN2YxOWRkZjYtM2I5NS00MTZiLTk4OWMtMmUxYjM4YTg3ZGRhIn0.M3qWmwdxnDheRQ37JAxMTbaPQjcDaKWFek9LTl6Ynu8","token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTUsImlhdCI6MTc1NzUxNDcxNSwiYXV0aF90aW1lIjoxNzU3NTE0NzE1LCJqdGkiOiI0ZTA2NTZhYy01MDVlLTQzZmYtOThlYS0wNDg3NTExZDhkOTYiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJ0ZXN0aWQiLCJzdWIiOiI2ZGIyZGI4Ny1kZTMxLTRlMzAtOWYyNS1jZWZlNWRhOGIxNTQiLCJ0eXAiOiJJRCIsImF6cCI6InRlc3RpZCIsIm5vbmNlIjoibm90LWEtcmFuZG9tLXN0cmluZyIsInNlc3Npb25fc3RhdGUiOiI3ZjE5ZGRmNi0zYjk1LTQxNmItOTg5Yy0yZTFiMzhhODdkZGEiLCJhdF9oYXNoIjoic1pWM3lOZWNKMGJFeG8zYlAzZ2NXZyIsImFjciI6IjEiLCJzaWQiOiI3ZjE5ZGRmNi0zYjk1LTQxNmItOTg5Yy0yZTFiMzhhODdkZGEiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZ3JvdXBzIjpbIlJlZ2lzdHJlZXJkZXJzIiwiZGVmYXVsdC1yb2xlcy10ZXN0Iiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiYWRtaW5AZXhhbXBsZS5jb20ifQ.aDvQwa3J8KgsStd3b7F5P3F18C0Acxh85A7BAe4WGSepDU5ovoxqVJNOSeXI8WUV1SKpdtajknD9PpR_YRMi5bSIFVVk2QxjOylBl0jHdi_FgCR5XUBwO62NRBgQitiFhPc9zkMvPGPylGSpXYAtBSrj_i_6WB9o9ZDvt1_0Ibxds6kfBNq8n7g4OcoPaE68vVVlrG1CwwfCMSJKsQWMrqDPDuklA_-TOzwZ3tPnzWifayYR4tRAxFs5d5jVWVpihJ4lxtQ8A5klLgY012daeez06FPaBSo2xTwWrXUT4d-sr2yFcoujHwGZsku9aUUZq6p9UWkEPNB5Zi1uDSCp1w","not-before-policy":0,"session_state":"7f19ddf6-3b95-416b-989c-2e1b38a87dda","scope":"openid email profile kvk groups bsn"}' headers: Cache-Control: @@ -213,7 +213,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/certs response: @@ -247,11 +247,11 @@ interactions: Accept-Encoding: - gzip, deflate Authorization: - - Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3MjMyMTQ2MjksImlhdCI6MTcyMzIxNDMyOSwiYXV0aF90aW1lIjoxNzIzMjE0MzI5LCJqdGkiOiIzYzAyMGVkMC0yNDgyLTRmZDMtODhjYy04ZjA0OGZkYWJkYjUiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6IjdmMGFiZjEzLWNlYTktNDA1YS1hNTBkLWZkMzk1YjQ0MzIxOCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6IjdmMGFiZjEzLWNlYTktNDA1YS1hNTBkLWZkMzk1YjQ0MzIxOCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.u5Zou9g6d_x33URvC3_St1Ce4ph7pXo13T7SHVmaAZWTGfE9nwBDmnO-vtdM85FBWYLeBugh0I3JaYGXSVYqNOiW8HJ18XQLQ8HV8X5pspsa6MIb4mRfMuGtnrAyjH9dFe44Al96Z7r4uqXH2n2AfgzAWQCfzirfX4lSh7mPaPkAy1y_1Zp5f8MqtF1gVdsPJ_sD6bA2VPXfUo5KsgAbFsuQUIlkBXhxkJ8SMMJfAXTP2WrF20KLcNraB8-hK1lkrG-4zRjYAEHZ6ZGkC0wWABvNh4EFqcXJtOACn0Jy7lNMjFj3_Qc4lz4o1IRBkmSUapJi_rp7LgIvK23-EOeEBw + - Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0VU5RQWN2VWN2LURGVU94XzRPMWd0MTNPZEpTb3RxRUtQWnVyczJ2UVc4In0.eyJleHAiOjE3NTc1MTUwMTUsImlhdCI6MTc1NzUxNDcxNSwiYXV0aF90aW1lIjoxNzU3NTE0NzE1LCJqdGkiOiI0YzlmNGQzZi1iODE1LTQ1ZDctYTdhNC03ZTc3MGEwZDg0MjQiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvcmVhbG1zL3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmRiMmRiODctZGUzMS00ZTMwLTlmMjUtY2VmZTVkYThiMTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGVzdGlkIiwibm9uY2UiOiJub3QtYS1yYW5kb20tc3RyaW5nIiwic2Vzc2lvbl9zdGF0ZSI6IjdmMTlkZGY2LTNiOTUtNDE2Yi05ODljLTJlMWIzOGE4N2RkYSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovLzEyNy4wLjAuMTo4MDAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSBrdmsgZ3JvdXBzIGJzbiIsInNpZCI6IjdmMTlkZGY2LTNiOTUtNDE2Yi05ODljLTJlMWIzOGE4N2RkYSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiUmVnaXN0cmVlcmRlcnMiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl0sInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9.0qYhair64_q3ePWMv6IGiQPNJGXDvAFBBCz540jwKm0RnPDdLB4j0hPPpKhaqNSxCwlE1UIM63XgzJDYsc4YEc6yb-KxOnVdl85ybuUMk6I_idYPtmKDDlClwX8PGI6wzauaZrSuvMUK1_ToiweuU3o7Dte9isvdKOyKjBqTxRGEBslsQ6XoIX1wqooNgm2XE2lmtajvIoYzNxPgUugyWwp3ORKbGvhFpC0kJ-wZ2yMLoyIxuHFB-DlrUFsMUtxCqsGRnQRdAjAaszuFiqbnncShprpq00AaGISQa1X3g3tgxD5-U5amHAeP_1n4_18WNFxFpTyt3SP36BYNZLjnZw Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/userinfo response: @@ -285,7 +285,7 @@ interactions: Connection: - keep-alive User-Agent: - - python-requests/2.32.3 + - python-requests/2.32.4 method: GET uri: http://localhost:8080/realms/test/protocol/openid-connect/certs response: diff --git a/src/objects/accounts/tests/test_oidc.py b/src/objects/accounts/tests/test_oidc.py index 93ef4954..cf2ee7ee 100644 --- a/src/objects/accounts/tests/test_oidc.py +++ b/src/objects/accounts/tests/test_oidc.py @@ -1,11 +1,10 @@ from functools import partial -from pathlib import Path from django.urls import reverse from django.utils.translation import gettext as _ -import vcr from django_webtest import WebTest +from maykin_common.vcr import VCRMixin from mozilla_django_oidc_db.models import OpenIDConnectConfig from objects.utils.tests.keycloak import keycloak_login, mock_oidc_db_config @@ -13,9 +12,6 @@ from ..models import User from .factories import StaffUserFactory -TEST_FILES = (Path(__file__).parent / "keycloak_cassets").resolve() - - mock_admin_oidc_config = partial( mock_oidc_db_config, app_label="mozilla_django_oidc_db", @@ -63,8 +59,7 @@ def test_oidc_button_enabled(self): ) -class OIDCFLowTests(WebTest): - @vcr.use_cassette(str(TEST_FILES / "duplicate_email.yaml")) +class OIDCFLowTests(VCRMixin, WebTest): @mock_admin_oidc_config() def test_duplicate_email_unique_constraint_violated(self): # this user collides on the email address @@ -101,7 +96,6 @@ def test_duplicate_email_unique_constraint_violated(self): self.assertEqual(staff_user.email, "admin@example.com") self.assertTrue(staff_user.is_staff) - @vcr.use_cassette(str(TEST_FILES / "happy_flow.yaml")) @mock_admin_oidc_config() def test_happy_flow(self): login_page = self.app.get(reverse("admin:login")) @@ -122,7 +116,6 @@ def test_happy_flow(self): user = User.objects.get() self.assertEqual(user.username, "admin") - @vcr.use_cassette(str(TEST_FILES / "happy_flow_existing_user.yaml")) @mock_admin_oidc_config(make_users_staff=False) def test_happy_flow_existing_user(self): staff_user = StaffUserFactory.create(username="admin", email="update-me") diff --git a/src/objects/token/tests/cassettes/PermissionAdminTests.test_with_object_types_api_v1.yaml b/src/objects/token/tests/cassettes/PermissionAdminTests.test_with_object_types_api_v1.yaml deleted file mode 100644 index d787d463..00000000 --- a/src/objects/token/tests/cassettes/PermissionAdminTests.test_with_object_types_api_v1.yaml +++ /dev/null @@ -1,96 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.32.3 - method: GET - uri: http://127.0.0.1:8008/api/v1/objecttypes - response: - body: - string: '[{"url":"http://127.0.0.1:8008/api/v1/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e","uuid":"71a2452a-66c3-4030-b5ec-a06035102e9e","name":"Garry","namePlural":"Garrys","description":"","dataClassification":"open","maintainerOrganization":"","maintainerDepartment":"","contactPerson":"","contactEmail":"","source":"","updateFrequency":"unknown","providerOrganization":"","documentationUrl":"","labels":{},"createdAt":"2024-09-24","modifiedAt":"2024-09-24","allowGeometry":true,"versions":["http://127.0.0.1:8008/api/v1/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e/versions/1"]}]' - headers: - Allow: - - GET, POST, HEAD, OPTIONS - Content-Length: - - '584' - Content-Type: - - application/json - Cross-Origin-Opener-Policy: - - same-origin - Date: - - Tue, 24 Sep 2024 14:49:45 GMT - Referrer-Policy: - - same-origin - Server: - - WSGIServer/0.2 CPython/3.11.10 - Server-Timing: - - TimerPanel_utime;dur=66.08599999999998;desc="User CPU time", TimerPanel_stime;dur=41.489;desc="System - CPU time", TimerPanel_total;dur=107.57499999999999;desc="Total CPU time", - TimerPanel_total_time;dur=109.82951400001184;desc="Elapsed time", SQLPanel_sql_time;dur=2.634805998241063;desc="SQL - 3 queries", CachePanel_total_time;dur=0;desc="Cache 0 Calls" - Vary: - - origin, Cookie - X-Content-Type-Options: - - nosniff - X-Frame-Options: - - DENY - djdt-store-id: - - 011b401c548140e393c17931b9eed7e2 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.32.3 - method: GET - uri: http://127.0.0.1:8008/api/v1/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e/versions - response: - body: - string: '[{"url":"http://127.0.0.1:8008/api/v1/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e/versions/1","version":1,"objectType":"http://127.0.0.1:8008/api/v1/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e","status":"draft","jsonSchema":{"string":"value"},"createdAt":"2024-09-24","modifiedAt":"2024-09-24","publishedAt":null}]' - headers: - Allow: - - GET, POST, HEAD, OPTIONS - Content-Length: - - '324' - Content-Type: - - application/json - Cross-Origin-Opener-Policy: - - same-origin - Date: - - Tue, 24 Sep 2024 14:49:45 GMT - Referrer-Policy: - - same-origin - Server: - - WSGIServer/0.2 CPython/3.11.10 - Server-Timing: - - TimerPanel_utime;dur=26.51400000000004;desc="User CPU time", TimerPanel_stime;dur=8.871000000000018;desc="System - CPU time", TimerPanel_total;dur=35.385000000000055;desc="Total CPU time", - TimerPanel_total_time;dur=29.870047997974325;desc="Elapsed time", SQLPanel_sql_time;dur=3.140712000458734;desc="SQL - 3 queries", CachePanel_total_time;dur=0;desc="Cache 0 Calls" - Vary: - - origin, Cookie - X-Content-Type-Options: - - nosniff - X-Frame-Options: - - DENY - djdt-store-id: - - 58b76bf29d284ba694ccdabb76919aa7 - status: - code: 200 - message: OK -version: 1 diff --git a/src/objects/token/tests/cassettes/PermissionAdminTests.test_with_object_types_api_v2.yaml b/src/objects/token/tests/cassettes/PermissionAdminTests.test_with_object_types_api_v2.yaml deleted file mode 100644 index 461b90cc..00000000 --- a/src/objects/token/tests/cassettes/PermissionAdminTests.test_with_object_types_api_v2.yaml +++ /dev/null @@ -1,96 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.32.3 - method: GET - uri: http://127.0.0.1:8008/api/v2/objecttypes - response: - body: - string: '{"count":1,"next":null,"previous":null,"results":[{"url":"http://127.0.0.1:8008/api/v2/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e","uuid":"71a2452a-66c3-4030-b5ec-a06035102e9e","name":"Garry","namePlural":"Garrys","description":"","dataClassification":"open","maintainerOrganization":"","maintainerDepartment":"","contactPerson":"","contactEmail":"","source":"","updateFrequency":"unknown","providerOrganization":"","documentationUrl":"","labels":{},"createdAt":"2024-09-24","modifiedAt":"2024-09-24","allowGeometry":true,"versions":["http://127.0.0.1:8008/api/v2/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e/versions/1"]}]}' - headers: - Allow: - - GET, POST, HEAD, OPTIONS - Content-Length: - - '634' - Content-Type: - - application/json - Cross-Origin-Opener-Policy: - - same-origin - Date: - - Tue, 24 Sep 2024 14:49:45 GMT - Referrer-Policy: - - same-origin - Server: - - WSGIServer/0.2 CPython/3.11.10 - Server-Timing: - - TimerPanel_utime;dur=17.129999999999868;desc="User CPU time", TimerPanel_stime;dur=2.0120000000000138;desc="System - CPU time", TimerPanel_total;dur=19.141999999999882;desc="Total CPU time", - TimerPanel_total_time;dur=21.54170200083172;desc="Elapsed time", SQLPanel_sql_time;dur=2.798614998027915;desc="SQL - 4 queries", CachePanel_total_time;dur=0;desc="Cache 0 Calls" - Vary: - - origin, Cookie - X-Content-Type-Options: - - nosniff - X-Frame-Options: - - DENY - djdt-store-id: - - a591b4b56a884263835fbf632b782baf - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.32.3 - method: GET - uri: http://127.0.0.1:8008/api/v2/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e/versions - response: - body: - string: '{"count":1,"next":null,"previous":null,"results":[{"url":"http://127.0.0.1:8008/api/v2/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e/versions/1","version":1,"objectType":"http://127.0.0.1:8008/api/v2/objecttypes/71a2452a-66c3-4030-b5ec-a06035102e9e","status":"draft","jsonSchema":{"string":"value"},"createdAt":"2024-09-24","modifiedAt":"2024-09-24","publishedAt":null}]}' - headers: - Allow: - - GET, POST, HEAD, OPTIONS - Content-Length: - - '374' - Content-Type: - - application/json - Cross-Origin-Opener-Policy: - - same-origin - Date: - - Tue, 24 Sep 2024 14:49:45 GMT - Referrer-Policy: - - same-origin - Server: - - WSGIServer/0.2 CPython/3.11.10 - Server-Timing: - - TimerPanel_utime;dur=17.527999999999988;desc="User CPU time", TimerPanel_stime;dur=0.8290000000000242;desc="System - CPU time", TimerPanel_total;dur=18.357000000000014;desc="Total CPU time", - TimerPanel_total_time;dur=20.605010002327617;desc="Elapsed time", SQLPanel_sql_time;dur=2.700799006561283;desc="SQL - 4 queries", CachePanel_total_time;dur=0;desc="Cache 0 Calls" - Vary: - - origin, Cookie - X-Content-Type-Options: - - nosniff - X-Frame-Options: - - DENY - djdt-store-id: - - fa6e9a070865404f8c02c2ad60df23b2 - status: - code: 200 - message: OK -version: 1 diff --git a/src/objects/token/tests/files/vcr_cassettes/PermissionAdminTests/test_with_object_types_api_v2.yaml b/src/objects/token/tests/files/vcr_cassettes/PermissionAdminTests/test_with_object_types_api_v2.yaml new file mode 100644 index 00000000..b50d5b00 --- /dev/null +++ b/src/objects/token/tests/files/vcr_cassettes/PermissionAdminTests/test_with_object_types_api_v2.yaml @@ -0,0 +1,58 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Token 5cebbb33ffa725b6ed5e9e98300061218ba98d71 + Connection: + - keep-alive + User-Agent: + - python-requests/2.32.4 + method: GET + uri: http://127.0.0.1:8008/api/v2/objecttypes + response: + body: + string: '{"count":1,"next":null,"previous":null,"results":[{"url":"http://127.0.0.1:8008/api/v2/objecttypes/ca754b52-3f37-4c49-837c-130e8149e337","uuid":"ca754b52-3f37-4c49-837c-130e8149e337","name":"Melding","namePlural":"Meldingen","description":"","dataClassification":"intern","maintainerOrganization":"Dimpact","maintainerDepartment":"","contactPerson":"Ad + Alarm","contactEmail":"","source":"","updateFrequency":"unknown","providerOrganization":"","documentationUrl":"","labels":{},"createdAt":"2020-12-01","modifiedAt":"2020-12-01","allowGeometry":true,"versions":["http://127.0.0.1:8008/api/v2/objecttypes/ca754b52-3f37-4c49-837c-130e8149e337/versions/1","http://127.0.0.1:8008/api/v2/objecttypes/ca754b52-3f37-4c49-837c-130e8149e337/versions/2","http://127.0.0.1:8008/api/v2/objecttypes/ca754b52-3f37-4c49-837c-130e8149e337/versions/3"]}]}' + headers: + Allow: + - GET, POST, HEAD, OPTIONS + Content-Length: + - '838' + Content-Security-Policy: + - 'img-src ''self'' data: cdn.redoc.ly; form-action ''self''; style-src ''self'' + ''unsafe-inline'' fonts.googleapis.com; frame-src ''self''; worker-src ''self'' + blob:; default-src ''self''; object-src ''none''; font-src ''self'' fonts.gstatic.com; + frame-ancestors ''none''; script-src ''self'' ''unsafe-inline''; base-uri + ''self''' + Content-Type: + - application/json + Cross-Origin-Opener-Policy: + - same-origin + Date: + - Wed, 10 Sep 2025 14:52:29 GMT + Referrer-Policy: + - same-origin + Server: + - WSGIServer/0.2 CPython/3.12.3 + Server-Timing: + - TimerPanel_utime;dur=9.131999999999252;desc="User CPU time", TimerPanel_stime;dur=3.3320000000003347;desc="System + CPU time", TimerPanel_total;dur=12.463999999999587;desc="Total CPU time", + TimerPanel_total_time;dur=18.878865001170198;desc="Elapsed time", SQLPanel_sql_time;dur=2.034262000961462;desc="SQL + 4 queries", CachePanel_total_time;dur=0;desc="Cache 0 Calls" + Vary: + - origin, Cookie + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - DENY + djdt-store-id: + - cb7d0f56ba8e40dfb4fd67a27838c76b + status: + code: 200 + message: OK +version: 1 diff --git a/src/objects/token/tests/test_admin.py b/src/objects/token/tests/test_admin.py index 44d248df..0397321d 100644 --- a/src/objects/token/tests/test_admin.py +++ b/src/objects/token/tests/test_admin.py @@ -2,7 +2,7 @@ from django.urls import reverse from maykin_2fa.test import disable_admin_mfa -from vcr.unittest import VCRMixin +from maykin_common.vcr import VCRMixin from zgw_consumers.constants import AuthTypes from zgw_consumers.test.factories import ServiceFactory @@ -21,44 +21,6 @@ def setUp(self): self.client.force_login(self.user) self.url = reverse("admin:token_permission_add") - def _get_vcr(self, **kwargs): - vcr = super()._get_vcr(**kwargs) - vcr.filter_headers = ["authorization"] - return vcr - - @tag("#449") - def test_with_object_types_api_v1(self): - """ - Regression test for #449. - Test if Permission admin can still handle objecttypes API V1 - """ - - v1_service = ServiceFactory( - api_root=self.object_types_api.format(version="v1"), - auth_type=AuthTypes.api_key, - header_key="Authorization", - header_value="Token 5cebbb33ffa725b6ed5e9e98300061218ba98d71", - ) - object_type = ObjectTypeFactory( - service=v1_service, uuid="71a2452a-66c3-4030-b5ec-a06035102e9e" - ) - - response = self.client.get(self.url) - - self.assertEqual(response.status_code, 200) - - form = response.context["adminform"].form - choices = list(form.fields["object_type"].choices) - - self.assertEqual( - choices[1][0].value, - object_type.id, - ) - self.assertEqual( - choices[1][1], - f"{v1_service.label}: {object_type._name}", - ) - @tag("#449") def test_with_object_types_api_v2(self): """ From 286a75c90987ffe58b3d908833d4d8fc11262264 Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Tue, 14 Oct 2025 11:05:25 +0200 Subject: [PATCH 8/9] :sparkles: Add PasswordResetView and CSRF_FAILURE_VIEW --- src/objects/conf/base.py | 11 +++++++++++ src/objects/urls.py | 7 ++++--- src/objects/utils/views.py | 3 --- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/objects/conf/base.py b/src/objects/conf/base.py index 640e7db1..4e04e868 100644 --- a/src/objects/conf/base.py +++ b/src/objects/conf/base.py @@ -145,3 +145,14 @@ # DJANGO_STRUCTLOG_IP_LOGGING_ENABLED = False DJANGO_STRUCTLOG_CELERY_ENABLED = True + +# +# SECURITY settings +# +CSRF_FAILURE_VIEW = "maykin_common.views.csrf_failure" + +# This setting is used by the csrf_failure view (accounts app). +# You can specify any path that should match the request.path +# Note: the LOGIN_URL Django setting is not used because you could have +# multiple login urls defined. +LOGIN_URLS = [reverse_lazy("admin:login")] diff --git a/src/objects/urls.py b/src/objects/urls.py index 0ef5edb7..27ebb9ed 100644 --- a/src/objects/urls.py +++ b/src/objects/urls.py @@ -9,14 +9,15 @@ from maykin_2fa import monkeypatch_admin from maykin_2fa.urls import urlpatterns as maykin_2fa_urlpatterns, webauthn_urlpatterns +from maykin_common.accounts.views import PasswordResetView from mozilla_django_oidc_db.views import AdminLoginFailure from rest_framework.settings import api_settings from objects.accounts.views import QRGeneratorView handler500 = "maykin_common.views.server_error" -admin.site.site_header = "objects admin" -admin.site.site_title = "objects admin" +admin.site.site_header = "Objects admin" +admin.site.site_title = "Objects admin" admin.site.index_title = "Welcome to the objects admin" admin.site.enable_nav_sidebar = False @@ -25,7 +26,7 @@ urlpatterns = [ path( "admin/password_reset/", - auth_views.PasswordResetView.as_view(), + PasswordResetView.as_view(), name="admin_password_reset", ), path( diff --git a/src/objects/utils/views.py b/src/objects/utils/views.py index f49f180a..7aacca5c 100644 --- a/src/objects/utils/views.py +++ b/src/objects/utils/views.py @@ -1,8 +1,5 @@ from django.db.utils import DatabaseError -from django.template import TemplateDoesNotExist, loader from django.utils.translation import gettext_lazy as _ -from django.views.decorators.csrf import requires_csrf_token -from django.views.defaults import ERROR_500_TEMPLATE_NAME import structlog from open_api_framework.conf.utils import config From 36a0e928c74aff3e1240f8a79b9556a8b7452de8 Mon Sep 17 00:00:00 2001 From: Daniel Mursa Date: Wed, 8 Oct 2025 16:12:30 +0200 Subject: [PATCH 9/9] :lipstick: Fix 503, 404 and 403 templates --- src/objects/templates/403.html | 17 +- src/objects/templates/404.html | 17 +- src/objects/templates/503.html | 316 +++++++++++++-------------------- 3 files changed, 145 insertions(+), 205 deletions(-) diff --git a/src/objects/templates/403.html b/src/objects/templates/403.html index a7d3a253..3bbd2460 100644 --- a/src/objects/templates/403.html +++ b/src/objects/templates/403.html @@ -1,10 +1,15 @@ -{% extends 'master.html' %} +{% extends "maykin_common/api/index_base.html" %} +{% load i18n %} -{% block menu %}{% endblock %} +{% block page_title %}{{ settings.PROJECT_NAME }}{% endblock %} +{% block page_subtitle %}{{ settings.SITE_TITLE }}{% endblock page_subtitle %} {% block content %} -

    Sorry, you don't have access to this page (403)

    - - -{% endblock content %} + {% block content_header %} + {{ block.super }} + {% endblock content_header %} +
    +

    {% trans "Sorry, you don't have access to this page (403)" %}

    +
    +{% endblock %} diff --git a/src/objects/templates/404.html b/src/objects/templates/404.html index 836e6699..1ddee8e1 100644 --- a/src/objects/templates/404.html +++ b/src/objects/templates/404.html @@ -1,10 +1,15 @@ -{% extends 'master.html' %} +{% extends "maykin_common/api/index_base.html" %} +{% load i18n %} -{% block menu %}{% endblock %} +{% block page_title %}{{ settings.PROJECT_NAME }}{% endblock %} +{% block page_subtitle %}{{ settings.SITE_TITLE }}{% endblock page_subtitle %} {% block content %} -

    Sorry, the requested page could not be found (404)

    - - -{% endblock content %} + {% block content_header %} + {{ block.super }} + {% endblock content_header %} +
    +

    {% trans "Sorry, the requested page could not be found (404)" %}

    +
    +{% endblock %} diff --git a/src/objects/templates/503.html b/src/objects/templates/503.html index e852c933..13034bdb 100644 --- a/src/objects/templates/503.html +++ b/src/objects/templates/503.html @@ -1,4 +1,3 @@ - @@ -6,202 +5,133 @@ - - - Service Unavailable - - - - - - - - - - - -
    - -
    - -
    - -
    -

    Sorry, this website is closed for repair / is unavailable (503)

    -

    Please try again in a few moments.

    -

    - Back to home -

    -
    - -
    - -
    - -
    +

    Sorry, this website is closed for repair / is unavailable (503)

    +

    Please try again in a few moments.

    +

    + Back to home +

    -