This commit is contained in:
Egor Matveev
2022-05-10 23:03:04 +03:00
parent 1a6bf13b96
commit d4d7474d9a
13 changed files with 384 additions and 47 deletions

24
Main/views/CheckNew.py Normal file
View File

@@ -0,0 +1,24 @@
from django.contrib.auth.models import User
from django.http import HttpResponse
from SprintLib.BaseView import BaseView
class CheckNew(BaseView):
endpoint = "check_new"
def post_check_username(self):
username = self.request.POST['username']
user = User.objects.filter(username=username).first()
if len(username) < 8:
user = 'incorrect'
return HttpResponse(status=400 if user else 200)
def post_check_email(self):
email = self.request.POST['email']
user = User.objects.filter(email=email).first()
if email.count('.') == 0 or email.count('@') != 1:
user = 'incorrect'
if email.find('@') > email.rfind('.'):
user = 'incorrect'
return HttpResponse(status=400 if user else 200)

View File

@@ -1,3 +1,7 @@
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from django.db.models import Q
from SprintLib.BaseView import BaseView
@@ -5,3 +9,14 @@ class EnterView(BaseView):
view_file = "enter.html"
required_login = False
endpoint = "enter"
def post(self):
username = self.request.POST['username']
user = User.objects.filter(Q(username=username) | Q(email=username)).first()
if user is None:
return "/enter"
user = authenticate(username=user.username, password=self.request.POST['password'])
if user is None:
return "/enter"
login(self.request, user)
return "/"

View File

@@ -15,7 +15,7 @@ class MainView(BaseView):
@property
def view_file(self):
if self.request.user.is_authenticated:
if self.request.user.is_authenticated and self.request.user.userinfo.verified:
return "main.html"
return "landing.html"

View File

@@ -0,0 +1,34 @@
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.db.models import Q
from Main.models import UserInfo
from SprintLib.BaseView import BaseView
class RegisterView(BaseView):
view_file = "register.html"
required_login = False
endpoint = "register"
def post(self):
username = self.request.POST['username']
email = self.request.POST['email']
surname = self.request.POST['surname']
name = self.request.POST['name']
password = self.request.POST['password']
if User.objects.filter(Q(email=email) | Q(username=username)):
return '/register'
user = User.objects.create_user(
username=username,
email=email,
password=password
)
UserInfo.objects.create(
surname=surname,
name=name,
user=user,
verified=True
)
login(self.request, user)
return "/"

View File

@@ -0,0 +1,28 @@
from django.contrib.auth import login
from django.contrib.auth.models import User
from SprintLib.BaseView import BaseView
class SetUsernameView(BaseView):
endpoint = "set_username"
view_file = "set_username.html"
required_login = False
def get(self):
if not self.request.user.is_authenticated:
return "/"
def post(self):
if not self.request.user.is_authenticated:
return "/"
user = User.objects.filter(username=self.request.POST['username']).first()
if user is None:
self.request.user.username = self.request.POST['username']
self.request.user.userinfo.verified = True
self.request.user.save()
self.request.user.userinfo.save()
login(self.request, self.request.user)
return "/"
else:
return "/set_username"

View File

@@ -0,0 +1,22 @@
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from django.db.models import Q
from SprintLib.BaseView import BaseView
class TelegramEnterView(BaseView):
view_file = "telegram_enter.html"
required_login = False
endpoint = "telegram_enter"
def post(self):
username = self.request.POST['username']
user = User.objects.filter(Q(username=username) | Q(email=username)).first()
if user is None:
return "/enter"
user = authenticate(username=user.username, password=self.request.POST['password'])
if user is None:
return "/enter"
login(self.request, user)
return "/"

View File

@@ -18,4 +18,8 @@ from Main.views.SetView import SetView
from Main.views.GroupView import GroupView
from Main.views.CheckersView import CheckersView
from Main.views.DownloadFileView import DownloadFileView
from Main.views.RegisterView import RegisterView
from Main.views.CheckNew import CheckNew
from Main.views.TelegramEnterView import TelegramEnterView
from Main.views.SetUsernameView import SetUsernameView
from Main.views.social import *

View File

@@ -1,10 +1,13 @@
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
@@ -22,10 +25,26 @@ class VKAuthView(BaseView):
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:
return "/enter"
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 "/"
return "/set_username"
return "/enter"