Merge pull request #213 from mouse-reeve/invite-only

Invite only
This commit is contained in:
Mouse Reeve 2020-10-01 13:46:54 -07:00 committed by GitHub
commit 7138cd4811
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 100 additions and 131 deletions

View File

@ -1,33 +1,23 @@
{% extends 'layout.html' %} {% extends 'layout.html' %}
{% block content %} {% block content %}
<div class="content-container"> <div class="columns">
<h2>About {{ site_settings.name }}</h2> <div class="column">
<p> <div class="block login">
{{ site_settings.instance_description }} <h2 class="title">Create an Account</h2>
</p> <div>
<form name="register" method="post" action="/user-register">
<p> <input type=hidden name="invite_code" value="{{ invite.code }}">
<small> {% include 'snippets/register_form.html' %}
<a href="/about/">More about this site</a> </form>
</small> </div>
</p> </div>
</div> </div>
<div class="column">
<div class="content-container login"> <div class="block">
<h2>Create an Account</h2> {% include 'snippets/about.html' with site_settings=site_settings %}
<p><small> </div>
With a BookWyrm account, you can track and share your reading activity with
friends here and on any other federated server, like Mastodon and PixelFed.
</small></p>
<div>
<form name="register" method="post" action="/register">
{% csrf_token %}
{{ register_form.as_p }}
<input type=hidden name="invite_code" value="{{ invite.code }}">
<button type="submit">Create account</button>
</form>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -99,11 +99,8 @@
{% else %} {% else %}
<div class="navbar-item"> <div class="navbar-item">
<div class="buttons"> <div class="buttons">
<a href="/register" class="button is-primary"> <a href="/login" class="button is-primary">
<strong>Sign up</strong> Join
</a>
<a href="/login" class="button is-light">
Log in
</a> </a>
</div> </div>
</div> </div>

View File

@ -2,46 +2,51 @@
{% block content %} {% block content %}
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
<h2 class="title">About {{ site_settings.name }}</h2> <div class="block">
<p class="block"> {% if site_settings.allow_registration %}
{{ site_settings.instance_description }} <h2 class="title">Create an Account</h2>
</p> <form name="register" method="post" action="/user-register">
{% include 'snippets/register_form.html' %}
<p class="block"> </form>
<a href="/about/">More about this site</a> {% else %}
</p> <h2 class="title">This instance is closed</h2>
<p>Contact an administrator to get an invite</p>
<p class="block"> {% endif %}
<a href="/register" class="button is-link">Create an Account</a> </div>
</p> </div>
</div>
<div class="column">
<div class="column"> <div class="block">
<h2 class="title">Log in</h2> <h2 class="title">Log in</h2>
<form name="login" method="post" action="/user-login">
<div class="block"> {% csrf_token %}
<form name="login" method="post" action="/user-login"> <div class="field">
{% csrf_token %} <label class="label" for="id_username">Username:</label>
<div class="field"> <div class="control">
<label class="label" for="id_username">Username:</label> {{ login_form.username }}
<div class="control">{{ login_form.username }}</div> </div>
</div> </div>
<div class="field"> <div class="field">
<label class="label" for="id_password">Password:</label> <label class="label" for="id_password">Password:</label>
<div class="control">{{ login_form.password }}</div> <div class="control">
</div> {{ login_form.password }}
<div class="field is-grouped"> </div>
<div class="control"> </div>
<button class="button is-primary" type="submit">Log in</button> <div class="field is-grouped">
</div> <div class="control">
<div class="control"> <button class="button is-primary" type="submit">Log in</button>
<small><a href="/reset-password">Forgot your password?</a></small> </div>
</div> <div class="control">
</div> <small><a href="/reset-password">Forgot your password?</a></small>
</form> </div>
</div>
</form>
</div>
<div class="block">
{% include 'snippets/about.html' with site_settings=site_settings %}
</div>
</div> </div>
</div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -1,49 +0,0 @@
{% extends 'layout.html' %}
{% block content %}
<div class="columns">
<div class="column">
<h2 class="title">About {{ site_settings.name }}</h2>
<p class="block">
{{ site_settings.instance_description }}
</p>
<p class="block">
<a href="/about/">More about this site</a>
</p>
<p class="block">
<a href="/login" class="button is-link">Log In</a>
</p>
</div>
<div class="column">
<h2 class="title">Create an Account</h2>
<div class="block">
<form name="register" method="post" action="/user-register">
{% csrf_token %}
<div class="field">
<label class="label" for="id_username">Username:</label>
<div class="control">{{ register_form.username }}</div>
</div>
<div class="field">
<label class="label" for="id_email">Email address:</label>
<div class="control">{{ register_form.email }}</div>
</div>
<div class="field">
<label class="label" for="id_password">Password:</label>
<div class="control">{{ register_form.password }}</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-primary" type="submit">Sign Up</button>
</div>
</div>
</form>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,8 @@
<h2 class="title">About {{ site_settings.name }}</h2>
<p class="block">
{{ site_settings.instance_description }}
</p>
<p class="block">
<a href="/about/">More about this site</a>
</p>

View File

@ -0,0 +1,24 @@
{% csrf_token %}
<div class="field">
<label class="label" for="id_username_register">Username:</label>
<div class="control">
<input type="text" name="username" maxlength="150" class="input" required="" id="id_username_register">
</div>
</div>
<div class="field">
<label class="label" for="id_email_register">Email address:</label>
<div class="control">
<input type="email" name="email" maxlength="254" class="input" id="id_email_register">
</div>
</div>
<div class="field">
<label class="label" for="id_password_register">Password:</label>
<div class="control">
<input type="password" name="password" maxlength="128" class="input" required="" id="id_password_register">
</div>
</div>
<div class="field is-grouped">
<div class="control">
<button class="button is-primary" type="submit">Sign Up</button>
</div>
</div>

View File

@ -38,7 +38,6 @@ urlpatterns = [
# ui views # ui views
re_path(r'^login/?$', views.login_page), re_path(r'^login/?$', views.login_page),
re_path(r'^register/?$', views.register_page),
re_path(r'^about/?$', views.about_page), re_path(r'^about/?$', views.about_page),
re_path(r'^invite/?$', views.manage_invites), re_path(r'^invite/?$', views.manage_invites),
re_path(r'^invite/(?P<code>[A-Za-z0-9]+)/?$', views.invite_page), re_path(r'^invite/(?P<code>[A-Za-z0-9]+)/?$', views.invite_page),

View File

@ -6,6 +6,7 @@ from django.db.models import Avg, Count, Q
from django.http import HttpResponseBadRequest, HttpResponseNotFound,\ from django.http import HttpResponseBadRequest, HttpResponseNotFound,\
JsonResponse JsonResponse
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.shortcuts import redirect
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
@ -184,6 +185,8 @@ def import_status(request, job_id):
def login_page(request): def login_page(request):
''' authentication ''' ''' authentication '''
if request.user.is_authenticated:
return redirect('/')
# send user to the login page # send user to the login page
data = { data = {
'site_settings': models.SiteSettings.get(), 'site_settings': models.SiteSettings.get(),
@ -193,16 +196,6 @@ def login_page(request):
return TemplateResponse(request, 'login.html', data) return TemplateResponse(request, 'login.html', data)
def register_page(request):
''' authentication '''
# send user to the login page
data = {
'site_settings': models.SiteSettings.get(),
'register_form': forms.RegisterForm(),
}
return TemplateResponse(request, 'register.html', data)
def about_page(request): def about_page(request):
''' more information about the instance ''' ''' more information about the instance '''
data = { data = {
@ -213,6 +206,8 @@ def about_page(request):
def invite_page(request, code): def invite_page(request, code):
''' endpoint for sending invites ''' ''' endpoint for sending invites '''
if request.user.is_authenticated:
return redirect('/')
try: try:
invite = models.SiteInvite.objects.get(code=code) invite = models.SiteInvite.objects.get(code=code)
if not invite.valid(): if not invite.valid():