60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""oidc models"""
 | 
						|
from typing import Optional, Type
 | 
						|
 | 
						|
from django.db import models
 | 
						|
from django.forms import ModelForm
 | 
						|
from django.http import HttpRequest
 | 
						|
from django.shortcuts import reverse
 | 
						|
from django.utils.translation import gettext as _
 | 
						|
from oidc_provider.models import Client
 | 
						|
 | 
						|
from passbook.core.models import Provider
 | 
						|
from passbook.lib.utils.template import render_to_string
 | 
						|
 | 
						|
 | 
						|
class OpenIDProvider(Provider):
 | 
						|
    """OpenID Connect Provider for applications that support OIDC."""
 | 
						|
 | 
						|
    # Since oidc_provider doesn't currently support swappable models
 | 
						|
    # (https://github.com/juanifioren/django-oidc-provider/pull/305)
 | 
						|
    # we have a 1:1 relationship, and update oidc_client when the form is saved.
 | 
						|
 | 
						|
    oidc_client = models.OneToOneField(Client, on_delete=models.CASCADE)
 | 
						|
 | 
						|
    def form(self) -> Type[ModelForm]:
 | 
						|
        from passbook.providers.oidc.forms import OIDCProviderForm
 | 
						|
 | 
						|
        return OIDCProviderForm
 | 
						|
 | 
						|
    @property
 | 
						|
    def name(self):
 | 
						|
        """Name property for UI"""
 | 
						|
        return self.oidc_client.name
 | 
						|
 | 
						|
    def __str__(self):
 | 
						|
        return self.oidc_client.__str__()
 | 
						|
 | 
						|
    def html_setup_urls(self, request: HttpRequest) -> Optional[str]:
 | 
						|
        """return template and context modal with URLs for authorize, token, openid-config, etc"""
 | 
						|
        return render_to_string(
 | 
						|
            "oidc_provider/setup_url_modal.html",
 | 
						|
            {
 | 
						|
                "provider": self,
 | 
						|
                "authorize": request.build_absolute_uri(
 | 
						|
                    reverse("passbook_providers_oidc:authorize")
 | 
						|
                ),
 | 
						|
                "token": request.build_absolute_uri(reverse("oidc_provider:token")),
 | 
						|
                "userinfo": request.build_absolute_uri(
 | 
						|
                    reverse("oidc_provider:userinfo")
 | 
						|
                ),
 | 
						|
                "provider_info": request.build_absolute_uri(
 | 
						|
                    reverse("passbook_providers_oidc:provider-info")
 | 
						|
                ),
 | 
						|
            },
 | 
						|
        )
 | 
						|
 | 
						|
    class Meta:
 | 
						|
 | 
						|
        verbose_name = _("OpenID Provider")
 | 
						|
        verbose_name_plural = _("OpenID Providers")
 |