sprint/Main/views/social/VKAuthView.py
Egor Matveev d4d7474d9a auth vk
2022-05-10 23:03:04 +03:00

51 lines
1.9 KiB
Python

import os
import random
import string
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from requests import get
from Main.models import UserInfo
from SprintLib.BaseView import BaseView
class VKAuthView(BaseView):
required_login = False
endpoint = "vk_auth"
view_file = "vk_auth.html"
fields_except = ('user_id',)
def get(self):
if not self.request.GET:
return
access_token = self.request.GET['access_token']
token = os.getenv("VK_SERVICE_TOKEN")
resp = get(f'https://api.vk.com/method/secure.checkToken?token={access_token}&access_token={token}&v=5.131').json()
if 'response' in resp and 'success' in resp['response'] and resp['response']['success'] == 1:
user_id = resp['response']['user_id']
random_string = lambda: ''.join(random.choices(string.ascii_uppercase + string.digits, k=100))
try:
user = User.objects.get(userinfo__vk_user_id=user_id)
except ObjectDoesNotExist:
resp = get(f'https://api.vk.com/method/users.get?access_token={token}&user_ids={user_id}&v=5.131',
headers={"accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7"})
if resp.status_code != 200:
return "/enter"
data = resp.json()['response'][0]
user = User.objects.create_user(
username=random_string(),
email='',
password=random_string()
)
UserInfo.objects.create(
surname=data['last_name'],
name=data['first_name'],
vk_user_id=user_id,
user=user
)
login(self.request, user)
return "/set_username"
return "/enter"