From e6c47fee2674da3086a9961398c013e1664caefb Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Mon, 17 Feb 2020 17:47:51 +0100 Subject: [PATCH] core: add template field to PropertyMapping --- .../0006_propertymapping_template.py | 19 +++++++++++++++++++ passbook/core/models.py | 13 +++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 passbook/core/migrations/0006_propertymapping_template.py diff --git a/passbook/core/migrations/0006_propertymapping_template.py b/passbook/core/migrations/0006_propertymapping_template.py new file mode 100644 index 000000000..d842b48ac --- /dev/null +++ b/passbook/core/migrations/0006_propertymapping_template.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.3 on 2020-02-17 16:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("passbook_core", "0005_merge_20191025_2022"), + ] + + operations = [ + migrations.AddField( + model_name="propertymapping", + name="template", + field=models.TextField(default=""), + preserve_default=False, + ), + ] diff --git a/passbook/core/models.py b/passbook/core/models.py index 17169cdb9..13c718976 100644 --- a/passbook/core/models.py +++ b/passbook/core/models.py @@ -2,15 +2,17 @@ from datetime import timedelta from random import SystemRandom from time import sleep -from typing import Optional +from typing import Optional, Any from uuid import uuid4 +from jinja2.nativetypes import NativeEnvironment from django.contrib.auth.models import AbstractUser from django.contrib.postgres.fields import JSONField from django.db import models from django.urls import reverse_lazy +from django.http import HttpRequest from django.utils.timezone import now -from django.utils.translation import gettext as _ +from django.utils.translation import gettext_lazy as _ from django_prometheus.models import ExportModelOperationsMixin from guardian.mixins import GuardianUserMixin from model_utils.managers import InheritanceManager @@ -22,6 +24,7 @@ from passbook.policies.exceptions import PolicyException from passbook.policies.struct import PolicyRequest, PolicyResult LOGGER = get_logger() +NATIVE_ENVIRONMENT = NativeEnvironment() def default_nonce_duration(): @@ -293,10 +296,16 @@ class PropertyMapping(UUIDModel): """User-defined key -> x mapping which can be used by providers to expose extra data.""" name = models.TextField() + template = models.TextField() form = "" objects = InheritanceManager() + def render(self, user: User, request: HttpRequest, **kwargs) -> Any: + """Render `self.template` using `**kwargs` as Context.""" + template = NATIVE_ENVIRONMENT.from_string(self.template) + return template.render(user=user, request=request, **kwargs) + def __str__(self): return f"Property Mapping {self.name}"