122 lines
3.7 KiB
Python
122 lines
3.7 KiB
Python
|
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)
|