41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""passbook OIDC IDP Forms"""
 | 
						|
 | 
						|
from django import forms
 | 
						|
from oauth2_provider.generators import generate_client_id, generate_client_secret
 | 
						|
from oidc_provider.models import Client
 | 
						|
 | 
						|
from passbook.providers.oidc.models import OpenIDProvider
 | 
						|
 | 
						|
 | 
						|
class OIDCProviderForm(forms.ModelForm):
 | 
						|
    """OpenID Client form"""
 | 
						|
 | 
						|
    def __init__(self, *args, **kwargs):
 | 
						|
        # Correctly load data from 1:1 rel
 | 
						|
        if "instance" in kwargs and kwargs["instance"]:
 | 
						|
            kwargs["instance"] = kwargs["instance"].oidc_client
 | 
						|
        super().__init__(*args, **kwargs)
 | 
						|
        self.fields["client_id"].initial = generate_client_id()
 | 
						|
        self.fields["client_secret"].initial = generate_client_secret()
 | 
						|
 | 
						|
    def save(self, *args, **kwargs):
 | 
						|
        response = super().save(*args, **kwargs)
 | 
						|
        # Check if openidprovider class instance exists
 | 
						|
        if not OpenIDProvider.objects.filter(oidc_client=self.instance).exists():
 | 
						|
            OpenIDProvider.objects.create(oidc_client=self.instance)
 | 
						|
        return response
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = Client
 | 
						|
        fields = [
 | 
						|
            "name",
 | 
						|
            "client_type",
 | 
						|
            "client_id",
 | 
						|
            "client_secret",
 | 
						|
            "response_types",
 | 
						|
            "jwt_alg",
 | 
						|
            "_redirect_uris",
 | 
						|
            "_scope",
 | 
						|
        ]
 | 
						|
        labels = {"client_secret": "Client Secret"}
 |