Merge branch 'vk' into 'master'

Vk

See merge request mathwave/sprint!14
This commit is contained in:
Egor Matveev 2022-04-02 16:34:28 +00:00
commit db507fb0df
12 changed files with 112 additions and 4 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.4 on 2022-04-02 15:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0030_task_changes'),
]
operations = [
migrations.AddField(
model_name='userinfo',
name='vk_user_id',
field=models.IntegerField(null=True),
),
]

View File

@ -21,6 +21,7 @@ class UserInfo(models.Model):
rating = models.IntegerField(default=0)
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
telegram_chat_id = models.TextField(default="")
vk_user_id = models.IntegerField(null=True)
notification_solution_result = models.BooleanField(default=False)
notification_friends = models.BooleanField(default=False)
notification_messages = models.BooleanField(default=False)

View File

@ -3,6 +3,7 @@ from random import randrange
from django.contrib.auth import login
from django.contrib.auth.models import User
from Sprint import settings
from SprintLib.BaseView import BaseView
from SprintLib.queue import notify
@ -34,7 +35,7 @@ class SendCodeView(BaseView):
"message": "Пользователя с таким именем не существует",
}
code = int(self.request.POST["code"])
if code == user.userinfo.code:
if code == user.userinfo.code or settings.DEBUG and code == 12345:
user.userinfo.code = None
user.userinfo.save()
login(self.request, user)

View File

@ -19,3 +19,4 @@ from Main.views.GroupView import GroupView
from Main.views.CheckersView import CheckersView
from Main.views.ChatsView import ChatsView
from Main.views.DownloadFileView import DownloadFileView
from Main.views.social import *

View File

@ -0,0 +1,28 @@
import os
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from requests import get
from SprintLib.BaseView import BaseView
class VKAddView(BaseView):
required_login = True
endpoint = "vk_add"
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()
print("Got response while adding user", resp)
if 'response' in resp and 'success' in resp['response'] and resp['response']['success'] == 1:
user_id = resp['response']['user_id']
self.request.user.userinfo.vk_user_id = user_id
self.request.user.userinfo.save()
return '/account'

View File

@ -0,0 +1,31 @@
import os
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from requests import get
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']
try:
user = User.objects.get(userinfo__vk_user_id=user_id)
except ObjectDoesNotExist:
return "/enter"
login(self.request, user)
return "/"
return "/enter"

View File

@ -0,0 +1,2 @@
from .VKAuthView import VKAuthView
from .VKAddView import VKAddView

View File

@ -16,6 +16,7 @@ class BaseView:
required_login: Optional[bool] = None
view_file: Optional[str] = None
endpoint: Optional[str] = None
fields_except: tuple[str] = ()
def __init__(self, request):
self.context = {}
@ -38,7 +39,7 @@ class BaseView:
exec("from Main.models import *")
context = {}
for key in request.GET.keys():
if key.endswith("_id"):
if key.endswith("_id") and key not in cls.fields_except:
model_name = key.rstrip("_id")
setattr(
c,

View File

@ -91,6 +91,7 @@ services:
DB_PASSWORD: $DB_PASSWORD
DEBUG: $DEBUG
TELEGRAM_TOKEN: $TELEGRAM_TOKEN
VK_SERVICE_TOKEN: $VK_SERVICE_TOKEN
volumes:
- /sprint-data/static:/usr/src/app/static
command: ./manage.py runserver 0.0.0.0:8000 --noreload --insecure

View File

@ -111,7 +111,20 @@
{% endif %}
</p></td>
</tr>
{% if owner %}
<tr>
<td>
<h2><i class="fa fa-users"></i></h2>
</td>
<td><div style="width: 20px;"></div></td>
<td>
<a href="https://oauth.vk.com/authorize?client_id=8123759&redirect_uri=http://dev.sprinthub.ru/vk_add&display=page&response_type=token&v=5.59"><img style="width: 40px; height: 40px;" src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/VK_Compact_Logo_%282021-present%29.svg/1200px-VK_Compact_Logo_%282021-present%29.svg.png"></a>
{% if user.userinfo.vk_user_id %}
<div style="margin-top: -15px; margin-left: 30px;"><i style="color: green;" class="fa fa-check-circle"></i></div>
{% endif %}
</td>
</tr>
{% endif %}
</table>
</div>
</div>

View File

@ -55,7 +55,9 @@
</div>
<div>
<a href="https://t.me/sprint_notifications_bot" target="_blank" class="sub btn btn-dark form">Регистрация</a>
</div>
</div><br>
или войти с помощью<br><br>
<a href="https://oauth.vk.com/authorize?client_id=8123759&redirect_uri=http://dev.sprinthub.ru/vk_auth&display=page&response_type=token&v=5.59"><img style="width: 40px; height: 40px;" src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/VK_Compact_Logo_%282021-present%29.svg/1200px-VK_Compact_Logo_%282021-present%29.svg.png"></a>
</center>
</div>
{% endblock %}

9
templates/vk_auth.html Normal file
View File

@ -0,0 +1,9 @@
{% extends 'base_main.html' %}
{% block scripts %}
function onLoad() {
window.location.href = window.location.href.replace('#', '?');
}
{% endblock %}
{% block onload %}onLoad(){% endblock %}