51 lines
1.9 KiB
Python
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"
|