Implement optional registration

This commit is contained in:
Sascha Ißbrücker 2019-12-24 13:31:55 +01:00
parent a1bfb2c711
commit 1896a8136e
12 changed files with 94 additions and 21 deletions

View file

@ -1,22 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="db" uuid="b92a6ddc-c3eb-4f61-9408-7ee5d46a163b">
<data-source source="LOCAL" name="SQLite - db.sqlite3" uuid="c880bd6d-554c-484d-a5be-45581d9a9377">
<driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/db.sqlite3</jdbc-url>
<driver-properties>
<property name="enable_load_extension" value="true" />
</driver-properties>
<libraries>
<library>
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.25.1/sqlite-jdbc-3.25.1.jar</url>
</library>
<library>
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.25.1/license.txt</url>
</library>
</libraries>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/data/db.sqlite3</jdbc-url>
</data-source>
</component>
</project>

View file

@ -7,7 +7,7 @@
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" project-jdk-name="Python 3.7 (.env)" project-jdk-type="Python SDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" default="false" project-jdk-name="Python 3.7 (linkding)" project-jdk-type="Python SDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View file

@ -1,4 +1,4 @@
.login-page {
.auth-page {
> .columns {
align-items: center;
justify-content: center;

View file

@ -23,4 +23,4 @@ $alternative-color-dark: darken($alternative-color, 5%);
@import "shared";
@import "bookmarks";
@import "settings";
@import "login";
@import "auth";

View file

@ -0,0 +1,16 @@
{% extends 'bookmarks/layout.html' %}
{% load widget_tweaks %}
{% block title %}Registration complete{% endblock %}
{% block content %}
<div class="auth-page">
<div class="columns">
<section class="content-area column col-12">
<p>Registration complete. You can now use the application.</p>
</section>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,44 @@
{% extends 'bookmarks/layout.html' %}
{% load widget_tweaks %}
{% block title %}Registration{% endblock %}
{% block content %}
<div class="auth-page">
<div class="columns">
<section class="content-area column col-5 col-md-12">
<div class="content-area-header">
<h2>Register</h2>
</div>
<form method="post" action="{% url 'django_registration_register' %}">
{% csrf_token %}
<div class="form-group {% if form.errors.username %}has-error{% endif %}">
<label class="form-label" for="{{ form.username.id_for_label }}">Username</label>
{{ form.username|add_class:'form-input' }}
<div class="form-input-hint">{{ form.errors.username }}</div>
</div>
<div class="form-group {% if form.errors.email %}has-error{% endif %}">
<label class="form-label" for="{{ form.email.id_for_label }}">Email</label>
{{ form.email|add_class:'form-input' }}
<div class="form-input-hint">{{ form.errors.email }}</div>
</div>
<div class="form-group {% if form.errors.password1 %}has-error{% endif %}">
<label class="form-label" for="{{ form.password1.id_for_label }}">Password</label>
{{ form.password1|add_class:'form-input' }}
<div class="form-input-hint">{{ form.errors.password1 }}</div>
</div>
<div class="form-group {% if form.errors.password2 %}has-error{% endif %}">
<label class="form-label" for="{{ form.password2.id_for_label }}">Confirm Password</label>
{{ form.password2|add_class:'form-input' }}
<div class="form-input-hint">{{ form.errors.password2 }}</div>
</div>
<input type="submit" value="Register" class="btn btn-primary mt-2 col-md-12">
<input type="hidden" name="next" value="{{ next }}">
</form>
</section>
</div>
</div>
{% endblock %}

View file

@ -5,7 +5,7 @@
{% block content %}
<div class="login-page">
<div class="auth-page">
<div class="columns">
<section class="content-area column col-5 col-md-12">
<div class="content-area-header">
@ -23,12 +23,22 @@
{{ form.username|add_class:'form-input' }}
</div>
<div class="form-group">
<label class="form-label" for="{{ form.username.id_for_label }}">Password</label>
<label class="form-label" for="{{ form.password.id_for_label }}">Password</label>
{{ form.password|add_class:'form-input' }}
</div>
<input type="submit" value="Login" class="btn btn-primary mt-2 col-md-12">
<input type="hidden" name="next" value="{{ next }}">
<div class="columns mt-2">
<div class="column col-3">
<input type="submit" value="Login" class="btn btn-primary">
<input type="hidden" name="next" value="{{ next }}">
</div>
{% if allow_registration %}
<div class="column col-auto col-ml-auto">
<a href="{% url 'django_registration_register' %}" class="btn btn-link">Register</a>
</div>
{% endif %}
</div>
</form>
</section>
</div>

View file

@ -6,6 +6,7 @@ django-appconf==1.0.3
django-compressor==2.3
django-generate-secret-key==1.0.2
django-picklefield==2.0
django-registration==3.0.1
django-sass-processor==0.7.3
django-widget-tweaks==1.4.5
idna==2.8

View file

@ -1,11 +1,13 @@
beautifulsoup4==4.7.1
certifi==2019.6.16
chardet==3.0.4
confusable-homoglyphs==3.2.0
Django==2.2.2
django-appconf==1.0.3
django-compressor==2.3
django-generate-secret-key==1.0.2
django-picklefield==2.0
django-registration==3.0.1
django-sass-processor==0.7.3
django-widget-tweaks==1.4.5
idna==2.8

View file

@ -141,3 +141,6 @@ STATICFILES_FINDERS = [
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'bookmarks', 'styles'),
]
# Registration switch
ALLOW_REGISTRATION = False

View file

@ -1 +1,3 @@
# Placeholder, can be mounted in a Docker container with a custom settings
# ALLOW_REGISTRATION = True

View file

@ -16,10 +16,16 @@ Including another URLconf
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import path, include
from .settings import ALLOW_REGISTRATION
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'),
path('login/', auth_views.LoginView.as_view(redirect_authenticated_user=True,
extra_context=dict(allow_registration=ALLOW_REGISTRATION)),
name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
path('', include('bookmarks.urls')),
]
if ALLOW_REGISTRATION:
urlpatterns.append(path('', include('django_registration.backends.one_step.urls')))