Makes registration user/localname fields more sensible

This commit is contained in:
Mouse Reeve 2020-12-24 11:39:27 -08:00
parent f6f075fac6
commit e89bfdc572
6 changed files with 34 additions and 18 deletions

View file

@ -45,7 +45,7 @@ class LoginForm(CustomForm):
class RegisterForm(CustomForm): class RegisterForm(CustomForm):
class Meta: class Meta:
model = models.User model = models.User
fields = ['username', 'email', 'password'] fields = ['localname', 'email', 'password']
help_texts = {f: None for f in fields} help_texts = {f: None for f in fields}
widgets = { widgets = {
'password': PasswordInput() 'password': PasswordInput()

View file

@ -0,0 +1,19 @@
# Generated by Django 3.0.7 on 2020-12-24 19:39
import bookwyrm.models.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('bookwyrm', '0029_auto_20201221_2014'),
]
operations = [
migrations.AlterField(
model_name='user',
name='localname',
field=models.CharField(max_length=255, null=True, unique=True, validators=[bookwyrm.models.fields.validate_localname]),
),
]

View file

@ -26,11 +26,11 @@ def validate_remote_id(value):
) )
def validate_username(value): def validate_localname(value):
''' make sure usernames look okay ''' ''' make sure usernames look okay '''
if not re.match(r'^[A-Za-z\-_\.]+$', value): if not re.match(r'^[A-Za-z\-_\.]+$', value):
raise ValidationError( raise ValidationError(
_('%(value)s is not a valid remote_id'), _('%(value)s is not a valid username'),
params={'value': value}, params={'value': value},
) )
@ -156,7 +156,6 @@ class UsernameField(ActivitypubFieldMixin, models.CharField):
_('username'), _('username'),
max_length=150, max_length=150,
unique=True, unique=True,
validators=[validate_username],
error_messages={ error_messages={
'unique': _('A user with that username already exists.'), 'unique': _('A user with that username already exists.'),
}, },
@ -168,7 +167,6 @@ class UsernameField(ActivitypubFieldMixin, models.CharField):
del kwargs['verbose_name'] del kwargs['verbose_name']
del kwargs['max_length'] del kwargs['max_length']
del kwargs['unique'] del kwargs['unique']
del kwargs['validators']
del kwargs['error_messages'] del kwargs['error_messages']
return name, path, args, kwargs return name, path, args, kwargs

View file

@ -48,7 +48,8 @@ class User(OrderedCollectionPageMixin, AbstractUser):
localname = models.CharField( localname = models.CharField(
max_length=255, max_length=255,
null=True, null=True,
unique=True unique=True,
validators=[fields.validate_localname],
) )
# name is your display name, which you can change at will # name is your display name, which you can change at will
name = fields.CharField(max_length=100, null=True, blank=True) name = fields.CharField(max_length=100, null=True, blank=True)
@ -157,10 +158,7 @@ class User(OrderedCollectionPageMixin, AbstractUser):
return super().save(*args, **kwargs) return super().save(*args, **kwargs)
# populate fields for local users # populate fields for local users
self.remote_id = 'https://%s/user/%s' % (DOMAIN, self.username) self.remote_id = 'https://%s/user/%s' % (DOMAIN, self.localname)
self.localname = self.username
self.username = '%s@%s' % (self.username, DOMAIN)
self.actor = self.remote_id
self.inbox = '%s/inbox' % self.remote_id self.inbox = '%s/inbox' % self.remote_id
self.shared_inbox = 'https://%s/inbox' % DOMAIN self.shared_inbox = 'https://%s/inbox' % DOMAIN
self.outbox = '%s/outbox' % self.remote_id self.outbox = '%s/outbox' % self.remote_id

View file

@ -1,10 +1,10 @@
{% csrf_token %} {% csrf_token %}
<div class="field"> <div class="field">
<label class="label" for="id_username_register">Username:</label> <label class="label" for="id_localname_register">Username:</label>
<div class="control"> <div class="control">
<input type="text" name="username" maxlength="150" class="input" required="" id="id_username_register" value="{% if register_form.username.value %}{{ register_form.username.value }} {% endif %}"> <input type="text" name="localname" maxlength="150" class="input" required="" id="id_localname_register" value="{% if register_form.localname.value %}{{ register_form.localname.value }}{% endif %}">
</div> </div>
{% for error in register_form.username.errors %} {% for error in register_form.localname.errors %}
<p class="help is-danger">{{ error | escape }}</p> <p class="help is-danger">{{ error | escape }}</p>
{% endfor %} {% endfor %}
</div> </div>

View file

@ -66,13 +66,13 @@ def register(request):
if not form.is_valid(): if not form.is_valid():
errors = True errors = True
username = form.data['username'].strip() localname = form.data['localname'].strip()
email = form.data['email'] email = form.data['email']
password = form.data['password'] password = form.data['password']
# check username and email uniqueness # check localname and email uniqueness
if models.User.objects.filter(localname=username).first(): if models.User.objects.filter(localname=localname).first():
form.add_error('username', 'User with this username already exists') form.add_error('localname', 'User with this username already exists')
errors = True errors = True
if errors: if errors:
@ -82,8 +82,9 @@ def register(request):
} }
return TemplateResponse(request, 'login.html', data) return TemplateResponse(request, 'login.html', data)
username = '%s@%s' % (localname, DOMAIN)
user = models.User.objects.create_user( user = models.User.objects.create_user(
username, email, password, local=True) username, email, password, localname=localname, local=True)
if invite: if invite:
invite.times_used += 1 invite.times_used += 1
invite.save() invite.save()