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')