Advertisement
Guest User

vk_auth VIews

a guest
Jan 18th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.27 KB | None | 0 0
  1. import requests
  2.  
  3. from django.shortcuts import render
  4. from django.views.generic import TemplateView
  5. from django.conf import settings
  6. from django.urls import reverse
  7. from django.shortcuts import redirect
  8. from django.contrib.auth.models import User
  9. from django.contrib.auth import login, logout
  10. from django.db import transaction
  11. from django.db import IntegrityError
  12.  
  13. from vk_auth.models import VkAuth
  14. from vk.interface import VkApiInterface
  15. from vk.exceptions import (AppException)
  16.  
  17.  
  18. class AuthView(TemplateView):
  19.     template_name = 'auth/index.html'
  20.  
  21.     def get(self, request, *args, **kwargs):
  22.         context = {
  23.             'vk_url': settings.VK_AUTH_URL,
  24.             'client_id': settings.VK_APP_ID,
  25.             'redirect_url': request.build_absolute_uri(reverse('verify_vk_auth'))
  26.         }
  27.         return self.render_to_response(context)
  28.  
  29.  
  30. def create_or_authenticate_user(request):
  31.     code = request.GET.get('code')
  32.     auth_info = VkApiInterface.verify_user_auth(code, request.build_absolute_uri(reverse('verify_vk_auth')))
  33.     access_token = auth_info['access_token']
  34.     expires_in = auth_info['expires_in']
  35.     user_id = auth_info['user_id']
  36.  
  37.     try:
  38.         vk_auth = VkAuth.objects.get(user__username=user_id)
  39.         vk_auth.vk_token = access_token
  40.         vk_auth.expires_in = expires_in
  41.         vk_auth.save()
  42.         user_model = vk_auth.user
  43.     except VkAuth.DoesNotExist:
  44.         try:
  45.             with transaction.atomic():
  46.                 user_model = User.objects.create(username=user_id, password=code)
  47.                 vk_auth = VkAuth.objects.create(user=user_model, vk_token=access_token, expires_in=expires_in)
  48.         except IntegrityError as e:
  49.             raise AppException(e)
  50.     return user_model
  51.  
  52.  
  53. def logout_view(request, *args, **kwargs):
  54.     if request.user.is_authenticated:
  55.         logout(request)
  56.     return redirect('auth_index')
  57.  
  58.  
  59. def verify_vk_auth(request, *args, **kwargs):
  60.     try:
  61.         user_model = create_or_authenticate_user(request)
  62.         login(request, user_model)
  63.         return redirect('index')
  64.     except AppException as e:
  65.         return render(request, 'error.html', {'error': getattr(e, 'inner_code'),
  66.                                               'error_description': getattr(e, 'message')})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement