auth_oidc: use custom widget in claim mapping admin form (#37871)

This commit is contained in:
Paul Marillonnet 2020-03-13 15:01:12 +01:00
parent dccf9a571f
commit c4636a41ce
1 changed files with 33 additions and 3 deletions

View File

@ -1,5 +1,5 @@
# authentic2 - versatile identity manager
# Copyright (C) 2010-2019 Entr'ouvert
# Copyright (C) 2010-2020 Entr'ouvert
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
@ -14,15 +14,45 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django import forms
from django.contrib import admin
from authentic2.attributes_ng.engine import get_attribute_names
from authentic2.forms.widgets import DatalistTextInput
from . import models
class OIDCClaimMappingForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(OIDCClaimMappingForm, self).__init__(*args, **kwargs)
claim_widget = self.fields['claim'].widget
# fill datalist with standard claims from
# https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims
claim_widget.data = ('sub', 'name', 'given_name', 'family_name', 'nickname'
'preferred_username', 'profile', 'picture', 'website', 'email',
'email_verified', 'gender', 'birthdate', 'zoneinfo', 'locale',
'phone_number', 'phone_number_verified', 'address',
'updated_at')
claim_widget.name = 'list__oidcclaim-mapping-inline'
claim_widget.attrs.update({'list': 'list__oidcclaim-mapping-inline'})
class Meta:
model = models.OIDCClaimMapping
fields = [
'claim', 'attribute', 'verified', 'required', 'idtoken_claim',
]
readonly_fields = ['created', 'modified']
widgets = {
'claim': DatalistTextInput,
}
class OIDCClaimMappingInline(admin.TabularInline):
model = models.OIDCClaimMapping
fields = ['claim', 'attribute', 'verified', 'required', 'idtoken_claim', 'created', 'modified']
readonly_fields = ['created', 'modified']
form = OIDCClaimMappingForm
extra = 3
class OIDCProviderAdmin(admin.ModelAdmin):