mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-22 17:41:08 +00:00
Adds registration
This commit is contained in:
parent
4007ed8827
commit
3d09d355eb
8 changed files with 59 additions and 15 deletions
|
@ -23,7 +23,7 @@ a good idea for the long term but it's what I'm doing right now).
|
||||||
``` bash
|
``` bash
|
||||||
./rebuilddb.sh
|
./rebuilddb.sh
|
||||||
```
|
```
|
||||||
This creates two users, `mouse@your-domain.com` with password `password123` and `rat@your-domain.com` with password `ratword`.
|
This creates two users, `mouse` with password `password123` and `rat` with password `ratword`.
|
||||||
|
|
||||||
And go to the app at `localhost:8000`
|
And go to the app at `localhost:8000`
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ def webfinger(request):
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
def shared_inbox(request):
|
def shared_inbox(request):
|
||||||
''' incoming activitypub events '''
|
''' incoming activitypub events '''
|
||||||
|
# TODO: this is just a dupe of inbox but there's gotta be a reason??
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
return HttpResponseNotFound()
|
return HttpResponseNotFound()
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 3.0.2 on 2020-01-29 01:16
|
# Generated by Django 3.0.2 on 2020-01-29 02:56
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
import django.contrib.auth.models
|
import django.contrib.auth.models
|
||||||
|
@ -32,13 +32,13 @@ class Migration(migrations.Migration):
|
||||||
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
|
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
|
||||||
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
|
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
|
||||||
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
|
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
|
||||||
('private_key', models.TextField(blank=True, null=True)),
|
('private_key', models.TextField(blank=True, null=True, unique=True)),
|
||||||
('public_key', models.TextField(blank=True, null=True)),
|
('public_key', models.TextField(blank=True, null=True, unique=True)),
|
||||||
('api_key', models.CharField(blank=True, max_length=255, null=True)),
|
('api_key', models.CharField(blank=True, max_length=255, null=True)),
|
||||||
('actor', models.CharField(max_length=255)),
|
('actor', models.CharField(max_length=255, unique=True)),
|
||||||
('inbox', models.CharField(max_length=255)),
|
('inbox', models.CharField(max_length=255, unique=True)),
|
||||||
('shared_inbox', models.CharField(max_length=255)),
|
('shared_inbox', models.CharField(max_length=255)),
|
||||||
('outbox', models.CharField(max_length=255)),
|
('outbox', models.CharField(max_length=255, unique=True)),
|
||||||
('summary', models.TextField(blank=True, null=True)),
|
('summary', models.TextField(blank=True, null=True)),
|
||||||
('local', models.BooleanField(default=True)),
|
('local', models.BooleanField(default=True)),
|
||||||
('localname', models.CharField(blank=True, max_length=255, null=True, unique=True)),
|
('localname', models.CharField(blank=True, max_length=255, null=True, unique=True)),
|
||||||
|
@ -99,7 +99,7 @@ class Migration(migrations.Migration):
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
('activitypub_id', models.CharField(max_length=255)),
|
('activitypub_id', models.CharField(max_length=255)),
|
||||||
('identifier', models.CharField(max_length=255)),
|
('identifier', models.CharField(max_length=255, unique=True)),
|
||||||
('name', models.CharField(max_length=100)),
|
('name', models.CharField(max_length=100)),
|
||||||
('editable', models.BooleanField(default=True)),
|
('editable', models.BooleanField(default=True)),
|
||||||
('shelf_type', models.CharField(default='custom', max_length=100)),
|
('shelf_type', models.CharField(default='custom', max_length=100)),
|
||||||
|
|
|
@ -13,13 +13,13 @@ from fedireads.settings import DOMAIN, OL_URL
|
||||||
|
|
||||||
class User(AbstractUser):
|
class User(AbstractUser):
|
||||||
''' a user who wants to read books '''
|
''' a user who wants to read books '''
|
||||||
private_key = models.TextField(blank=True, null=True)
|
private_key = models.TextField(blank=True, null=True, unique=True)
|
||||||
public_key = models.TextField(blank=True, null=True)
|
public_key = models.TextField(blank=True, null=True, unique=True)
|
||||||
api_key = models.CharField(max_length=255, blank=True, null=True)
|
api_key = models.CharField(max_length=255, blank=True, null=True)
|
||||||
actor = models.CharField(max_length=255)
|
actor = models.CharField(max_length=255, unique=True)
|
||||||
inbox = models.CharField(max_length=255)
|
inbox = models.CharField(max_length=255, unique=True)
|
||||||
shared_inbox = models.CharField(max_length=255)
|
shared_inbox = models.CharField(max_length=255)
|
||||||
outbox = models.CharField(max_length=255)
|
outbox = models.CharField(max_length=255, unique=True)
|
||||||
summary = models.TextField(blank=True, null=True)
|
summary = models.TextField(blank=True, null=True)
|
||||||
local = models.BooleanField(default=True)
|
local = models.BooleanField(default=True)
|
||||||
localname = models.CharField(
|
localname = models.CharField(
|
||||||
|
@ -151,7 +151,7 @@ class Note(Activity):
|
||||||
|
|
||||||
class Shelf(models.Model):
|
class Shelf(models.Model):
|
||||||
activitypub_id = models.CharField(max_length=255)
|
activitypub_id = models.CharField(max_length=255)
|
||||||
identifier = models.CharField(max_length=255)
|
identifier = models.CharField(max_length=255, unique=True)
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
user = models.ForeignKey('User', on_delete=models.PROTECT)
|
user = models.ForeignKey('User', on_delete=models.PROTECT)
|
||||||
editable = models.BooleanField(default=True)
|
editable = models.BooleanField(default=True)
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
</label>
|
</label>
|
||||||
<button type="submit">Log in</button>
|
<button type="submit">Log in</button>
|
||||||
</form>
|
</form>
|
||||||
|
<a href="/register/">Create a new account</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
23
fedireads/templates/register.html
Normal file
23
fedireads/templates/register.html
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{% extends 'layout.html' %}
|
||||||
|
{% block content %}
|
||||||
|
<div id="content">
|
||||||
|
<div>
|
||||||
|
<form name="register" method="post">
|
||||||
|
<label for="username">Username:
|
||||||
|
<input type="text" name="username"></input>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<label for="email">Email address:
|
||||||
|
<input type="text" name="email"></input>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<label for="password">Password:
|
||||||
|
<input type="password" name="password"></input>
|
||||||
|
</label>
|
||||||
|
<button type="submit">Create account</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<a href="/login/">Log in with existing account</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -18,6 +18,7 @@ urlpatterns = [
|
||||||
|
|
||||||
# ui views
|
# ui views
|
||||||
path('', views.home),
|
path('', views.home),
|
||||||
|
path('register/', views.register),
|
||||||
path('login/', views.user_login),
|
path('login/', views.user_login),
|
||||||
path('logout/', views.user_logout),
|
path('logout/', views.user_logout),
|
||||||
path('user/<str:username>', views.user_profile),
|
path('user/<str:username>', views.user_profile),
|
||||||
|
|
|
@ -9,6 +9,7 @@ from django.views.decorators.csrf import csrf_exempt
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from fedireads import models, openlibrary, outgoing as api
|
from fedireads import models, openlibrary, outgoing as api
|
||||||
|
from fedireads.settings import DOMAIN
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -45,12 +46,12 @@ def home(request):
|
||||||
def user_login(request):
|
def user_login(request):
|
||||||
''' authentication '''
|
''' authentication '''
|
||||||
# send user to the login page
|
# send user to the login page
|
||||||
# TODO: login with localname or email
|
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
return TemplateResponse(request, 'login.html')
|
return TemplateResponse(request, 'login.html')
|
||||||
|
|
||||||
# authenticate user
|
# authenticate user
|
||||||
username = request.POST['username']
|
username = request.POST['username']
|
||||||
|
username = '%s@%s' % (username, DOMAIN)
|
||||||
password = request.POST['password']
|
password = request.POST['password']
|
||||||
user = authenticate(request, username=username, password=password)
|
user = authenticate(request, username=username, password=password)
|
||||||
if user is not None:
|
if user is not None:
|
||||||
|
@ -67,6 +68,22 @@ def user_logout(request):
|
||||||
return redirect('/')
|
return redirect('/')
|
||||||
|
|
||||||
|
|
||||||
|
@csrf_exempt
|
||||||
|
def register(request):
|
||||||
|
''' join the server '''
|
||||||
|
if request.method == 'GET':
|
||||||
|
return TemplateResponse(request, 'register.html')
|
||||||
|
|
||||||
|
username = request.POST['username']
|
||||||
|
password = request.POST['password']
|
||||||
|
email = request.POST['email']
|
||||||
|
password = request.POST['password']
|
||||||
|
|
||||||
|
user = models.User.objects.create_user(username, email, password)
|
||||||
|
login(request, user)
|
||||||
|
return redirect('/')
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def user_profile(request, username):
|
def user_profile(request, username):
|
||||||
''' profile page for a user '''
|
''' profile page for a user '''
|
||||||
|
|
Loading…
Reference in a new issue