71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""passbook oauth_client user views"""
 | 
						|
from typing import Optional
 | 
						|
 | 
						|
from django.contrib import messages
 | 
						|
from django.contrib.auth.mixins import LoginRequiredMixin
 | 
						|
from django.http import HttpRequest, HttpResponse
 | 
						|
from django.shortcuts import get_object_or_404, redirect, render
 | 
						|
from django.urls import reverse
 | 
						|
from django.utils.translation import ugettext as _
 | 
						|
from django.views.generic import TemplateView, View
 | 
						|
 | 
						|
from passbook.sources.oauth.models import OAuthSource, UserOAuthSourceConnection
 | 
						|
 | 
						|
 | 
						|
class UserSettingsView(LoginRequiredMixin, TemplateView):
 | 
						|
    """Show user current connection state"""
 | 
						|
 | 
						|
    template_name = "oauth_client/user.html"
 | 
						|
 | 
						|
    def get_context_data(self, **kwargs):
 | 
						|
        source = get_object_or_404(OAuthSource, slug=self.kwargs.get("source_slug"))
 | 
						|
        connections = UserOAuthSourceConnection.objects.filter(
 | 
						|
            user=self.request.user, source=source
 | 
						|
        )
 | 
						|
        kwargs["source"] = source
 | 
						|
        kwargs["connections"] = connections
 | 
						|
        return super().get_context_data(**kwargs)
 | 
						|
 | 
						|
 | 
						|
class DisconnectView(LoginRequiredMixin, View):
 | 
						|
    """Delete connection with source"""
 | 
						|
 | 
						|
    source: Optional[OAuthSource] = None
 | 
						|
    aas: Optional[UserOAuthSourceConnection] = None
 | 
						|
 | 
						|
    def dispatch(self, request: HttpRequest, source_slug: str) -> HttpResponse:
 | 
						|
        self.source = get_object_or_404(OAuthSource, slug=source_slug)
 | 
						|
        self.aas = get_object_or_404(
 | 
						|
            UserOAuthSourceConnection, source=self.source, user=request.user
 | 
						|
        )
 | 
						|
        return super().dispatch(request, source_slug)
 | 
						|
 | 
						|
    def post(self, request: HttpRequest, source_slug: str) -> HttpResponse:
 | 
						|
        """Delete connection object"""
 | 
						|
        if "confirmdelete" in request.POST:
 | 
						|
            # User confirmed deletion
 | 
						|
            self.aas.delete()
 | 
						|
            messages.success(request, _("Connection successfully deleted"))
 | 
						|
            return redirect(
 | 
						|
                reverse(
 | 
						|
                    "passbook_sources_oauth:oauth-client-user",
 | 
						|
                    kwargs={"source_slug": self.source.slug},
 | 
						|
                )
 | 
						|
            )
 | 
						|
        return self.get(request, source_slug)
 | 
						|
 | 
						|
    # pylint: disable=unused-argument
 | 
						|
    def get(self, request: HttpRequest, source_slug: str) -> HttpResponse:
 | 
						|
        """Show delete form"""
 | 
						|
        return render(
 | 
						|
            request,
 | 
						|
            "generic/delete.html",
 | 
						|
            {
 | 
						|
                "object": self.source,
 | 
						|
                "delete_url": reverse(
 | 
						|
                    "passbook_sources_oauth:oauth-client-disconnect",
 | 
						|
                    kwargs={"source_slug": self.source.slug},
 | 
						|
                ),
 | 
						|
            },
 | 
						|
        )
 |