from django.shortcuts import render, redirect from django.contrib.auth import logout, login from django.contrib.auth.forms import AuthenticationForm as AuthForm from django.contrib.auth.forms import PasswordChangeForm from django.contrib.auth import update_session_auth_hash from django.views.generic import TemplateView from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponse from ..navbar import NavBar from ..forms import QrSearchForm class BaseTemplateMixin(): navbar_selected = '' base_title = '' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) base_context = { 'navbar': NavBar.get_navbar(self.navbar_selected, self.request.user), 'title': NavBar.get_brand()+' / '+ self.base_title, 'login_active': False, } context['base'] = base_context return context def post(self, request, *args, **kwargs): data = request.POST if 'qr_search' not in data: super().post(request, *args, **kwargs) print('QR',data['qr_search']) f = QrSearchForm(data) if f.is_valid(): return redirect(f.my_qr_validator.get_redirect_url(f.cleaned_data['qr_search'])) return self.get(request) class ChangePasswordView(LoginRequiredMixin, BaseTemplateMixin, TemplateView): template_name = 'parts/change-pw.html' navbar_selected = 'Main' base_title = 'Change Password' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['form'] = PasswordChangeForm(self.request.user) return context def post(self, request, *args, **kwargs): if 'submit-change-pw' not in request.POST: return super().post(request, *args, **kwargs) form = PasswordChangeForm(request.user, data=request.POST) if form.is_valid(): user = form.save() update_session_auth_hash(request, user) return redirect('parts-main') context = self.get_context_data(**kwargs) if form.errors: context['form'] = form return self.render_to_response(context) class MainView(BaseTemplateMixin, TemplateView): template_name = 'parts/main.html' navbar_selected = 'Main' base_title = 'Main' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['user'] = self.request.user return context def logout_view(request): logout(request) return redirect('parts-main') def login_view(request): base_context = { 'navbar': NavBar.get_navbar('Login', request.user), 'title': NavBar.get_brand()+' / '+'Login', 'login_active': True, } if request.user.is_authenticated: next_param = request.GET.get('next') if next_param is not None: return redirect(next_param) return redirect('parts-main') if request.method == 'POST': form = AuthForm(data=request.POST) if form.is_valid(): valid_user = form.get_user() login(request, valid_user) next_param = request.GET.get('next') if next_param is not None: return redirect(next_param) return redirect('parts-main') else: form = AuthForm() context = { 'base': base_context, 'form': form, } return render(request, 'parts/login.html', context) def health_check_view(_request) -> HttpResponse: """ Health checking view. Returns empty http response with HTTP status OK. This will be used to check if the system is actually running correctly """ return HttpResponse(status=200)