from urllib.parse import urlencode from django.views.generic import TemplateView, View from django.http import HttpResponseRedirect from django.urls import reverse from django.contrib.auth import logout as auth_logout from django.conf import settings from urllib3 import response from pingcap_sso.utils.requests import get_safe_redirect_uri from pingcap_sso.utils.mixins import LoginRequiredMixin from pingcap_sso.lib.sso import sync_cookie_url, sso_logout class ReactView(TemplateView): template_name = 'pingcap_sso/index.html' class LoginView(ReactView): def dispatch(self, request, *args, **kwargs): if request.user.is_authenticated: redirect_to = self.get_success_url() # avoid loop redirect if redirect_to == self.request.path: redirect_to = reverse('index') return HttpResponseRedirect(sync_cookie_url(redirect_to)) return super(LoginView, self).dispatch(request, *args, **kwargs) def get_success_url(self): redirect_to = self.request.GET.get('redirect_to') redirect_to = get_safe_redirect_uri(redirect_to, self.request) return redirect_to def login_nopassword_view(request): return HttpResponseRedirect(reverse('login')) class UserinfoView(LoginRequiredMixin, TemplateView): template_name = 'pingcap_sso/index.html' def get(self, request, *args, **kwargs): return HttpResponseRedirect('https://tidb.net/my/profile') class LogoutView(View): def get(self, request, *args, **kwargs): sso_logout(self.request) auth_logout(self.request) redirect_to = get_safe_redirect_uri( self.request.GET.get('redirect_to'), self.request) response = HttpResponseRedirect(redirect_to) response.delete_cookie('_t') return response