diff --git a/cbreader/urls.py b/cbreader/urls.py
index 5695e87..29777fe 100644
--- a/cbreader/urls.py
+++ b/cbreader/urls.py
@@ -20,7 +20,7 @@ urlpatterns = [
url(r'^$', 'comic.views.comic_redirect'),
url(r'^login/', 'comic_auth.views.comic_login'),
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'^admin/', include(admin.site.urls)),
diff --git a/comic/forms.py b/comic/forms.py
index b064a3d..137dd0b 100644
--- a/comic/forms.py
+++ b/comic/forms.py
@@ -6,6 +6,53 @@ from os import path
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):
username = forms.CharField(help_text='Username',
required=False,
diff --git a/comic/templates/comic/setup.html b/comic/templates/comic/setup.html
new file mode 100644
index 0000000..4896c5d
--- /dev/null
+++ b/comic/templates/comic/setup.html
@@ -0,0 +1,46 @@
+{% extends "base.html" %}
+
+{% block title %}{{ title }}{% endblock %}
+
+{% block breadcrumb %}
+ {% for crumb in breadcrumbs %}
+ {% if not forloop.last %}
+
{{ crumb.name }}
+ {% else %}
+ {{ crumb.name }}
+ {% endif %}
+ {% endfor %}
+{% endblock %}
+
+{% block content %}
+{% if error_message %}
+{{ error_message|safe }}
+{% endif %}
+{% if success_message %}
+{{ success_message|safe }}
+{% endif %}
+
+{% endblock %}
+
+{% block content2 %}
+{% if error_message %}
+{{ error_message }}
+{% endif %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/comic/templates/setup.html b/comic/templates/setup.html
deleted file mode 100644
index d538fea..0000000
--- a/comic/templates/setup.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/comic/views.py b/comic/views.py
index 1251f85..f235f6d 100644
--- a/comic/views.py
+++ b/comic/views.py
@@ -4,10 +4,11 @@ from django.utils.http import urlsafe_base64_decode
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.models import User
+from django.contrib.auth import login, authenticate
from comic.models import Setting, ComicBook, ComicStatus
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 os import path
@@ -220,5 +221,36 @@ def get_image(_, comic_path, page):
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(_):
return redirect('/comic/')
diff --git a/comic_auth/views.py b/comic_auth/views.py
index 1ebd68c..7e6f734 100644
--- a/comic_auth/views.py
+++ b/comic_auth/views.py
@@ -1,5 +1,6 @@
from django.shortcuts import render, redirect, RequestContext
from django.contrib.auth import authenticate, login, logout
+from django.contrib.auth.models import User
from comic_auth.forms import LoginForm
@@ -30,6 +31,8 @@ def comic_login(request):
})
return render(request, 'comic_auth/login.html', context)
else:
+ if not User.objects.all().exists():
+ return redirect('/setup/')
form = LoginForm()
context = RequestContext(request, {
'form': form