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 gettext 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},
 | |
|                 ),
 | |
|             },
 | |
|         )
 | 
