From 3d09d355eb8beef8dbcaee9c5acb19b160dc2ce6 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 28 Jan 2020 19:05:59 -0800 Subject: [PATCH] Adds registration --- README.md | 2 +- fedireads/incoming.py | 1 + fedireads/migrations/0001_initial.py | 14 +++++++------- fedireads/models.py | 12 ++++++------ fedireads/templates/login.html | 2 ++ fedireads/templates/register.html | 23 +++++++++++++++++++++++ fedireads/urls.py | 1 + fedireads/views.py | 19 ++++++++++++++++++- 8 files changed, 59 insertions(+), 15 deletions(-) create mode 100644 fedireads/templates/register.html diff --git a/README.md b/README.md index 8bd9a640d..412190e3e 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ a good idea for the long term but it's what I'm doing right now). ``` bash ./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` diff --git a/fedireads/incoming.py b/fedireads/incoming.py index 46630886f..d5ebaf559 100644 --- a/fedireads/incoming.py +++ b/fedireads/incoming.py @@ -35,6 +35,7 @@ def webfinger(request): @csrf_exempt def shared_inbox(request): ''' incoming activitypub events ''' + # TODO: this is just a dupe of inbox but there's gotta be a reason?? if request.method == 'GET': return HttpResponseNotFound() diff --git a/fedireads/migrations/0001_initial.py b/fedireads/migrations/0001_initial.py index d64e18393..197025785 100644 --- a/fedireads/migrations/0001_initial.py +++ b/fedireads/migrations/0001_initial.py @@ -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 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_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')), - ('private_key', models.TextField(blank=True, null=True)), - ('public_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, unique=True)), ('api_key', models.CharField(blank=True, max_length=255, null=True)), - ('actor', models.CharField(max_length=255)), - ('inbox', models.CharField(max_length=255)), + ('actor', models.CharField(max_length=255, unique=True)), + ('inbox', models.CharField(max_length=255, unique=True)), ('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)), ('local', models.BooleanField(default=True)), ('localname', models.CharField(blank=True, max_length=255, null=True, unique=True)), @@ -99,7 +99,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('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)), ('editable', models.BooleanField(default=True)), ('shelf_type', models.CharField(default='custom', max_length=100)), diff --git a/fedireads/models.py b/fedireads/models.py index e9814b1a6..b59b2dfe5 100644 --- a/fedireads/models.py +++ b/fedireads/models.py @@ -13,13 +13,13 @@ from fedireads.settings import DOMAIN, OL_URL class User(AbstractUser): ''' a user who wants to read books ''' - private_key = models.TextField(blank=True, null=True) - public_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, unique=True) api_key = models.CharField(max_length=255, blank=True, null=True) - actor = models.CharField(max_length=255) - inbox = models.CharField(max_length=255) + actor = models.CharField(max_length=255, unique=True) + inbox = models.CharField(max_length=255, unique=True) 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) local = models.BooleanField(default=True) localname = models.CharField( @@ -151,7 +151,7 @@ class Note(Activity): class Shelf(models.Model): 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) user = models.ForeignKey('User', on_delete=models.PROTECT) editable = models.BooleanField(default=True) diff --git a/fedireads/templates/login.html b/fedireads/templates/login.html index d6f2ac894..bfb54605f 100644 --- a/fedireads/templates/login.html +++ b/fedireads/templates/login.html @@ -12,6 +12,8 @@ + Create a new account + {% endblock %} diff --git a/fedireads/templates/register.html b/fedireads/templates/register.html new file mode 100644 index 000000000..f4fb80478 --- /dev/null +++ b/fedireads/templates/register.html @@ -0,0 +1,23 @@ +{% extends 'layout.html' %} +{% block content %} +
+
+
+ + + + + + +
+ + Log in with existing account +
+
+{% endblock %} diff --git a/fedireads/urls.py b/fedireads/urls.py index 5112c1755..e286346bf 100644 --- a/fedireads/urls.py +++ b/fedireads/urls.py @@ -18,6 +18,7 @@ urlpatterns = [ # ui views path('', views.home), + path('register/', views.register), path('login/', views.user_login), path('logout/', views.user_logout), path('user/', views.user_profile), diff --git a/fedireads/views.py b/fedireads/views.py index 5ccf85651..3a8513df6 100644 --- a/fedireads/views.py +++ b/fedireads/views.py @@ -9,6 +9,7 @@ from django.views.decorators.csrf import csrf_exempt import re from fedireads import models, openlibrary, outgoing as api +from fedireads.settings import DOMAIN @login_required @@ -45,12 +46,12 @@ def home(request): def user_login(request): ''' authentication ''' # send user to the login page - # TODO: login with localname or email if request.method == 'GET': return TemplateResponse(request, 'login.html') # authenticate user username = request.POST['username'] + username = '%s@%s' % (username, DOMAIN) password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: @@ -67,6 +68,22 @@ def user_logout(request): 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 def user_profile(request, username): ''' profile page for a user '''