added initial setup page so that you can now configure a user if one isnt already configured.

This commit is contained in:
2015-07-24 15:59:39 +01:00
parent cb20821e23
commit a2f11c6ba3
6 changed files with 130 additions and 12 deletions

View File

@@ -20,7 +20,7 @@ urlpatterns = [
url(r'^$', 'comic.views.comic_redirect'), url(r'^$', 'comic.views.comic_redirect'),
url(r'^login/', 'comic_auth.views.comic_login'), url(r'^login/', 'comic_auth.views.comic_login'),
url(r'^logout/', 'comic_auth.views.comic_logout'), url(r'^logout/', 'comic_auth.views.comic_logout'),
url(r'^setup/', include(admin.site.urls)), url(r'^setup/', 'comic.views.initial_setup'),
url(r'^comic/', include('comic.urls')), url(r'^comic/', include('comic.urls')),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),

View File

@@ -6,6 +6,53 @@ from os import path
from comic.models import Setting from comic.models import Setting
class InitialSetupForm(forms.Form):
username = forms.CharField(help_text='Username',
widget=forms.TextInput(
attrs={
'class': 'form-control',
}
))
email = forms.CharField(help_text='Email Address',
widget=forms.TextInput(
attrs={
'class': 'form-control'
}
))
password = forms.CharField(help_text='New Password',
widget=forms.PasswordInput(
attrs={
'class': 'form-control',
}
))
password_confirm = forms.CharField(help_text='New Password Confirmation',
widget=forms.PasswordInput(
attrs={
'class': 'form-control',
}
))
base_dir = forms.CharField(help_text='Base Directory',
widget=forms.TextInput(
attrs={
'class': 'form-control'
}
))
def clean_base_dir(self):
data = self.cleaned_data['base_dir']
if not path.isdir(data):
raise forms.ValidationError('This is not a valid Directory')
return data
def clean(self):
form_data = self.cleaned_data
if form_data['password'] != form_data['password_confirm']:
raise forms.ValidationError('Passwords do not match.')
if len(form_data['password']) < 8:
raise forms.ValidationError('Password is too short')
return form_data
class AccountForm(forms.Form): class AccountForm(forms.Form):
username = forms.CharField(help_text='Username', username = forms.CharField(help_text='Username',
required=False, required=False,

View File

@@ -0,0 +1,46 @@
{% extends "base.html" %}
{% block title %}{{ title }}{% endblock %}
{% block breadcrumb %}
{% for crumb in breadcrumbs %}
{% if not forloop.last %}
<li><a href="{{ crumb.url }}">{{ crumb.name }}</a></li>
{% else %}
<li class="active">{{ crumb.name }}</li>
{% endif %}
{% endfor %}
{% endblock %}
{% block content %}
{% if error_message %}
<div class="alert alert-danger" role="alert">{{ error_message|safe }}</div>
{% endif %}
{% if success_message %}
<div class="alert alert-success" role="alert">{{ success_message|safe }}</div>
{% endif %}
<form method="POST">
{% csrf_token %}
{% for item in form %}
<div class="form-group">
<label for="{{ item.id_for_label }}">{{ item.help_text }}</label>
{{ item }}
</div>
{% endfor %}
<button type="submit" class="btn btn-default">Submit</button>
</form>
{% endblock %}
{% block content2 %}
{% if error_message %}
<div class="alert alert-danger" role="alert">{{ error_message }}</div>
{% endif %}
<form method="POST">
{% csrf_token %}
<div class="form-group">
<label for="base_directory">Base Directory</label>
<input type="text" class="form-control" id="base_directory" name="base_directory" placeholder="Base Directory" value="{{ base_dir.value }}">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
{% endblock %}

View File

@@ -1,10 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
</html>

View File

@@ -4,10 +4,11 @@ from django.utils.http import urlsafe_base64_decode
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.decorators import login_required, user_passes_test
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from comic.models import Setting, ComicBook, ComicStatus from comic.models import Setting, ComicBook, ComicStatus
from util import generate_breadcrumbs_from_path, generate_breadcrumbs_from_menu, generate_title_from_path from util import generate_breadcrumbs_from_path, generate_breadcrumbs_from_menu, generate_title_from_path
from forms import SettingsForm, AccountForm, EditUserForm, AddUserForm from forms import SettingsForm, AccountForm, EditUserForm, AddUserForm, InitialSetupForm
from util import Menu from util import Menu
from os import path from os import path
@@ -220,5 +221,36 @@ def get_image(_, comic_path, page):
return HttpResponse(img.read(), content_type=content) return HttpResponse(img.read(), content_type=content)
def initial_setup(request):
if User.objects.all().exists():
return redirect('/comic/')
if request.POST:
form = InitialSetupForm(request.POST)
if form.is_valid():
user = User(
username=form.cleaned_data['username'],
email=form.cleaned_data['email'],
is_staff=True,
is_superuser=True,
)
user.set_password(form.cleaned_data['password'])
user.save()
base_dir, _ = Setting.objects.get_or_create(name='BASE_DIR')
base_dir.value = form.cleaned_data['base_dir']
base_dir.save()
user = authenticate(username=form.cleaned_data['username'],
password=form.cleaned_data['password'])
login(request, user)
return redirect('/comic/')
else:
form = InitialSetupForm()
context = {
'form': form,
'title': 'CBWebReader - Setup',
'error_message': form.errors,
}
return render(request, 'comic/settings_page.html', context)
def comic_redirect(_): def comic_redirect(_):
return redirect('/comic/') return redirect('/comic/')

View File

@@ -1,5 +1,6 @@
from django.shortcuts import render, redirect, RequestContext from django.shortcuts import render, redirect, RequestContext
from django.contrib.auth import authenticate, login, logout from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from comic_auth.forms import LoginForm from comic_auth.forms import LoginForm
@@ -30,6 +31,8 @@ def comic_login(request):
}) })
return render(request, 'comic_auth/login.html', context) return render(request, 'comic_auth/login.html', context)
else: else:
if not User.objects.all().exists():
return redirect('/setup/')
form = LoginForm() form = LoginForm()
context = RequestContext(request, { context = RequestContext(request, {
'form': form 'form': form