2021-02-25 19:01:09 +03:00

149 lines
5.4 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.contrib.auth.decorators import login_required
from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.models import User
from django.contrib.auth.tokens import default_token_generator
from django.shortcuts import render
from django.urls import reverse_lazy
from django_registration.backends.one_step.views import RegistrationView
from access_controller.settings import EMAIL_HOST_USER
from main.extra_func import check_user_exist, update_profile, get_user_organization
from main.forms import CustomRegistrationForm
from django_registration.views import RegistrationView
from django.contrib.auth.decorators import login_required
import logging
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):
self.is_allowed = True
if check_user_exist(form.data['email']) and get_user_organization(form.data['email']) == 'SYSTEM':
forms = PasswordResetForm(self.request.POST)
if forms.is_valid():
opts = {
'use_https': self.request.is_secure(),
'token_generator': default_token_generator,
'from_email': EMAIL_HOST_USER,
'email_template_name': 'registration/password_reset_email.html',
'subject_template_name': 'registration/password_reset_subject.txt',
'request': self.request,
'html_email_template_name': None,
'extra_email_context': None,
}
user = User.objects.create_user(
username=form.data['email'],
email=form.data['email'],
password=User.objects.make_random_password(length=50)
)
forms.save(**opts)
update_profile(user.userprofile)
return user
else:
raise ValueError('Непредвиденная ошибка')
else:
self.is_allowed = False
def get_success_url(self, user=None):
"""
Возвращает url-адрес страницы, куда нужно перейти после успешной/неуспешной регистрации
Используется самой django-registration
"""
if self.is_allowed:
return reverse_lazy('password_reset_done')
else:
return reverse_lazy('django_registration_disallowed')
@login_required()
def profile_page(request):
"""
Отображение страницы профиля
:param request: объект с деталями запроса
:type request: :class:`django.http.HttpResponse`
:return: объект ответа сервера с HTML-кодом внутри
"""
user_profile = request.user.userprofile
update_profile(user_profile)
context = {
'email': user_profile.user.email,
'name': user_profile.name,
'role': user_profile.role,
'image_url': user_profile.image,
'pagename': 'Страница профиля'
}
return render(request, 'pages/profile.html', context)
def auth_user(request):
admin_creds = {
'email': os.environ.get('ACCESS_CONTROLLER_API_EMAIL'),
'subdomain': 'ngenix1612197338',
'token': os.environ.get('ACCESS_CONTROLLER_API_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 == "admin":
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 = "admin"
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):
logger = logging.getLogger('main.index')
logger.info('Index page opened')
return render(request, 'pages/index.html')