2021-02-17 20:43:57 +03:00

132 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.shortcuts import render, redirect, reverse
from django.http import HttpResponseRedirect
from django.urls import reverse_lazy
from main.extra_func import set_and_get_name, set_and_get_email, load_and_get_image, set_and_get_role, check_user_exist, \
check_user_auth
from main.models import UserProfile
from django.contrib.auth.models import User
from main.forms import CustomRegistrationForm
from django_registration.views import RegistrationView
from django.contrib.auth.decorators import login_required
from zenpy import Zenpy
from zenpy.lib.api_objects import User as ZenpyUser
from .models import UserProfile
import os
class CustomRegistrationView(RegistrationView):
"""
Отображение и логика работы страницы регистрации пользователя
"""
form_class = CustomRegistrationForm
template_name = 'django_registration/registration_form.html'
success_url = reverse_lazy('django_registration_complete')
is_allowed = True
def register(self, form):
if check_user_exist(form.data['email']) and check_user_auth(form.data['email'], form.data['password_zen']):
user = User.objects.create_user(
username=form.data['username'],
email=form.data['email'],
password=form.data['password1']
)
profile = UserProfile(
user=user,
role=0,
)
set_and_get_name(profile)
set_and_get_email(profile)
set_and_get_role(profile)
load_and_get_image(profile)
profile.save()
else:
self.is_allowed = False
def get_success_url(self, user=None):
"""
Возвращает url-адрес страницы, куда нужно перейти после успешной/неуспешной регистрации
Используется самой django-registration
"""
if self.is_allowed:
return reverse_lazy('django_registration_complete')
else:
return reverse_lazy('django_registration_disallowed')
@login_required()
def profile_page(request):
"""
Отображение страницы профиля
:param request: объект с деталями запроса
:type request: :class:`django.http.HttpResponse`
:return: объект ответа сервера с HTML-кодом внутри
"""
if request.user.is_authenticated:
user_profile = request.user.userprofile
context = {
'name': set_and_get_name(user_profile),
'email': set_and_get_email(user_profile),
'role': set_and_get_role(user_profile),
'image_name': load_and_get_image(user_profile),
'pagename': 'Страница профиля'
}
return render(request, 'pages/profile.html', context)
def auth_user(request):
admin_creds = {
'email': os.environ.get('Admin_email'),
'subdomain': 'ngenix1612197338',
'token': os.environ.get('Oauth_token'),
}
admin = Zenpy(**admin_creds)
zenpy_user: ZenpyUser = admin.users.search(request.user.email).values[0]
return zenpy_user, admin
@login_required()
def work_page(request, id):
if request.user.is_authenticated and request.user.id == id:
zenpy_user, _ = auth_user(request)
context = {
'engineers': UserProfile.objects.filter(role=1),
'agents': UserProfile.objects.filter(role=0),
'role': zenpy_user.role,
'pagename': 'Управление правами'
}
return render(request, 'pages/work.html', context)
return redirect("login")
@login_required()
def work_hand_over(request):
zenpy_user, admin = auth_user(request)
if request.user.is_authenticated and zenpy_user.role == "end-user":
zenpy_user.role = "agent"
admin.users.update(zenpy_user)
request.user.userprofile.role = 0
request.user.userprofile.save()
return HttpResponseRedirect(reverse('work', args=(request.user.id, )))
@login_required()
def work_become_engineer(request):
zenpy_user, admin = auth_user(request)
if request.user.is_authenticated and zenpy_user.role == "agent":
zenpy_user.role = "end-user"
admin.users.update(zenpy_user)
request.user.userprofile.role = 1
request.user.userprofile.save()
return HttpResponseRedirect(reverse('work', args=(request.user.id, )))
def main_page(request):
return render(request, 'pages/index.html')